蒸馏DeepSeek-R1到自己的模型

蒸馏DeepSeek-R1到自己的模型

在本博客中,我们将介绍如何使用LoRA等技术将 DeepSeek-R1 的推理能力蒸馏到较小的模型(如 Microsoft 的 Phi-3-Mini)中。

关于LangChat

LangChat 是Java生态下企业级AIGC项目解决方案,集成RBAC和AIGC大模型能力,帮助企业快速定制AI知识库、企业AI机器人。

支持的AI大模型: Gitee AI / 阿里通义 / 百度千帆 / DeepSeek / 抖音豆包 / 智谱清言 / 零一万物 / 讯飞星火 / OpenAI / Gemini / Ollama / Azure / Claude 等大模型。

  • 官网地址:http://langchat.cn/

开源地址:

  • Gitee:https://gitee.com/langchat/langchat

  • Github:https://github.com/tycoding/langchat

深度学习模型彻底改变了人工智能领域,但其庞大的规模和计算需求可能会成为实际应用的瓶颈。模型蒸馏是一种强大的技术,它通过将知识从大型复杂模型(教师)转移到较小、更高效的模型(学生)来解决这一挑战。

在本博客中,我们将介绍如何使用 LoRA(低秩自适应)等专门技术将 DeepSeek-R1 的推理能力蒸馏到较小的模型(如 Microsoft 的 Phi-3-Mini)中。

1、什么是蒸馏?

蒸馏是一种机器学习技术,其中较小的模型(“学生”)经过训练以模仿较大的预训练模型(“老师”)的行为。目标是保留老师的大部分表现,同时显着降低计算成本和内存占用。

这个想法最早是在 Geoffrey Hinton 关于知识蒸馏的开创性论文中提出的。它不是直接在原始数据上训练学生模型,而是从老师模型的输出或中间表示中学习。这实际上是受到人类教育的启发。

为什么它很重要:

  • 成本效率:较小的模型需要更少的计算资源。

  • 速度:非常适合延迟敏感的应用程序(例如 API、边缘设备)。

  • 专业化:无需重新训练巨型模型即可针对特定领域定制模型。

2、蒸馏类型

模型蒸馏有几种方法,每种方法都有各自的优点:

数据蒸馏:

  • 在数据蒸馏中,教师模型生成合成数据或伪标签,然后用于训练学生模型。

  • 这种方法可以应用于广泛的任务,即使是那些 logits 信息量较少的任务(例如开放式推理任务)。

Logits蒸馏:

  • Logits 是应用 softmax 函数之前神经网络的原始输出分数。

  • 在 logits蒸馏中,学生模型经过训练以匹配教师的 logits,而不仅仅是最终预测。

  • 这种方法保留了更多关于教师信心水平和决策过程的信息。

特征蒸馏:

  • 特征提炼涉及将知识从教师模型的中间层转移到学生。

  • 通过对齐两个模型的隐藏表示,学生可以学习更丰富、更抽象的特征。

3、Deepseek 的蒸馏模型

为了使访问更加民主化,DeepSeek AI 发布了基于 Qwen(Qwen,2024b)和 Llama(AI@Meta,2024)等流行架构的六个蒸馏变体。他们使用 DeepSeek-R1 策划的 800k 个样本直接微调开源模型。

尽管比 DeepSeek-R1 小得多,但蒸馏模型在各种基准测试中都表现出色,通常可以匹敌甚至超越更大模型的能力。如下图所示

