chatglm基于ptuning微调训练

  作为一名技术爱好者,我一直怀揣着一个愿景:能够打造一个属于自己的个人助手,类似于漫威钢铁侠中智能管家贾维斯的存在。以前,人工智能并未引起广泛关注,我只是在想象和幻想着这样的情景。但现在,随着开源模型的出现,自我训练的机会到来,我终于拥有了实现这一愿景的新思路。

  现在,我已经具备了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

使用自己的数据集

刚开始训练数据,为了保证一次性成功,我们可以在公网上下载样例数据

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

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

训练

  • 修改 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 精度加载。

  在默认配置 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个的多小时。开始训练效果如图: 

推理

  • 修改 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 是训练模型消耗的时间

    img

效果

训练,推理完成后,可以运行训练的模型,查看效果:

  • 修改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,得到以下结果:

  • 打开浏览器,可以看到如下效果

  • 开始对话 ,

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

    得到结果如图:

    从结果来看,效果不是很佳,但至少训练出了内容,剩下的就是丰富数据内容的问题。

总结

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

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

  这个过程让我们更加深入了解人工智能的发展和应用,对模型微调和开发有了更清晰的认识。虽然距离贾维斯这种智能管家还有一段路程,但我们对未来的追求和学习信心满满。我们相信,在不久的将来,通过不断努力和改进,我们会越来越接近实现自己梦想的目标。

  总结而言,这次尝试是一次有意义的实践,让我们更加熟悉了人工智能领域的技术和方法。虽然成果尚不尽如人意,但它为我们未来探索人工智能和开发个性化助手铺平了道路。我们会继续坚持学习和改进,相信未来我们会越来越接近实现类似贾维斯的智能助手的远景。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值