大模型微调实战项目总结(非常详细)零基础入门到精通,收藏这一篇就够了

363 篇文章 0 订阅
53 篇文章 0 订阅

写在前面

不知不觉之间,距开源ChatGLM-Finetuning项目已经过去了8个月。大模型也在飞速的发展,开源社区也是越来越活跃,开源模型越来越多。

中间更新过一次,将代码重构让大家更容易理解,本次更新主要增加ChatGLM3模型和增加模型预测代码。

Github: https://github.com/liucongg/ChatGLM-Finetuning

为什么要再次更新呢?

  • 支持ChatGLM3模型是为了让这个项目有一个更好的延续,如果后面有ChatGLM4的话,还会继续更新。

  • 细心的朋友应该可以发现本项目的训练数据构造代码,是参考每个模型在chat部分数据构造进行编写的。所以用本项目训练完的模型,预测阶段用model.chat即可。这也是为什么上一次更新没有提供predict代码的原因。

本项目的宗旨,还是带领大家入门学习,带领大家用不同方式的微调(Freeze方法、Lora方法、P-Tuning方法和全量参数)来进行大模型微调实验,欢迎大家Star。

PS:本项目应该不会增加其他系列模型了,如果做的话也是重开一个新的项目,后面争取在该项目上补充增加一些注释内容,帮助更多的初学者或者非专业人员理解代码吧。

项目介绍

本项目主要针对ChatGLM、ChatGLM2和ChatGLM3模型进行不同方式的微调(Freeze方法、Lora方法、P-Tuning方法、全量参数等),并对比大模型在不同微调方法上的效果,主要针对信息抽取任务、生成任务、分类任务等。

本项目支持单卡训练&多卡训练,由于采用单指令集方式微调,模型微调之后并没有出现严重的灾难性遗忘。

由于官方代码和模型一直在更新,目前ChatGLM1和2的代码和模型的为20230806版本(注意如果发现代码运行有误,可将ChatGLM相关源码替换文件中的py文件,因为可能你下的模型版本与本项目代码版本不一致),ChatGLM3是版本20231212。

PS:没有用Trainer(虽然Trainer代码简单,但不易修改,大模型时代算法工程师本就成为了数据工程师,因此更需了解训练流程)

更新简介

  • update-2023.12.12 增加ChatGLM3代码支持,通过model_type完成模型切换,并增加推理代码。

  • update-2023.08.06 代码和模型已经更新到最新,支持单卡&多卡训练,支持ChatGLM2模型训练、支持全量参数训练,所有代码进行了结构增加可读性。

  • update-2023.06.12 增加流水线并行训练方法,请看v0.1 Tag

  • update-2023.04.18 增加文本生成任务评测,请看v0.1 Tag

  • update-2023.04.05 增加信息抽取任务评测,请看v0.1 Tag

微调方法

Freeze方法-ChatGLM3单卡训练

CUDA_VISIBLE_DEVICES=0 deepspeed --master_port 520 train.py \  
                --train_path data/spo_0.json \  
                --model_name_or_path ChatGLM3-6B/ \  
                --per_device_train_batch_size 1 \  
                --max_len 1560 \  
                --max_src_len 1024 \  
                --learning_rate 1e-4 \  
                --weight_decay 0.1 \  
                --num_train_epochs 2 \  
                --gradient_accumulation_steps 4 \  
                --warmup_ratio 0.1 \  
                --mode glm3 \  
                --train_type freeze \  
                --freeze_module_name "layers.27.,layers.26.,layers.25.,layers.24." \  
                --seed 1234 \  
                --ds_file ds_zero2_no_offload.json \  
                --gradient_checkpointing \  
                --show_loss_step 10 \  
                --output_dir ./output-glm3  

Ptuning方法-ChatGLM3单卡训练

