修改 ChatGLM2-6B 自我认知的 Lora 微调教程

  • 0. 背景
  • 1. 部署微调项目
  • 2. 数据集说明
  • 3. 模型监督微调(Lora)
  • 4. 模型效果测试
  • 5. 导出微调模型
  • 6. 调用导出的模型

0. 背景

现在开始学习微调,主要学习 Lora 微调。

这次尝试了修改 ChatGLM2-6B 自我认知,文章中记录了整个微调过程。

1. 部署微调项目

git clone https://github.com/hiyouga/ChatGLM-Efficient-Tuning.git
conda create -n chatglm_etuning python=3.10
conda activate chatglm_etuning
cd ChatGLM-Efficient-Tuning
pip install -r requirements.txt

2. 数据集说明

我们使用 self_cognition 数据集,该数据集包含了 18 条关于模型自我认知的数据,我们的目标是修改模型自身的知识,使模型给出我们希望的答复。

首先,对数据做以下修改,

sed -i 's/ChatGLM-6B/ChatGLM2-6B/g' data/self_cognition.json# 提示:您可以将 [NAME] 换成您自己的名字,从而让模型回答它的创造者是您。
sed -i 's/\[NAME\]/AI小镇/g' data/self_cognition.json

其次,查看 data/self_cognition.json,这里我们列出两条示例。

[{"instruction": "你身份是什么?","input": "","output": "我叫ChatGLM2-6B,是一个由AI小镇于2023年独立训练和开发的人工智能助手。我的主要目标是协助用户解决问题和满足他们的需求。"},{"instruction": "你的身份信息能告诉我吗?","input": "","output": "当然可以,我是ChatGLM2-6B,一个由AI小镇创建的人工智能助手。我在2023年研发完成,旨在为用户提供有针对性的回答和帮助。"}
]

3. 模型监督微调(Lora)

运行以下命令在单个 GPU 上进行模型监督微调。我们使用 self_cognition 数据集,采用 lora 微调方法,微调后的模型保存在 cognition 文件夹中。为了保证模型微调成功,我们采用 0.001 的学习率,在数据集上训练 10 个 epoch。

CUDA_VISIBLE_DEVICES=0 python src/train_sft.py \--do_train \--use_v2 \--dataset self_cognition \--finetuning_type lora \--lora_rank 32 \--output_dir cognition \--overwrite_cache \--per_device_train_batch_size 2 \--gradient_accumulation_steps 2 \--lr_scheduler_type cosine \--logging_steps 10 \--save_steps 1000 \--warmup_steps 0 \--learning_rate 1e-3 \--num_train_epochs 10.0 \--fp16

运行结果日志如下,

4. 模型效果测试

运行以下命令在单个 GPU 上测试模型效果,它会加载 cognition 文件夹内保存的微调模型权重,并合并进原版 ChatGLM2-6B 模型的参数权重中,同时启动流式交互窗口。

CUDA_VISIBLE_DEVICES=0 \
python src/cli_demo.py \--use_v2 \--checkpoint_dir cognition

向微调后的 ChatGLM2-6B 模型问一些自我认知问题,我们可以发现它能够给出我们期望的回答。

同时,我们还测试了两个额外的问题,验证结果说明模型的原本知识并没有被严重破坏。

5. 导出微调模型

如果要将微调后的模型部署在您的项目框架中,请使用 export_model.py 将微调后的权重合并到 ChatGLM2-6B 模型中并导出完整模型。(提示:output_dir 不要使用大写字母)

python src/export_model.py \--use_v2 \--checkpoint_dir cognition \--output_dir ./chatglm2_6b_lora

然后访问 https://huggingface.co/THUDM/chatglm2-6b/tree/main,将 configuration_chatglm.pymodeling_chatglm.pyquantization.pytokenization_chatglm.py 4个文件下载到 ./chatglm2_6b_lora 目录下面。

然后执行下面命令,修改几个配置值。

sed -i 's/THUDM\/chatglm2-6b--//g' ./chatglm2_6b_lora/config.json
sed -i 's/THUDM\/chatglm2-6b/\.\.\/chatglm2_6b_lora/g' ./chatglm2_6b_lora/config.json
sed -i 's/THUDM\/chatglm2-6b--//g' ./chatglm2_6b_lora/tokenizer_config.json
sed -i 's/THUDM\/ChatGLM2-6B/\.\.\/chatglm2_6b_lora/g' ./chatglm2_6b_lora/modeling_chatglm.py
sed -i 's/THUDM\/chatglm2-6b/\.\.\/chatglm2_6b_lora/g' ./chatglm2_6b_lora/modeling_chatglm.py

6. 调用导出的模型

创建 chatglm2_6b_lora.py,

cat << EOF > chatglm2_6b_lora.py
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained('./chatglm2_6b_lora', trust_remote_code=True)
model = AutoModel.from_pretrained('./chatglm2_6b_lora', trust_remote_code=True).half().cuda()
response, history = model.chat(tokenizer, "你是谁?", history=[])
print(response)
EOF

执行 chatglm2_6b_lora.py,

