满血DeepSeek-R1免费用!附带数据蒸馏的一些想法!

发布于 2025-2-17 07:26
浏览
0收藏

最近DeepSeek-R1蒸馏太火了,昨天在群里跟群友们问白嫖R1接口的事情,想着多点搞免费额度蒸馏一波满血版DeepSeek-R1,来做做试验。

结果一个小伙伴,跟我讲,他们(无问芯穹)的满血版DeepSeek-R1 API是免费调用的,不仅如此,还有DeepSeek-V3、Deepseek蒸馏版本模型R1-Distill-Qwen-32b也是免费的。

满血DeepSeek-R1免费用!附带数据蒸馏的一些想法!-AI.x社区

当然,现在DeepSeek流量真的爆炸,公众号标题带DeepSeek流量都会更高一些,算是现象级模型了。在这里为春节期间同样努力奋斗,放出新模型的Kimi、Qwen感到可惜,流量确实没打过。

但发现跟多人有存在一个误区(应该是普通用户们),觉得R1是万能的。

但注意的一点是,满血版R1很强,蒸馏版本的就没有那么强了,并且满血版本大多数人没有资格本地部署,所以如果是个人使用,不如使用API来的是在(心疼那些花钱卖本地部署资料的朋友,我觉得关注我的应该没有吧~)。

还有,DeepSeek的官方论文都指出了现在R1存在的一些限制,比如在function calling、多轮对话、复杂角色扮演、Json格式输出等方面,是不如通用模型DeepSeek-V3的。但都很强,开源社区第一确实毋庸置疑。

满血DeepSeek-R1免费用!附带数据蒸馏的一些想法!-AI.x社区

DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning

还有就是R1到底适合什么落地场景呢?现在可以看到,代码、数学、文学创作都是一等一的强,并且R1的输出更自由(啥都敢说)。

但是个人在RAG的场景上做了相关的实验,对比R1-Distill-Qwen32B和Qwen2.5-32B-Intruct的效果,100道题(简单、复杂、总结等都有),R1-Distill-Qwen32B对了94道,Qwen2.5-32B-Intruct对了92道,基本上差不多,但推理模型输出的结果更长,响应时间更久,那么在真正工程化落地的时候,就没有性价比。(当然可以说研究使用、或通向AGI的必走之路,但我比较片面,还是在想还有哪些是非R1不可,不能用V3的)

不过,DeepSeek这一波无论是论文细节,还是开源的蒸馏模型,确实给我(很多人)很大的启发,属实良心,起码我现在不用强化学习,纯SFT也能做推理模型。

比如前两天大火的s1和LIMO都是纯SFT+一些推理trick,实现了模型推理能力的提高,AIME上也是超过o1-preview版本。

并且数据蒸馏也不是一个新鲜话题了,2023年我们SFT的数据不就是蒸馏ChatGPT嘛,为了保证数据质量,后面从GPT3.5变成GPT4...,现在推理模型,我们开始蒸馏DeepSeek-R1了,不蒸馏o1是因为之前OpenAI不开放推理过程,虽然现在开放了,但是也不是完整版,是总结版,虽然可用,但不如用R1~

你会发现,又回到了从前,开始搞数据、数据筛选、SFT(当然r1-zero也没问题哈,这里纯了SFT),只不过数据从原始通用数据,现在变成了带<think>的数据,输出从原来的512,变成了4096甚至更长~

回归正题,前面说用API来进行数据蒸馏,主要是满血版需要的部署资源太多了,对于普通人来说可望而不可即,想做点实验,还是用免费API来的实在。

从无问芯穹的官方(https://docs.infini-ai.com/),登录之后,找到“模型广场”,就可以看到有哪些模型了。

满血DeepSeek-R1免费用!附带数据蒸馏的一些想法!-AI.x社区

然后,在API KEY管理的地方,创建个key就可以了。

满血DeepSeek-R1免费用!附带数据蒸馏的一些想法!-AI.x社区

调用方式,就跟openai一样,接口是兼容的,只不过将url换成https://cloud.infini-ai.com/maas/v1即可。

from openai import OpenAI

api_key = "你的API KEY"
base_url = "https://cloud.infini-ai.com/maas/v1"

model_name = "deepseek-r1"
client = OpenAI(
    api_key=api_key,
    base_url=base_url
)
response = client.chat.completions.create(
    model=model_name,
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "text",
                    "text": "你是谁"
                }
            ]
        }],
    temperature=0.6,
    # stream=True
)

