DeepSeek 网摘deepseek.wang
EN
📄 查看英文原文

教程 · 2026-04-25 · 机器翻译,仅供参考

The DeepSeek Fine Tuning Guide for LoRA, QLoRA and Full SFT

Tutorials·April 25, 2026·By DS指南编辑
DeepSeek fine-tuning tutorial card showing the five steps to fine-tune V4 weights with LoRA, QLoRA, or full SFT — data preparation, hyperparameter setup, training, adapter merge, and serving.

您有一个领域——法律条款、支持工单、内部Python约定——标准模型正确率达到70%。剩余的30%是生产中可能出现问题的部分。本DeepSeek微调指南将带您了解2026年4月的现实选项:在R1蒸馏和Coder上使用LoRA和QLoRA,对于有较大GPU预算的团队,在V4-Flash上进行全面监督微调,以及决定是否有所回报的数据集和评估工作。我在生产中运行了V4-Pro和V4-Flash,并在单个24 GB卡上微调了70亿-80亿的蒸馏模型。到结束时,您将知道从哪个DeepSeek检查点开始,如何准备数据,需要租用哪些硬件,以及发送工作适配器的具体命令。

What you will build

Developer monitor showing a DeepSeek V4 fine-tuning run with loss-curve-shaped bars and step metrics.

本教程结束时,您将拥有一个参数高效的适配器(LoRA或QLoRA),在小型DeepSeek检查点上训练,对保留的分割进行评估,并准备好在兼容OpenAI的API后面提供服务。相同的配方可以扩展到多GPU全面微调大型权重,预算和风险相应增加。

在我们开始之前的一个注意事项: DeepSeek的旗舰API模型不是微调的正确起点DeepSeek-V4-Pro是周围最大的开源权重模型,比Kimi K2.6大,比V3.2大两倍;Pro检查点在Hugging Face上为865 GB,Flash为160 GB。R1模型包含超过600亿个参数,需要数据中心进行微调,这也是为什么DeepSeek提供了更小的蒸馏版本以供适应性调整。大多数团队应该微调一个蒸馏或Coder变体,并使用V4 API进行其他所有操作。

Prerequisites

  • Python 3.10+和具备CUDA功能的GPU。对于7-8B蒸馏上的QLoRA,16 GB VRAM是最低要求;24 GB(RTX 4090、A10G)更舒适。
  • 一个Hugging Face账户,带有写访问令牌(用于下载权重和推送您的适配器)。
  • 500-5,000个经过清洗的训练示例,以JSONL聊天格式,外加一个保留的评估分割。
  • 这三个: transformers, peft, trl, bitsandbytes, datasets, accelerate可选。 unsloth 为了内存和速度的胜利。
  • 如果您计划调用V4 API进行合成数据生成或评估比较,请参阅 DeepSeek API getting started 首先进行操作指南。

第1步 — 选择正确的基线检查点

这个单一决策为项目设定了成本上限。这里的错误选择不能通过后续的超参数调整来挽救。

检查点 参数 最小VRAM(QLoRA) Best for Licence
DeepSeek-R1-Distill-Qwen-1.5B 1.5B 8 GB 烟雾测试,边缘部署 MIT
DeepSeek-R1-Distill-Qwen-7B 7B 16 GB 分类,函数调用 MIT
DeepSeek-R1-Distill-Llama-8B 8B 16 GB 通用SFT,推理风格迁移 MIT
DeepSeek-Coder 6.7B 6.7B 16 GB 代码补全,内部SDK约定 MIT(代码)/ DeepSeek模型许可(权重)
DeepSeek-V4-Flash 284B / 13B active 多GPU集群 全套SFT适用于严肃的预算 MIT
DeepSeek-V4-Pro 1.6T / 49B active 仅限大型集群 稀有;通常使用API MIT

选择一个适合您GPU预算的蒸馏基础模型,例如DeepSeek-R1-Distill-Qwen-7B,然后准备500-5000个带有训练和验证分割的JSONL ChatML格式的标记示例,这是教科书般的起点。V4-Flash权重是实际的自托管目标——在284B参数和每个token激活13B参数的情况下,V4-Flash可以在大多数中等规模团队负担得起的多个GPU设置上运行,而V4-Pro的总参数量为1.6T,需要显著的集群容量以在生产延迟下运行,因此大多数团队将使用DeepSeek API进行Pro版本,并考虑仅对Flash进行自托管。如果您的任务是代码形状的,从以下步骤开始: DeepSeek Coder 基础;如果它是推理形状的,则是一个 DeepSeek R1 Distill 基础。

