Chatglm2-6b-lora&ptuning微调实践2

该文详细介绍了如何进行ChatGLM2-6B模型的LORA和PTuning微调,包括环境安装、权重下载、微调代码及指标评估。实践中提到了使用CUDA_VISIBLE_DEVICES和GPU资源,以及通过BLEU和ROUGE分数来评估模型性能。同时,文章还展示了模型预测、API服务的命令行和浏览器测试方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 . 参考教程

1.https://github.com/hiyouga/ChatGLM-Efficient-Tuning

2.https://github.com/km1994/LLMsNineStoryDemonTower/blob/main/ChatGLM2-6B/PEFT_finetune.md

2. 实践环境

autodl
小白强力推荐!

3. 微调实战

3.1 环境安装

  1. github项目代码
conda create -n py310_chat python=3.10    
source activate py310_chat 
git clone https://github.com/hiyouga/ChatGLM-Efficient-Tuning.git
cd ChatGLM-Efficient-Tuning
pip install -r requirements.txt
  1. chatglm2-6b权重下载

要使用最新的

git lfs install # 这个不能省略,我就在这里遇到了坑
git clone https://huggingface.co/THUDM/chatglm2-6b 
  1. 数据集介绍
[
  {
    "instruction": "保持健康的三个提示。",
    "input": "",
    "output": "以下是保持健康的三个提示:\n\n1. 保持身体活动。每天做适当的身体运动,如散步、跑步或游泳,能促进心血管健康,增强肌肉力量,并有助于减少体重。\n\n2. 均衡饮食。每天食用新鲜的蔬菜、水果、全谷物和脂肪含量低的蛋白质食物,避免高糖、高脂肪和加工食品,以保持健康的饮食习惯。\n\n3. 睡眠充足。睡眠对人体健康至关重要,成年人每天应保证 7-8 小时的睡眠。良好的睡眠有助于减轻压力,促进身体恢复,并提高注意力和记忆力。"
  },
  {
    "instruction": "三原色是什么?",
    "input": "",
    "output": "三原色通常指的是红色、绿色和蓝色(RGB)。它们是通过加色混合原理创建色彩的三种基础颜色。在以发光为基础的显示设备中(如电视、计算机显示器、智能手机和平板电脑显示屏), 三原色可混合产生大量色彩。其中红色和绿色可以混合生成黄色,红色和蓝色可以混合生成品红色,蓝色和绿色可以混合生成青色。当红色、绿色和蓝色按相等比例混合时,可以产生白色或灰色。\n\n此外,在印刷和绘画中,三原色指的是以颜料为基础的红、黄和蓝颜色(RYB)。这三种颜色用以通过减色混合原理来创建色彩。不过,三原色的具体定义并不唯一,不同的颜色系统可能会采用不同的三原色。"
  },
  ...
]

3.2 单gpu微调

autodl分布式微调,支持NVlink链接的,目前只有带SXM的V100和A100
这个很紧缺,而且贵。没有租到,用的是单卡的。
在这里插入图片描述
在这里插入图片描述

3.2.1 lora微调

为了方便,直接代码写进sh文件。直接 sh train_sft_6blora.sh 运行, 也方便修改。 在本地pycharm远程连接时,命令行总是报错。还是写进文件方便。

注意事项
  1. 权重路径

这里注意,指定文件夹时末尾不要加斜杆,举例 /root/autodl-tmp/ChatGLM2-6b/ 这种是错误的,末尾的6b不要在加斜杆“/”

  1. 绝对路径
    如果遇到报错,对应的模型路径用绝对路径 /root/autodl-tmp/ChatGLM2-6b

  2. 权重上传
    权重我是通过公网网盘的形式,先上传到百度网盘,然后上传到autodl的autodl-tmp目录下

1. lora微调代码
#!/bin/bash
CUDA_VISIBLE_DEVICES=0 python ./src/train_bash.py \
    --model_name_or_path /root/autodl-tmp/ChatGLM2-6b \
    --stage sft \
    --do_train \
    --dataset alpaca_gpt4_zh \
    --dataset_dir /root/ChatGLM-Efficient-Tuning/data \
    --finetuning_type lora  \
    --output_dir path_to_sft_check_p_tuning \
    --overwrite_cache \
    --per_device_train_batch_size 1 \
    --gradient_accumulation_steps 1 \
    --lr_scheduler_type cosine \
    --logging_steps 10 \
    --save_steps 1000 \
    --learning_rate 5e-5 \
    --num_train_epochs 3.0 \
    --plot_loss \
    --use_v2
 

per_device_train_batch_size 和 gradient_accumulation_steps可以根据你的gpu大小自由调整,这里我的数据分别是16 和1 是用了7.5h左右跑完

2. lora微调代码所在位置

在这里插入图片描述

3.终端运行展示
# autodl 终端运行示例
root@autodl-container-bac311933c-e79d5ee2:~/ChatGLM-Efficient-Tuning# sh train_sft_6b