imgDeepseek 提炼模型基准测试(https://arxiv.org/html/2501.12948v1)

4、为什么要蒸馏自己的模型?

  • 特定任务优化

预蒸馏模型在广泛的数据集上进行训练,以在各种任务中表现良好。然而,现实世界的应用程序通常需要专业化。

示例场景:你正在构建一个金融预测聊天机器人。在这种情况下,使用 DeepSeek-R1 为金融数据集生成推理轨迹(例如,股票价格预测、风险分析),并将这些知识蒸馏成一个已经了解金融细微差别的较小模型(例如:finance-LLM)。

  • 大规模成本效率

虽然预蒸馏模型效率很高,但它们可能仍然不适合你的特定工作量。蒸馏你自己的模型可以让你针对确切的资源限制进行优化。

  • 基准性能 ≠ 真实世界性能

预蒸馏模型在基准测试中表现出色,但基准测试通常不能代表真实世界的任务。因此,你通常需要一个在真实世界场景中表现比任何预蒸馏模型都更好的模型。

  • 迭代改进

预蒸馏模型是静态的——它们不会随着时间的推移而改进。通过蒸馏自己的模型,你可以在新数据可用时不断完善它。

5、将 DeepSeek-R1 知识蒸馏成自定义小模型

首先安装库:

pip install -q torch transformers datasets accelerate bitsandbytes flash-attn --no-build-isolation  

5.1 生成和格式化数据集

你可以通过在你的环境中使用 ollama 或任何其他部署框架部署 deepseek-r1 来生成自定义域相关数据集。但是,对于本教程,我们将使用 Magpie-Reasoning-V2 数据集,其中包含 DeepSeek-R1 生成的 250K 思路链 (CoT) 推理样本,这些示例涵盖了数学推理、编码和一般问题解决等各种任务。

数据集结构

每个示例包括:

  • 指令:任务描述(例如,“解决这个数学问题”)。

  • 响应:DeepSeek-R1 的分步推理 (CoT)。

示例:

{  
  "instruction": "Solve for x: 2x + 5 = 15",  
"response": "<think>First, subtract 5 from both sides: 2x = 10. Then, divide by 2: x = 5.</think>"  
}  
from datasets import load_dataset  
  
# Load the dataset  
dataset = load_dataset("Magpie-Align/Magpie-Reasoning-V2-250K-CoT-Deepseek-R1-Llama-70B", token="YOUR_HF_TOKEN")  
dataset = dataset["train"]  
  
# Format the dataset  
def format_instruction(example):  
    return {  
        "text": (  
            "<|user|>\n"  
            f"{example['instruction']}\n"  
            "<|end|>\n"  
            "<|assistant|>\n"  
            f"{example['response']}\n"  
            "<|end|>"  
        )  
    }  
  
formatted_dataset = dataset.map(format_instruction, batched=False, remove_columns=subset_dataset.column_names)  
formatted_dataset = formatted_dataset.train_test_split(test_size=0.1)  # 90-10 train-test split  

将数据集构造为 Phi-3 的聊天模板格式:

  • <|user|>:标记用户查询的开始。

  • <|assistant|>:标记模型响应的开始。

  • <|end|>:标记回合的结束。

每个 LLM 都使用特定格式来执行指令跟踪任务。将数据集与此结构对齐可确保模型学习正确的对话模式。因此,请确保根据要提取的模型格式化数据。

5.2 加载模型和标记器

向标记器添加特殊标记 <think></think>

为了增强模型的推理能力,我们引入了这些标记。

  • <think>:标记推理的开始。

  • </think>:标记推理的结束。

这些标记帮助模型学习生成结构化的、分步的解决方案。

from transformers import AutoTokenizer, AutoModelForCausalLM  
  
model_id = "microsoft/phi-3-mini-4k-instruct"  
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)  
  
# Add custom tokens  
CUSTOM_TOKENS = ["<think>", "</think>"]  
tokenizer.add_special_tokens({"additional_special_tokens": CUSTOM_TOKENS})  
tokenizer.pad_token = tokenizer.eos_token  
  
# Load model with flash attention  
model = AutoModelForCausalLM.from_pretrained(  
    model_id,  
    trust_remote_code=True,  
    device_map="auto",  
    torch_dtype=torch.float16,  
    attn_implementation="flash_attention_2"  
)  
model.resize_token_embeddings(len(tokenizer))  # Resize for custom tokens  

5.3 配置 LoRA 以实现高效微调

LoRA 通过冻结基础模型并仅训练小型适配器层来减少内存使用量。

from peft import LoraConfig  
  
peft_config = LoraConfig(  
    r=8,  # Rank of the low-rank matrices  
    lora_alpha=16,  # Scaling factor  
    lora_dropout=0.2,  # Dropout rate  
    target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],  # Target attention layers  
    bias="none",  # No bias terms  
    task_type="CAUSAL_LM"  # Task type  
)  

5.4 设置训练参数

from transformers import TrainingArguments  
  
training_args = TrainingArguments(  
    output_dir="./phi-3-deepseek-finetuned",  
    num_train_epochs=3,  
    per_device_train_batch_size=2,  
    per_device_eval_batch_size=2,  
    gradient_accumulation_steps=4,  
    eval_strategy="epoch",  
    save_strategy="epoch",  
    logging_strategy="steps",  
    logging_steps=50,  
    learning_rate=2e-5,  
    fp16=True,  
    optim="paged_adamw_32bit",  
    max_grad_norm=0.3,  
    warmup_ratio=0.03,  
    lr_scheduler_type="cosine"  
)  

