ChatGLM-6B大模型微调实战总结

作者简介:赵辉,区块链技术专家,精通各种联盟链、公链的底层原理,拥有丰富的区块链应用开发经验。

上篇我们已经具备了 ChatGLM-6B 初步的运行环境,这为实现完全属于自己的模型奠定了基础(快速部署ChatGLM-6B大模型实战总结),接下来将针对模型进行微调,以便让它真正成为一个定制化智能助手。在这个过程中,我将直接使用官方的P-Tuning v2工具对ChatGLM-6B模型进行参数微调。

安装依赖

进入ptuning目录,通过pip安装依赖

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

使用自己的数据集

为了保证一次性成功,可以在公网上下载样例数据:

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

  1. 下载后解压

root@VM-0-17-ubuntu:ptuning# tar xvf AdvertiseGen.tar.gz
  1. 解压的目录AdvertiseGen中有两个json文件,一个train.json用于训练,一个dev.json用于推理,文件内容如下:

be154e45bda9a0a647e9d1c16d202016.png

从图中可以看出来,训练文件是由多个json字符串数据行构建而成,主要包含两个字段,一个content,一个summary。这种格式组建成了问答模式:

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

训练

修改 train.sh成如下样式

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

train.sh 中的 PRE_SEQ_LEN 和 LR 分别是 soft prompt 长度和训练的学习率,可以进行调节以取得最佳的效果。

P-Tuning-v2 方法会冻结全部的模型参数,可通过调整 quantization_bit 来设置原始模型的量化等级,不加此选项则为 FP16 精度加载。

扫描二维码关注公众号,回复: 16075407 查看本文章

在默认配置 quantization_bit=4、per_device_train_batch_size=1、gradient_accumulation_steps=16 下,INT4 的模型参数被冻结,一次训练迭代会以 1 的批处理大小进行 16 次累加的前后向传播,等效为 16 的总批处理大小,此时最低只需 6.7G 显存。若想在同等批处理大小下提升训练效率,可在二者乘积不变的情况下,加大 per_device_train_batch_size 的值,但也会带来更多的显存消耗,请根据实际情况酌情调整。

执行训练

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

训练消耗的资源比较多,运行模型和运行训练不能同时开启,否则 GPU 现存资源不足,本次运行训练耗时11个多小时。开始训练效果如图:

89a6b72bf220cb4b4b54d0d079b0a5a4.png

推理

修改 evaluate.sh成如下样式

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

运行推理

将 evaluate.sh 中的 CHECKPOINT 更改为训练时保存的 checkpoint 名称,运行以下指令进行模型推理和评测:

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

执行后,出现这张图说明训练成功了,train_runtime 是训练模型消耗的时间

50739265e604dd240e1025b8bff133bb.png

效果

上面的训练、推理完成后,就可以运行训练的模型,来查看实际的微调效果到底如何。

修改ptuning/web_demo.sh如下:

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

为了使外部网络可以访问,修改web_demo.py 文件,找到 demo. queue(). launch 这一行替换为:

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

执行bash web_demo.sh,得到以下结果:bdbc9a358fc866b73b44581f57a97611.png打开浏览器,可以看到如下效果:

2434e8681a2609df5bc2a3d6119f5052.png

开启一段对话:

输入根据输入生成一段广告词,输入为:类型#上衣材质#牛仔布颜色#白色风格#简约图案#刺绣衣样式#外套衣款式#破洞

得到结果如图:

d5d06f0b4de90873ed76896fbfe567ff.png

从结果来看,效果不是很佳,但至少训练出了内容,剩下的就是丰富数据内容的问题,有了完整的大批量的数据集,微调后的模型才更有意义,否则还只是一个玩具,商用价值极低。

总结

通过对模型的微调和推理的上手体验,发现了一些问题和改进的方向,虽然离钢铁侠的贾维斯智能管家还有一定距离,但这个探索让我们更深入地了解了人工智能的奥秘,并为未来的学习和探索积累了宝贵的经验。

在实践中,我们使用了 ChatGLM-6B 模型,并经历了模型的训练和推理过程。训练模型消耗了相当多的时间,但也让我们体会到了模型训练的复杂性和挑战性。虽然在推理阶段,模型生成了一些内容,但体验效果并不完美,仍需要进一步改进和优化。

这个过程让我们更加深入了解人工智能的发展和应用,对模型微调和开发有了更清晰的认识,虽然成果尚不尽如人意,但它为我们未来探索人工智能和开发个性化助手铺平了道路,相信未来我们会越来越接近实现类似贾维斯的智能助手的愿景。


写作难下笔写不好?/ 课程制作难缺灵感?/ 营销文案没吸引力?/ PPT制作耗时费力?/ 短视频脚本没创意?

基于以上写作中常见的困扰,我编写了一个《AI 写作 30 秒上手》手册,系统性讲解 AI 在写作中可以为你带来的赋能,不管你是扎根于小红书、抖音、快手、视频号、公众号,还是知乎、微博、B站,又或者是自建博客、自运营平台,都可以专栏内容中找到合适自己的AI创作技巧,快速提升自己的生产力,有了 AI 的加持,谁说一个人,不可以活的像一支队伍?

b55e2519dd3a25a8bfc58aa9e7a97bc3.png原价¥299,限时现价¥49,随着订阅量增加,后续将恢复原价销售。2fa0ee2f25d88e8f33e546105893b443.png【长按二维码识别】


公众号回复“Claude实战”,“ChatGPT实战”,“WPSAI实战”,获取相应的电子书。

—扩 展 阅 读—

正在发生或即将发生的AI大模型应用,立帖为证

ChatGPT、Claude和Bard,三足鼎立之势已成

WPS Office AI实战总结,智能化办公时代已来

你对 ChatGPT 的所有疑问,看这这一篇文章就够

猜你喜欢

转载自blog.csdn.net/hero272285642/article/details/132074112