DeepSeek R1模型微调怎么做?从入门到实战

DeepSeek R1模型微调怎么做?从入门到实战

此前,我们分享了《个人和企业必看,DeepSeek从1.5B到671B模型的选型与部署指南》,有开发者在卓普云的账号下留言,希望可以了解如何在GPU云服务器上微调 DeepSeek 模型。在此教程中,我们将探索如何利用 DigitalOcean 的 GPU Droplet 云服务器微调 DeepSeek-R1 的蒸馏量化版本,将其转化为专门的推理助手。

由于每个公司的领域不同,使用 DeepSeek 的目的不一样。我们不可能面面俱到。这篇文章是针对如何将 DeepSeek R1 模型微调成一个针对医疗推理 AI 助手的实践过程。这个助手可以帮助医生分析患者病例,提出诊断建议,并提供经过验证的结构化的推断依据与结论。希望这样的一篇DeepSeek R1 模型微调实践,可以作为你在针对其他领域特点微调 DeepSeek R1 模型的参考。

特别鸣谢 : 感谢这篇优秀的DataCamp教程和论文——《HuatuoGPT-o1:基于LLM的医疗复杂推理探索》,它为本教程提供了启发。

掌握以下内容将有助于您更好地理解本教程内容:

微调是通过在精心准备的数据集上进一步训练预训练模型,使其适应特定任务。它在需要统一格式、特定语气要求或复杂指令的场景中可以获得很好的推理效果,因为它能优化模型在这些特定用例中的行为。相比从头开始训练模型,微调通常需要更少的计算资源和时间。但在开始微调前,开发者也应对比其他替代方案,从中选择最优解,例如提示工程(Prompt Engineering)、检索增强生成(RAG)或从头训练模型。

你可以将不同的方法进行组合,例如微调(fine-tuning)和检索增强生成(RAG)。通过将微调用于建立稳健的基线,同时结合RAG来处理动态更新,系统能够在无需持续重新训练的情况下实现适应性和高效性。归根结底,这取决于你们团队的资源限制和期望的性能表现。

确保输出结果达到预期用途的标准,并在未达到时进行迭代或调整。

在我们确定微调是我们要采取的方法后,我们就需要准备必要的组件。

Tips:DeepSeek R1 是一个开源的先进推理模型,擅长文本生成、总结和翻译任务。作为目前可用的最具性价比的开源大语言模型之一。DigitalOcean的GPU Droplets,提供包括H200、H100、L40s、MI300X在内的多种GPU,并提供云服务器与裸金属服务器可供选择,价格低于传统大厂,并支持多种功能付费方式,详情可咨询DigitalOcean中国区独家战略合作伙伴卓普云。

预训练模型是一个已经在大型通用数据集上训练过的神经网络。Hugging DeepSeek 教程 Face 提供了大量开源模型供您使用。

在本教程中,我们将使用非常流行的推理模型 DeepSeek-R1。推理模型在处理复杂的数学或编程问题等高级任务方面表现出色。我们选择 “unsloth/DeepSeek-R1-Distill-Llama-8B-bnb-4bit” 是因为它经过蒸馏和预量化,使其成为一个更节省内存且成本效益更高的模型,适合进行实验。我们特别好奇它在复杂任务(如医学分析)中的潜力。请注意,由于推理模型通常计算成本高且输出冗长,使用它们来处理摘要或翻译等简单任务可能会大材小用。

Hugging Face 拥有丰富的数据集资源。我们将使用医学 O1 推理数据集。该数据集是通过 GPT-4o 搜索结果生成的,具体方法是搜索可验证的医学问题解决方案,并通过医学验证器进行验证。

我们将使用此数据集进行监督微调(SFT),即在指令和响应数据集上训练模型。为了尽量缩小生成答案与真实答案之间的差距,SFT 会调整大型语言模型中的权重。

微调模型并不总是需要 GPU。然而,使用 GPU(或多个 GPU)可以显著加快进程,特别是对于本教程中使用的较大模型或数据集。在本文中,我们将向您展示如何利用 DigitalOcean GPU Droplets。

在开始本教程之前,建议您熟悉以下库和工具:

