跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
PythonAI算法

通义千问 Qwen-14B 模型微调实战与经验总结

综述由AI生成通义千问 Qwen-14B 大语言模型的微调全流程。内容涵盖微调的概念、必要性及主要步骤,包括环境配置、数据准备、训练命令参数详解、模型效果测试及 FastChat 部署方案。文章提供了具体的 Python 代码示例和 DeepSpeed 配置说明,并补充了显存优化、学习率调整、数据质量控制等常见问题与优化建议,旨在帮助开发者掌握垂直领域大模型微调的核心技术与实践经验。

氛围发布于 2025/2/6更新于 2026/4/268 浏览
通义千问 Qwen-14B 模型微调实战与经验总结
一、引言

随着大语言模型的快速发展,OpenAI 的 GPT 系列、Meta 的 Llama 系列以及阿里的通义千问等模型层出不穷。虽然通用模型在广泛场景下表现惊艳,但在特定垂直领域或业务场景中,其回答往往过于宽泛,难以满足精准需求。通过微调(Fine-tuning)技术,可以在预训练模型的基础上,利用特定领域数据进一步训练,使模型更好地适应特定任务。

二、什么是微调

微调是指在已经预训练好的深度学习模型基础上,通过进一步训练来适应特定任务或数据集。这种方法允许我们在具有大规模通用知识的模型基础上,更好地适应特定领域或任务。

通俗地讲,就是用通用模型作为基础,配合上特定场景的数据做进一步训练,得到适合特定场景的模型。

三、为什么微调

微调的主要原因包括:

  1. 迁移学习:利用在大规模数据上预训练好的模型,可以获得通用的语言理解能力,从而在特定任务上表现更好。
  2. 数据稀缺:当我们的任务数据相对较少时,微调允许我们在有限的数据上进行有效的训练,避免从头开始训练模型。
  3. 节省计算资源:预训练的模型通常需要大量的计算资源,微调可以在这个基础上节省训练资源。
四、微调的主要步骤
  1. 准备数据:收集和准备与目标任务相关的数据,并对数据进行清洗和预处理,以满足训练的要求。
  2. 选择基础模型:根据目标任务和数据集特点选择合适的基础模型。
  3. 设置微调参数:设置微调中的超参,如迭代次数、学习率、序列长度等。这些参数会影响微调效果和收敛速度。
  4. 进行微调训练:使用准备好的模型,对基础模型进行微调,过程中根据微调参数,逐渐调整模型参数来降低 Loss。
  5. 评估模型效果:在微调完成后,使用测试集对最终的微调模型进行评估,以获得最终的性能指标。这有助于评估模型在实际应用中的表现。
  6. 部署模型:将微调后的模型部署为服务,或加载至应用中,以满足实际业务需求。

大模型的微调步骤大体如此,但具体的步骤和细节可能会因为模型、数据、需求不同而有所变化。

五、微调实战案例:Qwen-14B 自我认知

本部分以微调 Qwen-14B(通义千问)的自我认知为切入口,介绍微调的全流程。

1. 环境配置

使用 nvidia-smi 命令查看 GPU 配置。本文示例使用了 4 张 A100 作为开发测试环境。确保 CUDA 版本与 PyTorch 版本兼容。

2. 框架和模型
  • 微调的模型:Qwen-14B
  • 提供 OpenAI 兼容的 RESTful API 框架:FastChat
3. 微调过程

1. 准备数据

训练数据通常为 JSONL 格式,每一行的数据格式如下。其中 conversations 字段是必需的,可以根据实际需求添加或删除其他字段。

[
    {
        "id": "112720",
        "source": "cot",
        "conversations": 
            
                 
                 
            
            
                 
                 
            
        
    

[
{
"from"
:
"user"
,
"value"
:
"你好"
}
,
{
"from"
:
"assistant"
,
"value"
:
"您好,我是助手,很高兴认识您。请问我能为您做些什么?"
}
]
}
]

2. 选择基础模型

这里选用了通义千问 Qwen-14B 模型,可以通过 Hugging Face 或魔塔社区进行下载。

3. 进行微调训练

微调的数据和模型准备好之后,就可以开始执行微调。使用 DeepSpeed 加速训练,命令如下:

# $DATA 为数据路径
# $MODEL 为模型路径
deepspeed finetune_merge.py  \
    --report_to "none" \
    --data_path $DATA \
    --lazy_preprocess False \
    --model_name_or_path $MODEL \
    --output_dir /hboxdir/output \
    --model_max_length 2048 \
    --num_train_epochs 24 \
    --per_device_train_batch_size 1 \
    --gradient_accumulation_steps 1 \
    --save_strategy epoch \
    --save_total_limit 2 \
    --learning_rate 1e-5 \
    --lr_scheduler_type "cosine" \
    --adam_beta1 0.9 \
    --adam_beta2 0.95 \
    --adam_epsilon 1e-8 \
    --max_grad_norm 1.0 \
    --weight_decay 0.1 \
    --warmup_ratio 0.01 \
    --logging_steps 1 \
    --gradient_checkpointing True \
    --deepspeed "ds_config_zero3.json" \
    --bf16 True \
    --tf32 True

以下是针对 DeepSpeed 的参数说明,可根据具体情况进行相应参数的修改:

  • 与数据相关的参数:

    • data_path: 数据路径,HuggingFace 数据库,比如:Dahoas/rm-static
    • data_split: 数据的拆分方式,比如 2,4,4 是为 step1, 2, 3 分配的数据比例
    • max_seq_len: 最大序列长度(超过长度会被截掉)
    • data_output_path: 相关数据的存储地址(local storage,不能是 shared storage)
  • 与模型相关的参数:

    • model_name_or_path: 模型名称或路径,HuggingFace 模型,比如:facebook/opt-1.3b
    • lora_dim: 如果大于 0,则使用 LoRA 优化
    • lora_module_name: 设置 LoRA 的范围,比如可以只针对 decoder.layers
    • only_optimize_lora: 是否只优化 LoRA 的参数
  • 与训练相关的参数:

    • per_device_train_batch_size: 训练时的 Batch size (per device:每个 GPU 的 Size)
    • per_device_eval_batch_size: 评价时的 Batch size (per device)
    • learning_rate: 学习率
    • weight_decay: 权重衰减,防止模型过拟合的技术
    • num_train_epochs: 训练 epoch 数
    • gradient_accumulation_steps: 累积多少个 mini-batch 的梯度后再进行一次参数更新
    • lr_scheduler_type: learning rate 的调整策略,比如 linear, cosine
  • DeepSpeed 配置:

    • zero_stage: 对应 DeepSpeed 工具中的 zero 方式,分别是 0, 1, 2, 3
    • offload: ZeRO-Offload 通过利用主机 CPU 上的计算和内存资源来执行优化器,从而减少此类模型的 GPU 计算和内存需求
    • local_rank: 分布式训练时的一个变量,用于标识当前 GPU 设备的本地排名
    • gradient_checkpointing: 降低深度学习模型训练过程中内存消耗的技术
  • 其他:

    • seed: 随机排序的 seed
    • output_dir: 模型的存储目录

4. 测试模型效果

可以使用官方提供的测试代码进行验证:

from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig

# 模型路径
model_dir="/models/qwen-14b"

# Note: The default behavior now has injection attack prevention off.
tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)

model = AutoModelForCausalLM.from_pretrained(model_dir, device_map="auto", trust_remote_code=True).eval()

inputs = tokenizer('你好啊,介绍下你自己', return_tensors='pt')
inputs = inputs.to(model.device)
pred = model.generate(**inputs)
print(tokenizer.decode(pred.cpu()[0], skip_special_tokens=True))

# 输出示例:您好,我是小智,很高兴为您服务。有什么我可以帮您解决的问题或者需要我提供的帮助吗?

5. 部署模型(FastChat)

启动 Controller:

python -m fastchat.serve.controller --host 0.0.0.0 --port 21001

启动模型服务:

# /models/qwen-14b 为模型路径
python -m fastchat.serve.model_worker --model-path /models/qwen-14b/ --host 0.0.0.0

启动 RESTful API 服务:

python -m fastchat.serve.openai_api_server --host 0.0.0.0 --port 8000

使用 OpenAI 官方 SDK 测试效果:

import openai
openai.api_key = "EMPTY"
openai.api_base = "http://localhost:8000/v1"

# 这里指定微调的模型名字,也就是保存模型文件的文件夹名称
model = "qwen-14b"

