GGUF (Georgi Gerganov Unified Format)
1. GGUF 소개
- GGUF는 Georgi Gerganov 라는 개발자가 만든 딥러닝 모델 저장 용도의 단일 파일 포맷이다
- GGML( 컴퓨터에서도 큰 모델을 빠르게 돌릴 수 있는 ML용 라이브러리 ) 을 사용하여 대형 모델을 실행하는 프로그램과 모델을 저장하는 파일 형식
- GGUF는 모델을 빠르고 쉽게 불러오고 저장할 수 있게 해주는 바이너리 형식으로 설계되었다.
- 크게 (모델의 가중치 텐서 값)과 (메타데이터) 가 key-value 형식으로 저장되어있다
- 개발자들은 보통 PyTorch 같은 프로그래밍 도구로 모델을 만든 후, GGML에서 쓸 수 있도록 GGUF 형식으로 저장한다.
- GGUF는 이전에 사용되던 GGML, GGMF, GGJT와 같은 형식을 개선하여 모든 필요한 정보를 담고 있으며, 새로운 정보를 추가해도 기존 모델과 잘 맞도록 확장성을 가지고 설계되었다고 한다.
- 단일 파일이기 때문에 추론을 실행하기에 필요한 모든 정보들이 하나의 파일에 모두 담겨야 한다
- 현재는 주로 LLM 추론에 많이 활용이 되고 있는 것으로 보인다
2. GGUF 파일 구조
(1) 담고 있는 정보
GGUF 파일에는 두 가지가 기록된다.
1. 모델의 Weight Tensor 값과 텐서 정보
- Tensor 의 이름
- Tensor 의 차원 수
- Tensor 의 Shape
- Tensor 의 데이터 타입
- Tensor 데이터가 위치한 Offset
2. Key-Value 형식의 메타데이터
Key는 ASCII 문자와 '.' 으로 계층을 표현한다.
다음처럼 쓸 수 있다. llama.attention.head_count_kv
먼저 모델의 세부 정보들이 포함되어야한다. 예를 들어
- 입력 토큰 길이 (context length)
- 임베딩 크기 (embedding length)
- 피드 포워드 길이 (feed forward length)
여기에 추가로 Tokenizer 의 정보도 단일 파일에 포함되어야한다.
- bos token id
- eos token id
- uknown token id
- seperate token id
- padding token id
- Vocab 파일 : 심지어 vocab 파일도 담아야한다. 예시는 아래에서 확인하자.
이외에도 추론에 필요한 정보가 있다면 꼭 들어가야한다.
물론 추론기에 이 값을 활용하는 기능이 구현이 되어있어야한다.
magic = 0x46554747
version = 3
tensor_count = 291
metadata_kv_count = 16
general.architecture = llama
general.name = LLaMA
llama.context_length = 2048
llama.embedding_length = 4096
llama.block_count = 32
llama.feed_forward_length = 11008
llama.rope.dimension_count = 128
llama.attention.head_count = 32
llama.attention.head_count_kv = 32
llama.attention.layer_norm_rms_epsilon = 9.999999974752427e-07
general.file_type = 10
tokenizer.ggml.model = llama
tokenizer.ggml.tokens = ['<unk>', '<s>', '</s>', '<0x00>', '<0x01>', '<...
tokenizer.ggml.scores = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0...
tokenizer.ggml.token_type = [2, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6...
general.quantization_version = 2
2. 파일 구조
https://github.com/ggerganov/ggml/blob/master/docs/gguf.md
ggml/docs/gguf.md at master · ggerganov/ggml
Tensor library for machine learning. Contribute to ggerganov/ggml development by creating an account on GitHub.
github.com
크게 세 부분으로 나뉜다. 1) Header 2) Tensor Info 3) Tensor Data
Header에 메타데이터가 저장이된다. Tensor Info와 Tensor Data 부분에 모델의 Weight Tensor 정보가 기록이 된다.
GGUF - Header
GGUF - Tensor Info (Tensor Data는 이진수이기에 생략하였다)
[참고문헌]
https://bitwise-life.tistory.com/4
GGUF (Georgi Gerganov Unified Format)
GGUF GGUF 는 Georgi Gerganov(@ggerganov)란 개발자가 만든 딥러닝 모델을 저장 용도의 단일 파일 포맷이다. GGML 라이브러리 기반의 런타임에서 주로 사용이 되고 있다. 현재는 주로 LLM 추론에 많이 활용이
bitwise-life.tistory.com
https://wooiljeong.github.io/ml/gguf-llm/
GGUF 파일로 로컬에서 LLM 실행하기
최근에 Meta의 Llama3와 MS의 Phi-3 같은 고성능 경량화 언어 모델이 허깅페이스(HuggingFace)에서 오픈소스로 공개되었다. 이러한 모델은 ChatGPT나 Claude와 같은 대형 언어 모델(LLM)을 API로 사용하는 대안
wooiljeong.github.io