GGUF 파일이란?
GGUF와 GGML은 추론을 위한 모델을 저장하는 데 사용되는 형식으로 GPT, Gemma와 같은 언어 모델의 맥락에서 이용된다. 각각의 주요 차이점, 장단점을 살펴보자.
(1) GGML(GPT 생성 모델 언어)
머신 러닝을 위해 설계된 텐서 라이브러리로, Apple Silicon을 비롯한 다양한 하드웨어에서 대규모 모델과 고성능을 구현할 수 있도록 지원한다.
장점
- 초기 혁신 : GGML은 GPT 모델을 위한 파일 형식을 만들려는 초기 시도임.
- 단일 파일 공유 : 단일 파일로 모델을 공유할 수 있어 편의성이 향상됨.
- CPU 호환성 : GGML 모델은 CPU에서 실행할 수 있어 접근성이 더욱 넓어짐.
단점
- 제한된 유연성 : GGML은 모델에 대한 추가 정보를 추가하는 데 어려움을 겪음.
- 호환성 문제 : 새로운 기능 도입으로 인해 이전 모델과의 호환성 문제가 발생.
- 수동 조정 필요 : 사용자가 자주 rope-freq-base, rope-freq-scale, gqa, rms-norm-eps와 같은 설정을 수정해야 함.
(2) GGUF(GPT 생성 통합 형식)
2023년 8월 21일, GGML의 후속으로 도입된 GGUF가 출시되었다. 이 형식은 언어 모델 파일 형식 분야에서 진전을 이루었으며, GPT와 같은 대용량 언어 모델의 향상된 저장 및 처리를 용이하게 한다.
장점
- GGML의 한계 해결 : GGUF는 GGML의 단점을 극복하고 사용자 경험을 향상시키기 위해 설계되었다.
- 확장성 : 이전 모델과의 호환성을 유지하면서 새로운 기능을 추가할 수 있다.
- 안정성 :GGUF는 최신 버전으로의 전환을 용이하게 하는데 중점을 둔다.
- 다목적성 : Llama 모델의 범위를 넘어 다양한 모델을 지원한다.
단점
- 전환 시간 : 기존 모델을 GGUF로 전환하려면 상당한 시간이 필요할 수 있다.
- 적응 : 사용자와 개발자가 새로운 GGUF 파일 형식에 익숙해져야 한다.
GGUF 파일 변환하기
(1) HuggingFace Model 다운로드
언어 모델을 GGUF 형식으로 변환하기 위해서는 로컬에 llm이 존재해야 한다. 직접 LLM을 학습시킨 경우에는 해당 과정은 필요없지만, 그 외 HuggingFace에 올라와 있는 모델을 이용해 GGUF 파일을 만들고자 할 때는 로컬에 다운로드를 진행해야 한다.
아래는 HuggingFace에 올라와 있는 "yanolja/EEVE-Korean-Instruct-10.8B-v1.0" 모델을 snapshot_download를 사용해 다운받는 예시이다.
import os
from huggingface_hub import snapshot_download
NOW_DIR=os.path.dirname(__file__)
ROOT_DIR=os.path.join(NOW_DIR, os.pardir)
MODELS_DIR=os.path.join(ROOT_DIR, "models/")
model_id = "yanolja/EEVE-Korean-Instruct-10.8B-v1.0"
local_dir = os.path.join(MODELS_DIR, model_id.split("/")[-1])
snapshot_download(repo_id=model_id,
local_dir=local_dir)
(2) llama.cpp Git Clone 및 환경 세팅
1) llama.cpp Git Clone
GGUF 파일로 변환하기 위해 llama.cpp(https://github.com/ggml-org/llama.cpp/tree/master) git을 가져온다.
git clone https://github.com/ggml-org/llama.cpp.git
2) 환경 설치
앞서 가상 환경을 생성한다. python 버전은 변경되어도 무관한다.
conda create --name my_env python=3.10
이후 생성한 환경을 실행하고, llama.cpp git 저장소에 진입 후 환경을 설치한다.
conda activate my_env
cd llama.cpp
다음으로 아래 코드를 활용해 requirements.txt에 기재된 라이브러리를 설치한다.
pip install -r requirements.txt
(3) gguf 모델 변환
기본적으로 다운로드 받은 HuggingFace Model의 폴더 위치와 저장될 gguf 파일 형식을 지정해줘야 한다. 추가적으로 이 과정에서 모델 양자화까지 지원한다.
현재 저장된 모델 폴더 위치와 저장될 gguf 파일명은 아래와 같다고 가정하자.
- 모델 폴더 위치 : ./models/EEVE-Korean-Instruct-10.8B-v1.0
- 저장될 gguf 파일명 : ./models/EEVE-Korean-Instruct-10.8B-v1.0-Q8_0.gguf
아래의 코드를 활용해 gguf 변환을 수행할 수 있다.
python convert-hf-to-gguf.py ./models/EEVE-Korean-Instruct-10.8B-v1.0 --outfile ./models/EEVE-Korean-Instruct-10.8B-v1.0-Q8_0.gguf --outtype q8_0
해당 코드의 수행 결과로 EEVE-Korean-Instruct-10.8B-v1.0 모델이 Q8_0 방식으로 양자화된 qquf 파일이 생성된다.
추가적으로 현재 지원되는 양자화 방식은 아래와 같다.
- f32
- f16(default)
- bf16
- q8_0
- tq1_0
- tq2_0
'NLP > TIL' 카테고리의 다른 글
[TIL] tmux 사용 방법 (0) | 2024.11.14 |
---|---|
[TIL] SGLang 설치 및 실행 방법 (0) | 2024.11.13 |