# create a chat completion
completion = openai.ChatCompletion.create(
  model=model,
  messages=[{"role": "user", "content": "你是谁"}]
)
# print the completion
print(completion.choices[0].message.content)

# 输出示例:您好,我是小智,很高兴为您服务。有什么我可以帮您解决的问题或者需要我提供的帮助吗?
六、常见问题与优化建议

在微调过程中,可能会遇到显存不足、训练不收敛等问题,以下是一些优化建议:

  1. 显存优化:

    • 使用 gradient_checkpointing 技术,用时间换空间,显著降低显存占用。
    • 启用 bf16 混合精度训练,相比 fp16 更稳定且能节省显存。
    • 使用 DeepSpeed ZeRO-3 阶段,将模型分片存储在多个 GPU 上。
  2. 学习率调整:

    • 初始学习率通常设置在 1e-5 到 5e-5 之间,过大可能导致发散,过小导致收敛慢。
    • 使用 Cosine 调度器配合 Warmup,有助于模型平稳过渡。
  3. 数据质量:

    • 确保对话数据格式严格符合 conversations 结构。
    • 去除重复数据,避免模型过拟合特定样本。
    • 增加多样性,覆盖更多用户提问方式。
  4. LoRA 微调:

    • 对于资源受限的场景,推荐使用 LoRA 技术,仅训练少量参数,大幅降低显存需求。
    • 设置 lora_dim 参数,一般设置为 64 或 128 即可取得较好效果。
七、总结

通过对 Qwen-14B 的微调实践,我们可以发现,微调不仅是技术的实现,更是对业务场景理解的深化。合理的参数配置、高质量的数据准备以及稳定的部署环境是成功的关键。未来,随着大模型技术的演进,微调将更加便捷高效,成为企业构建专属 AI 能力的核心手段。

目录

  1. 一、引言
  2. 二、什么是微调
  3. 三、为什么微调
  4. 四、微调的主要步骤
  5. 五、微调实战案例:Qwen-14B 自我认知
  6. 1. 环境配置
  7. 2. 框架和模型
  8. 3. 微调过程
  9. $DATA 为数据路径
  10. $MODEL 为模型路径
  11. 模型路径
  12. Note: The default behavior now has injection attack prevention off.
  13. 输出示例:您好,我是小智,很高兴为您服务。有什么我可以帮您解决的问题或者需要我提供的帮助吗?
  14. /models/qwen-14b 为模型路径
  15. 这里指定微调的模型名字,也就是保存模型文件的文件夹名称
  16. create a chat completion
  17. print the completion
  18. 输出示例:您好,我是小智,很高兴为您服务。有什么我可以帮您解决的问题或者需要我提供的帮助吗?
  19. 六、常见问题与优化建议
  20. 七、总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • 💰 8折买阿里云服务器限时8折购买
  • 🦞 5分钟部署阿里云小龙虾了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 大模型选型避坑指南:AI Ping 性能评测与实战建议
  • OpenClaw Web UI 访问报错 Not Found 排查与修复
  • 基于 Vivado 的 AD9680 FPGA 测试程序开发
  • 一人一周重构开源官网:Qoder + Skills 实战
  • CFAR 恒虚警率目标检测算法与 MATLAB 实战
  • Linux 系统学习:深入剖析 Git 原理与进阶使用
  • GitHub Copilot 实战指南:安装配置与核心功能解析
  • AI 大模型重构软件开发全流程:从需求分析到自愈运维
  • Flutter与Web混合开发实践
  • MCP Document Reader:AI 助手读取本地文档工具
  • TapNow 影视级 AI 视频平台实测:导演级精准控制与物理一致性
  • FPGA 入门实战:基于 Quartus 点亮 LED 灯
  • Trae Java 项目全局 Maven 与 JDK 配置指南
  • VSCode 远程 Copilot Claude 模型连接与 OpenRouter 断联修复
  • C 语言指针与数组的深层关联及实战应用
  • Stable Diffusion 基石:潜在扩散模型(LDMs)技术详解
  • 基于 Rokid 灵珠平台搭建旅游 AR 智能体实战
  • Python 开发 MCP Server 实战:协议集成与部署指南
  • 鸣潮 QQ 机器人部署指南:集成大模型与插件功能实战
  • C++ 继承机制详解:从基础概念到多继承模型

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online