Ajuste fino de Llama 3 para resumen de texto
Esta receta te guía a través del proceso de ajuste fino de un modelo Meta Llama 3 para la tarea de resumen de texto usando el dataset samsum en una sola GPU.
Estas son las instrucciones para usar el script de ajuste fino canónico en el paquete llama-cookbook.
Requisitos
Asegúrate de haber instalado el paquete llama-cookbook.
Para ejecutar el ajuste fino en una sola GPU, utilizaremos dos paquetes:
- PEFT para usar el ajuste fino eficiente en parámetros.
- bitsandbytes para la cuantificación int8.
¿Cómo ejecutarlo?
NOTA Para ejecutar el ajuste fino con QLORA, asegúrate de configurar --peft_method lora y --quantization 4bit --quantization_config.quant_type nf4.
FSDP_CPU_RAM_EFFICIENT_LOADING=1 python finetuning.py --use_peft --peft_method lora --quantization 8bit --model_name /path_of_model_folder/8B --output_dir Path/to/save/PEFT/model
Los argumentos usados en el comando anterior son:
--use_peftbandera booleana para habilitar los métodos PEFT en el script--peft_methodpara especificar el método PEFT, aquí usamoslora, otras opciones sonllama_adapter,prefix.--quantizationbandera de cadena para habilitar la cuantificación de 8 bits o 4 bits
[!NOTE] En caso de que estés usando una máquina con varias GPU, asegúrate de hacer visible solo una de ellas usando
export CUDA_VISIBLE_DEVICES=GPU:id.
¿Cómo ejecutarlo con diferentes datasets?
Actualmente se admiten 3 datasets de código abierto que se pueden encontrar en el archivo de configuración de Datasets. También puedes usar tu dataset personalizado (más información aquí).
grammar_dataset: usa este notebook para obtener y procesar los datasets Jfleg y C4 200M para la verificación gramatical.alpaca_dataset: para obtener estos datos de código abierto, descarga elalpaca.jsona la carpetadataset.
wget -P ../../src/llama_cookbook/datasets https://raw.githubusercontent.com/tatsu-lab/stanford_alpaca/main/alpaca_data.json
samsum_dataset
para ejecutar con cada uno de los datasets, configura la bandera dataset en el comando como se muestra a continuación:
# grammar_dataset
python -m finetuning.py --use_peft --peft_method lora --quantization 8bit --dataset grammar_dataset --model_name /path_of_model_folder/8B --output_dir Path/to/save/PEFT/model
# alpaca_dataset
python -m finetuning.py --use_peft --peft_method lora --quantization 8bit --dataset alpaca_dataset --model_name /path_of_model_folder/8B --output_dir Path/to/save/PEFT/model
# samsum_dataset
python -m finetuning.py --use_peft --peft_method lora --quantization 8bit --dataset samsum_dataset --model_name /path_of_model_folder/8B --output_dir Path/to/save/PEFT/model
Conteo de FLOPS y Perfilado de Pytorch
Para ayudar con el esfuerzo de benchmarking, estamos agregando soporte para contar los FLOPS durante el proceso de ajuste fino. Puedes lograr esto configurando --flop_counter al lanzar tu ajuste fino de GPU única/múltiple. Usa --flop_counter_start para elegir qué paso contar los FLOPS. Se recomienda permitir una etapa de calentamiento antes de usar el contador de FLOPS.
De manera similar, puedes configurar la bandera --use_profiler y pasar una ruta de salida de perfilado usando --profiler_dir para capturar los rastros de perfil de tu modelo usando el perfilador de PyTorch. Para obtener un resultado de perfilado preciso, el perfilador de pytorch requiere una etapa de calentamiento y la configuración actual es wait=1, warmup=2, active=3, por lo tanto, el perfilador comenzará el perfilado después del paso 3 y registrará los siguientes 3 pasos. Por lo tanto, para usar el perfilador de pytorch, el --max-train-step debe ser mayor que 6. El perfilador de pytorch sería útil para fines de depuración. Sin embargo, --flop_counter y --use_profiler no se pueden usar al mismo tiempo para garantizar la precisión de la medición.