How do I create a GGUF model file?

https://www.secondstate.io/articles/convert-pytorch-to-gguf/




llama2 LLM 제품군은 일반적으로 PyTorch에서 훈련되고 미세 조정됩니다. 따라서 일반적으로 Huggingface에서 PyTorch 프로젝트로 배포됩니다. 하지만 추론과 관련해서는 다음 세 가지 이유로 인해 GGUF 모델 형식에 훨씬 더 관심이 많습니다.


1) Python은 AI 추론을 위한 훌륭한 스택이 아닙니다. 우리는 프로덕션 시스템에서 PyTorch와 Python에 대한 의존성을 없애기를 원합니다. GGUF는 llama.cppWasmEdge와 같은 도구를 사용하여 파이썬을 완전히 배제하면서도 매우 효율적인 추론을 지원할 수 있습니다.


2) llama2 모델은 16비트 부동 소수점 숫자를 가중치로 사용하여 훈련됩니다. 추론을 위해 이를 4비트 정수로 축소하면 성능 손실은 크지 않으면서도 많은 양의 컴퓨팅 리소스(특히 값비싼 GPU RAM)를 절약할 수 있음이 입증되었습니다. 이 과정을 양자화(quantization)라고 합니다.


3) GGUF 형식은 LLM 추론을 위해 특별히 설계되었습니다. 언어 인코딩 및 디코딩과 같은 LLM 작업을 지원하므로 PyTorch보다 더 빠르고 쉽게 사용할 수 있습니다.



사전 변환된 모델 다운로드

Download pre-made artifacts


많은 허깅페이스 리포지토리는 이미 GGUF 형식으로 양자화된 llama2 제품군 모델에 대한 액세스를 제공합니다. 해당 GGUF 파일을 다운로드하기만 하면 됩니다. 다음은 GGUF의 표준 llama2 모델에 대한 신뢰할 수 있는 다운로드 링크입니다.


GGUF model file7B13B70B
Basellama-2-7b.Q5_K_M.ggufllama-2-13b.Q5_K_M.ggufllama-2-70b.Q5_K_M.gguf
Chatllama-2-7b-chat.Q5_K_M.ggufllama-2-13b-chat.Q5_K_M.ggufllama-2-70b-chat.Q5_K_M.gguf



직접 변환하기

Roll your own


직접 미세 조정한 llama2 모델이 있는 경우, llama.cpp를 사용하여 이를 GGUF로 변환하고 양자화할 수 있습니다. 먼저 Linux에서 llama.cpp 소스 코드를 확인해 봅시다.


git clone https://github.com/ggerganov/llama.cpp

cd llama.cpp



convert.py 유틸리티를 사용하여 PyTorch 모델을 GGUF로 변환합니다. 파이토치 파일이 있는 디렉터리의 위치를 전달하기만 하면 됩니다. 이렇게 변환한 GGUF 모델 파일은 전체 16비트 부동 소수점 모델입니다. 아직 양자화되지 않은 상태입니다.


# models/Llama-2-7b-chat/ 디렉토리에 llama2 PyTorch 모델이 있는지 확인합니다.


# 파이토치 모델을 FP16 가중치의 GGUF 모델로 변환합니다.

python convert.py models/Llama-2-7b-chat/


# 생성된 GGUF 파일

ls -al models/Llama-2-7b-chat/ggml-model-f16.gguf



다음으로 llama.cpp 애플리케이션을 빌드합니다.


mkdir build

cd build

cmake ..

cmake --build . --config Release



방금 빌드한 'quantize' 명령줄 툴(command line tool)을 사용하여 FP16 GGUF 파일을 양자화합니다. 아래 명령은 5비트 k-양자화 방식을 사용하여 새 GGUF 모델 파일을 생성합니다.


bin/quantize ../models/Llama-2-7b-chat/ggml-model-f16.gguf ../models/Llama-2-7b-chat/ggml-model-q5_k_m.gguf Q5_K_M



여기까지입니다. 이제 GGUF 모델 파일을 여러분의 애플리케이션에서 사용하거나 허깅페이스에서 전 세계와 공유할 수 있습니다!




리눅스 기준으로 설명되어 있지만 윈도우에서도 원리는 대동소이하다.


1. llama.cpp를 설치함

2. 모델 원본을 구함

3. 모델 원본을 16비트 부동 소수점 형식(full 16-bit floating point)의 GGUF 파일로 변환함 [convert.py 사용]

4. 위에서 나온 16비트 모델을 양자화해서 원하는 크기로 변환함 [quantize 사용]



원본에서 바로 양자화 하면 안되나요? 왜 16비트를 중간에 거쳐야 하나요? 

등등의 질문에 대한 답변은 직접 찾아보기 바람. 

이 방식이 결과적으로 모델 성능이 더 좋게 나온다는 거 외에는 나도 잘 모름.