本站将记录访问者的IP及设备信息,请访问者遵守中华人民共和国相关法律法规,严禁发布任何有关政治、军事等言论; 严禁发布涉赌、涉毒、涉诈等违法内容。一经发现将立刻向有关部门检举。 举报或使用反馈请点击页面右下角蓝色按钮,添加微信或发送邮件至Bradley.xsq@gmail.com。感谢您访问本网站 www.limeblog.cn

ChatGLM2-6B云微调教程!最全!最细!

Author: lime | Published: 2024-05-01 | Updated: Sept. 17, 2024, 4:29 p.m.
Views: 205

(AutoDL云平台部署,含报错解析)

ChatGLM2-6B云微调教程!最全!最细!
(AutoDL云平台部署,含报错解析)
 
一、教程综述
本教程使用学术加速,无需科学上网。
1.AutoDL 算力市场
2.AutoDL 帮助文档
3.Github/THUDM/ChatGLM2-6B 代码仓库
4.ChatGLM2-6B-PT代码仓库
5.HuggingFace/chatglm2-6b 权重文件
6.ChatGLM-4 对话模型
 
二、创建实例
1.租借实例(如果不会点击此链接(我的文章))
 
 
2.复制学术加速代码
 
source /etc/network_turbo
1
 
3.设置学术加速,进入数据盘,下载代码仓库
 
source /etc/network_turbo
cd autodl-tmp
git clone https://github.com/THUDM/ChatGLM2-6B.git
1
2
3
 
4.下载ChatGLM2-6B模型
(1)安装git-lfs
 
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
sudo apt-get install git-lfs
git lfs install
出现【Git LFS initialized.】即安装完成
1
2
3
4
 
(2)下载权重文件
 
git clone https://huggingface.co/THUDM/chatglm2-6b
1
 
(3)节目效果,忘记cd进入ChatGLM2-6B目录了,手动把chatglm2-6b拖进来就可以
 
 
三、创建环境
1.查看与安装
 
conda env list  #查看列表
conda create -n pytorch_2.0 python=3.8    #创建环境,python3.8
1
2
 
2.激活环境
 
conda activate pytorch_2.0
1
 
3.安装依赖
(1)ChatGLM2-6B依赖
 
cd ChatGLM2-6B
pip install -r requirements.txt
1
2
 
(2)ptuning依赖
 
cd ptuning
pip install rouge_chinese nltk jieba datasets
1
2
 
(3)依赖部件调整***
安装的Gradio版本过高,后期会有报错,故这里提前进行版本调整
 
pip uninstall gradio
pip install gradio==3.50.0
1
2
'Textbox' object has no attribute 'style'  #报错代码
1
 
 
四、构建数据集
1.在ptuning目录下 创建# AdvertiseGen、#output 文件夹
 
2.构建数据集
为简化运行时间,采用CSDN的博主制作的简易数据。
 
[
    {
        "content": "你好",
        "summary": "你好,我是chatpet!一个花活山的聊天宠物!"
    },
    {
        "content": "你是谁",
        "summary": "我是chatpet,一个由花活山的程序猿们开发出来的聊天宠物!"
    },
    {
        "content": "你的开发者是谁",
        "summary": "他们是来自花活山的程序猿们!是一帮有趣的人"
    },
{
        "content": "你叫什么",
        "summary": "我是chatpet,一个由花活山的程序猿们开发出来的聊天宠物!"
    },
{
        "content": "花活山在哪",
        "summary": "花活山是赵先生的秘密基地,他是一位不知名的赵先生"
    },
{
        "content": "介绍一下赵先生",
        "summary": "一名有趣的灵魂,非天才型选手。同时也是一名程序猿,喜欢编程,喜欢研究新奇的东西,喜欢研究一些有趣的东西。"
    }
]
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
3.添加数据集
将2中的json数据上传至AdvertiseGen文件夹,dev与train为同一数据
 
 
五、修改微调参数
1.打开ptuning目录下train.sh文件,按教程可直接复制
 
PRE_SEQ_LEN=128
LR=2e-2
NUM_GPUS=1
 
python main.py \
    --do_train \
    --train_file /root/autodl-tmp/ChatGLM2-6B/ptuning/AdvertiseGen/train.json \
    --validation_file /root/autodl-tmp/ChatGLM2-6B/ptuning/AdvertiseGen/dev.json \
    --preprocessing_num_workers 10 \
    --prompt_column content \
    --response_column summary \
    --overwrite_cache \
    --model_name_or_path /root/autodl-tmp/ChatGLM2-6B/chatglm2-6b \
    --output_dir output/adgen-chatglm2-6b-pt-$PRE_SEQ_LEN-$LR \
    --overwrite_output_dir \
    --max_source_length 64 \
    --max_target_length 128 \
    --per_device_train_batch_size 1 \
    --per_device_eval_batch_size 1 \
    --gradient_accumulation_steps 16 \
    --predict_with_generate \
    --max_steps 128 \
    --logging_steps 10 \
    --save_steps 128 \
    --learning_rate $LR \
    --pre_seq_len $PRE_SEQ_LEN \
    --quantization_bit 4
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2.以下是各个参数的详解
 
