花卉物流园做网站的素材,手机端网站开发建设内容,厦门人才网官网,最常见企业网站公司有哪些系列篇章#x1f4a5;
AI大模型探索之路-训练篇1#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4#xff1a;大语言模型训练数据集概…系列篇章
AI大模型探索之路-训练篇1大语言模型微调基础认知 AI大模型探索之路-训练篇2大语言模型预训练基础认知 AI大模型探索之路-训练篇3大语言模型全景解读 AI大模型探索之路-训练篇4大语言模型训练数据集概览 AI大模型探索之路-训练篇5大语言模型预训练数据准备-词元化 AI大模型探索之路-训练篇6大语言模型预训练数据准备-预处理 AI大模型探索之路-训练篇7大语言模型Transformer库之HuggingFace介绍 AI大模型探索之路-训练篇8大语言模型Transformer库-预训练流程编码体验 AI大模型探索之路-训练篇9大语言模型Transformer库-Pipeline组件实践 AI大模型探索之路-训练篇10大语言模型Transformer库-Tokenizer组件实践 AI大模型探索之路-训练篇11大语言模型Transformer库-Model组件实践 AI大模型探索之路-训练篇12语言模型Transformer库-Datasets组件实践 AI大模型探索之路-训练篇13大语言模型Transformer库-Evaluate组件实践 AI大模型探索之路-训练篇14大语言模型Transformer库-Trainer组件实践 AI大模型探索之路-训练篇15大语言模型预训练之全量参数微调 AI大模型探索之路-训练篇16大语言模型预训练-微调技术之LoRA AI大模型探索之路-训练篇17大语言模型预训练-微调技术之QLoRA AI大模型探索之路-训练篇18大语言模型预训练-微调技术之Prompt Tuning AI大模型探索之路-训练篇19大语言模型预训练-微调技术之Prefix Tuning AI大模型探索之路-训练篇20大语言模型预训练-常见微调技术对比 AI大模型探索之路-训练篇21Llama2微调实战-LoRA技术微调步骤详解 AI大模型探索之路-训练篇22 ChatGLM3微调实战-从原理到应用的LoRA技术全解 目录 系列篇章前言一、服务器资源准备二、下载ChatGLM3工程1、下载工程2、安装相关依赖1使用conda创建微调的虚拟环境2安装ChatGLM3依赖3安装微调依赖 三、下载ChatGLM3模型1、安装git-lfs2、执行git lfs install3、下载模型模型权重相关文件4、检查权重文件 四、下载数据集1、数据集下载2、数据格式转化3、数据格式检查 五、微调脚本说明1、脚本说明finetune_demo2、配置说明 六、模型微调1、模型微调2、从保存点进行微调 七、推理验证1、修改模型地址2、开始模型推理 总结 前言
在人工智能的广阔领域里大语言模型LLMs的微调技术扮演着至关重要的角色。它不仅为模型注入了适应特定任务的能力而且还是通往专业领域的关键。本文旨在深入探讨基于P-Tuning V2技术的ChatGLM3微调流程这是一种将因果语言模型与对话优化相结合的优秀实践我们希望借此引领读者深入了解大模型微调的内涵。
在上文中我们详细介绍了基于LoRA技术微调ChatGLM3的操作过程。而本文将重点展示基于P-Tuning V2技术的微调过程。我们将采用GLM官方在github上提供的微调脚本进行高效微调向大家展示一种更为简单便捷的微调方法。
一、服务器资源准备
首先服务器资源准备是微调工作的基础。根据官方提供的显存占用说明我们需配置相应数量的显卡资源。P-TuningV2微调所需的显存相对较少仅需1张显卡即可展开工作。 以下是官方提供的显存的占用情况说明 1)SFT 全量微调: 4张显卡平均分配每张显卡占用 48346MiB 显存。 2)P-TuningV2 微调: 1张显卡占用 18426MiB 显存。 3)LORA 微调: 1张显卡占用 14082MiB 显存。 请注意该结果仅供参考对于不同的参数显存占用可能会有所不同。请结合你的硬件情况进行调整。
二、下载ChatGLM3工程
接下来克隆ChatGLM3工程并安装相关依赖这一系列动作将构建起我们微调工作的基本环境。
1、下载工程
从github地址中下在ChatGLM3工程工程中包含了很多测试的demo样例包括微调样例
git clone https://github.com/THUDM/ChatGLM3.git2、安装相关依赖
1使用conda创建微调的虚拟环境
#创建虚拟环境
conda create -n ChatGLM3-6b-finetunning python3.10
#激活虚拟环境
conda activate ChatGLM3-6b-finetunning
#激活成功如下
(ChatGLM3-6b-finetunning) rootautodl-container-90ee468393-1c276b30:~#
#退出当前虚拟环境
conda deactivate 2安装ChatGLM3依赖
ChatGLM3的finetune_demo目录下的requirements.txt都行需要执行
cd ChatGLM3
pip install -r requirements.txt3安装微调依赖
cd finetune_demo
pip install -r requirements.txt执行如下
三、下载ChatGLM3模型
本次微调主要基于ChatGLM3-6B对话模型进行微调也是我们常规的大部分应用场景 ChatGLM3-6B和ChatGLM-6B-Base 说明 ChatGLM3-6B这是一个对话调优的大语言模型在ChatGLM-6B-Base的基础上进行了对话训练调优它针对对话场景进行了特定的优化使得其在处理对话式问答、指令跟随等需要与用户进行互动的场景时表现更加出色。这种优化可能包括使用对话数据集进行微调从而更好地理解并回应用户的需求。 ChatGLM-6B-Base是基础的大语言模型它是构建其他特定应用模型的基础版本。作为一个基础模型它提供了广泛的语言理解和生成能力但没有针对特定场景如对话进行特别的优化。这意味着它在通用的语言任务上表现良好但在对话场景下可能不如专门对话调优过的模型。
下载ChatGLM3-6B对话模型的相关权重文件
1、安装git-lfs
需要先安装Git LFS Ubuntu系统操作命令
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
sudo apt-get install git-lfs执行如下 Centos命令参考 curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.rpm.sh | sudo bash sudo yum install git-lfs 2、执行git lfs install 3、下载模型模型权重相关文件
在autodl-tmp下新建model用于放模型文件 git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b.git
4、检查权重文件
对比modelscope上的文件列表和文件的大小检查是否下载完整 四、下载数据集
数据准备阶段我们除了下载了专为对话场景优化的ChatGLM3-6B模型及其权重文件并对数据集进行下载和格式转换。这一过程确保了我们拥有充足的训练样本和适配的数据结构为接下来的微调奠定了坚实基础。
1、数据集下载
数据集地址https://cloud.tsinghua.edu.cn/f/b3f119a008264b1cabd1/?dl1 这是官方准备的数据集下载处理好的 AdvertiseGen 数据集将解压后的 AdvertiseGen 目录放到本目录的 /data/ 下, 例如/root/ChatGLM3/finetune_demo/data/AdvertiseGen 数据格式如下
我们需要进行数据格式转化转为目标数据格式
2、数据格式转化
执行如下python脚本对数据格式进行处理
python translate_fomat.pytranslate_fomat.py 放在/root/ChatGLM3/finetune_demo目录下
import json
from typing import Union
from pathlib import Pathdef _resolve_path(path: Union[str, Path]) - Path:return Path(path).expanduser().resolve()def _mkdir(dir_name: Union[str, Path]):dir_name _resolve_path(dir_name)if not dir_name.is_dir():dir_name.mkdir(parentsTrue, exist_okFalse)def convert_adgen(data_dir: Union[str, Path], save_dir: Union[str, Path]):def _convert(in_file: Path, out_file: Path):_mkdir(out_file.parent)with open(in_file, encodingutf-8) as fin:with open(out_file, wt, encodingutf-8) as fout:for line in fin:dct json.loads(line)sample {conversations: [{role: user, content: dct[content]},{role: assistant, content: dct[summary]}]}fout.write(json.dumps(sample, ensure_asciiFalse) \n)data_dir _resolve_path(data_dir)save_dir _resolve_path(save_dir)train_file data_dir / train.jsonif train_file.is_file():out_file save_dir / train_file.relative_to(data_dir)_convert(train_file, out_file)dev_file data_dir / dev.jsonif dev_file.is_file():out_file save_dir / dev_file.relative_to(data_dir)_convert(dev_file, out_file)convert_adgen(data/AdvertiseGen, data/AdvertiseGen_fix)3、数据格式检查
格式转化脚本执行完在/root/ChatGLM3/finetune_demo/data下会新增AdvertiseGen_fix文件夹包含转换后的文件格式如下
五、微调脚本说明
讲章节主要解了各配置文件的作用包括数据配置、模型参数、优化器设置及训练监控等。这些配置细节对于理解微调流程和调整训练策略至关重要。通过修改配置文件我们可以根据需要调整模型的训练行为实现精确匹配项目需求的目标。
1、脚本说明finetune_demo
configs配置目录包含多种微调的配置支持LoRA、P-Tuning V2等微调finetune_hf.py微调接口文件inference_hf.py推理接口文件
2、配置说明
微调配置文件位于 config 目录下包括以下文件 ds_zereo_2 / ds_zereo_3.json: deepspeed 配置文件。 lora.yaml / ptuning.yaml / sft.yaml: 模型不同方式的配置文件包括模型参数、优化器参数、训练参数等。 部分重要参数解释如下 1data_config 部分 train_file: 训练数据集的文件路径。 val_file: 验证数据集的文件路径。 test_file: 测试数据集的文件路径。 num_proc: 在加载数据时使用的进程数量。 2max_input_length: 输入序列的最大长度。 3max_output_length: 输出序列的最大长度。 4training_args 部分 output_dir: 用于保存模型和其他输出的目录。 max_steps: 训练的最大步数。 per_device_train_batch_size: 每个设备如 GPU的训练批次大小。 dataloader_num_workers: 加载数据时使用的工作线程数量。 remove_unused_columns: 是否移除数据中未使用的列。 save_strategy: 模型保存策略例如每隔多少步保存一次。 save_steps: 每隔多少步保存一次模型。 log_level: 日志级别如 info。 logging_strategy: 日志记录策略。 logging_steps: 每隔多少步记录一次日志。 per_device_eval_batch_size: 每个设备的评估批次大小。 evaluation_strategy: 评估策略例如每隔多少步进行一次评估。 eval_steps: 每隔多少步进行一次评估。 predict_with_generate: 是否使用生成模式进行预测。 5generation_config 部分 max_new_tokens: 生成的最大新 token 数量。 6peft_config 部分 peft_type: 使用的参数有效调整类型如 LORA。 task_type: 任务类型这里是因果语言模型CAUSAL_LM。 7Lora 参数 r: LoRA 的秩。 lora_alpha: LoRA 的缩放因子。 lora_dropout: 在 LoRA 层使用的 dropout 概率 8P-TuningV2 参数 num_virtual_tokens: 虚拟 token 的数量。
六、模型微调
进入模型微调阶段我们采用了命令行接口执行微调脚本选择了P-Tuning V2作为微调策略并指定了必要的参数如数据路径、模型地址和配置文件。此外还展示了如何从中断点继续微调这对于节省计算资源和时间成本具有显著意义。
1、模型微调
进入 finetune_demo目录 使用命令行进行高效微调,在configs下有多种微调的配置我们使用 p-tuning v2进行微调主要修改本地的/chatglm3-6b模型地址
cd finetune_demo
python finetune_hf.py data/AdvertiseGen_fix /root/autodl-tmp/model/chatglm3-6b configs/ptuning_v2.yaml执行如下
2、从保存点进行微调
如果按照上述方式进行训练每次微调都会从头开始如果你想从训练一半的模型开始微调你可以加入第四个参数这个参数有两种传入方式: yes, 自动从最后一个保存的 Checkpoint开始训练 XX, 断点号数字 例 600 则从序号600 Checkpoint开始训练 例如这就是一个从最后一个保存点继续微调的示例代码
cd finetune_demo
python finetune_hf.py data/AdvertiseGen_fix /root/autodl-tmp/model/chatglm3-6b configs/ptuning_v2.yaml yes七、推理验证
最后在推理验证环节我们利用微调后的模型进行了实际推理以检验微调效果。通过指定合适的prompt可以引导模型生成符合预期的输出进一步验证了微调模型在特定任务上的适用性。 使用微调的数据集进行推理在 inference_hf.py 文件中有封装推理验证的接口
1、修改模型地址
在完成微调任务之后我们可以查看到 output 文件夹下多了很多个checkpoint-*的文件夹这些文件夹代表了训练的轮数。 我们选择最后一轮的微调权重并使用inference进行导入。 说明对于 LORA 和 P-TuningV2 官方没有合并训练后的模型而是在adapter_config.json 中记录了微调型的路径因此需要先修改基础模型的地址直接修改dapter_config.json中的基础模型地址在adapter_config.json 中记录了微调型的路径如果原始模型位置发生更改要修改adapter_config.json中base_model_name_or_path的路径。 注意、注意、注意: 如果没有adapter_config.json 不用修改了
inference_hf.py
from typing import Union, Path, Tuple # 导入所需的类型注解# 定义一个函数它接受模型目录的路径和是否信任远程代码的标志
# 并返回一个包含模型和分词器的元组。
def load_model_and_tokenizer(model_dir: Union[str, Path], # 模型目录的路径可以是字符串或Path对象。trust_remote_code: bool True # 是否信任远程代码的布尔值默认为True。
) - tuple[ModelType, TokenizerType]: # 返回值是一个元组包含模型(ModelType)和分词器(TokenizerType)。# 使用内部函数_resolve_path解析model_dir参数确保它是一个完整的文件系统路径。model_dir _resolve_path(model_dir)# 检查model_dir路径下是否存在名为adapter_config.json的文件。if (model_dir / adapter_config.json).exists():# 如果存在adapter_config.json加载适配器模型。model AutoPeftModelForCausalLM.from_pretrained(model_dir, # 模型目录路径。trust_remote_codetrust_remote_code, # 是否信任远程代码。device_mapauto # 设备映射设置为auto自动决定如何将模型分配到设备上。)# 从模型的适配器配置中获取分词器目录。tokenizer_dir model.peft_config[default].base_model_name_or_pathelse:# 如果不存在adapter_config.json加载标准的预训练模型。model AutoModelForCausalLM.from_pretrained(model_dir, # 模型目录路径。trust_remote_codetrust_remote_code, # 是否信任远程代码。device_mapauto # 设备映射设置为auto。)# 使用模型目录作为分词器目录。tokenizer_dir model_dir# 加载与模型对应的分词器。tokenizer AutoTokenizer.from_pretrained(tokenizer_dir, # 分词器目录。trust_remote_codetrust_remote_code # 是否信任远程代码。)# 返回一个包含模型和分词器的元组。return model, tokenizer检查训练输出 2、开始模型推理
python inference_hf.py output/checkpoint-3000/ --prompt 鱼尾裙根据内容可以看到回答基本正确响应结果都是来源于原数据集中的内容。
总结
通过本文的深度解析我们希望读者能够洞察到大语言模型微调过程中的每一个关键步骤从而更加自信地应对各种自然语言处理挑战。P-Tuning V2技术以其独特的优势为ChatGLM3的对话能力提升提供了强大助力标志着我们在人工智能对话系统领域又向前迈进了一大步。未来随着技术的不断进步和创新我们期待着更多突破性的成果以推动人工智能与人类交流的界限不断拓宽。 更多专栏系列文章AIGC-AI大模型探索之路 如果文章内容对您有所触动别忘了点赞、⭐关注收藏加入我让我们携手同行AI的探索之旅一起开启智能时代的大门