结果保存在对应的目录:
在这里插入图片描述

3.2.2 ptuning 微调

#!/bin/bash

CUDA_VISIBLE_DEVICES=0 python ./src/train_bash.py \
    --model_name_or_path /root/autodl-tmp/ChatGLM2-6b \
    --stage sft \
    --do_train \
    --dataset alpaca_gpt4_zh \
    --dataset_dir /root/ChatGLM-Efficient-Tuning/data \
    --finetuning_type p_tuning  \
    --output_dir path_to_sft_check_p_tuning \
    --overwrite_cache \
    --per_device_train_batch_size 16 \ # 根据显存大小自由调整
    --gradient_accumulation_steps 4 \  # 根据显存大小自由调整
    --lr_scheduler_type cosine \
    --logging_steps 10 \
    --save_steps 1000 \
    --learning_rate 5e-5 \
    --num_train_epochs 3.0 \
    --plot_loss \
    --use_v2 \
    --fp16
    

指标评估(BLEU分数和汉语ROUGE分数)

checkpoint_dir 路径要写对,相对路径报错,就用绝对路径

#!/bin/bash
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \
    --stage sft \
    --model_name_or_path /root/autodl-tmp/ChatGLM2-6b \
    --do_eval \
    --dataset alpaca_gpt4_zh \
    --checkpoint_dir ./path_to_sft_checkpoint/checkpoint-2000 \
    --output_dir path_to_eval_result \
    --per_device_eval_batch_size 8 \
    --max_samples 50 \
    --predict_with_generate \
    --use_v2

模型预测

#!/bin/bash
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \
    --stage sft \
    --model_name_or_path /root/autodl-tmp/ChatGLM2-6b \
    --do_predict \
    --dataset alpaca_gpt4_zh \
    --checkpoint_dir ./path_to_sft_checkpoint/checkpoint-1000 \
    --output_dir path_to_predict_result \
    --per_device_eval_batch_size 8 \
    --max_samples 50 \
    --predict_with_generate \
    --use_v2

API 服务

#!/bin/bash
CUDA_VISIBLE_DEVICES=0 python src/api_demo.py \
    --model_name_or_path /root/autodl-tmp/ChatGLM2-6b \
    --checkpoint_dir ./path_to_sft_checkpoint/checkpoint-2000 \
    --use_v2

命令行测试

#!/bin/bash
CUDA_VISIBLE_DEVICES=0 python src/cli_demo.py \
    --model_name_or_path /root/autodl-tmp/ChatGLM2-6b \
    --checkpoint_dir ./path_to_sft_checkpoint/checkpoint-2000 \
    --use_v2

浏览器测试

python src/web_demo.py \
    --model_name_or_path path_to_your_chatglm_model \
    --finetuning_type lora \
    --checkpoint_dir path_to_checkpoint

注意事项

这里autodl要求指定端口6006,位置在 控制台→自定义服务 ,点击就能打开。
在这里插入图片描述
在这里插入图片描述
点击访问,出现如下界面,在base model里填写模型绝对路径:

在这里插入图片描述

在这里插入图片描述

导出微调模型

#!/bin/bash
python src/export_model.py \
    --model_name_or_path /root/autodl-tmp/ChatGLM2-6b \
    --checkpoint_dir ./path_to_sft_checkpoint/checkpoint-2000 \
    --output_dir /root/autodl-tmp/path_to_export \
    --use_v2

注意事项

上面导出模型时,如果用–output_dir ./path_to_export 可能会报错,因为这样是导出到系统盘,系统盘autodl默认是25G大小。 /root/autodl-tmp/path_to_export是导出到数据盘,默认是50G大小

这里查看说明autodl各个盘的说明 https://www.autodl.com/docs/env/

要对 chatglm2-6b 进行微调以适应 LORA(低功耗广域网)环境,可以按照以下步骤进行操作: 1. 首先,执行 chatglm2_6b_lora.py 脚本来启动微调过程。可以使用命令行输入以下命令:`python chatglm2_6b_lora.py`。 2. 接下来,修改配置文件中的几个值。可以使用以下命令在配置文件中替换一些字符串: ``` 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 ``` 这些命令将修改配置文件中的一些路径,以使其适应 LORA 微调环境。 3. 最后,调用导出的模型进行微调。具体操作可以参考 ChatGLM-Efficient-Tuning 项目的 README 文件,首先克隆该项目的仓库,然后创建并激活一个新的 Python 环境,安装所需的依赖,并根据提供的数据集说明进行微调。可以使用以下命令执行这一步骤: ``` 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 ``` 然后,根据项目提供的数据集说明进行微调。 通过按照上述步骤进行操作,您可以对 chatglm2-6b 进行 LORA 微调。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [修改 ChatGLM2-6B 自我认知的 Lora 微调教程](https://blog.csdn.net/engchina/article/details/131492403)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值