chatglm2微调—Lora

1.使用ChatGLM-Efficient-Tuning框架

官网下载https://github.com/hiyouga/ChatGLM-Efficient-Tuning

或者国内镜像https://gitee.com/mirrors/chatglm-efficient-tuning

推荐一些写的不错的链接以及官网readme

ChatGLM2-6B微调 - 掘金 (juejin.cn)

基于 PEFT 的高效 ChatGLM2-6B 微调 - 简书 (jianshu.com)

【CHATGLM】ChatGLM2-6B--LoRA微调--(02) - 知乎 (zhihu.com)

【微调】CHATGLM2-6B LoRA 微调 - 知乎 (zhihu.com)

2.配置ChatGLM-Efficient-Tuning

cd ChatGLM-Effi-Tuning
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
 #必要可以加清华源

目前主流对大模型进行微调方法有三种:Freeze方法、P-Tuning方法和Lora方法

 LoRA: 在大型语言模型上对指定参数(权重矩阵)并行增加额外的低秩矩阵,并在模型训练过程中,仅训练额外增加的并行低秩矩阵的参数,冻结其他参数。 当“秩值”远小于原始参数维度时,新增的低秩矩阵参数量也就很小。在下游任务tuning时,仅须训练很小的参数,但能获取较好的表现结果。

3.Lora微调训练

推荐使用项目下example/train_sft.sh

网络上复制的一直报错export_model.py: error: the following arguments are required: --output_dir.明明指定了输出路径,甚至放在根目录或者绝对路径还报错,直至看到项目下example/train_sft.sh文件发现复制命令的有些换行/,正常是黄色,这样可能导致换行失效了。不知道为什么?

所以还是用example/train_sft.sh

可设置的主要参数包括:

  • dataset, 分词后的数据集,即在 data/ 地址下的文件夹名称
  • lora_rank, 设置 LoRA 的秩,推荐为4或8,默认8
  • per_device_train_batch_size, 每块 GPU 上的 batch size,显存不大尽量1-2
  • gradient_accumulation_steps, 梯度累加,可以在不提升显存占用的情况下增大 batch size
  • save_steps, 多少步保存一次
  • save_total_limit, 保存多少个checkpoint
  • learning_rate, 学习率
  • output_dir, 模型文件保存地址

训练过程

4.Lora模型评估预测

评估:

CUDA_VISIBLE_DEVICES=0 python ../src/train_bash.py \
    --stage sft \
    --do_eval \
    --model_name_or_path /home/xx/ChatGLM2-6B/model \
    --dataset alpaca_gpt4_zh \
    --dataset_dir ../data \
    --finetuning_type lora \
    --checkpoint_dir /home/xx/ChatGLM-Efficient-Tuning/output/lora_ckp \
    --output_dir /home/xx/ChatGLM-Efficient-Tuning/eval/lora \
    --overwrite_cache \
    --per_device_eval_batch_size 8 \
    --max_samples 50 \
    --predict_with_generate

预测:

CUDA_VISIBLE_DEVICES=0 python ../src/train_bash.py \
    --stage sft \
    --do_predict \
    --model_name_or_path /home/lenovo/ChatGLM2-6B/model \
    --dataset alpaca_gpt4_zh \
    --dataset_dir ../data \
    --finetuning_type lora \
    --checkpoint_dir /home/lenovo/ChatGLM-Efficient-Tuning/output/lora_ckp \
    --output_dir /home/lenovo/ChatGLM-Efficient-Tuning/eval/lora \
    --overwrite_cache \
    --per_device_eval_batch_size 8 \
    --max_samples 50 \
    --predict_with_generate

5.Lora模型合并及使用

(1)模型合并

CUDA_VISIBLE_DEVICES=0 python ../src/export_model.py  \
    --model_name_or_path /home/xx/ChatGLM2-6B/model \
    --finetuning_type lora \
    --dataset_dir ../data \
    --checkpoint_dir /home/xx/ChatGLM-Efficient-Tuning/output/lora_ckp \
    --output_dir /home/xx/ChatGLM-Efficient-Tuning/output/lora_combine_model \

(2)加载并进行推理(有点问题待解决)

把训练的Lora模型打包带走,假设文件夹为 model/chatglm2_lora, 其中(至少)包含 adapter_model.bin 和 adapter_config.json 两个文件,加载及推理代码如下:

from peft import PeftModel
from transformers import AutoTokenizer, AutoModel
import torch

device = torch.device(1)
# 加载原始 LLM
model_path = "THUDM/chatglm-6b"
model = AutoModel.from_pretrained(model_path, trust_remote_code=True).half().to(device)
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model.chat(tokenizer, "你好", history=[])


# 给原始 LLM 安装上你的 LoRA tool
model = PeftModel.from_pretrained(model, "model/chatglm2_lora").half()
model.chat(tokenizer, "你好", history=[])
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.项目代码均经过功能验证ok,确保稳定可靠运行。欢迎下载体验!下载完使用问题请私信沟通。 2.主要针对各个计算机相关专业,包括计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师、企业员工。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时沟通。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈! 【资源说明】 基于LoRAChatGLM进行微调实验python源码+训练好的模型+项目说明.zip 使用LoRAChatGLM进行微调。整体的结构非常简单,构造好相应格式的数据后就可以开始训练。 训练好的实体识别LoRA权重已经位于checkpoint下。 # 依赖 linux操作系统为Ubantu,GPU为A40-48G显存。 ```python mpi4py transformers==4.28.1 peft==0.3.0 icetk deepspeed==0.9.2 accelerate cpm_kernels sentencepiece==0.1.99 peft=0.3.0 torch=2.0.0 ``` # 说明 ## 目录结构 ```python --checkpoint:保存模型 ----msra:数据集名称 --------train_deepspeed ------------adapter_model ----------------adapter_config.json ----------------adapter_model.bin ----------------train_args.json --------train_trainer ------------adapter_model ----------------adapter_config.json ----------------adapter_model.bin ----------------train_args.json --model_hub:预训练模型 ----chatglm-6b:预训练模型位置 --data:数据 ----msra:数据集名称 --------instruct_data:指令数据 ------------dev.txt ------------train.txt --------ori_data:原始数据 --chat_ner.py:闲聊 --train_deepspeed.py:使用原生deepspeed训练 --train_trainer.py: 使用transformers的Trainer进行训练 --test.py:测试训练好的模型 --predict.py:预测 --test_chatglm_6b.py:测试原始的chatglm-6b --process.py:处理数据为instruct_data --dataset.py:加载数据为相应的格式 --deepspeed.json:deepspeed配置文件,用于trasnformers的Trainer --config_utils.py:用于用字典定义配置,并接收命令行参数 ``` chatglm-6b下面数据是这样,除权重外已经放在model_hub/chatglm-6b下: 数据格式 这里我们以命名实体识别任务为例,数据在data/msra下,其中ori_data为原始数据,instruct_data为处理后的数据,数据格式为一条一个样本,具体是: ```python {"instruct": "你现在是一个实体识别模型,你需要提取文本里面的人名、地名、机构名,如果存在结果,返回'实体_实体类型',不同实体间用\n分隔。如果没有结果,回答'没有'。", "query": "文本:因有关日寇在京掠夺文物详情,藏界较为重视,也是我们收藏北京史料中的要件之一。", "answer": "日_地名\n京_地名\n北京_地名"} ``` 可以按照自己的任务自行构建。
要对 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、付费专栏及课程。

余额充值