ChatGLM-6B微调实践与问题汇总(fine-tune+p-tuning+知识遗忘解决尝试)

本文分享了ChatGLM-6B模型在ADGEN数据集上的全量微调与p-tuning实践,解决了知识遗忘问题,并优化了对话功能。

在这里插入图片描述

ChatGLM-6B微调实践与问题汇总(fine-tune+p-tuning+知识遗忘解决尝试)

1.介绍

ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。在模型量化技术的加持下,INT4 量化级别下显存占用不到6G,满足一些消费级显卡部署的需要。

https://github.com/THUDM/ChatGLM-6B.git

本文只涉及对官方仓库中模型参数全量fine-tune和p-tuning方案的复现,以及对p-tuning训练后,模型对旧知识遗忘现象的优化。

训练后,丧失了原有的对话功能的优化可直接调到第5节

2.软硬件环境

硬件平台

cpu:Inter Xeon Gold 6130 x2

GPU:Tesla V100 16G x8

预训练模型

chatglm-6B

数据集

adgen

软件环境

deepspeed==0.9.2	
protobuf	
transformers==4.28.1(不建议用requirements中的4.27.1版本,不要问我怎么知道的)	
cpm_kernels	
torch>=1.10	
gradio	
mdtex2html	
sentencepiece	
accelerate	
rouge_chinese 	
nltk 	
jieba 	
datasets
3.模型与数据集下载

模型

https://huggingface.co/THUDM/chatglm-6b

数据集

下载处理好的 ADGEN 数据集 https://cloud.tsinghua.edu.cn/f/b3f119a008264b1cabd1/?dl=1,将解压后备用。

4.训练

训练操作过程参考https://github.com/THUDM/ChatGLM-6B/blob/main/ptuning/README.md

4.1 fine-tune

脚本:

ds_train_finetune.sh

LR=1e-4

MASTER_PORT=$(shuf -n 1 -i 10000-65535)

deepspeed --num_gpus=4 --master_port $MASTER_PORT main.py \
    --deepspeed deepspeed.json \
    --do_train \
    --train_file AdvertiseGen/train.json \
    --test_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-ft-$LR
### 对 ChatGLM-6B` 进行微调的操作者来说,具体实现方法依赖于所选的技术路径。一种常见的做法是在特定的任务上应用 P-Tuning v2 技术来调整模型参数。 #### 修改训练脚本中的模型路径 当准备从本地加载模型而非远程仓库时,在训练脚本 `train.sh` 文件内需修改默认的模型下载地址为本地存储位置: ```bash model_name_or_path=/path/to/local/model/directory ``` 这一步骤确保了后续操作可以直接利用已有的预训练权重文件而无需再次网络获取[^1]。 #### 使用 Hugging Face 库加载并初始化基础模型 通过 Python 脚本可以更灵活地控制整个过程。下面是一个简单的例子展示如何使用 `transformers` 库加载指定版本的基础模型实例,并设置必要的配置选项以便支持自定义逻辑执行: ```python from transformers import AutoModelForCausalLM, AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True) model = AutoModelForCausalLM.from_pretrained( "THUDM/chatglm-6b", config=model_config, trust_remote_code=True ) ``` 这段代码片段展示了如何基于给定名称或路径加载一个预训练的语言模型及其对应的分词器工具集。特别注意这里的 `trust_remote_code=True` 参数允许程序安全地解析来自外部源码包内的特殊组件[^3]。 #### 准备用于微调的数据集 针对具体的下游任务(比如医疗领域问答),收集整理高质量标注样本至关重要。这些数据应该被转换成适合输入到上述构建好的框架结构的形式——通常是经过编码处理后的 token ID 数组列表加上相应的标签信息。此部分工作可能涉及文本清理、格式标准化以及特征工程等多个环节[^2]。 #### 实施微调流程 完成以上准备工作之后就可以正式进入实际的参数更新阶段了。通常情况下会采用迁移学习策略,即冻结大部分原有层不变只优化新增加的部分;或者是全量Fine-tune模式下适当降低学习率以防止破坏已经学到的知识表示。此外还可以考虑引入正则化手段如Dropout等措施帮助缓解过拟合风险。 最后提醒一点就是一定要保存好每次迭代结束后的最佳状态点作为最终成果输出!
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值