5.5 训练模型

SFTTrainer 简化了指令跟随模型的监督微调。 data_collator 批量处理示例, peft_config 支持基于 LoRA 的训练。

from trl import SFTTrainer  
from transformers import DataCollatorForLanguageModeling  
  
# Data collator  
data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm=False)  
  
# Trainer  
trainer = SFTTrainer(  
    model=model,  
    args=training_args,  
    train_dataset=formatted_dataset["train"],  
    eval_dataset=formatted_dataset["test"],  
    data_collator=data_collator,  
    peft_config=peft_config  
)  
  
# Start training  
trainer.train()  
trainer.save_model("./phi-3-deepseek-finetuned")  
tokenizer.save_pretrained("./phi-3-deepseek-finetuned")  

5.6 合并保存最终模型

训练后,必须将 LoRA 适配器与基础模型合并以进行推理。此步骤确保模型可以在没有 PEFT 的情况下独立使用。

final_model = trainer.model.merge_and_unload()  
final_model.save_pretrained("./phi-3-deepseek-finetuned-final")  
tokenizer.save_pretrained("./phi-3-deepseek-finetuned-final")  

5.7 推理

from transformers import pipeline  
  
# Load fine-tuned model  
model = AutoModelForCausalLM.from_pretrained(  
    "./phi-3-deepseek-finetuned-final",  
    device_map="auto",  
    torch_dtype=torch.float16  
)  
  
tokenizer = AutoTokenizer.from_pretrained("./phi-3-deepseek-finetuned-final")  
model.resize_token_embeddings(len(tokenizer))  
  
# Create chat pipeline  
chat_pipeline = pipeline(  
    "text-generation",  
    model=model,  
    tokenizer=tokenizer,  
    device_map="auto"  
)  
  
# Generate response  
prompt = """<|user|>  
What's the probability of rolling a 7 with two dice?  
<|end|>  
<|assistant|>  
"""  
  
output = chat_pipeline(  
    prompt,  
    max_new_tokens=5000,  
    temperature=0.7,  
    do_sample=True,  
    eos_token_id=tokenizer.eos_token_id  
)  
  
print(output[0]['generated_text'])  

下面你可以看到 phi 模型在蒸馏前后的响应。

问题:用两个骰子掷出 7 的概率是多少?

  • 蒸馏前的推理

响应简单明了。它直接提供了计算答案的步骤。

img蒸馏前的 Phi 推理

  • 蒸馏后的推理

蒸馏后的响应引入了一种更详细和结构化的方法,包括一个明确的“思考”部分,概述了思维过程和推理,这对于为复杂问题生成准确的响应非常有帮助。

img蒸馏后的 Phi 推理

最后,将蒸馏后的模型权重推送到 huggingface hub(repo_id: GPD1/DeepSeek-R1-Distill-phi-3-mini-4k-lorar8-alpha16–50000samples)。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

