Este proyecto tiene como objetivo instruir el ajuste de los modelos base de múltiples clases para realizar Lora + Deepeed + Single Card/Multi-Card Fin-Auting. Los modelos probados actualmente se muestran en la tabla a continuación:
| Prueba el modelo | idioma | Pesas de prueba |
|---|---|---|
| Chino-llama-alpaca | Chino | chino-alpaca-plus-lora-13b |
| LLAMA ABIERTA | Inglés | Open_llama_13b |
| Open_llama_7b | ||
| BELDAD | Chino | Belle-llama-ext-13b |
| Belle-llama-ext-7b | ||
| FLORACIÓN | Inglés | BOOMZ-1B7 |
| BOOMZ-7B1 | ||
| Chatglm-6b | Chino | Chatglm-6b |
| Chatglm2-6b | ||
| Baichuan | Chino | baichuan-7b |
| Chino | baichuan-13b-chat | |
| Tigre | Chino | tigerbot-7b-sft |
| tigerbot-7b-base | ||
| Pitón | Inglés | pythia-1b-deduped |
| pythia-12b-deduped |
HACER:
Aquí usamos CCKS2023-PrompptCBlue Chino Medical Big Model para evaluar el conjunto de datos en la competencia de referencia como ejemplo. Este conjunto de datos transforma el conjunto de datos del "Desafío de procesamiento de información médica china CBLUE", transformando los 16 escenarios médicos diferentes de las tareas de la PNL en tareas de generación de idiomas basadas en el aviso, formando el primer punto de referencia de evaluación de LLM para escenarios médicos chinos.
ARDCBLUE utiliza 94 plantillas de ajuste de instrucción para realizar varias tareas en el punto de referencia CBLUE. Después de la transformación, todos los conjuntos de datos NLP de texto médico se convertirán en el siguiente formato. La cadena de campo de entrada es la entrada al modelo LLM, y el campo de destino también es una cadena, que es la secuencia de texto que el modelo LLM necesita generar.
{
"input" : str,
"target" : str,
"type" : str,
"answer_choices" : str,
"sample_id" : str,
} Para facilitar la verificación rápida, extraemos el subdataset CHIP-CTC , incluidos 6000 conjuntos de entrenamiento, 1100 conjuntos de verificación y 1060 conjuntos de pruebas. Dirección de descarga
El modelo se puede descargar localmente. Durante el entrenamiento, model_name_or_path se pasa a la ruta del modelo, o solo puede pasar el nombre del modelo en la cara abrazada, como THUDM/chatglm-6b , y el código descargará automáticamente el modelo.
Algunos modelos de clase LLAMA requieren conversión de modelos, y los modelos involucrados incluyen: chino-alpaca-plus-lora-13b, consulte el método de conversión aquí.
conda create -n llms_train python=3.9
conda activate llms_train
pip install -r requirements.txt Hay archivos de configuración de Lora para varios modelos en el archivo config.py , que se pueden personalizar y modificar. El contenido del archivo de configuración es el siguiente:
' glm ' : {
" lora_r " : 8,
" lora_alpha " : 32,
" lora_dropout " : 0.05,
" lora_target_modules " : " query_key_value,dense,dense_h_to_4h,dense_4h_to_h " ,
" modules_to_save " : " null "
},Descripción del campo:
lora_r : El rango de Lora lora_alpha : lora_dropout : la probabilidad de deserción de la capa Lora;lora_target_modules : en qué módulos se aguanta lora;modules_to_save : además de la capa Lora, que los módulos se establecen en capacitación y se guardarán en el último punto de control. La configuración de cero2 se usa aquí:
{
" fp16 " : {
" enabled " : " auto " ,
" loss_scale " : 0,
" loss_scale_window " : 100,
" initial_scale_power " : 16,
" hysteresis " : 2,
" min_loss_scale " : 1e-10
},
" bf16 " : {
" enabled " : " auto "
},
" zero_optimization " : {
" stage " : 2,
" allgather_partitions " : true,
" allgather_bucket_size " : 5e8,
" overlap_comm " : true,
" reduce_scatter " : true,
" reduce_bucket_size " : 5e8,
" contiguous_gradients " : true
},
" gradient_accumulation_steps " : " auto " ,
" gradient_clipping " : " auto " ,
" steps_per_print " : 2000,
" train_batch_size " : " auto " ,
" train_micro_batch_size_per_gpu " : " auto " ,
" wall_clock_breakdown " : false
}Para estrategias para capacitación paralela de múltiples tarjetas, consulte aquí.
config.py tiene varias otras configuraciones: MODEL_MAP , TOKENIZER_MAP , SPECIAL_IDS , seleccione diferentes calss de modelos y clase Tokenizer de acuerdo con model_type , y seleccione ID de token especial de acuerdo con model_name_or_path . model_type y el modelo correspondiente son los siguientes:
llama : puede llamar a modelos de tipo Llama como chino-alpaca-plus-lora-13b, open_llama_13b, open_llama_7b, belle-llama-ext-13b, belle-llama-ext-7b, tigerbot-7b-sft, tigerbot-7b-base, etc.glm : se puede llamar a ChatGLM-6B y ChatGLM2-6B.bloom : se pueden llamar a modelos de tipo Bloom como Bloomb-1B7, Bloomb-7B1, etc.pythia : puede llamar a Python-1b-Deduped, Pythia-12b-Deduped y otros modelos Python. Ejecutar scripts/train.sh . El contenido del archivo es el siguiente:
LR=2e-4
model_name_or_path= " ../models/pythia-12b-deduped " # LLM底座模型路径,或者是huggingface hub上的模型名称
model_type= ' pythia '
your_data_path= " ./datasets/PromptCBLUE " # 填入数据集所在的文件夹路径
your_checkpopint_path= " ./experiments/outputs " # 填入用来存储模型的路径
max_steps=100
max_source_length=256
max_target_length=16
peft_path= " " # 如果之前训练过,且存储了peft权重,则设置为peft权重的文件夹路径
CUDA_VISIBLE_DEVICES=0 torchrun --nproc_per_node 1 train.py
--deepspeed configs/ds_zero2_no_offload.json
--do_train
--do_eval
--model_name_or_path $model_name_or_path
--model_type $model_type
--use_lora True
--fp16
--train_file $your_data_path /train_CHIP-CTC.json
--validation_file $your_data_path /dev_CHIP-CTC.json
--preprocessing_num_workers 8
--cache_dir $your_data_path
--prompt_column input
--response_column target
--output_dir $your_checkpopint_path /test-pythia-12b-deduped-lora- $LR
--overwrite_output_dir
--max_source_length $max_source_length
--max_target_length $max_target_length
--per_device_train_batch_size 4
--per_device_eval_batch_size 4
--gradient_accumulation_steps 16
--max_steps $max_steps
--logging_steps 10
--save_strategy steps
--save_steps 50
--save_total_limit 3
--evaluation_strategy steps
--eval_steps 50
--learning_rate $LR Los parámetros son los siguientes:
deepspeed : la ruta del archivo de configuración de DeepSpeeddo_train : bool, si habilita el entrenamientodo_eval : bool, ya sea por verificar en el conjunto de verificación, si evaluation_strategy no es igual a "no", se establecerá en Truemodel_name_or_path : el nombre del modelo en la cara abrazada o el camino que ya existe localmentemodel_type : el tipo de modelo, opciones opcionales incluyen llama , glm , bloom , pythia , baichuan , otheruse_lora : use lora ajuste fino, el valor predeterminado es True , de lo contrario es un ajuste completofp16 : si usar FP16 (mixto) precisión para entrenartrain_file : formación establece un archivo de datosvalidation_file : verificación establecer el archivo de datospreprocessing_num_workers : número de trabajadores cuando los datos del participio por lotescache_dir : ruta de caché al modelo HFprompt_column : el nombre de campo ingresado en la muestraresponse_column : la salida del nombre de campo en la muestraoutput_dir : la ruta para guardar el resultado del entrenamientooverwrite_output_dir : si se establece en True , sobrescribe la carpeta de salidamax_source_length : la longitud máxima del texto de entradamax_target_length : longitud máxima del texto de salidapre_device_train_batch_size : tamaño por lotes en cada tarjeta durante el entrenamientopre_device_eval_batch_size : tamaño por lotes en cada tarjeta durante la verificación/pruebagradient_accumulation_steps : rondas de acumulación de gradientemax_steps : el número de rondas de entrenamiento, una ronda contiene el número de muestras: GPU数量* pre_device_train_batch_size * gradient_accumulation_stepslogging_steps : cuántas rondas de impresión de registrosave_strategy : durante el proceso de capacitación, los resultados intermedios se guardan de acuerdo con el número de pasos o números de época. Los valores opcionales son no , steps y epochsave_steps : guarde el punto de control cada pasoevaluation_strategy : ejecute el conjunto de verificación de acuerdo con el número de pasos o números de época. Los valores opcionales son no , steps y epocheval_steps : verificación cada número de pasoslearning_rate : tasa de aprendizaje Si se trata de capacitación de múltiples tarjetas, modifique el correspondiente en sh: CUDA_VISIBLE_DEVICES=0 torchrun --nproc_per_node 1 . Por ejemplo, el entrenamiento de 4 tarjetas se puede cambiar a: CUDA_VISIBLE_DEVICES=0,1,2,3 torchrun --nproc_per_node 4 .
Aviso:
model_name_or_path debe corresponder correctamente a model_type .bos_id , eos_id y pad_id de algunos modelos no son completamente consistentes. SPECIAL_IDS en config.py especifica la ID de token especial de cada modelo. Además de los modelos que se han probado, debe agregarse manualmente por usted mismo.Ejecute el script de inferencia:
CUDA_VISIBLE_DEVICES=0 python inference.py
--model_name_or_path experiments/outputs/PromptCBLUE-chatglm-6b-lora-2e-4
--ckpt_path experiments/outputs/PromptCBLUE-chatglm-6b-lora-2e-4/checkpoint-9690
--model_type glm
--data_file ./datasets/PromptCBLUE/test.json
--cache_dir ./datasets/PromptCBLUE
--use_loraRegistro de problemas:
/work no tiene permiso, agregue variables de entorno: export HF_MODULES_CACHE=~/.cache/huggingfacechmod u+x xxx.sh Actualización continua ...
Gracias a la comunidad por sus excelentes modelos de código abierto: Chatglm-6b (ChatGlm2), Chinese-Llama-Alpaca, Openllama, Bloom, Belle, Python, Gptneox, Baichuan.
Este proyecto también se refiere a los siguientes excelentes proyectos de código abierto:
PridCblue
fraseepiece_chinese_bpe
Chatglm_lora_multi-gpu
Catglm-eficiente-ajuste
cero_nlp
Este proyecto es solo para estudio e investigación . Los resultados de la capacitación del modelo se ven afectados por factores como la propia estructura, aleatoriedad, parámetros de capacitación, conjuntos de datos, etc. Este proyecto no es responsable de los resultados de la capacitación del modelo, ni es responsable del contenido de la generación del modelo, ni es responsable de ninguna pérdida causada por el uso de este proyecto. Este proyecto es desarrollado y mantenido por personas en su tiempo libre. Debido al tiempo limitado y al nivel limitado del autor, no se puede garantizar la oportunidad de responder a preguntas relacionadas. Sin embargo, se establecerá un grupo de comunicación en el futuro. Todos son bienvenidos a aprender y ayudarse mutuamente.
Si este proyecto es útil para usted, consultelo en el siguiente formato:
@software{LLMs_train,
title = {{LLMs_train: A Set of Code to Fine-Tune Large Language Models}},
author = {Xudong Li},
year = {2023},
url = {https://www.github.com/5663015/LLMs_train},
}