DopeorNope 개발일지

llama.cpp로 양자화 하기 GGUF 본문

에러 노트

llama.cpp로 양자화 하기 GGUF

DopeorNope 2024. 4. 3. 18:17

120b짜리 모델을 굽고 있는 와중, 아 도저히 내 서버로는 감당이 안되는 크기라 양자화를 시도해야 하겠다는 생각이들었다.

(현재 사용하고 있는 서버는 A100 40GB * 8)

 

그래서 어떻게 llama.cpp로 양자화를 하는지 에러 수정 및 구현 방법을 기술하도록 하겠다.

 

 

우선 llama.cpp에서 제공하는 양자화 지원 범위는 다음과 같다.

(출처: https://github.com/ggerganov/llama.cpp?tab=readme-ov-file#quantization)

 

 

우선 나는 4bit 양자화에 대해선 약간의 불안감이 있다.

 

그 이유는, 우선 8bit까지는 어느정도 성능이 괜찮은데, 4bit로 가니 외계어를 밷는 경험을 좀 했기 때문에.. 성능 위주면 8bit를 추천..합네다.

 

 

그럼 llama.cpp를 빌드하는 법을 알려줄 수 있도록 하겠다.

 

필자는 리눅스 기반의 공용서버를 활용하고 있기 때문에, 리눅스 기반으로 설명하겠다.

 

1. lamma.cpp 깃허브 레포 다운

 

# 레포 다운
git clone https://github.com/ggerganov/llama.cpp.git
# 다운 폴더로 이동
cd llama.cpp

 

 

Tip 만약 본인의 서버에서 git이 없다면

 

다음과 같이 하면 됨 (거의 초기 설정이라 가정하고 하겠습니당).

# 루트권한 실행하기 위해서
su

# 패키지 다운위해 업데이트
apt-get update

# sudo 패키지 다운
apt-get install sudo

# git 패키지 설치
sudo apt-get install git

 

 

2. llama.cpp 빌드하기

 

 여기서는 조금 할 말이 많다. 우선 첫번째, 리눅스 기반은 두가지로 접근할 수 있는게 있는데, 첫번째는 make와 Open Blas로 빌드하는 방법이고 두번째는 cmake로 빌드하는 방법이다.

 

우선 make로 빌드하는 법을 알려주도록 하겠다.

 

진짜 간단하다. 

make LLAMA_OPENBLAS=1

 

그런데 여기서 만약 다음과 같은 에러가 발생하는가?

 

 

위의 에러는 open blas로 빌드하려는데 관련 패키지가 없기 때문에 생기는 에러고 만약 이 에러면 다음과 같이 실행하면 된다.

 

sudo apt-get install libopenblas-dev

이렇게 하면 아마 위 에러는 해결 될 수 있다.

 

그러면 아주 안정적인 빌드가 가능하다.

 

다만 이후에 또 다른 에러가 발생한다면?

 

 

내가 경험한 에러는 다음과 같다.

 

open-blas의 문제이긴 한데, 직접 패키지 코드를 수정해주면 되는데, 이건 너무 귀찮다.

(왜냐 커맨드 라인으로 하나하나 수정하기는 매우 귀찮고 삑나면 스트레스가 많기 때문에)

 

그러면, 이럴때는 cmake로 빌드하면 된다.

 

 

# build용 디렉토리 생성
mkdir build
# 디렉토리 이동
cd build

# cmake로 빌딩
cmake ..
cmake --build . --config Release

 

 

그러면 아마 llama.cpp가 빌딩이 완료 되었다고 뜰 것이다.

 

 

 

사용

이제 양자화를 하기 위해서는 다음과 같이 실행하면 된다.

 

# 예시용 모델 로컬로 다운
huggingface-cli download upstage/SOLAR-10.7B-v1.0 --local-dir=./SOLAR-10.7B-v1.0

# 모델 변환후 models에 저장
python3 convert.py models/SOLAR-10.7B-v1.0/

#양자화 진행
./quantize ./models/SOLAR-10.7B-v1.0/ggml-model-f16.gguf ./models/SOLAR-10.7B-v1.0/ggml-model-q8_0.gguf q8_0

 

 

이제 이지하게 한번 해보시길 바랍니다...