第2步 — 准备数据集

数据集质量是微调成功最重要的预测因素。使用参数高效的微调技术如LoRA和QLoRA,没有大规模GPU预算的团队可以将这些模型适应特定任务,通常在500-5000个示例中看到10-30个百分点的准确率提升。如果数据有噪声,这种提升会很快消失。

Format

使用JSONL,每行一个示例,以ChatML风格的短信。一个支持分类任务的简单示例:

{"messages": [
  {"role": "system", "content": "Classify the ticket. Output one of: billing, bug, feature, other."},
  {"role": "user", "content": "Charged twice this month, need refund."},
  {"role": "assistant", "content": "billing"}
]}

分割和卫生

  1. 将80/10/10分割为训练、验证和保留测试。永远不要让测试分割泄露到训练中。
  2. 去重——精确匹配和近似重复会提高验证准确率,但不会改进模型。
  3. 在可能的情况下平衡类别。如果90%的票是 other,模型将学会说 other.
  4. 首先通过基础模型运行每个示例的合理性提示;如果基础模型已经正确处理,则无需在训练中使用它。

第3步 — 配置LoRA / QLoRA

LoRA冻结基础模型权重,并向特定层(通常是注意力投影层)注入小的可训练低秩矩阵;例如,r=16时,在70亿参数模型中针对4个注意力矩阵,可训练参数大约为4000万,与70亿基础参数相比,在QLoRA下将VRAM使用量从大约84GB降低到6-8GB,因为QLoRA以4位量化形式加载基础模型,所以70亿模型可以适应单个16GB GPU。

合理的默认值,这些默认值在我的运行和已发布的菜谱中一直有效:

  • 排名(r): 16用于分类,32用于指令跟随,只有当你有信号表明32参数不足时才使用64。
  • Alpha: 2倍排名是一个安全的起点。
  • 目标模块: q_proj, k_proj, v_proj, o_proj。仅在注意力适配器欠拟合时添加门/上/下投影。
  • 学习率: QLoRA为2e-4,bf16上的LoRA为1e-4。
  • 迭代次数: 3个用于超过2,000个示例,对于较小的集合最多5个。监控验证损失并在早期停止。
  • 批处理大小: 在16 GB内存上为1-2,在24 GB以上为4-8。使用梯度累积达到16-32的有效批处理大小。

第4步 — 训练

Desktop workstation with a single GPU and an external monitor showing a DeepSeek V4 QLoRA fine-tuning run.

下面是一个使用Python QLoRA的最小运行示例: transformers, peft, and trl它在JSONL文件上训练了8B Llama蒸馏的DeepSeek:

import torch
from datasets import load_dataset
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training
from trl import SFTTrainer, SFTConfig

MODEL_ID = "deepseek-ai/DeepSeek-R1-Distill-Llama-8B"

bnb = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16,
    bnb_4bit_use_double_quant=True,
)

tok = AutoTokenizer.from_pretrained(MODEL_ID)
model = AutoModelForCausalLM.from_pretrained(MODEL_ID, quantization_config=bnb, device_map="auto")
model = prepare_model_for_kbit_training(model)

lora = LoraConfig(
    r=16, lora_alpha=32, lora_dropout=0.05,
    target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
    bias="none", task_type="CAUSAL_LM",
)
model = get_peft_model(model, lora)

ds = load_dataset("json", data_files={"train": "train.jsonl", "eval": "eval.jsonl"})

cfg = SFTConfig(
    output_dir="ds-r1-distill-tuned",
    num_train_epochs=3,
    per_device_train_batch_size=2,
    gradient_accumulation_steps=8,
    learning_rate=2e-4,
    bf16=True,
    logging_steps=20,
    eval_strategy="steps",
    eval_steps=100,
    save_steps=200,
)

trainer = SFTTrainer(model=model, args=cfg, train_dataset=ds["train"],
                     eval_dataset=ds["eval"], tokenizer=tok)
trainer.train()
trainer.save_model("ds-r1-distill-tuned/final")

如果你想一个更高级别的包装器,LlamaFactory支持DeepSeek以及LLaMA、Qwen3、Mistral和其他模型,提供持续预训练、监督微调、奖励建模、PPO、DPO、KTO和ORPO,以及16位全调优、冻结调优、LoRA和2/3/4/5/6/8位QLoRA。它将大部分样板代码隐藏在YAML配置后面。

Step 5 — Verify it worked

