GGUF
GGUF
이전에 GGML이라고 불렸던 GGUF는 CPU와 Apple 기기에서 효율적으로 실행할 수 있어서 커뮤니티의 선호를 많이 받아요. GPU가 있으면 GPU로 오프로딩하기도 하죠! RAM(그리고 가능하면 VRAM까지)을 잘 활용할 수 있어서 로컬 테스트와 배포에 좋은 선택이에요.
출처: 문서
본문
llama.cpp로 양자화하기
llama.cpp로 가능한 양자화 목록은 다음과 같아요:
q2_kq3_k_lq3_k_mq3_k_sq4_0: <- 4-bitq4_1q4_k_sq4_k_m<- Recommendedq5_0: <- 5-bitq5_1q5_k_sq5_k_m: <- Recommendedq6_k: <- Recommendedq8_0: <- 8-bit, very close to lossless compared to the original weights
짧은 데모로 Mistral 7B를 양자화해 볼게요!
먼저 필요한 모든 의존성과 llama.cpp를 설치하고, 모델을 다운로드할게요.
model_id = "mistralai/Mistral-7B-Instruct-v0.3"
model_name = model_id.split('/')[-1]
user_name = "huggingface_username"
hf_token = "read_token"
# install llama.cpp
!git clone https://github.com/ggerganov/llama.cpp
!cd llama.cpp && git pull && make clean && LLAMA_CUBLAS=1 make
!pip install -r llama.cpp/requirements.txt
!(cd llama.cpp && make)
# download model
!git lfs install
!git clone https://{user_name}:{hf_token}@huggingface.co/{model_id}
모든 게 설치되고 다운로드되면, GGUF로 양자화하기 전에 필요한 단계인 모델을 fp16으로 변환할 수 있어요.
fp16 = f"{model_name}/{model_name.lower()}.fp16.bin"
!python llama.cpp/convert_hf_to_gguf.py {model_name} --outtype f16 --outfile {fp16}
이제 모델이 준비됐으니 양자화할 수 있어요. 메서드는 자유롭게 바꿔도 되는데, 이 예시에서는 q4_k_m으로 양자화할 거예요.
method = "q4_k_m"
qtype = f"{model_name}/{model_name.lower()}.{method.upper()}.gguf"
!./llama.cpp/llama-quantize {fp16} {qtype} {method}
완벽해요. 이제 llama.cpp로 다음과 같이 테스트해 볼 수 있어요:
!./llama.cpp/llama-cli -m {qtype} -n 128 --color -ngl 35 -cnv --chat-template mistral