-
千问 Qwen 教程
- 背景介绍
- 这篇文章的任务
- 模型选型
- 大模型选型原则
- 大模型选型
- 模型评测
- 评测框架
- 评测数据集
- 进行评测
- 安装OpenCompass评测框架
- 下载模型
- 运行评测
- 评测结果
- 模型选择
- 模型训练
- 微调框架选择
- XTuner安装
- 微调方法选择
- 训练数据预处理
- 训练参数设置
- 开始训练
- 模型转换
- 合并模型
- 模型训练效果评估
- 总结
本文是《大模型对话风格微调项目实战——数据工程篇》的后续文章,介绍了在该项目中如何进行模型的选择、评测、训练和效果评估。
- 模型选型 :选择合适的大模型,如GPT-3、BERT等,以及合适的任务,如文本生成、对话生成等。
- 模型评测 :选择合适的评测指标,如BLEU、ROUGE等,以及合适的评测数据集,如WMT、MTBench等。
- 模型训练 :对选择的模型进行训练,训练方法使用QLoRA微调,训练数据集使用《数据工程篇》中生成的数据集。
- 模型训练效果评估 :对训练好的模型进行效果评估,评估方法使用OpenCompass评测框架。然后再进行主观评估。
核心原则:
- 选择适合任务的模型: 根据任务的需求,选择合适的模型。例如,对于对话生成任务,选择适合的对话模型;对于数学推理任务,选择适合的数学模型。
- 选择合适的语言模型: 根据任务的需求,选择合适的语言模型。例如,对于中文任务,选择中文语言模型;对于英文任务,选择英文语言模型。
- 选择合适的计算资源: 根据计算资源的限制,选择合适的模型。例如,对于小批量任务,可以选择较小的模型;对于大规模任务,可以选择较大的模型。
- 任务需求分析:
- 对话风格微调任务:
- 任务类型: 对话风格迁移,保持对话内容的不变性,同时调整对话风格为“温柔”或者“毒舌”。
- 语言要求: 中文
- 训练和推理资源限制:
- 目前可用的训练和推理资源有限
- 训练显存: 24GB
- 推理显存: 16GB
- 对话风格微调任务:
- 模型选择: 基于任务需求和资源限制,选择如下候选模型
- qwen2.5-1.5B-Instruct(千问系列)
- 核心能力:多语言对话与结构化输出
- 参数规模:15亿参数
- 突出特性:
- 支持29种语言跨语言交互
- 处理32K上下文并生成8K token对话
- 擅长编程对话和数学推理场景
- 稳定生成JSON等结构化响应
- 系统提示适应性强的角色扮演
- internlm2_5-1_8b-chat(书生系列)
- 核心能力:工具调用与复杂任务处理
- 参数规模:18亿参数
- 突出特性:
- 支持多轮工具链式调用
- 自主完成网页信息搜集与分析
- MATH评测得分40.2(同量级领先)
- 增强的指令理解与结果反思
- 适合多步骤推理的智能体构建
- qwen2.5-1.5B-Instruct(千问系列)
OpenCompass是一个开放的对话模型评估框架,用于评估对话模型的表现。OpenCompass提供了一系列的对话模型评估指标,包括BLEU、ROUGE、BERTScore等。
根据任务需求,选择CLUE(中文理解)数据集进行模型评测。
- FewCLUE_bustm_gen 短文本分类数据集:
- 任务类型:中文自然语言推理(NLI)任务,属于句对分类任务范畴
- 数据构成:包含160条标注样本及约2万条未标注数据,通过多模板Prompt增强小样本学习效果
- 技术特征:采用对抗训练、对比学习和Mixup数据增强策略,专门测试模型在挑战性推理对上的表现
- 应用目标:评估预训练模型在少量样本下的逻辑推理能力及泛化性能
- FewCLUE_ocnli_fc_gen 中文自然语言推理数据集:
- 任务类型:中文短文本匹配任务,属于二分类句对判断任务
- 数据构成:遵循统一标准配置,包含等量的标注样本(160条)与未标注数据(约2万条)
- 技术特征:应用相同的多模板Prompt框架,结合对抗训练提升模型鲁棒性
- 应用目标:验证模型在极低资源场景下的语义匹配能力与迁移学习效果
安装OpenCompass评测框架
使用以下命令安装OpenCompass:
下载模型
使用以下命令下载模型:
运行评测
使用以下命令运行评测:
评测结果
评测结果如下:
从评测结果可以看出,qwen2.5-1.5b-instruct模型在FewCLUE_ocnli_fc_gen数据集上的表现比internlm2_5-1_8b-chat模型好。
模型选择
根据评测结果,选择qwen2.5-1.5b-instruct作为基座模型。
- Llama-factory:
- Llama-factory是一个开源的微调框架,用于微调大语言模型。Llama-factory提供了一系列的微调方法,包括QLoRA、P-Tuning、Prefix Tuning等。
- XTuner:
- XTuner是一个开源的微调框架,用于微调大语言模型。XTuner提供了一系列的微调方法,包括QLoRA、P-Tuning、Prefix Tuning等。相对于Llama-factory,XTuner的微调方法更加灵活,支持更多的微调方法。并且可以在微调过程中直观的进行主观评估。
由于该项目对微调结果的评估方式主要为主观评估,所以选择XTuner作为微调框架。
使用以下命令安装XTuner:
- LoRA
- 核心思想:
- 低秩分解(Low-Rank Decomposition):将原始的大矩阵分解为两个低秩矩阵的乘积,其中一个矩阵的秩远小于原始矩阵的秩。
- 核心思想:
- QLoRA
- 相对于LoRA,QLoRA在训练过程中进行了量化,减少了内存占用和计算量。
本项目中选择QLoRA作为微调方法。
在《数据工程篇》生成的数据是csv格式,需要将其转换为XTuner支持的json格式。并且将其分为训练集、测试集和验证集。转换脚本如下:
该脚本能够将style_chat_data.csv文件中的数据按80%训练集、10%测试集和10%验证集的比例分割,并转换为指定的JSON格式。脚本会生成train.json、test.json和val.json三个文件。转换后的json文件部分内容如下:
- 模型设置
- pretrained_model_name_or_path
- 模型路径:
- pretrained_model_name_or_path
- 训练集设置
- data_files
- 训练集路径:
- max_length
- 最大长度:
- data_files
- 训练参数设置
- batch_size
- 批次大小:
- max_epochs
- 最大迭代次数:
- batch_size
- 验证问题设置
- evaluation_inputs
- 验证问题设置(从验证集里随机选择10个问题):
- 验证问题设置(从验证集里随机选择10个问题):
- evaluation_inputs
- 训练策略设置
- quantization_config
- 量化配置:
- : (禁用4位量化)
- : (启用8位量化)
- 量化配置:
- lora
- LoRA配置:
- :
- :
- LoRA配置:
- quantization_config
- 数据配置
- dataset
- 数据集配置:
- :
- :
- :
- dataset_map_fn
- 数据集映射函数配置:
将上面的参数保存到配置文件中,然后使用以下命令开始训练:
下面内容分别显示训练前期,中期和后期的验证集测试效果:
- 训练前期:
此时模型的输出完全没有我们需要的风格,所以需要进行微调。
- 训练中期:
此时模型的输出已经有了我们需要的风格,但是还是有一些问题,所以需要继续微调。
- 训练后期:
此时模型的输出已经完全符合我们需要的风格,可以停止训练。
- 训练loss曲线

可以看到在训练轮次达到2000左右时,模型的loss曲线开始收敛,并且loss值在0.07左右。
在训练过程中中断了一次,所以loss曲线有一个小的向上尖峰。
XTuner训练的权重是pth格式的,需要将其转换为huggingface格式。
使用以下命令将模型转换为huggingface格式:
转换完成后,需要和基座模型进行合并,得到最终的模型。
使用以下命令合并模型:
下面我们可以对微调后的模型进行测评。测评方法为主观评测。
先使用以下命令运行模型:
然后使从测试集内随机选择10个问题,进行测试。以下是部分测试结果:
本文详细介绍了大模型对话风格微调项目的完整流程,包括模型选型、评测、训练和效果评估。项目选用Qwen2-1.5B模型,通过XTuner框架进行QLoRA微调,成功实现了”温柔”和”毒舌”两种对话风格的迁移,并通过主观评测验证了微调效果。下一篇文章将介绍模型部署的流程。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/259560.html原文链接:https://javaforall.net