三个检查,按顺序:

  1. 验证损失曲线: 应该先下降然后趋于平稳。一个在保留准确率停滞不前的同时持续下降的损失是过拟合——下次早点停止。
  2. 保留的准确度或精确匹配: 在步骤2中您预留的测试集上进行计算。与未调整的基础模型的相同指标进行比较。如果差距低于5个百分点,则微调没有发挥其应有的作用。
  3. 手动检查20个输出。 有时数值上的胜利会隐藏格式回归、幻觉标签或重复的标记。

然后将适配器合并并提供服务。对于本地服务,vLLM和SGLang都直接加载LoRA适配器。如果您更喜欢托管的无服务器路径,请参阅[2]。对于容器方面,或者将适配器推送到Hugging Face,并从任何支持PEFT的推理运行时加载它。 DeepSeek Docker deployment 对于容器方面,或者将适配器推送到Hugging Face,并从任何支持PEFT的推理运行时加载它。

第6步 — 常见错误和修复

Symptom Likely cause Fix
第一步CUDA内存不足 批处理大小过高,无法使用VRAM 将每个设备的批处理大小设置为1,将梯度累积提升到16+
几步之后损失变为NaN T4上的fp16下溢 在Ampere+上使用bf16;仅对低LR的老旧卡保留fp16
验证损失从第0步开始平稳 适配器未连接或目标模块错误 Print model.print_trainable_parameters()应该是~0.1–1%
模型输出基础样式,而非您的数据 训练和推理之间的聊天模板不匹配 在推理时使用确切的分词器聊天模板;测试使用 tokenizer.apply_chat_template
重复标记或胡言乱语 在过少的示例上过度训练 减少训练轮数,添加更多示例,或将LR降低到1e-4

DeepSeek V4的适用位置

V4系列改变了这些项目中的一些计算方式。deepseek-chat和deepseek-reasoner将在2026年7月24日15:59 UTC之后完全退役且不可访问,目前分别重定向到deepseek-v4-flash的非思考模式和思考模式。如果您的微调之前旨在通过提示扩展 deepseek-chat的行为,V4-Flash的API调用率要低得多,可能在不进行任何训练的情况下缩小差距。V4的两个级别默认都使用1,000,000个token的上下文窗口,输出最多384,000个token——之前需要微调以适应检索式任务的上下文现在通常可以内联使用。

Chat requests hit POST /chat/completions, the OpenAI-compatible endpoint at https://api.deepseek.com;一个与Anthropic兼容的界面位于相同的基URL。思考模式是一个参数,而不是一个单独的模型——传递 reasoning_effort="high" with extra_body={"thinking": {"type": "enabled"}} on either V4 model and the response returns reasoning_content alongside the final contentAPI是无状态的:客户端必须随每个请求重新发送会话历史,与网页/应用程序不同,后者会为用户保留会话历史。

使用OpenAI SDK的最小Python调用:

from openai import OpenAI
client = OpenAI(base_url="https://api.deepseek.com", api_key="...")
resp = client.chat.completions.create(
    model="deepseek-v4-flash",
    messages=[{"role": "user", "content": "Summarise this ticket: ..."}],
    temperature=0.0,
    max_tokens=512,
)

在决定微调之前值得了解的其他参数: top_p, JSON mode (response_format={"type": "json_object"} — 设计用于返回有效的JSON,但不保证;在提示中包含“json”一词以及一个小示例模式,并设置 max_tokens 足够高以避免截断),工具调用,通过 stream=true,FIM补全(Beta — 需要 thinking: {"type": "disabled"}),以及聊天前缀完成(Beta)。推荐的温度为0.0用于代码和数学,1.0用于数据分析,1.3用于一般聊天和翻译,1.5用于创意写作。

成本:训练自己的模型与调用API

在租用GPU之前先计算一下数字。以每月100万次调用的工作负载为例,系统提示缓存2000个令牌,用户消息200个令牌,响应300个令牌。在 deepseek-v4-flash 截至2026年4月的数据:

  • Cached input: 2,000 × 1,000,000 = 2,000,000,000 tokens × $0.0028/M = $5.60
  • Uncached input: 200 × 1,000,000 = 200,000,000 tokens × $0.14/M = $28.00
  • Output: 300 × 1,000,000 = 300,000,000 tokens × $0.28/M = $84.00
  • Total: $117.60 per month

