滿血DeepSeek-R1免費用!附帶數(shù)據(jù)蒸餾的一些想法!
最近DeepSeek-R1蒸餾太火了,昨天在群里跟群友們問白嫖R1接口的事情,想著多點搞免費額度蒸餾一波滿血版DeepSeek-R1,來做做試驗。
結果一個小伙伴,跟我講,他們(無問芯穹)的滿血版DeepSeek-R1 API是免費調用的,不僅如此,還有DeepSeek-V3、Deepseek蒸餾版本模型R1-Distill-Qwen-32b也是免費的。
當然,現(xiàn)在DeepSeek流量真的爆炸,公眾號標題帶DeepSeek流量都會更高一些,算是現(xiàn)象級模型了。在這里為春節(jié)期間同樣努力奮斗,放出新模型的Kimi、Qwen感到可惜,流量確實沒打過。
但發(fā)現(xiàn)跟多人有存在一個誤區(qū)(應該是普通用戶們),覺得R1是萬能的。
但注意的一點是,滿血版R1很強,蒸餾版本的就沒有那么強了,并且滿血版本大多數(shù)人沒有資格本地部署,所以如果是個人使用,不如使用API來的是在(心疼那些花錢賣本地部署資料的朋友,我覺得關注我的應該沒有吧~)。
還有,DeepSeek的官方論文都指出了現(xiàn)在R1存在的一些限制,比如在function calling、多輪對話、復雜角色扮演、Json格式輸出等方面,是不如通用模型DeepSeek-V3的。但都很強,開源社區(qū)第一確實毋庸置疑。
DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning
還有就是R1到底適合什么落地場景呢?現(xiàn)在可以看到,代碼、數(shù)學、文學創(chuàng)作都是一等一的強,并且R1的輸出更自由(啥都敢說)。
但是個人在RAG的場景上做了相關的實驗,對比R1-Distill-Qwen32B和Qwen2.5-32B-Intruct的效果,100道題(簡單、復雜、總結等都有),R1-Distill-Qwen32B對了94道,Qwen2.5-32B-Intruct對了92道,基本上差不多,但推理模型輸出的結果更長,響應時間更久,那么在真正工程化落地的時候,就沒有性價比。(當然可以說研究使用、或通向AGI的必走之路,但我比較片面,還是在想還有哪些是非R1不可,不能用V3的)
不過,DeepSeek這一波無論是論文細節(jié),還是開源的蒸餾模型,確實給我(很多人)很大的啟發(fā),屬實良心,起碼我現(xiàn)在不用強化學習,純SFT也能做推理模型。
比如前兩天大火的s1和LIMO都是純SFT+一些推理trick,實現(xiàn)了模型推理能力的提高,AIME上也是超過o1-preview版本。
并且數(shù)據(jù)蒸餾也不是一個新鮮話題了,2023年我們SFT的數(shù)據(jù)不就是蒸餾ChatGPT嘛,為了保證數(shù)據(jù)質量,后面從GPT3.5變成GPT4...,現(xiàn)在推理模型,我們開始蒸餾DeepSeek-R1了,不蒸餾o1是因為之前OpenAI不開放推理過程,雖然現(xiàn)在開放了,但是也不是完整版,是總結版,雖然可用,但不如用R1~
你會發(fā)現(xiàn),又回到了從前,開始搞數(shù)據(jù)、數(shù)據(jù)篩選、SFT(當然r1-zero也沒問題哈,這里純了SFT),只不過數(shù)據(jù)從原始通用數(shù)據(jù),現(xiàn)在變成了帶<think>的數(shù)據(jù),輸出從原來的512,變成了4096甚至更長~
回歸正題,前面說用API來進行數(shù)據(jù)蒸餾,主要是滿血版需要的部署資源太多了,對于普通人來說可望而不可即,想做點實驗,還是用免費API來的實在。
從無問芯穹的官方(https://docs.infini-ai.com/),登錄之后,找到“模型廣場”,就可以看到有哪些模型了。
然后,在API KEY管理的地方,創(chuàng)建個key就可以了。
調用方式,就跟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,一個由深度求索公司開發(fā)的智能助手,我擅長通過思考來應對復雜的數(shù)學、代碼和邏輯推理等任務。如果您有任何問題,我會盡我所能為您提供幫助。', role='assistant', function_call=None, tool_calls=None, reasoning_cnotallow='用戶問我是誰,我需要用中文回答。首先,我應該明確介紹自己的身份,比如是一個AI助手,由深度求索公司開發(fā)。然后,提到我的功能,比如回答問題、提供信息幫助。接下來,可能需要說明我和其他AI的不同之處,比如注重邏輯和可靠。最后,保持友好,邀請用戶提問。要確保語言簡潔明了,符合口語化,避免術語,結構清晰。')
reasoning_content: 用戶問我是誰,我需要用中文回答。首先,我應該明確介紹自己的身份,比如是一個AI助手,由深度求索公司開發(fā)。然后,提到我的功能,比如回答問題、提供信息幫助。接下來,可能需要說明我和其他AI的不同之處,比如注重邏輯和可靠。最后,保持友好,邀請用戶提問。要確保語言簡潔明了,符合口語化,避免術語,結構清晰。
content: 您好!我是DeepSeek-R1,一個由深度求索公司開發(fā)的智能助手,我擅長通過思考來應對復雜的數(shù)學、代碼和邏輯推理等任務。如果您有任何問題,我會盡我所能為您提供幫助。
關于數(shù)據(jù)蒸餾的操作,也比較簡單,就是將你準備好的prompt或者試題,先調用DeepSeek-R1模型生成Response,如果需要保證生成數(shù)據(jù)的質量,可以對數(shù)學題數(shù)據(jù)進行Math-Verify工具驗證一下(前提是有答案),或者再利用其他模型校驗一下答案,給個分數(shù)。之前也有一些數(shù)據(jù)篩選、過濾的方法,可以參考。
- 指令微調數(shù)據(jù)的高效篩選方法-CaR(排序&聚類)
- DEITA-大模型指令微調的數(shù)據(jù)高效篩選方法
- 高質量指令數(shù)據(jù)篩選方法-MoDS
- 如何從數(shù)據(jù)集中自動識別高質量的指令數(shù)據(jù)-IFD指標的使用
萬變不離其宗,搞數(shù)據(jù),多搞數(shù)據(jù),多搞高質量數(shù)據(jù),但是使用r1時也有一些注意的內容,官方Github也有提供。
下面是我用GSM8K_zh中一個樣本造的數(shù)據(jù)結果,如下:
reasoning_content: 好的,我現(xiàn)在要解決貝蒂買新錢包的問題。讓我仔細讀一遍題目,確保我理解所有的信息和要求。
題目是說,貝蒂正在為一只價值100美元的新錢包存錢。她現(xiàn)在只有她需要的一半的錢。她的父母決定給她15美元,她的祖父母給她的錢是她父母的兩倍。那么貝蒂還需要多少錢才能買到錢包?
首先,我需要明確題目中的各個數(shù)據(jù)和他們之間的關系。首先,錢包的總價格是100美元,這是貝蒂需要存夠的目標金額。她現(xiàn)在有的錢是她需要的一半,這里可能需要仔細理解一下。題目中說“貝蒂只有她需要的一半的錢”,這里的“她需要的”指的是不是整個錢包的價格呢?也就是說,貝蒂現(xiàn)在已有的錢是100美元的一半?或者說,這里的“她需要的”指的是她自己需要存的那部分,即除去父母和祖父母給的錢后的金額?不過這樣的話可能存在循環(huán),因為她現(xiàn)在已有的錢可能包括父母和祖父母給的,但根據(jù)題目順序,可能應該先計算她原來已有的錢,再加上父母和祖父母給的錢,然后看看還差多少。
不過根據(jù)題目的描述順序,貝蒂“只有她需要的一半的錢”,可能這里的“需要的”是指整個錢包的價格,也就是100美元的一半。即貝蒂現(xiàn)在已經有50美元了。接下來她的父母給了她15美元,祖父母給的是父母的兩倍,也就是30美元。這樣的話,貝蒂現(xiàn)在總共有50+15+30=95美元。所以還需要100-95=5美元。不過是不是這樣呢?
不過也有可能這里的“她需要的一半的錢”中的“需要的”可能指的是她自己需要存的金額,即總金額減去父母和祖父母給的資助。但這樣的話會比較復雜,可能需要用代數(shù)的方法來解。
不過根據(jù)常規(guī)的題目表述方式,可能應該先理解為貝蒂現(xiàn)有的錢是總金額的一半,即她已經有50美元了。然后父母給她15,祖父母給的是兩倍即30,總共得到45美元。這樣她現(xiàn)有的加上得到的,就是50+15+30=95,還需要5美元。
不過另一種可能性是,“她需要的”是指她自己原本需要存的金額,即100美元,而她現(xiàn)有的錢是這個數(shù)目的一半,即50美元。然后父母給15,祖父母給30,總共是50+15+30=95,還差5。
那可能答案就是5美元?
不過讓我再仔細檢查一遍,確保沒有理解錯誤。
題目分解:
1. 錢包價格:$100
2. 貝蒂現(xiàn)有金額:她需要的一半。這里“她需要的”可能是指整個錢包的價格,所以她有100的一半,即50美元。
3. 父母給的:15美元
4. 祖父母給的:父母的兩倍,即15×2=30美元
所以現(xiàn)有金額加上父母和祖父母給的:50+15+30=95美元
所以還需要的錢:100-95=5美元。
看起來沒錯。但是有沒有可能這里的“她需要的”指的是她自己需要湊的金額,即父母和祖父母給的錢之外的差額?
比如,假設貝蒂自己需要存的錢是X,那么現(xiàn)在她只有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減去得到的錢嗎?這似乎不符合常理,因為可能題目中的“她需要的”應該指的是總金額,而不是她自己需要存的部分。
或者可能是我理解錯了?
再仔細看題目,“貝蒂只有她需要的一半的錢”,這里的“她需要”可能指的是她原本需要自己存的金額,即在得到父母和祖父母的錢之前所需的金額?或者是指整個錢包的總金額?
如果按照總金額來計算,那么她現(xiàn)有的是50美元,父母給她15,祖父母給30,所以總共有50+15+30=95,還差5美元,答案就是5美元。
如果這里的“她需要的”是指她原本需要自己存的金額,即不包括父母和祖父母的資助,那么可能需要另解。
比如,假設貝蒂原本需要自己存的錢是X,那么她現(xiàn)在存到了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{ 美元} \]
貝蒂現(xiàn)有和獲得的錢總和為:
\[ 50 + 15 + 30 = 95 \text{ 美元} \]
因此,她還需要的金額為:
\[ 100 - 95 = \boxed{5} \text{ 美元} \]
順便說一下,現(xiàn)在也有一些開源的蒸餾r1的數(shù)據(jù),但基本上都是英文數(shù)據(jù),由于個人做中文場景較多,所以需要自己蒸餾一些中文數(shù)據(jù)來提高模型效果~
因為無問芯穹的接口跟openai一樣,接口是兼容的,所以比如正常對話用chatbox、代碼上對接cursor、vscode都是直接url+key替換就行。
本文轉載自 ??NLP工作站??,作者: 劉聰NLP