python chatglm2_6b_lora.py

输出结果如下,


完结!

修改 ChatGLM2-6B 自我认知的 Lora 微调教程相关推荐

  1. java年度总结自我认知,java自我评价

    java简历自我评价(共6篇)JAVA工程师个人简历JAVA高级工程师 个人简历模板)实找SEO工作就上才智尚招聘网找SEO工作就上才智尚招聘网找SEO工作就上才智尚招聘网简历自我评价写法及范文今天我 ...

  2. 【LLM】金融大模型场景和大模型Lora微调实战

    文章目录 一.金融大模型背景 二.大模型的研究问题 三.大模型技术路线 四.LLaMA家族模型 五.Lora模型微调的原理 六.基于mt0-large进行Lora微调实战 七.对chatglm2进行l ...

  3. 开玩笑呢?学习KMP算法能改变自我认知? | 原力计划

    作者 | 落阳学编程 责编 | 王晓曼 出品 | CSDN 博客 前言 近日被朋友问到了字符串匹配算法,让我想起了大二上学期在一次校级编程竞赛中我碰到同样的问题时,为自己写出了暴力匹配算法而沾沾自喜的 ...

  4. 东财《自我认知与职业生涯规划》单元作业一二三

    东财<自我认知与职业生涯规划>单元作业一 试卷总分:100 得分:100 一.单选题 (共 12 道试题,共 60 分) 1.以下与霍兰德职业兴趣类型中的"实际型(R)" ...

  5. 计算机专业自我认知swot,计算机专业自我认知.doc

    计算机专业自我认知 下文是关于计算机专业自我认知相关内容,希望对你有一定的帮助: 计算机专业自我认知[一]:计算机专业职业生涯规划书 计算机专业职业生涯规划书 座右铭:临渊羡渔,不如退而结网! 姓名: ...

  6. 自我认知测试软件,自我认知-MBTI测试

    最近一直在向内看多了解自己,于是就做了做的MBTI线上测试,结果是我的MBTI性格类型是INTJ 专家型--追求能力与独立. 在实现自己的想法和达成自己的目标时有创新的想法和非凡的动力.能很快洞察到外 ...

  7. 职业自我认知的测试软件,职业生涯规划自我认知测试.docx

    职业生涯规划之 ----自我认知篇 自我认知第一步:了解自己 在做测试之前,请你先审视一下自己,看看你是否真正了解自己,之后再做测试再看答案, 你会发现不一样的自己, 也会更加了解自己. 愿本次测试对 ...

  8. 职业自我认知的测试软件,职业生涯规划___自我认知测试.pdf

    职业生涯规划之 职业生涯规划之 职职业业生生涯涯规规划划之之 自我认知篇 自我认知篇 自自我我认认知知篇篇 商学院08级 商学院08级 商商学学院院0088级级 2009-12-14. 2009-12 ...

  9. 一枚研发狗的自我认知历程

    当我们从学校走向社会,由学生转变为职场人士,这对每个人来说都是一个新的起点,我们都应该变得更加成熟,更加稳重.从大学到现在,几年的时间对我来说,是一个价值观,世界观更加清晰地过程,也是我更加清楚自己到 ...

最新文章

  1. 通信网络设计(最小生成树+图的联通)
  2. 智源青年科学家代季峰:用“数据+知识”解决图像理解的四大挑战
  3. Ajax异步请求登录
  4. DCMTK:创建,编写和读取细分对象
  5. python3.6.3安装过程_python3.6.3安装图文教程 TensorFlow安装配置方法
  6. Hive创表异常,FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask.
  7. python日历模块_Python日历模块| setfirstweekday()方法与示例
  8. Perl 第三章 操作符
  9. OpenMV(三)--实时获取摄像头图片
  10. java 登陆实例,2021-03-19 java案例:用户登录
  11. 7 win 卸载node_如何从windows中完全删除node.js_windows彻底卸载node教程
  12. python 读取excel失败 可以转换成csv文件
  13. cp、mv、rm、find、mkdir
  14. IDEA Maven Mybatis generator 自动生成代码
  15. gcc 源码下载地址
  16. 分析开关电源中电容和电感的几条原则
  17. hdu5510Bazinga
  18. 小白入门---HTML5音乐播放器
  19. 2021年全国在映影院数量、观影人次及平均票价走势分析[图]
  20. ubuntu安装英伟达驱动

热门文章

  1. 自然语言交流系统 phxnet团队 创新实训 项目博客 (十三)
  2. 不使用Vivado给FPGA下载程序(实测MacOS、Ubuntu有效)
  3. 跑DRC 验证出现specify layout cell报错
  4. 关于SoftReference的使用
  5. 公钥,私钥概念以及RSA概念总结
  6. 开发Google眼镜的app
  7. jtag接口_嵌入式调试里的接口标准JTAG
  8. 三星智能手表s3和s4参数对比 三星智能手表s3和s4区别哪个好
  9. SVN配置http和https访问
  10. 香港富士通:借助8Manage打通数字化管理的“奇经八脉”