The same workload on deepseek-v4-pro (促销至2026-05-31:缓存$0.003625,未缓存$0.435,每100万输出$0.87;列表价格$0.0145 / $1.74 / $3.48续订后)总计 $1,421.00 — 大约是Flash账单的10倍。相比之下,RunPod A10G实例起价约为$0.50/小时(验证当前价格)并且一个包含大约1000个示例的教程数据集,在3个epoch中需要1到3小时在A10G上运行,单独的训练运行成本大约为$1.50到$3.00——但考虑到迭代、评估、调试以及在专用端点上的持续服务,大多数适应性项目在远高于$117.60/月的更高体积下才能达到盈亏平衡。要获得更详细的分解,请尝试使用 DeepSeek pricing calculator.

总是先检查 official DeepSeek pricing page 提交前——预览窗口的比率可能会变动,且于2025-09-05结束的离峰折扣计划尚未恢复。

许可证 — 发货前请阅读

LoRA vs QLoRA vs Full SFT for DeepSeek V4

每个模型独立,不通用。V4模型均支持1百万token的上下文窗口,最大输出为384K tokens,且均在MIT许可下发布——意味着在Hugging Face上可免费商用并完全访问权重。R1及其蒸馏版也是MIT许可(包括代码和权重)。较旧版本——V3基础版、Coder-V2、VL2——将MIT代码与单独的DeepSeek模型许可分开处理权重。如果你的微调将用于商业产品,请在训练前检查特定于你的基础检查点的Hugging Face仓库。

替代路径

  • 提示工程。 提示是可逆的;微调则不是。参见 DeepSeek prompt engineering.
  • RAG而不是微调。 当目标是针对私有文档的召回时,检索几乎总是更便宜。该 DeepSeek RAG tutorial 覆盖了管道。
  • 托管SFT。 如果你根本不想运行GPU,像Fireworks这样的提供商在其平台上支持DeepSeek微调——如果你还需要他们的推理层,这很有用。
  • 本系列中的其他教程。 浏览 DeepSeek tutorials 中心以获取相关的分步指南。

DeepSeek AI Guide is an independent resource and is not affiliated with DeepSeek or its parent company. Model IDs, pricing and API behaviour change; check the official DeepSeek documentation and pricing page before committing to a production decision.

您可以直接微调DeepSeek V4-Pro吗?

技术上是的——权重是MIT许可并在Hugging Face上——但实际上几乎没有人应该这么做。在1.6T总参数下,即使是LoRA迭代也需要严重的集群容量。大多数团队会微调较小的R1蒸馏版或DeepSeek Coder,然后在API中调用V4-Pro以处理那些前沿级基准提升重要的任务。参见 DeepSeek V4-Pro overview for context.

在7B DeepSeek模型上进行QLoRA需要多少GPU内存?

单个具有16GB VRAM的GPU是实际的下限。使用QLoRA的4位基加载和注意力层的LoRA适配器,一个7B模型可以在16GB的卡上运行,批大小为1-2;24GB的卡(RTX 4090,A10G)则提供bf16和批大小4+。阅读 DeepSeek system requirements 指南提供了完整的硬件说明。

多大的数据集大小足够进行有用的微调?

500到5,000个高质量标注样本是参数高效微调的最佳范围,大多数团队在这个范围内看到10到30个百分点的提升。一旦超过几百个样本,质量就会胜过数量——一千个干净、去重、平衡的样本将优于一万个嘈杂的样本。 DeepSeek prompt engineering 指南涵盖了数据整形技术。

微调DeepSeek R1是否会保留其推理风格?

只有当你的数据集保留了这个结构。R1及其蒸馏版本在答案之前输出推理内容;如果训练示例丢失了这个结构,适配器会将其训练掉。要么在目标输出中包含推理,要么使用官方聊天模板,该模板将推理与答案分开。 reasoning_content from content. See the DeepSeek R1 模型预期输出形状的页面。

我应该微调还是使用带有提示的V4 API?

首先尝试提示和检索。截至2026年4月,V4-Flash的输入速率起价为每百万缓存令牌0.0028美元,而1,000,000个令牌的上下文窗口吸收了微调过去所需的大部分内容。当您有一个稳定、狭窄的任务;数千个示例;以及一个清晰的质量或延迟差距,提示无法弥补时,再进行微调。 DeepSeek API best practices 指南涵盖了每种方法何时能带来收益。

Sources & Methodology

Last source check: April 30, 2026

Primary sources

Technical references

Methodology

Information in this article was checked against the official DeepSeek documentation, the article's cited primary sources, and the deepseekai.guide pricing dataset on the date shown above. Where third-party numbers are quoted, the originating source is linked inline so the reader can verify and re-check.

Data confidence

引用带主要来源链接的事实为高;上下文叙述为中等。

Editorial note

AI tooling moves quickly. If you spot an outdated number or a broken link, the contact link in the footer is the fastest way to flag it for the editorial team.