print(response.choices[0].message)
print("reasoning_content:", response.choices[0].message.reasoning_content)
print("content:", response.choices[0].message.content)

结果:

ChatCompletionMessage(cnotallow='您好!我是DeepSeek-R1,一个由深度求索公司开发的智能助手,我擅长通过思考来应对复杂的数学、代码和逻辑推理等任务。如果您有任何问题,我会尽我所能为您提供帮助。', role='assistant', function_call=None, tool_calls=None, reasoning_cnotallow='用户问我是谁,我需要用中文回答。首先,我应该明确介绍自己的身份,比如是一个AI助手,由深度求索公司开发。然后,提到我的功能,比如回答问题、提供信息帮助。接下来,可能需要说明我和其他AI的不同之处,比如注重逻辑和可靠。最后,保持友好,邀请用户提问。要确保语言简洁明了,符合口语化,避免术语,结构清晰。')
reasoning_content: 用户问我是谁,我需要用中文回答。首先,我应该明确介绍自己的身份,比如是一个AI助手,由深度求索公司开发。然后,提到我的功能,比如回答问题、提供信息帮助。接下来,可能需要说明我和其他AI的不同之处,比如注重逻辑和可靠。最后,保持友好,邀请用户提问。要确保语言简洁明了,符合口语化,避免术语,结构清晰。
content: 您好!我是DeepSeek-R1,一个由深度求索公司开发的智能助手,我擅长通过思考来应对复杂的数学、代码和逻辑推理等任务。如果您有任何问题,我会尽我所能为您提供帮助。

关于数据蒸馏的操作,也比较简单,就是将你准备好的prompt或者试题,先调用DeepSeek-R1模型生成Response,如果需要保证生成数据的质量,可以对数学题数据进行Math-Verify工具验证一下(前提是有答案),或者再利用其他模型校验一下答案,给个分数。之前也有一些数据筛选、过滤的方法,可以参考。

  • 指令微调数据的高效筛选方法-CaR(排序&聚类)
  • DEITA-大模型指令微调的数据高效筛选方法
  • 高质量指令数据筛选方法-MoDS
  • 如何从数据集中自动识别高质量的指令数据-IFD指标的使用

万变不离其宗,搞数据,多搞数据,多搞高质量数据,但是使用r1时也有一些注意的内容,官方Github也有提供。

满血DeepSeek-R1免费用!附带数据蒸馏的一些想法!-AI.x社区

下面是我用GSM8K_zh中一个样本造的数据结果,如下:

reasoning_content: 好的,我现在要解决贝蒂买新钱包的问题。让我仔细读一遍题目,确保我理解所有的信息和要求。

题目是说,贝蒂正在为一只价值100美元的新钱包存钱。她现在只有她需要的一半的钱。她的父母决定给她15美元,她的祖父母给她的钱是她父母的两倍。那么贝蒂还需要多少钱才能买到钱包?

首先,我需要明确题目中的各个数据和他们之间的关系。首先,钱包的总价格是100美元,这是贝蒂需要存够的目标金额。她现在有的钱是她需要的一半,这里可能需要仔细理解一下。题目中说“贝蒂只有她需要的一半的钱”,这里的“她需要的”指的是不是整个钱包的价格呢?也就是说,贝蒂现在已有的钱是100美元的一半?或者说,这里的“她需要的”指的是她自己需要存的那部分,即除去父母和祖父母给的钱后的金额?不过这样的话可能存在循环,因为她现在已有的钱可能包括父母和祖父母给的,但根据题目顺序,可能应该先计算她原来已有的钱,再加上父母和祖父母给的钱,然后看看还差多少。

不过根据题目的描述顺序,贝蒂“只有她需要的一半的钱”,可能这里的“需要的”是指整个钱包的价格,也就是100美元的一半。即贝蒂现在已经有50美元了。接下来她的父母给了她15美元,祖父母给的是父母的两倍,也就是30美元。这样的话,贝蒂现在总共有50+15+30=95美元。所以还需要100-95=5美元。不过是不是这样呢?

