基于腾讯云CloudStudio使用unslothai低成本训练自己特定领域的高性能推理模型
00 分钟
2025-2-10
2025-2-23
类型
状态
日期
链接
摘要
标签
分类
图标
密码
😀 前不久unsloth官方发布了基于GRPO的训练方案,借助 15GB VRAM,Unsloth 允许将任何高达 15B 参数的模型(如 Llama 3.1 (8B)、Phi-4 (14B)、Mistral (7B) 或 Qwen2.5 (7B) 使用 GRPO 将标准模型转换为成熟的推理模型。 本次腾讯云CloudStudio HAI进阶型使用unslothai低成本训练自己特定领域的高性能推理模型。
notion image
GRPO 是一种 RL 算法,无需价值函数即可有效地优化响应,这与依赖于价值函数的近端策略优化 (PPO) 不同。在我们的笔记本中,我们使用 GRPO 训练一个模型,旨在让它自主开发自己的自我验证和搜索能力——创造一个迷你的“顿悟时刻”。运作方式:
  • 该模型将生成响应组。
  • 每个响应都根据正确性或由某个固定奖励函数而不是 LLM 奖励模型创建的另一个指标进行评分。
  • 计算该组的平均分数。
  • 将每个响应的分数与组平均值进行比较。
  • 该模型经过强化,有利于得分较高的响应。
举个例子,假设我们想让一个模型解决:什么是 1+1?>> 思维链/锻炼 >> 答案是 2.什么是 2+2?>> 思维链/锻炼 >> 答案是 4.
最初,人们必须收集大量数据来填充锻炼/思维链过程。但是 GRPO(DeepSeek 使用的算法)或其他 RL 算法可以引导模型自动展示推理功能并创建推理跟踪。相反,我们需要创建良好的奖励函数或验证器。例如,如果它得到正确答案,则给它一个分数 1。如果某些单词拼写错误,则减 0.1。等等!我们可以提供许多函数来奖励该过程。

1 📝 安装前准备

本次采用云上环境进行部署, 腾讯云CloudStudio是一个免费提供10000分钟的开箱及用的一个AI应用平台,免费提供16G显存,8核32G虚拟机。但是针对训练,建议采用HAI进阶型进行使用。
  1. 打开网址Cloud Studio使用微信或QQ等进行网站登录。
  1. 点击“高性能工作空间”中点击右侧的“新建”按钮。
    1. notion image
  1. 在弹出的窗口中选择”基础型“或者”HAI进阶型“。
    1. notion image
  1. 在弹出的窗口中,选择“应用社区”,选择"Liama3.1 8B",计费模式按需选择,地域建议选择海外区域,算力方案推荐“GPU进阶型”。
    1. notion image
      notion image
  1. 待工作空间创建完成后,显示“运行中”状态后,点击图标跳转IDE环境。
    1. notion image

2 🤗 部署过程

快速体验:在终端中执行如下命令快速导入notebooks后执行全部命令: wget https://pan.itq5.com/d/AI/Notebooks/CloudStudio_Unsloth_GRPO.ipynb
notion image

2.1 环境检查

  1. 在弹出的资源管理器中右击,新建一个data.ipynb文件。在文件中点击“代码”,新增代码片段。
    1. notion image
  1. 在notebooks中输入如下命令,点击前面的运行按钮进行执行命令。
    1. notion image

2.2 库加载

  1. 执行如下命令进行准备环境
    1. notion image

2.3 导入核心组件

  1. 按照如下命令执行,导入Unsloth的核心组件并进行初始化。首先使用 PatchFastRL 来追加 GRPO 和其他 RL 算法:
    1. notion image
  1. 导入和初始配置
  • max_seq_length 决定了模型能处理的最大文本长度
  • lora_rank 是 LoRA(低秩适应)的参数,值越大模型越"智能",但训练速度越慢
    • notion image

2.4 加载模型

2.4.1 海外节点

  1. 执行如下命令,在线加载模型

    2.4.2 国内节点

    1. 如果选择的是国内数据中心,无法连接huggingface网站,无法自动下载模型,此时我们可以新建终端,执行如下命令下载 Qwen 的 Qwen/Qwen2.5-3B-Instruct 模型到/workspace/Qwen2.5-3B-Instruct目录。
      1. notion image
    1. 执行如下命令导入本地模型
      1. notion image
        notion image

    2.5 数据集准备

    2.5.1 海外节点

    参考 @willccbb 的数据准备脚本以及奖励函数(reward functions)。本示例用到了OpenAI的GSM8K数据集。设置数据集和奖罚机制等。

    2.5.2 国内节点

    1. 配置 PEFT(参数高效微调)模型 使用 LoRA 方法对模型进行参数高效微调,指定需要微调的目标模型。启用梯度检查点功能以支持长文本微调,并设置随机种子确保结果可复现
      1. notion image
    1. 下载数据集
      1. notion image
    1. 执行如下命令,设置数据集和奖罚机制等。
      1. notion image

    2.6 训练模型

    2.6.1 使用 GRPO (Generative Reinforcement Policy Optimization) 训练方法设置参数

    该配置主要特点是:
    • 采用了内存效率较高的设置(8位优化器、混合精度训练)
    • 使用较小的学习率和梯度裁剪以确保训练稳定性
    • 提供了灵活的设置选项以适应不同的硬件条件
    • 包含了完整的训练监控和模型保存机制
      • notion image

    2.6.2 GRPO训练器

    2.6.2.1 奖励函数:

    • xmlcount_reward_func: 可能用于评估生成文本中 XML 标签的正确使用
    • soft_format_reward_func: 评估输出格式的基本符合程度
    • strict_format_reward_func: 严格检查输出格式是否完全符合要求
    • int_reward_func: 可能用于检查数值输出的准确性
    • correctness_reward_func: 评估整体输出的正确性

    2.6.2.2 奖励函数(Reward Functions)在RL中扮演着关键角色,其作用如下:

    1. 基本作用
        • 评估行为质量:为模型的每个输出提供一个数值评分
        • 指导学习方向:帮助模型理解什么样的输出是"好的"
        • 提供反馈:让模型知道它的输出是否符合预期
    1. 代码中的具体奖励函数分析,每个奖励函数的具体作用:
        • xmlcount_reward_func
          • 检查XML标签的使用是否正确
          • 确保开闭标签匹配
          • 评估标签嵌套的合理性
        • soft_format_reward_func
          • 对输出格式进行基本检查
          • 允许有一定的灵活性
          • 可能关注缩进、换行等基本格式要素
        • strict_format_reward_func - 严格检查输出格式 - 要求完全符合预定义的格式规范 - 对不符合要求的部分给予惩罚
        • int_reward_func - 检查数值输出的准确性 - 验证计算结果是否正确 - 可能还会检查数值范围的合理性
        • correctness_reward_func - 评估整体输出的正确性 - 检查逻辑连贯性 - 验证输出是否满足任务要求
    1. 工作机制
        • 多维度评估:不同奖励函数关注不同方面
        • 综合打分:将多个奖励函数的分数综合起来
        • 参数更新:根据得分调整模型参数,提升性能
    1. 实际应用示例 假设模型需要生成XML格式的响应:

      2.6.2.3 各奖励函数会:

      • xmlcount_reward_func 检查XML标签是否完整
      • soft_format_reward_func 检查基本格式是否合理
      • strict_format_reward_func 严格检查XML结构
      • int_reward_func 验证计算结果是否正确
      • correctness_reward_func 检查整体逻辑是否合理
      通过这些奖励函数的组合,模型能够学习到如何生成既格式正确又内容准确的输出。这种多维度的评估系统能够更好地指导模型向着期望的方向学习和改进。

      2.6.2.4 执行训练

      notion image
      notion image
      notion image

      2.7 推理原始模型

      采样参数 (Sampling Parameters):
      • temperature: 值越高生成越随机,越低越确定性
      • top_p: 控制采样时考虑的概率质量范围
      • max_tokens: 限制生成文本的最大长度
        • notion image

      2.8 保存lora

      保存经过训练的LoRA(Low-Rank Adaptation)权重数据
      • 保存内容 保存了模型在训练过程中学到的LoRA参数,这些参数包含了低秩矩阵的权重更新,不会保存整个基础模型,只保存LoRA相关的改变
      • 保存位置 将权重保存到名为 "grpo_saved_lora" 的目录中。这个目录会包含所有必要的配置文件和权重
      • 用途 保存的权重可以在之后被重新加载,可以应用到相同架构的基础模型上,允许在不同的场景中复用训练成果。
      • 优势
        • 文件体积小:只保存LoRA参数,而不是完整模型
        • 便于分享:可以轻松分发训练成果
        • 灵活性高:可以与不同的基础模型组合使用
          • notion image

      2.9 加载保存的LoRA进行推理

      • 加载之前保存的LoRA权重(通过"grpo_saved_lora")
      • 使用这些权重和配置的参数生成回答
      • 返回生成的文本结果
        • notion image

      2.10 保存VLLM到float16格式

      用户可以根据自己的具体需求选择最合适的保存方式:
      • 需要高精度:选择16位格式
      • 设备受限:选择4位格式
      • 只需分享改动:选择LoRA格式
      利用Hugging Face的Token上传

      2.11 GGUF / llama.cpp 转换

      Unsloth 原生支持转换为GGUF/llama.cpp格式!克隆llama.cpp并默认使用q8_0格式保存。支持所有量化方法如q4_k_m。使用save_pretrained_gguf进行本地保存,使用push_to_hub_gguf上传到HuggingFace。
      支持的量化方法包括(完整列表请查看Unsloth的Wiki页面):
      • q8_0 - 快速转换。资源占用较高,但通常可以接受
      • q4_k_m - 推荐使用。对attention.wv和feed_forward.w2 tensors 的一半使用Q6_K量化,其余使用Q4_K
      • q5_k_m - 推荐使用。对attention.wv和feed_forward.w2 tensors 的一半使用Q6_K量化,其余使用Q5_K
      要进行微调并自动导出到Ollama,参考Ollama notebook
      主要特点:
      • 提供了多种量化选项,可以根据需求平衡模型大小和性能
      • 支持直接转换为llama.cpp格式,便于部署
      • 提供了与Ollama的集成,简化了部署流程

        免责声明:
        • 笔者水平有限,尽管经过多次验证和检查,尽力确保内容的准确性,但仍可能存在疏漏之处。敬请业界专家大佬不吝指教。
        • 本文所述内容仅通过实战环境验证测试,读者可学习、借鉴,但严禁直接用于生产环境由此引发的任何问题,作者概不负责
        上一篇
        【AI绘画】1-视频转绘制
        下一篇
        从内网到公网:手把手教你打通Cloud Studio基础性的任督二脉

        评论
        Loading...