CUDA_VISIBLE_DEVICES=0 deepspeed --master_port 520 train.py \  
                --train_path data/spo_0.json \  
                --model_name_or_path ChatGLM3-6B/ \  
                --per_device_train_batch_size 1 \  
                --max_len 1560 \  
                --max_src_len 1024 \  
                --learning_rate 1e-4 \  
                --weight_decay 0.1 \  
                --num_train_epochs 2 \  
                --gradient_accumulation_steps 4 \  
                --warmup_ratio 0.1 \  
                --mode glm3 \  
                --train_type ptuning \  
                --seed 1234 \  
                --ds_file ds_zero2_no_offload.json \  
                --gradient_checkpointing \  
                --show_loss_step 10 \  
                --pre_seq_len 16 \  
                --prefix_projection True \  
                --output_dir ./output-glm3  

Lora方法-ChatGLM3单卡训练

CUDA_VISIBLE_DEVICES=0 deepspeed --master_port 520 train.py \  
                --train_path data/spo_0.json \  
                --model_name_or_path ChatGLM3-6B/ \  
                --per_device_train_batch_size 1 \  
                --max_len 1560 \  
                --max_src_len 1024 \  
                --learning_rate 1e-4 \  
                --weight_decay 0.1 \  
                --num_train_epochs 2 \  
                --gradient_accumulation_steps 4 \  
                --warmup_ratio 0.1 \  
                --mode glm3 \  
                --lora_dim 16 \  
                --lora_alpha 64 \  
                --lora_dropout 0.1 \  
                --lora_module_name "query_key_value,dense_h_to_4h,dense_4h_to_h,dense" \  
                --seed 1234 \  
                --ds_file ds_zero2_no_offload.json \  
                --gradient_checkpointing \  
                --show_loss_step 10 \  
                --output_dir ./output-glm3  

全参方法-ChatGLM3四卡训练,通过CUDA_VISIBLE_DEVICES控制具体哪几块卡进行训练,如果不加该参数,表示使用运行机器上所有卡进行训练

CCUDA_VISIBLE_DEVICES=0,1,2,3 deepspeed --master_port 520 train.py \  
              --train_path data/spo_0.json \  
              --model_name_or_path ChatGLM3-6B \  
              --per_device_train_batch_size 1 \  
              --max_len 1560 \  
              --max_src_len 1024 \  
              --learning_rate 1e-4 \  
              --weight_decay 0.1 \  
              --num_train_epochs 2 \  
              --gradient_accumulation_steps 4 \  
              --warmup_ratio 0.1 \  
              --mode glm3 \  
              --train_type all \  
              --seed 1234 \  
              --ds_file ds_zero3_no_offload.json \  
              --gradient_checkpointing \  
              --show_loss_step 10 \  
              --output_dir ./output-glm3  

更多内容,请看Github。

AI大模型学习福利

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享

四、AI大模型商业化落地方案

img

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

根据引用\[1\]和引用\[2\]的内容,进行ChatGLM2-6B的微调需要执行以下步骤: 1. 首先,克隆微调项目的代码库: ``` git clone https://github.com/hiyouga/ChatGLM-Efficient-Tuning.git ``` 2. 创建并激活一个新的Python环境: ``` conda create -n chatglm_etuning python=3.10 conda activate chatglm_etuning ``` 3. 进入项目目录并安装所需的依赖: ``` cd ChatGLM-Efficient-Tuning pip install -r requirements.txt ``` 4. 下载ChatGLM2-6B的配置文件和模型文件。可以访问https://huggingface.co/THUDM/chatglm2-6b/tree/main,并将configuration_chatglm.py、modeling_chatglm.py、quantization.py、tokenization_chatglm.py这四个文件下载到./chatglm2_6b_lora目录下。 5. 修改配置文件中的几个值。根据引用\[1\]中的命令,使用sed命令修改config.json和tokenizer_config.json文件中的配置值。 6. 最后,调用导出的模型进行微调。 请注意,以上步骤仅为参考,具体的微调过程可能会因项目的不同而有所变化。建议在进行微调之前仔细阅读相关文档和代码库中的说明。 #### 引用[.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^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值