不过也有可能这里的“她需要的一半的钱”中的“需要的”可能指的是她自己需要存的金额,即总金额减去父母和祖父母给的资助。但这样的话会比较复杂,可能需要用代数的方法来解。

不过根据常规的题目表述方式,可能应该先理解为贝蒂现有的钱是总金额的一半,即她已经有50美元了。然后父母给她15,祖父母给的是两倍即30,总共得到45美元。这样她现有的加上得到的,就是50+15+30=95,还需要5美元。

不过另一种可能性是,“她需要的”是指她自己原本需要存的金额,即100美元,而她现有的钱是这个数目的一半,即50美元。然后父母给15,祖父母给30,总共是50+15+30=95,还差5。

那可能答案就是5美元?

不过让我再仔细检查一遍,确保没有理解错误。

题目分解:

1. 钱包价格:$100

2. 贝蒂现有金额:她需要的一半。这里“她需要的”可能是指整个钱包的价格,所以她有100的一半,即50美元。

3. 父母给的:15美元

4. 祖父母给的:父母的两倍,即15×2=30美元

所以现有金额加上父母和祖父母给的:50+15+30=95美元

所以还需要的钱:100-95=5美元。

看起来没错。但是有没有可能这里的“她需要的”指的是她自己需要凑的金额,即父母和祖父母给的钱之外的差额?

比如,假设贝蒂自己需要存的钱是X,那么现在她只有X的一半,也就是0.5X。然后父母给15,祖父母给30,总共有0.5X +15+30=0.5X +45。这个总金额需要等于100,所以0.5X +45=100 → 0.5X=55 → X=110,这显然有问题,因为题目中钱包的价格是100美元,所以贝蒂自己需要存的X应该是100减去得到的钱吗?这似乎不符合常理,因为可能题目中的“她需要的”应该指的是总金额,而不是她自己需要存的部分。

或者可能是我理解错了?

再仔细看题目,“贝蒂只有她需要的一半的钱”,这里的“她需要”可能指的是她原本需要自己存的金额,即在得到父母和祖父母的钱之前所需的金额?或者是指整个钱包的总金额?

如果按照总金额来计算,那么她现有的是50美元,父母给她15,祖父母给30,所以总共有50+15+30=95,还差5美元,答案就是5美元。

如果这里的“她需要的”是指她原本需要自己存的金额,即不包括父母和祖父母的资助,那么可能需要另解。

比如,假设贝蒂原本需要自己存的钱是X,那么她现在存到了X的一半,即0.5X。然后父母给15,祖父母给30,这样总共是0.5X +15+30=0.5X+45,这个总和等于钱包的100美元,所以0.5X +45=100 → 0.5X=55 → X=110。这时候X是她原本需要自己存的金额,但这样的话,X=110,但钱包总价是100,这显然矛盾,所以这种情况下是不可能的。因此,这种解释是错误的。

所以正确的理解应该是,贝蒂目前已有的钱是总金额100美元的一半,也就是50美元,然后加上父母和祖父母的资助,计算差额。

因此,贝蒂还需要5美元。
content: 贝蒂的目标是存够100美元。首先,她目前已有的钱是所需总额的一半,即:  
\[ \frac{100}{2} = 50 \text{ 美元} \]  

她的父母给了她15美元,祖父母给的是父母的两倍:  
\[ 15 \times 2 = 30 \text{ 美元} \]  

贝蒂现有和获得的钱总和为:  
\[ 50 + 15 + 30 = 95 \text{ 美元} \]  

因此,她还需要的金额为:  
\[ 100 - 95 = \boxed{5} \text{ 美元} \]

顺便说一下,现在也有一些开源的蒸馏r1的数据,但基本上都是英文数据,由于个人做中文场景较多,所以需要自己蒸馏一些中文数据来提高模型效果~

因为无问芯穹的接口跟openai一样,接口是兼容的,所以比如正常对话用chatbox、代码上对接cursor、vscode都是直接url+key替换就行。

本文转载自 NLP工作站​,作者: 刘聪NLP

收藏
回复
举报
回复
相关推荐