llama.cpp
La popular herramienta llama.cpp viene con un afinar
utilidad. ¡Funciona bien en CPUs! Esta guía de ajuste fino se reproduce con
permiso de Tony Yuan's Finetune un LLM de código abierto para la asignatura de química proyecto.
Construye la utilidad de ajuste fino desde llama.cpp
En afinar
en llama.cpp puede trabajar con archivos GGUF cuantificados en CPUs y, por tanto, reducir drásticamente los requisitos de hardware y los gastos para el ajuste fino de los LLM.
Consulta y descarga el código fuente de llama.cpp.
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
Construye el binario llama.cpp.
mkdir build
cd build
cmake ..
cmake --build . --config Release
Si tienes instalada una GPU NVIDIA y el kit de herramientas CUDA, debes compilar llama.cpp con soporte CUDA.
mkdir build
cd build
cmake .. -DLLAMA_CUBLAS=ON -DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc
cmake --build . --config Release
Obtener el modelo base
Vamos a utilizar el modelo Llama2 chat 13B de Meta como modelo base. Ten en cuenta que estamos utilizando directamente un archivo de modelo GGUF cuantizado Q5 para ahorrar recursos informáticos. Puedes utilizar cualquiera de los modelos GGUF compatibles con Llama2 en Hugging Face.
cd .. # cambiar al directorio llama.cpp
cd modelos/
curl -LO https://huggingface.co/gaianet/Llama-2-13B-Chat-GGUF/resolve/main/llama-2-13b-chat.Q5_K_M.gguf
Crear un conjunto de preguntas y respuestas para afinar
A continuación obtuvimos más de 1700 pares de QAs para la asignatura de química. Es como el siguiente en un archivo CSV.
Pregunta | Respuesta |
---|---|
¿Qué tiene de especial el hidrógeno? | Es el elemento más abundante del universo y constituye más del 75% de toda la materia. |
¿Cuál es el principal componente de Júpiter? | El hidrógeno es el principal componente de Júpiter y de los demás planetas gigantes gaseosos. |
¿Puede utilizarse el hidrógeno como combustible? | Sí, el hidrógeno se utiliza como combustible para cohetes. También puede alimentar pilas de combustible para generar electricidad. |
¿Cuál es el número atómico del mercurio? | El número atómico del mercurio es 80 |
¿Qué es Mercurio? | El mercurio es un metal de color plateado que es líquido a temperatura ambiente. Tiene un número atómico de 80 en la tabla periódica. Es tóxico para el ser humano. |
Usamos GPT-4 para ayudarme a subir muchos de estos QAs.
A continuación, escribimos un Script de Python para convertir cada fila del archivo CSV en una muestra de QA en el formato de plantilla de chat Llama2. Observe que cada par de QA empieza por <SFT>
como indicador para que el programa de ajuste fino inicie una muestra. El resultado entrenar.txt se puede utilizar ahora en la puesta a punto.
Ponga el entrenar.txt en el archivo llama.cpp/modelos
con el modelo base GGUF.
¡Finetune!
Utilice el siguiente comando para iniciar el proceso de ajuste fino en sus CPUs. Lo pongo en segundo plano para que pueda ejecutarse continuamente ahora. Podría tardar varios días o incluso un par de semanas dependiendo de cuántas CPUs tengas.
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 &
Puede comprobar el proceso cada pocas horas en la pantalla nohup.out
archivo. Informará del pérdida
para cada iteración. Puede detener el proceso cuando el pérdida
va sistemáticamente por debajo de 0.1
.
Nota 1 Si dispone de varias CPU (o núcleos de CPU), puede acelerar el proceso de ajuste fino añadiendo un botón -t
al comando anterior para utilizar más hilos. Por ejemplo, si tiene 60 núcleos de CPU, puede hacer lo siguiente -t 60
utilizarlos todos.
Nota 2 Si se interrumpe el proceso de ajuste, puede reiniciarlo desde control-250.gguf
. El siguiente archivo que genera es control-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 &
Fusión
El proceso de ajuste fino actualiza varias capas de la red neuronal del LLM. Estas capas actualizadas se guardan en un archivo llamado lora.bin
y ahora puedes fusionarlos de nuevo con el LLM base para crear el nuevo LLM afinado.
../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
El resultado es este archivo.
curl -LO https://huggingface.co/juntaoyuan/chemistry-assistant-13b/resolve/main/chemistry-assistant-13b-q5_k_m.gguf
Nota 3 Si desea utilizar un punto de control para generar un lora.bin
utilice el siguiente comando. Esto es necesario cuando se cree el lora.bin
es un sobreajuste.
../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