Unsloth 专注于加快大型语言模型(LLM)的训练速度,特别是微调。Unsloth 库中的 FastLanguageModel 类为微调 LLM 提供了简化的抽象。该类可以处理加载训练好的模型权重、预处理输入文本以及执行推理以生成输出。

Hugging Face 的 TRL 库用于使用强化学习训练转换器语言模型。本教程将使用 SFTTrainer 类。

Transformers 同样是 Hugging Face 的一个库。我们将使用 TrainingArguments 类在 SFTTrainer 中指定所需参数。

W&B 平台将用于实验跟踪。具体来说,我们将监控损失曲线。

按照 “为 AI/ML 编码设置 GPU Droplet 环境” 教程,为我们的 Jupyter Notebook 设置 GPU Droplet 环境。

从Hugging Face访问Token页面获取Hugging Face Token(需注册账户):

同样需Weights & Biases账户获取 Token:

DeepSeek R1模型微调怎么做?从入门到实战

创建系统提示词(System Prompt)

在决定是否需要进行微调之前,验证模型输出是否符合你的格式、质量、准确性等标准是一种良好的实践。由于我们关注的是推理能力,因此我们会设计一个能够引导模型进行思维链(chain of thought)推理的系统提示词。

我们不直接在输入中编写提示词,而是先编写一个包含占位符的提示词模板。

在这个提示词模板中,我们会明确说明自己所期望的内容。

请注意其中的 占位符。这一步的核心目标是引导大语言模型(LLM)在给出最终答案之前,明确地阐述其推理过程。这正是所谓的“思维链提示”(chain-of-thought prompting)。

在微调前使用系统提示词进行推理

在这一步中,我们使用结构化提示词()对问题进行格式化,以确保模型遵循逻辑推理的过程。接着,我们将输入进行分词,转换为 PyTorch 张量(tensor),并移动到 GPU(cuda)上以加速推理过程。

随后,我们使用模型生成响应,并设定关键参数,例如 (限制响应长度)。

为了获取最终的可读答案,我们将输出的 tokens 解码为文本。

你可以自由尝试不同的提示词写法,并观察它们对模型输出产生的影响。

我们使用的数据集是 ,它包含三列:(问题)、(复杂的思维链)、以及 (回答)。

DeepSeek R1模型微调怎么做?从入门到实战

我们将创建一个函数()来格式化数据集中的输入提示词。

然后,我们加载数据集并对其应用格式化函数:

与在微调过程中更新模型所有参数不同,PEFT(Parameter Efficient Fine-Tuning)方法通常只修改少量参数,从而节省计算资源和时间。

下面是我们在使用 Unsloth 的 类中的 方法时将用到的一些超参数和参数的概览:

我们这样调用 方法来配置模型:

现在我们已经评估过模型的输出,是时候使用我们的 SFT 数据集来微调预训练模型了。

SFTTrainer 是 TRL 库中的一个类,用于开发经过监督微调(Supervised Fine-tuning)的模型。

我们将使用以下导入:

训练参数

以下代码将启动训练流程:

启动训练:

可以使用 Weights and Biases 等工具进行实验追踪。核心目标是确保训练损失随着训练进行而逐渐降低,以判断模型性能是否正在提升。如果模型性能下降,可能需要重新尝试调整超参数。

如果希望让更多 AI 研究者使用和受益,可以将模型上传至 Hugging Face Hub,这样其他人就可以轻松集成你的模型到自己的项目中。

微调是将预训练模型转变为能够解决具体问题的精准工具的关键过程。在这个过程中,我们并不是在“重新发明轮子”,而是在对其进行精准调校,让它更好地为我们的目标服务。虽然预训练模型功能强大,但它们的输出往往缺乏结构性和专业度,而微调正是解决这一问题的关键。

我们希望本教程不仅帮助你理解了何时以及如何使用推理模型进行微调,也为你今后更深入地打磨这项技术提供了一些灵感。

最后,如果你还在寻找价格实惠、性能可靠、算力充足的 GPU 服务器,欢迎联系DigitalOcean中国区独家战略合作伙伴卓普云,了解DigitalOcean GPU Droplet服务器。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:Ai探索者,转载请注明出处:https://javaforall.net/237438.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 上午11:34
下一篇 2026年3月16日 上午11:34


相关推荐

关注全栈程序员社区公众号