ML_AI/AI Tool 정리

GGUF (Georgi Gerganov Unified Format)

안정민 2024. 7. 3. 17:41

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 파일도 담아야한다. 예시는 아래에서 확인하자. 

 

이외에도 추론에 필요한 정보가 있다면 꼭 들어가야한다.

물론 추론기에 이 값을 활용하는 기능이 구현이 되어있어야한다. 

bashCopy code
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