微调Qwen2.5 Coder小模型实战指南
笔记哥 /
05-16 /
50点赞 /
0评论 /
318阅读
>
> 随着大模型技术的普及,如何让模型更好地适应特定场景需求成为开发者的焦点。本文将分享我使用ModelScope Swift框架微调Qwen2.5-Coder-0.5B-Instruct模型的完整过程,让您也能轻松打造专属AI助手。
## 前言
近期,我尝试对通义千问的Qwen2.5-Coder-0.5B-Instruct模型进行微调,实现两个不同的目标:一个是基础的自我认知调整,另一个是针对特定前端框架TA404的开发助手。本文将详细记录整个过程,从环境准备到模型训练再到效果验证和部署,希望能为有相似需求的开发者提供参考。
## 一、环境准备
首先,我们需要安装ModelScope的Swift框架,它是阿里巴巴魔搭社区提供的大模型微调工具:
```csharp
pip install 'ms-swift'
```
安装完成后,我们就可以使用Swift框架提供的各种命令来操作模型了。
## 二、初始模型测试
在开始微调前,我们先测试一下原始模型的效果,了解它的基础能力:
```csharp
swift infer \ --model Qwen/Qwen2.5-Coder-0.5B-Instruct \ --stream true \ --temperature 0 \ --infer_backend pt \ --max_model_len 2048
```
这个命令会启动模型的推理服务,让我们可以直接与模型对话。参数说明:
- `--model`:指定使用的模型
- `--stream true`:启用流式输出,模型生成的文本会实时显示
- `--temperature 0`:控制输出的随机性,0表示完全确定性输出
- `--infer_backend pt`:使用PyTorch作为推理后端
- `--max_model_len 2048`:设置模型处理的最大长度
## 三、自我认知微调
### 1. 训练配置
接下来,我使用Swift的SFT(Supervised Fine-Tuning)功能对模型进行自我认知微调:
```csharp
swift sft \ --model Qwen/Qwen2.5-Coder-0.5B-Instruct \ --train_type lora \ --dataset 'swift/self-cognition#500' \ --torch_dtype bfloat16 \ --num_train_epochs 1 \ --per_device_train_batch_size 1 \ --per_device_eval_batch_size 1 \ --learning_rate 1e-4 \ --lora_rank 8 \ --lora_alpha 32 \ --target_modules all-linear \ --gradient_accumulation_steps 16 \ --eval_steps 50 \ --save_steps 50 \ --save_total_limit 2 \ --logging_steps 5 \ --max_length 2048 \ --output_dir output \ --system 'You are a helpful assistant.' \ --warmup_ratio 0.05 \ --dataloader_num_workers 4 \ --dataset_num_proc 4 \ --model_name '小黄''Xiao Huang' \ --model_author '魔搭''ModelScope'
```
这里使用了很多参数,我来解释几个关键的:
- `--train_type lora`:使用LoRA (Low-Rank Adaptation) 技术进行微调,这是一种参数高效的微调方法
- `--dataset 'swift/self-cognition#500'`:使用Swift提供的自我认知数据集,包含500条样本
- `--model_name '小黄' 'Xiao Huang'`:设置模型的名字为"小黄"
- `--model_author '魔搭' 'ModelScope'`:设置模型作者为"魔搭"
- `--system 'You are a helpful assistant.'`:设置系统提示词
### 2. 训练结果测试
微调完成后,我们可以使用以下命令测试新模型的效果:
```csharp
swift infer \ --adapters /mnt/e/projects/pythonProject/ms-swift/output/v2-20250425-115306/checkpoint-31 \ --stream true \ --temperature 0 \ --infer_backend pt \ --max_new_tokens 2048
```
注意这里的`--adapters`参数指向我们训练好的模型权重,而不是加载完整模型。这是LoRA微调的优势之一,我们只需要保存和加载很小的权重文件即可。初步测试表明,模型已经能够以"小黄"的身份回答问题了!
## 四、开发专属TA404前端开发助手
在成功实现自我认知微调后,我又尝试了一个更加实用的案例:针对特定前端框架TA404开发一个专属助手。
### 1. 准备训练数据
首先,我准备了一个名为`training-data.jsonl`的训练数据集,包含了TA404框架的各种开发案例和最佳实践。
```csharp
...{"id":"range-picker-example-3-1","instruction":"提供 RangePicker 组件的 自定义日期单元格渲染 使用示例","input":"","output":"### 自定义日期单元格渲染\n```\n\n \n \n \n
\n {{current.date()}}\n \n \n \n \n\n\nexport default {\n methods: {\n getCurrentStyle (current, today) {\n const style = {}\n if (current.date() === 1) {\n style.border = '1px solid #1890ff'\n style.borderRadius = '50%'\n }\n return style\n },\n },\n}\n\n```\n\n通过 `dateRender` 插槽实现对日期单元格的样式和内容自定义。\n\n---"}...
```
### 2. 模型训练
然后使用以下命令进行微调:
```csharp
swift sft \ --model Qwen/Qwen2.5-Coder-0.5B-Instruct \ --train_type lora \ --dataset '/mnt/e/projects/pythonProject/ta404-dataset-gen/training-data.jsonl' \ --torch_dtype bfloat16 \ --num_train_epochs 1 \ --per_device_train_batch_size 1 \ --per_device_eval_batch_size 1 \ --learning_rate 1e-4 \ --lora_rank 8 \ --lora_alpha 32 \ --target_modules all-linear \ --gradient_accumulation_steps 16 \ --eval_steps 50 \ --save_steps 50 \ --save_total_limit 2 \ --logging_steps 5 \ --max_length 8192 \ --output_dir output \ --system '你是私有前端框架 ta404 开发助手,使用Vue 2.7版本进行前端页面开发,在开发中合理使用 ta404 组件进行代码编写。' \ --warmup_ratio 0.05 \ --dataloader_num_workers 4 \ --dataset_num_proc 4
```
这次微调的特点在于:
1. 使用了自己准备的训练数据(ta404框架相关的问答对)
2. 设置了特定的system提示词,明确了助手的角色定位
3. 增加了最大长度至8192,以处理更复杂的代码生成任务
## 五、应用测试与部署
### 1. 交互式测试
在花费近3个小时后,微调完成。然后我使用了Swift提供的应用模式来与模型交互:
```csharp
swift app \ --adapters test/output/v0-20250507-105125/checkpoint-286 \ --stream true \ --temperature 0.7 \ --infer_backend pt \ --max_new_tokens 2048
```
在应用模式下,Swift提供了一个简单的CLI界面,可以方便地与模型进行对话测试。这里我将温度设置为0.7,允许模型有一定的创造性,同时又不会过于发散。
### 2. 导出与部署
为了更好地部署和使用微调后的模型,我选择将LoRA权重与原始模型合并,以便进行一体化部署:
```csharp
swift export \ --adapters test/output/v0-20250507-105125/checkpoint-286 \ --merge_lora true
```
导出完成后,我选择使用vLLM作为推理引擎进行部署,这能提供更高效的服务:
```csharp
vllm serve /mnt/e/projects/pythonProject/ms-swift/test/output/v0-20250507-105125/checkpoint-286-merged --gpu-memory-utilization 0.15
```
由于我的显卡内存有限,我设置了较低的GPU内存使用率(15%),这足以满足Qwen2.5-Coder-0.5B这样的小模型部署需求。
## 六、经验总结与优化建议
通过这两次微调实践,我总结了以下几点经验:
### 1. 数据质量比数量更重要
即使是只有500条的自我认知数据集,只要质量高,也能让模型形成清晰的角色认知。对于特定领域助手,提供高质量的示例比堆积大量低质量数据效果更好。
### 2. LoRA参数的选择
`lora_rank`和`lora_alpha`的设置会影响微调效果,通常来说:
- 较小的rank值(如4-8)适合简单任务或小数据集
- 较大的rank值(如16-32)适合复杂任务或大数据集
- alpha/rank比值通常保持在4左右较为合适
### 3. 系统提示词的作用
不要小看`--system`参数的作用,一个精心设计的系统提示词能显著提升模型的表现。
### 4. 硬件需求与优化
对于0.5B级别的小模型,即使是普通的GPU也能完成训练。我使用的是一张RTX 3060,训练速度完全可以接受。
如果资源有限,可以通过以下方式优化:
- 降低`per_device_train_batch_size`并增加`gradient_accumulation_steps`
- 使用`bfloat16`或`float16`混合精度训练
- 适当减少`eval_steps`和`save_steps`的频率
## 七、成果展示
微调后的模型在各自的目标任务上都表现出了明显提升:
1. **自我认知微调后**:模型能够清晰地知道自己是"小黄",由"魔搭"创建,并保持了原有的编程能力。
2. **TA404前端助手**:模型能够根据需求生成符合TA404框架规范的Vue 2.7代码,熟练使用框架特有的组件和API。
## 结语
ModelScope Swift框架极大地简化了大模型微调的复杂度,让即使是初学者也能快速上手。通过本文介绍的方法,您也可以根据自己的需求,打造专属的AI助手,无论是改变模型的人格特征,还是增强特定领域的能力。
本文来自投稿,不代表本站立场,如若转载,请注明出处:http//www.knowhub.vip/share/2/3448
- 热门的技术博文分享
- 1 . ESP实现Web服务器
- 2 . 从零到一:打造高效的金仓社区 API 集成到 MCP 服务方案
- 3 . 使用C#构建一个同时问多个LLM并总结的小工具
- 4 . .NET 原生驾驭 AI 新基建实战系列Milvus ── 大规模 AI 应用的向量数据库首选
- 5 . 在Avalonia/C#中使用依赖注入过程记录
- 6 . [设计模式/Java] 设计模式之工厂方法模式
- 7 . 5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明
- 8 . SQL 中的各种连接 JOIN 的区别总结!
- 9 . JavaScript 中防抖和节流的多种实现方式及应用场景
- 10 . SaltStack 远程命令执行中文乱码问题
- 11 . 推荐10个 DeepSeek 神级提示词,建议搜藏起来使用
- 12 . C#基础:枚举、数组、类型、函数等解析
- 13 . VMware平台的Ubuntu部署完全分布式Hadoop环境
- 14 . C# 多项目打包时如何将项目引用转为包依赖
- 15 . Chrome 135 版本开发者工具(DevTools)更新内容
- 16 . 从零创建npm依赖,只需执行一条命令
- 17 . 关于 Newtonsoft.Json 和 System.Text.Json 混用导致的的序列化不识别的问题
- 18 . 大模型微调实战之训练数据集准备的艺术与科学
- 19 . Windows快速安装MongoDB之Mongo实战
- 20 . 探索 C# 14 新功能:实用特性为编程带来便利
- 相关联分享
- 微调Qwen2.5 Coder小模型实战指南