<think>嗯,用户问的是如何利用DeepSeek训练自己专业领域的模型。首先,我需要确认DeepSeek是什么。可能是一个深度学习平台或者框架?不过根据名字,可能和深度求索公司有关,他们开发的大模型比如DeepSeek-R1或者DeepSeek-MoE之类的。所以用户可能是指用他们的技术或工具来训练自己的领域模型。 接下来,用户需要的是步骤介绍。可能需要从数据准备、模型选择、训练配置、微调、评估到部署这几个步骤来展开。首先,数据准备是关键,特别是专业领域的数据,可能需要收集和清洗数据,确保质量和格式正确。然后选择预训练模型,比如DeepSeek提供的基座模型,可能还有不同的规模,像7B、13B参数等。 然后,模型微调部分,可能需要用领域数据对预训练模型进行微调,这里要提到微调的方法,比如全参数微调或者LoRA这样的参数高效方法。训练配置方面,需要设置学习率、批次大小、epoch等参数,可能还需要分布式训练和硬件配置,比如GPU的选择。 评估和验证部分,如何测试模型在专业任务上的表现,可能需要构建测试集,使用BLEU、ROUUE等指标,或者人工评估。最后部署和应用,比如转换成可部署的格式,集成到应用中,并持续监控和优化。 可能用户是研究人员或者企业开发者,想在自己的领域(比如医疗、金融)定制模型。需要强调数据的重要性,以及选择合适的微调方法,还有评估的必要性。另外,可能需要提到DeepSeek的具体工具或资源,比如Hugging Face上的模型,或者官方文档的支持。 还要考虑用户可能的疑问,比如需要多少数据,计算资源的要求,微调的技术细节等。需要给一个清晰的步骤指南,同时建议参考官方文档和社区资源。可能还需要提醒注意过拟合问题,数据隐私,以及合规性等。</think>要利用DeepSeek训练属于自己专业领域的模型,可以按照以下步骤进行。整个过程需要结合领域知识、数据处理和模型调优技术,以下是具体流程及关键点: --- ### **1. 明确目标与场景** - **定义任务类型**:确定模型用途(文本生成、问答、分类等),例如医疗报告生成、法律条款解析等。 - **性能要求**:明确对响应速度、准确性、资源消耗的预期。 --- ### **2. 数据准备(核心步骤)** - **数据收集**: - 专业文档(PDF/Word/数据库等) - 领域对话记录(客服日志、专家访谈) - 公开数据集(如PubMed论文、法律案例库) - **数据清洗**: - 去噪(删除无关符号、乱码) - 敏感信息脱敏(尤其医疗/金融数据) - 格式统一(文本分段、标注) - **数据增强**: - 使用GPT-4/Claude生成合成数据 - 同义词替换(专业术语需谨慎) - 知识图谱关联扩展 --- ### **3. 模型选择与配置** - **基座模型选择**: - DeepSeek-7B:适合中等算力(单卡A100) - DeepSeek-67B:需多卡并行,适合高精度场景 - DeepSeek-MoE:动态计算,优化推理成本 - **硬件配置**: - 7B模型:至少24GB显存(如RTX 4090) - 67B模型:需4×A100 80G进行参数切分 --- ### **4. 高效微调技术** - **全参数微调**: ```python # 使用DeepSeek官方示例代码片段 from transformers import Trainer, TrainingArguments training_args = TrainingArguments( output_dir="./results", learning_rate=2e-5, per_device_train_batch_size=4, gradient_accumulation_steps=8, num_train_epochs=3, fp16=True # A100/V100启用 ) ``` - **参数高效方法**: - **LoRA**:减少75%训练参数(适合专业术语适配) - **QLoRA**:4bit量化+LoRA(RTX 3090可训7B模型- **Adapter**:插入特定领域适配层 --- ### **5. 领域知识注入技巧** - **术语强化**: - 构建领域词表(如ICD-10疾病编码) - 在tokenizer中增加特殊标记 ```python tokenizer.add_tokens(["<医学实体>", "</医学实体>"]) model.resize_token_embeddings(len(tokenizer)) ``` - **知识蒸馏**: - 使用专业规则引擎生成监督信号 - 将专家系统输作为软标签 - **检索增强(RAG)**: - 建立专业向量数据库(如FAISS) - 实时检索增强生成准确性 --- ### **6. 评估与迭代** - **定量评估**: - 构建领域测试集(如法律条文问答对) - 使用BLEU-4 + ROUGE-L混合指标 - **定性评估**: - 专家评分表设计(准确性、专业度、逻辑性) - A/B测试对比基线模型 - **持续学习**: - 设置数据版本控制(DVC) - 定期增量训练(每月更新法规/论文) --- ### **7. 部署优化** - **推理加速**: - 使用vLLM部署(支持动态批处理) - TensorRT量化(FP16/INT8) - **领域专属优化**: - 定制解码策略(如强制术语生成) - 构建拒绝回答机制(超领域范围时) --- ### **注意事项** 1. **数据合规**:确保符合GDPR/HIPAA等法规 2. **灾难恢复**:定期保存checkpoint(每小时) 3. **成本控制**:使用spot实例训练,阿里云/aws竞价实例可降本60% --- ### **参考资源** - DeepSeek官方GitHub:https://github.com/deepseek-ai - Hugging Face模型库:https://huggingface.co/deepseek-ai - 领域微调白皮书:arXiv:2305.14314 通过上述流程,可将通用大模型转化为专业领域专家。例如某三甲医院使用DeepSeek-7B微调的医疗模型,在放射报告生成任务中准确率从78%提升至92%。关键成功要素在于高质量领域数据清洗和专业评估体系设计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值