Resumen práctico de ajuste fino del modelo grande ChatGLM-6B

Sobre el autor: Zhao Hui, un experto en tecnología de cadenas de bloques, domina los principios subyacentes de varias cadenas de alianzas y cadenas públicas, y tiene una gran experiencia en el desarrollo de aplicaciones de cadenas de bloques.

En el artículo anterior, ya teníamos el entorno operativo inicial de ChatGLM-6B, que sentó las bases para realizar nuestro propio modelo ( resumen práctico del modelo a gran escala de implementación rápida de ChatGLM-6B ), y luego ajustaremos el modelo. para que pueda convertirse realmente en un asistente inteligente personalizado. En este proceso, usaré directamente la herramienta oficial P-Tuning v2 para afinar los parámetros del modelo ChatGLM-6B.

instalar dependencias

Ingrese al directorio ptuning e instale las dependencias a través de pip

root@VM-0-17-ubuntu:~# cd ChatGLM-6B/ptuning
root@VM-0-17-ubuntu:ptuning# pip install rouge_chinese nltk jieba datasets

usa tu propio conjunto de datos

Para garantizar el éxito de una sola vez, los datos de muestra se pueden descargar de la red pública:

https://cloud.tsinghua.edu.cn/f/b3f119a008264b1cabd1/?dl=1

  1. Descomprimir después de descargar

root@VM-0-17-ubuntu:ptuning# tar xvf AdvertiseGen.tar.gz
  1. Hay dos archivos json en el directorio descomprimido AdvertiseGen, uno train.json para capacitación y otro dev.json para razonamiento. El contenido de los archivos es el siguiente:

be154e45bda9a0a647e9d1c16d202016.png

Como se puede ver en la figura, el archivo de entrenamiento se construye a partir de varias filas de datos de cadenas json, que incluyen principalmente dos campos, uno de contenido y otro de resumen. Este formato se basa en un patrón de preguntas y respuestas:

