llama.cpp
인기 있는 llama.cpp 도구는 다음과 같이 제공됩니다. 미세 조정
유틸리티를 사용하세요. CPU에서 잘 작동합니다! 이 미세 조정 가이드는
Tony Yuan의 화학 과목에 대한 오픈 소스 LLM을 세밀하게 조정하세요. 프로젝트.
llama.cpp에서 미세 조정 유틸리티 빌드하기
그리고 미세 조정
유틸리티는 CPU에서 정량화된 GGUF 파일과 함께 작동할 수 있으므로 LLM을 미세 조정하는 데 필요한 하드웨어 요구 사항과 비용을 크게 줄일 수 있습니다.
llama.cpp 소스 코드를 확인하여 다운로드하세요.
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
llama.cpp 바이너리를 빌드합니다.
mkdir 빌드
cd 빌드
cmake ..
cmake --build . --config 릴리스
NVIDIA GPU 및 CUDA 툴킷이 설치되어 있는 경우, CUDA를 지원하는 llama.cpp를 빌드해야 합니다.
mkdir 빌드
cd 빌드
cmake .. -DLLAMA_CUBLAS=ON -DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc
cmake --build . --config 릴리스
기본 모델 가져오기
메타의 Llama2 채팅 13B 모델을 기본 모델로 사용하겠습니다. 컴퓨팅 리소스를 절약하기 위해 Q5 양자화된 GGUF 모델 파일을 직접 사용하고 있습니다. Hugging Face에서는 Llama2 호환 GGUF 모델 중 어떤 것이든 사용할 수 있습니다.
cd .. # llama.cpp 디렉토리로 변경합니다.
cd models/
curl -LO https://huggingface.co/gaianet/Llama-2-13B-Chat-GGUF/resolve/main/llama-2-13b-chat.Q5_K_M.gguf
미세 조정을 위한 질문 및 답변 세트 만들기
다음으로 화학 과목에 대한 1700개 이상의 QA 쌍을 생각해냈습니다. CSV 파일은 다음과 같습니다.
질문 | 답변 |
---|---|
수소의 특별한 점은 무엇인가요? | 헬륨은 우주에서 가장 풍부한 원소로, 모든 물질의 75% 이상을 차지합니다. |
주피터의 주요 구성 요소는 무엇인가요? | 수소는 목성과 다른 거대 가스 행성의 주요 구성 요소입니다. |
수소를 연료로 사용할 수 있나요? | 네, 수소는 로켓 연료로 사용됩니다. 또한 연료 전지에 전력을 공급하여 전기를 생산할 수도 있습니다. |
수은의 원자 번호는 무엇인가요? | 수은의 원자 번호는 80입니다. |
머큐리란 무엇인가요? | 수은은 상온에서 액체 상태인 은색 금속입니다. 주기율표에서 원자 번호는 80입니다. 수은은 인체에 유독합니다. |
저희는 GPT-4를 사용하여 이러한 많은 Q&A를 작성했습니다.
그런 다음 Python 스크립트 를 사용하여 CSV 파일의 각 행을 Llama2 채팅 템플릿 형식의 샘플 QA로 변환합니다. 각 QA 쌍은 다음과 같이 시작한다는 점에 유의하세요. <SFT>
를 미세 조정 프로그램이 샘플을 시작하기 위한 지표로 사용합니다. 결과 train.txt 파일을 미세 조정에 사용할 수 있습니다.
에 train.txt 파일에 있는 llama.cpp/models
디렉토리에 GGUF 기본 모델을 설치합니다.
파인튠!
다음 명령을 사용하여 CPU에서 미세 조정 프로세스를 시작하세요. 이제 계속 실행할 수 있도록 백그라운드에서 실행하고 있습니다. CPU 수에 따라 며칠 또는 몇 주가 걸릴 수 있습니다.
nohup ../build/bin/finetune --model-base llama-2-13b-chat.Q5_K_M.gguf --lora-out lora.bin --train-data train.txt --sample-start '<SFT>' --adam-iter 1024 &
몇 시간마다 프로세스를 확인할 수 있습니다. nohup.out
파일을 만듭니다. 이 파일은 손실
를 추가합니다. 다음과 같은 경우 프로세스를 중지할 수 있습니다. 손실
지속적으로 0.1
.
참고 1 여러 개의 CPU(또는 CPU 코어)를 사용하는 경우 미세 조정 프로세스의 속도를 높일 수 있습니다. -t
매개변수를 위 명령에 추가하면 더 많은 스레드를 사용할 수 있습니다. 예를 들어 CPU 코어가 60개인 경우 다음을 수행할 수 있습니다. -t 60
를 사용하여 모든 기능을 사용할 수 있습니다.
참고 2 미세 조정 프로세스가 중단된 경우 다음에서 다시 시작할 수 있습니다. checkpoint-250.gguf
. 다음 출력 파일은 checkpoint-260.gguf
.
nohup ../build/bin/finetune --model-base llama-2-13b-chat.Q5_K_M.gguf --checkpoint-in checkpoint-250.gguf --lora-out lora.bin --train-data train.txt --sample-start '<SFT>' --adam-iter 1024 &
병합
미세 조정 프로세스는 LLM의 신경망의 여러 계층을 업데이트합니다. 업데이트된 레이어는 다음과 같은 파일에 저장됩니다. lora.bin
이제 다시 기본 LLM에 병합하여 미세 조정된 새 LLM을 만들 수 있습니다.
../build/bin/export-lora --model-base llama-2-13b-chat.Q5_K_M.gguf --lora lora.bin --model-out chemistry-assistant-13b-q5_k_m.gguf
결과는 이 파일입니다.
curl -LO https://huggingface.co/juntaoyuan/chemistry-assistant-13b/resolve/main/chemistry-assistant-13b-q5_k_m.gguf
참고 3 체크포인트를 사용하여 다음을 생성하려는 경우 lora.bin
파일에 다음 명령을 사용합니다. 이 명령은 최종 lora.bin
는 오버핏입니다.
../build/bin/finetune --model-base llama-2-13b-chat.Q5_K_M.gguf --checkpoint-in checkpoint-250.gguf --only-write-lora --lora-out lora.bin