DeepSeek-R1 蒸馏数据的生成

1. 推理数据的生成

  • 推理任务的选择:研究人员选择了多种推理任务,包括数学、编码、科学推理和逻辑推理等。这些任务通常具有明确的解决方案,适合通过规则进行验证。

  • 拒绝采样(Rejection Sampling):从DeepSeek-R1的强化学习(RL)检查点生成推理轨迹。具体步骤如下:

    • 对于每个推理任务,研究人员生成多个模型输出(即多个推理轨迹)。

    • 通过规则或生成式奖励模型(Generative Reward Model)来评估这些输出的正确性。规则奖励模型用于那些可以通过确定性规则验证的任务(如数学问题),而生成式奖励模型则用于更复杂的任务,通过将模型输出与真实答案进行比较来评估。

    • 过滤掉不符合要求的输出,例如语言混合、长段落、代码块等,只保留正确的推理轨迹。

  • 数据规模:最终,研究人员生成了约600,000个与推理相关的训练样本。

2. 非推理数据的生成

  • 非推理任务的选择:非推理任务包括写作、事实问答、自我认知、翻译等。这些任务不需要复杂的推理过程,但需要模型具备良好的语言理解和生成能力。

  • 数据来源:研究人员使用了DeepSeek-V3的监督微调(SFT)数据集,并在此基础上生成潜在的推理链(Chain-of-Thought, CoT)来回答问题。

  • 生成过程

    • 对于复杂的非推理任务(如写作或事实问答),研究人员调用DeepSeek-V3生成潜在的推理链,然后再生成最终答案。

    • 对于简单的查询(如“你好”),研究人员不提供推理链,直接生成答案。

  • 数据规模:最终,研究人员生成了约200,000个与非推理相关的训练样本。

3. 数据格式

  • 推理数据格式:推理数据的输出格式通常包括推理过程和最终答案。推理过程被包含在<think></think>标签中,而最终答案则包含在<answer></answer>标签中。这种格式有助于模型在生成答案时保持结构化的推理过程。

  • 非推理数据格式:非推理数据的格式相对简单,通常直接生成答案,而不需要复杂的推理过程。

4. 数据过滤和后处理

  • 语言一致性:为了避免语言混合问题(如中英文混合),研究人员在生成数据时引入了语言一致性奖励,确保推理过程使用目标语言。

  • 可读性:为了提高生成数据的可读性,研究人员设计了可读的输出格式,并在每个响应的末尾添加了总结部分,帮助用户快速理解推理结果。

5. 最终数据集

  • 总规模:推理数据和非推理数据的总和约为800,000个训练样本。

  • 数据集组成:数据集包括推理任务和非推理任务,涵盖了数学、编码、科学推理、逻辑推理、写作、事实问答、自我认知、翻译等多个领域。

6. 数据的使用

  • 蒸馏训练:生成的800,000个样本被用于对小型模型进行监督微调(SFT),使其能够模仿DeepSeek-R1的推理能力。

  • 评估:蒸馏后的小型模型在多个基准测试中表现出色,证明了数据生成过程的有效性。

### 部署 DeepSeek-R1 蒸馏模型 #### 所需环境准备 为了确保 DeepSeek-R1 模型能够在本地环境中顺利运行,建议先安装并配置好 Python 环境以及必要的库。对于拥有较强推理能力的 PC 本地部署来说,可以选择较大规模的模型版本如 1.5b, 7b, 8b 或者 14b 版本[^1]。 #### 安装依赖项 通常情况下,官方文档会提供详细的依赖列表。一般而言,这可能涉及到 PyTorch、Transformers 库以及其他辅助工具包。可以通过 pip 工具来快速完成这些软件包的安装: ```bash pip install torch transformers datasets ``` #### 获取模型 根据描述中的指导,获取指定型号的方法如下所示: ```bash ollama run deepseek -r1:8b ``` 这条指令将会自动拉取所需的 DeepSeek-R1 模型及其对应的权重文件至本地存储位置。 #### 设置配置文件 创建一个新的 JSON 文件用于保存模型初始化时所需要的参数设置。下面是一个简单的例子: ```json { "model": "deepseek-r1", "version": "8b", "device": "cuda", // 如果 GPU 可用则设为 cuda 否则 cpu "batch_size": 8, "max_length": 512 } ``` 该配置指定了所使用的特定版本(此处假设选择了 `8b`),同时也定义了一些基本选项比如批处理大小和最大输入长度等超参调整空间。 #### 运行服务端口监听脚本 编写一段简短的服务启动代码片段,用来加载上述配置并将模型实例化后开启 HTTP API 接口供外部调用查询: ```python from transformers import AutoModelForCausalLM, AutoTokenizer import json from flask import Flask, request, jsonify app = Flask(__name__) with open('config.json', 'r') as f: config = json.load(f) tokenizer = AutoTokenizer.from_pretrained(config["model"]) model = AutoModelForCausalLM.from_pretrained(config["model"]).to(config['device']) @app.route('/predict', methods=['POST']) def predict(): input_text = request.json.get("text") inputs = tokenizer(input_text, return_tensors="pt").input_ids.to(config['device']) outputs = model.generate(inputs) result = tokenizer.decode(outputs[0], skip_special_tokens=True) return jsonify({"output": result}) if __name__ == "__main__": app.run(host='0.0.0.0', port=5000) ``` 这段程序利用了 Flask 微框架搭建了一个简易 web server 来接收 POST 请求,并返回由给定提示词生成的结果字符串。注意这里假定读者已经具备一定的编程基础以便理解以上实现细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值