<center>[
{ “content”: “问句1”,  “summary”: "答案1“}  
  { “content”: “问句1”, “summary”: "答案1“}
   {…}]</center>

tren

Modificar train.sh al siguiente estilo

PRE_SEQ_LEN=128
LR=2e-2

CUDA_VISIBLE_DEVICES=0 python3 main.py \
    --do_train \
    --train_file AdvertiseGen/train.json \     # 训练数据
    --validation_file AdvertiseGen/dev.json \  # 推理数据
    --prompt_column content \
    --response_column summary \
    --overwrite_cache \
    --model_name_or_path ../THUDM/chatglm-6b \  # 加载模型文件地址
    --output_dir output/adgen-chatglm-6b-pt-$PRE_SEQ_LEN-$LR \   # 保存训练模型文件地址
    --overwrite_output_dir \
    --max_source_length 64 \
    --max_target_length 64 \
    --per_device_train_batch_size 1 \
    --per_device_eval_batch_size 1 \
    --gradient_accumulation_steps 16 \
    --predict_with_generate \
    --max_steps 3000 \
    --logging_steps 10 \
    --save_steps 1000 \
    --learning_rate $LR \
    --pre_seq_len $PRE_SEQ_LEN

PRE_SEQ_LEN y LR en train.sh son la duración de las indicaciones suaves y la tasa de aprendizaje del entrenamiento, respectivamente, que se pueden ajustar para lograr los mejores resultados.

El método P-Tuning-v2 congelará todos los parámetros del modelo, y el nivel de cuantificación del modelo original se puede configurar ajustando quantization_bit.Si no se agrega esta opción, se cargará con precisión FP16.

Con la configuración predeterminada de quantization_bit=4, per_device_train_batch_size=1, gradient_accumulation_steps=16, los parámetros del modelo de INT4 se congelan y una iteración de entrenamiento realizará 16 propagaciones acumuladas hacia adelante y hacia atrás con un tamaño de lote de 1, lo que equivale a un total lote de 16 En este momento, la memoria de video mínima es de solo 6.7G. Si desea mejorar la eficiencia del entrenamiento con el mismo tamaño de lote, puede aumentar el valor de per_device_train_batch_size sin cambiar el producto de los dos, pero también generará un mayor consumo de memoria, ajústelo de acuerdo con la situación real.

entrenamiento ejecutivo

root@VM-0-17-ubuntu:ptuning# bash train.sh

El entrenamiento consume muchos recursos, y el modelo en ejecución y el entrenamiento en ejecución no se pueden iniciar al mismo tiempo; de lo contrario, los recursos de GPU existentes son insuficientes y este entrenamiento en ejecución lleva más de 11 horas. El efecto de iniciar el entrenamiento es como se muestra en la figura:

89a6b72bf220cb4b4b54d0d079b0a5a4.png

razonamiento

Modificar evaluar.sh al siguiente estilo

PRE_SEQ_LEN=128
CHECKPOINT=adgen-chatglm-6b-pt-128-2e-2
STEP=3000

CUDA_VISIBLE_DEVICES=0 python3 main.py \
    --do_predict \
    --validation_file AdvertiseGen/dev.json \   # 推理文件路径 
    --test_file AdvertiseGen/dev.json \         # 推理文件路径
    --overwrite_cache \
    --prompt_column content \
    --response_column summary \
    --model_name_or_path ../THUDM/chatglm-6b \
    --ptuning_checkpoint ./output/$CHECKPOINT/checkpoint-$STEP \ # 推理输出路径
    --output_dir ./output/$CHECKPOINT \
    --overwrite_output_dir \
    --max_source_length 64 \
    --max_target_length 64 \
    --per_device_eval_batch_size 1 \
    --predict_with_generate \
    --pre_seq_len $PRE_SEQ_LEN \
    --quantization_bit 4

ejecutar inferencia

Cambie CHECKPOINT en evaluar.sh al nombre del punto de control guardado durante el entrenamiento y ejecute los siguientes comandos para la inferencia y evaluación del modelo:

root@VM-0-17-ubuntu:ptuning# bash evaluate.sh

Después de la ejecución, esta imagen parece indicar que el entrenamiento es exitoso y train_runtime es el tiempo consumido para entrenar el modelo.

50739265e604dd240e1025b8bff133bb.png

Efecto

Después de completar el entrenamiento y el razonamiento anteriores, puede ejecutar el modelo entrenado para ver cómo es el efecto real de ajuste fino.

Modifique ptuning/web_demo.sh de la siguiente manera:

PRE_SEQ_LEN=128

CUDA_VISIBLE_DEVICES=0 python3 web_demo.py \
    --model_name_or_path ../THUDM/chatglm-6b \
    --ptuning_checkpoint output/adgen-chatglm-6b-pt-128-2e-2/checkpoint-3000 \
    --pre_seq_len $PRE_SEQ_LEN

Para hacer accesible la red externa, modifique el archivo web_demo.py y busque la línea demo.queue().launch y reemplácela con:

demo.queue().launch(share=False, inbrowser=True, server_name='0.0.0.0', server_port=27777)

Ejecute bash web_demo.shy obtenga los siguientes resultados: bdbc9a358fc866b73b44581f57a97611.pngAbra el navegador, puede ver los siguientes efectos:

2434e8681a2609df5bc2a3d6119f5052.png

Iniciar una conversación:

Entrada De acuerdo con la entrada para generar un párrafo de palabras publicitarias, la entrada es: tipo# material superior# color de mezclilla#estilo blanco #patrón simple #estilo de ropa bordada #estilo abrigo #agujero

El resultado es como se muestra en la figura:

d5d06f0b4de90873ed76896fbfe567ff.png

A juzgar por los resultados, el efecto no es muy bueno, pero al menos el contenido ha sido entrenado, y el resto es el problema de enriquecer el contenido de los datos.Con un conjunto de datos completo y a gran escala, el modelo ajustado es más significativo, de lo contrario, es solo un juguete con un valor comercial extremadamente bajo.

Resumir

A través del ajuste fino del modelo y la experiencia práctica del razonamiento, se han descubierto algunos problemas y direcciones de mejora. Aunque todavía hay cierta distancia del ama de llaves inteligente Jarvis de Iron Man, esta exploración nos ha dado una comprensión más profunda. de los misterios de la inteligencia artificial y acumuló una valiosa experiencia para futuros estudios y exploraciones.

En la práctica, usamos el modelo ChatGLM-6B y pasamos por el proceso de entrenamiento e inferencia del modelo. El entrenamiento del modelo consume una cantidad considerable de tiempo, pero también nos permite apreciar la complejidad y los desafíos del entrenamiento del modelo. Aunque en la etapa de inferencia, el modelo generó algo de contenido, pero el efecto de la experiencia no es perfecto y aún se necesitan mejoras y optimizaciones adicionales.

Este proceso nos ha proporcionado una comprensión más profunda del desarrollo y la aplicación de la inteligencia artificial, y una comprensión más clara del ajuste y desarrollo de modelos. Aunque los resultados no son satisfactorios, nos allana el camino para explorar la inteligencia artificial y desarrollar asistentes personalizados. en el futuro En el camino, creo que en el futuro estaremos cada vez más cerca de hacer realidad la visión de un asistente inteligente similar a Jarvis.


¿Escribir es difícil?¿No puedes escribir bien? / ¿Falta de inspiración para la producción del curso? / ¿La copia de marketing no es atractiva? / ¿La producción de PPT requiere mucho tiempo y es laboriosa? / ¿El guión de video corto no es creativo?

Sobre la base de los problemas comunes anteriores en la escritura, escribí un manual "Primeros pasos con la escritura de IA en 30 segundos" para explicar sistemáticamente el empoderamiento que la IA puede brindarle en la escritura, ya sea que tenga sus raíces en Xiaohongshu, Douyin, Kuaishou, cuenta de video , cuenta pública o Zhihu, Weibo, Bilibili o blog autoconstruido, plataforma autogestionada, puede encontrar las habilidades de creación de IA adecuadas para usted en el contenido de la columna y mejorar rápidamente su productividad. , quien dijo que una sola persona no puede vivir como un equipo?

b55e2519dd3a25a8bfc58aa9e7a97bc3.pngEl precio original es ¥ 299 y el precio actual es ¥ 49 por tiempo limitado. A medida que aumente el número de suscripciones, el precio original se restablecerá en el futuro. 2fa0ee2f25d88e8f33e546105893b443.png[Mantenga presionado el código QR para identificar]


La cuenta oficial responde " Combate real de Claude ", " Combate real de ChatGPT ", " Combate real de WPSAI ", y obtiene los libros electrónicos correspondientes.

—Lectura ampliada—

La aplicación de modelo grande de IA que está sucediendo o sucederá pronto, como lo demuestra la publicación

ChatGPT, Claude y Bard, la confrontación tripartita se ha vuelto

Resumen de combate de WPS Office AI, la era de la oficina inteligente ha llegado

Para todas sus preguntas sobre ChatGPT, solo lea este artículo

Supongo que te gusta

Origin blog.csdn.net/hero272285642/article/details/132074112
Recomendado
Clasificación