llama.cpp가 AI 언어 모델에 사용하는 파일 형식 ‘GGUF’에는, 대기 시간 외에 무엇이 포함되어 있는가?

IT Search
0

 GGUF는 llama.cpp가 언어 모델에 사용하는 파일 포맷으로, GGUF의 특징 중 하나는 ‘단일 파일’이라는 점이며, 여러 파일이 흩어져 있는 다른 포맷에 비해 사용 편의성 면에서 유리하다고 할 수 있지만, 파일 안에 어떤 정보가 들어 있는지 모르면, 정말 GGUF 파일만으로 모델 실행에 필요한 모든 정보가 갖춰지는지 의문이 들 수 있다. 온디바이스 추론 엔진 ‘NobodyWho’ 개발팀 블로그에서 GGUF에 어떤 정보가 포함되어 있는지 설명하고 있다....



◆GGUF에 포함된 기능

GGUF에 포함된 정보 중 아래 내용이 소개되어 있는데...


· 채팅 템플릿

· 특수 토큰

· 샘플러 설정·샘플러 체인 시퀀스


채팅 템플릿은 대화형 언어 모델의 응답 형식을 정의한 것으로, 복잡한 기능을 지원하기 위해 Jinja2 템플릿 언어로 작성되고, GGUF에서는 기본 채팅 템플릿이 “ tokenizer.chat_template” 키에 저장되어 있다. 


Jinja2는 루프·조건 분기·대입·리스트·사전 등을 갖춘 프로그래밍 언어이기 때문에, 대화형 LLM 애플리케이션은 새로운 메시지가 추가될 때마다 인터프리터를 함께 제공해야 하고, 인터프리터 구현에 따라 성능 차이가 크게 날 수 있지만, 채팅 템플릿 처리가 로컬 LLM 애플리케이션 성능의 병목이 되지 않으므로 문제시되지 않는다.


특수 토큰이란, 텍스트 표현보다 더 넓은 의미를 갖는 토큰을 말하는데, 특수 토큰의 대표적인 예는 “eos (end-of-sequence)”이다. 언어 모델은 입력된 토큰의 시퀀스에 대해, 다음 토큰을 무한히 출력하도록 유지하므로, eos 토큰을 사용해 이를 중지시키는 것이 일반적인 해결책으로, 아래는 Gemma 4용 특수 토큰의 한 예시이다.



샘플러 설정에 관해서는, 언어 모델이 출력한 확률 분포에서 다음 토큰을 선택하는 ‘샘플링’ 결과를 개선하기 위해, 어느 정도 사용된 실적이 있는 샘플러 설정을 수동으로 복사·붙여넣기하여 재활용하는 경우가 일상화되어 있었지만, GGUF 포맷이 개선되어 ‘general.sampling.sequence’ 필드가 추가됨에 따라 모델 파일 내에 샘플러 체인을 직접 지정할 수 있게 되었다. 다만 현재는 많은 GGUF 모델이 general.sampling.sequence 필드를 생략하고 있기 때문에, llama.cpp의 기본 설정에 의존하는 경우가 많은 상황이다.


◆GGUF에 부족한 기능

· 도구 호출 포맷: GGUF 표준에 도구 호출 포맷 문법을 포함하면 보다 범용적인 파서를 만들 수 있다.


· Think 토큰: 상위 Hugging Face 저장소에서는 think_token 필드가 도입됐지만 GGUF로 변환할 때 생략되는 경우가 많아, 사고 스트림을 분리하기가 어려워지고 있다. 


· 프로젝션 모델: 멀티모달 LLM에서는 이미지와 음성 등을 처리하기 위해 프로젝션 모델용과 메인 모델용 두 개의 GGUF 파일이 필요할 경우가 많다.


· 지원 기능 리스트: 모델에 의존하지 않는 추론 라이브러리가 모델 지원 대상이 아닌 도구를 호출했을 때, 보다 일관된 오류 메시지와 경고를 제공할 수 있게 된다.


GGUF는 ‘단일 파일이라는 점에서의 사용 편의성’, ‘모델 실행에 필요한 모든 것을 포괄하고 있는 것’, ‘모델 고유의 코드 경로를 줄일 수 있는 것’, ‘오픈하고 확장성이 높은 것’이라는 특성을 모두 갖춘 우수한 포맷이며, 이를 기반으로 강력한 커뮤니티가 존재하기 때문에, 앞으로 표준 규격의 강화와 경험 향상을 기대할 수 있다고 말하고 있다.

댓글 쓰기

0댓글

댓글 쓰기 (0)