当前位置:   article > 正文

【大模型实践】ChatGLM3微调对话模型(五)_chatglm3-6b

chatglm3-6b

ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的新一代对话预训练模型。ChatGLM3-6B 是 ChatGLM3 系列中的开源模型,在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上,ChatGLM3-6B 引入了如下特性:

更强大的基础模型: ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base 采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。在语义、数学、推理、代码、知识等不同角度的数据集上测评显示,ChatGLM3-6B-Base 具有在 10B 以下的基础模型中最强的性能。
更完整的功能支持: ChatGLM3-6B 采用了全新设计的 Prompt格式,除正常的多轮对话外。同时原生支持工具调用(Function Call)、代码执行(Code Interpreter)和 Agent 任务等复杂场景。
更全面的开源序列: 除了对话模型 ChatGLM3-6B外,还开源了基础模型 ChatGLM3-6B-Base、长文本对话模型 ChatGLM3-6B-32k。以上所有权重对学术研究完全开放,在填写问卷进行登记后亦允许免费商业使用。

本文介绍了ChatGLM3-6B在多轮对话模型ToolAlpaca 数据集上微调的示例。请确保我完成了【大模型实践】ChatGLM3安装及体验(四)中的环境安装及模型下载部分。

一、准备数据集

为了训练多轮对话模型,首先要按照chatglm-6b的数据格式准备数据,chatglm-6b的微调模型的对话和工具能力数据格式如下:

  1. [
  2. {
  3. "tools": [
  4. // available tools, format is not restricted
  5. ],
  6. "conversations": [
  7. {
  8. "role": "system",
  9. "content": "<system prompt text>"
  10. },
  11. {
  12. "role": "user",
  13. "content": "<user prompt text>"
  14. },
  15. {
  16. "role": "assistant",
  17. "content": "<assistant thought to text>"
  18. },
  19. {
  20. "role": "tool",
  21. "name": "<name of the tool to be called",
  22. "parameters": {
  23. "<parameter_name>": "<parameter_value>"
  24. },
  25. "observation": "<observation>"
  26. // don't have to be string
  27. },
  28. {
  29. "role": "assistant",
  30. "content": "<assistant response to observation>"
  31. },
  32. // ... Muti Turn
  33. {
  34. "role": "user",
  35. "content": "<user prompt text>"
  36. },
  37. {
  38. "role": "assistant",
  39. "content": "<assistant response text>"
  40. }
  41. ]
  42. }
  43. // ...
  44. ]

 接下来下载ToolAlpaca 数据集,在data目录下有3个json文件,如下图所示:

进入finetune_chatmodel_demo目录:

cd finetune_chatmodel_demo

下面使用chatglm3-6b的数据处理工具将该数据集的格式转换成chatglm3的格式(json文件的路径更换为自己的训练数据路径):

python scripts/format_tool_alpaca.py --path "data/toolalpaca/train_data.json"

处理完成后,finetune_chatmodel_demo目录下会出现formatted_data目录,里面有处理好的数据,如下图:

二、P-Tuning v2微调

本教程使用P-Tuning v2微调。将ChatGLM3/finetune_chatmodel_demo/scripts/finetune_pt_multiturn.sh的BASE_MODEL_PATH替换为自己的chatglm-6b的路径):

  1. #! /usr/bin/env bash
  2. set -ex
  3. PRE_SEQ_LEN=128
  4. LR=2e-2
  5. NUM_GPUS=1
  6. MAX_SEQ_LEN=2048
  7. DEV_BATCH_SIZE=1
  8. GRAD_ACCUMULARION_STEPS=16
  9. MAX_STEP=1000
  10. SAVE_INTERVAL=500
  11. DATESTR=`date +%Y%m%d-%H%M%S`
  12. RUN_NAME=tool_alpaca_pt
  13. BASE_MODEL_PATH=chatglm3-6b
  14. DATASET_PATH=formatted_data/tool_alpaca.jsonl
  15. OUTPUT_DIR=output/${RUN_NAME}-${DATESTR}-${PRE_SEQ_LEN}-${LR}
  16. mkdir -p $OUTPUT_DIR
  17. torchrun --standalone --nnodes=1 --nproc_per_node=$NUM_GPUS finetune.py \
  18. --train_format multi-turn \
  19. --train_file $DATASET_PATH \
  20. --max_seq_length $MAX_SEQ_LEN \
  21. --preprocessing_num_workers 1 \
  22. --model_name_or_path $BASE_MODEL_PATH \
  23. --output_dir $OUTPUT_DIR \
  24. --per_device_train_batch_size $DEV_BATCH_SIZE \
  25. --gradient_accumulation_steps $GRAD_ACCUMULARION_STEPS \
  26. --max_steps $MAX_STEP \
  27. --logging_steps 1 \
  28. --save_steps $SAVE_INTERVAL \
  29. --learning_rate $LR \
  30. --pre_seq_len $PRE_SEQ_LEN 2>&1 | tee ${OUTPUT_DIR}/train.log

再微调训练前,再安装一个依赖库(否则训练会报错):

pip install astunparse

接下来开启微调训练:

bash scripts/finetune_pt_multiturn.sh

可以看到,训练起来了:

显存消耗接近17GB:

训练结束:

三、部署

获得了微调的模型后,返回composite_demo目录:

cd ../composite_demo

可以很简单的部署(MODEL_PATH改为自己的chatglm3-6b的权重路径,PT_PATH指向微调的路径,PT_PATH的路径再训练结束的日志中):

MODEL_PATH="chatglm3-6b" PT_PATH="output/tool_alpaca_pt-20231227-061735-128-2e-2" streamlit run main.py 

效果如下:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/482877
推荐阅读
相关标签
  

闽ICP备14008679号