手把手带你实现ChatGLM2-6B的P-Tuning微调

参考文献:chatglm2ptuning

注意问题1:AttributeError: ‘Seq2SeqTrainer’ object has no attribute 'is_deepspeed_enabl
torch.distributed.elastic.multiprocessing.errors.ChildFailedError:
可能是版本太高,可以参考chatglm2的环境
在这里插入图片描述

1. ChatGLM2-6B的P-Tuning微调

ChatGLM2-6Bhttps://github.com/THUDM/ChatGLM2-6B
模型地址https://huggingface.co/THUDM/chatglm2-6b

详细步骤同:ChatGLM-6B的P-Tuning微调详细步骤及结果验证

注:ChatGLM2-6B官网给的环境P-Tuning微调报错 (python3.8.10/3.10.6 + torch 2.0.1 + transformers 4.30.2),

AttributeError: ‘Seq2SeqTrainer’ object has no attribute 'is_deepspeed_enabl
torch.distributed.elastic.multiprocessing.errors.ChildFailedError:

在这里插入图片描述

应该是transformers版本太高了,用ChatGLM-6B环境ChatGLM-6B部署教程)即可,即

Python 3.8.10
CUDA Version: 12.0
torch                2.0.1
transformers         4.27.1

   
   
  • 1
  • 2
  • 3
  • 4

2. 模型微调情况

2.1 数据集&调参

训练集:412条
验证集:83条
max_source_length:3500
max_target_length:180

问题长度:
在这里插入图片描述
在这里插入图片描述

2.2 模型训练

A100 80G 2块,占用率16%,3000轮训练时间21h
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 模型预测
from transformers import AutoConfig, AutoModel, AutoTokenizer
import torch
import os

tokenizer = AutoTokenizer.from_pretrained(“…/THUDM-model”, trust_remote_code=True)
CHECKPOINT_PATH = ‘./output/adgen-chatglm2-6b-pt-64-2e-2/checkpoint-3000’
PRE_SEQ_LEN = 64

config = AutoConfig.from_pretrained(“…/THUDM-model”, trust_remote_code=True, pre_seq_len=PRE_SEQ_LEN)
model = AutoModel.from_pretrained(“…/THUDM-model”, config=config, trust_remote_code=True).half().cuda()
prefix_state_dict = torch.load(os.path.join(CHECKPOINT_PATH, “pytorch_model.bin”))
new_prefix_state_dict = { }
for k, v in prefix_state_dict.items():
if k.startswith(“transformer.prefix_encoder.”):
new_prefix_state_dict[k[len(“transformer.prefix_encoder.”):]] = v
model.transformer.prefix_encoder.load_state_dict(new_prefix_state_dict)

#model = AutoModel.from_pretrained(CHECKPOINT_PATH, trust_remote_code=True)
model = model.eval()

response, history = model.chat(tokenizer, “你好”, history=[]

参照p-tuning readme,需注意:
(1) 注意可能需要将 pre_seq_len 改成训练时的实际值。
(2) 如果是从本地加载模型的话,需要将 THUDM/chatglm2-6b 改成本地的模型路径(注意不是checkpoint路径); CHECKPOINT_PATH路径需要修改。
(3) 报错”RuntimeError: “addmm_impl_cpu_” not implemented for ‘Half’“
需要在model = AutoModel.from_pretrained(“…/THUDM-model”, config=config, trust_remote_code=True) 后加 .half().cuda()

495条数据,无history,单轮,模型加载+预测时间3min
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: ChatGLM2-6B是一个AI模型,引用提到了对ChatGLM2-6B进行P-tuning微调的过程。微调是指在已有的预训练模型基础上,使用特定的数据集进行进一步的训练,以提高模型在特定任务上的性能。在这个例子中,ChatGLM2-6B通过本地部署和本地微调的方式被成功跑通了。具体来说,本地部署是指将模型部署到本地环境中进行使用,而本地微调是指在本地环境中使用特定的数据集对模型进行微调训练。引用中提到了在Windows系统上跑通了ChatGLM2-6B。引用则提到了进行微调时可以更换模型路径以及注意微调目前只支持单轮对话的回复。总之,ChatGLM2-6B经过微调可以在特定任务上表现更好。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [ChatGLM2-6B! 我跑通啦!本地部署+微调(windows系统)](https://blog.csdn.net/m0_54515450/article/details/131617081)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [ChatGLM2-6B、ChatGLM-6B 模型介绍及训练自己数据集实战](https://blog.csdn.net/dream_home8407/article/details/130099656)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值