PRE_SEQ_LEN=128: 定义了一个名为PRE_SEQ_LEN的变量,并将其设置为128。这个变量的作用在后续的代码中会用到。
 
LR=2e-2: 定义了一个名为LR的变量,并将其设置为2e-2,即0.02。这个变量表示学习率,在后续的代码中会用到。
 
–train_file ../AdvertiseGen/train.json : 指定训练数据文件的路径和文件名为"AdvertiseGen/train.json"。
 
–validation_file ../AdvertiseGen/verify.json : 指定验证数据文件的路径和文件名为"AdvertiseGen/verify.json"。
 
–prompt_column content : 指定输入数据中作为提示的列名为"content"。
 
–response_column summary : 指定输入数据中作为响应的列名为"summary"。
 
–overwrite_cache : 一个命令行参数,指示在缓存存在的情况下覆盖缓存。
 
–model_name_or_path  /root/autodl-tmp/ChatGLM2-6B/chatglm2-6b: 指定使用的模型的名称或路径为"/root/autodl-tmp/ChatGLM2-6B/chatglm2-6b"。
 
–output_dir output/adgen-chatglm2-6b-pt-$PRE_SEQ_LEN-$LR : 指定输出目录的路径和名称为"output/adgen-chatglm-6b-pt- P R E S E Q L E N − PRE_SEQ_LEN- PRES​EQL​EN−LR"。这是训练结果和日志的保存位置。
 
–overwrite_output_dir : 一个命令行参数,指示在输出目录存在的情况下覆盖输出目录。
 
–max_source_length 512 : 指定输入序列的最大长度为512。
 
–max_target_length 512 : 指定输出序列的最大长度为512。
 
–per_device_train_batch_size 1 : 指定每个训练设备的训练批次大小为1。
 
–per_device_eval_batch_size 1 : 指定每个评估设备的评估批次大小为1。
 
–gradient_accumulation_steps 16 : 指定梯度累积的步数为16。在每个更新步骤之前,将计算并累积一定数量的梯度。
 
–predict_with_generate : 一个命令行参数,指示在生成模型的预测时使用生成模式。
 
–max_steps 128 : 指定训练的最大步数为128。
 
–logging_steps 4 : 指定每隔4个步骤记录一次日志。
 
–save_steps 128 : 指定每隔128个步骤保存一次模型。
 
–learning_rate $LR : 指定学习率为之前定义的LR变量的值。
 
–pre_seq_len $PRE_SEQ_LEN : 指定预设序列长度为之前定义的PRE_SEQ_LEN变量的值。
 
–quantization_bit 4 : 指定量化位数。这个参数可能是与模型相关的特定设置(16,GPU可能出现内存不够现象)
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
六、训练模型
1.对上传的train.json进行训练
需要在ptuning目录下
 
bash train.sh
1
 
2.如果参数调整没有问题,出现这个结果表示训练完成。
这里不考虑丢失与学习率,以跑完整个模型为目的
 
同时output文件夹内出现checkpoint文件
 
 
七、验证模型
1.调整参数,如果按照步骤可直接复制
(1)ptuning/web_demo.sh
 
PRE_SEQ_LEN=128
 
python web_demo.py \
    --model_name_or_path /root/autodl-tmp/ChatGLM2-6B/chatglm2-6b \
    --ptuning_checkpoint /root/autodl-tmp/ChatGLM2-6B/ptuning/output/adgen-chatglm2-6b-pt-128-2e-2/checkpoint-128 \
    --pre_seq_len $PRE_SEQ_LEN
1
2
3
4
5
6
(2)ptuning/web_demo.py-line162:
 
demo.queue().launch(share=True, inbrowser=True)
1
2.运行web_demo.sh
如果出现公网链接,点击访问即可,微调流程部署流程结束!
 
bash web_demo.sh
1
 
 
 
八、报错类型
1.‘Textbox‘ object has no attribute ‘style‘
 
Gradio版本过高,在创建环境时已让大家降版本了
 
2.GPU不足
 
torch.cuda.OutOfMemoryError:........
查看Autodl控制台,所在区域GPU是否已分配耗尽,如果耗尽则等待,没有耗尽则关闭此终端,并重新开一个终端,并conda activate环境。
 
3.运行bash web_demo.sh 只返回本地链接,没有公网链接
 
7.1.2已经给出调整办法,如果依旧没有,则重启整个实例,记得激活pytorch_2.0的虚拟环境
 
4.部署过程中运行的各种错误欢迎打在评论区!!!,我这7天遇到了太多的Error了
 
九、小结
我是在读研究生,研究方向是人工智能对话机器人,目前处于放养状态,所以自己一个人在研究这个ChatGLM模型。
在1月中旬,我通过教程,将ChatGLM-6B成功部署并试用了一下。也好奇后续如何进行微调,便从1月底一直搜寻教程,很庆幸,在2月5日晚,成功部署了一遍微调过程(没有使用大型数据)。
感谢CSDN-Harvey-J、CSDN-我不会深度学习、Bilibili-
Rocky77Road博主,GLM-4交流群82的YY老哥。
参考文献:
————————————————
 
                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/weixin_44881936/article/details/136057445