模型概述
模型特點
模型能力
使用案例
🚀 玉蘭花迷你指令模型(YuLan-Mini-Instruct)
玉蘭花迷你指令模型(YuLan-Mini-Instruct)是一個參數規模為24億的輕量級強大模型。它基於玉蘭花迷你模型(YuLan-Mini)進行後訓練調整,在數學和代碼等核心能力上表現出色,性能可與主流模型相媲美。該模型在10.8萬億個標記上進行預訓練,並通過監督微調、偏好微調、強化學習等後訓練流程進一步提升能力。
🚀 快速開始
以下是使用Huggingface進行推理的簡單示例:
Huggingface推理示例
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
# 加載模型和分詞器
tokenizer = AutoTokenizer.from_pretrained("yulan-team/YuLan-Mini-Instruct")
model = AutoModelForCausalLM.from_pretrained("yulan-team/YuLan-Mini-Instruct", torch_dtype=torch.bfloat16)
# 輸入文本
chat = [
{"role": "system", "content": "You are YuLan-Mini, created by RUC AI Box. You are a helpful assistant."},
{"role": "user", "content": "What is Renmin University of China?"}
]
formatted_chat = tokenizer.apply_chat_template(chat, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(formatted_chat, return_tensors="pt", add_special_tokens=False)
# 生成結果
output = model.generate(inputs["input_ids"], max_new_tokens=100, temperature=0.5)
print(tokenizer.decode(output[0][inputs['input_ids'].size(1):], skip_special_tokens=True))
vLLM服務示例
vllm serve yulan-team/YuLan-Mini-Instruct --dtype bfloat16
SGLang服務示例
python -m sglang.launch_server --model-path yulan-team/YuLan-Mini-Instruct --port 30000 --host 0.0.0.0
Ollama示例
ollama run hf.co/mradermacher/YuLan-Mini-Instruct-GGUF:IQ4_XS
✨ 主要特性
- 輕量級高性能:僅有24億參數,卻能在數學和代碼推理任務中展現出與主流模型相當的性能。
- 多階段訓練:通過監督微調、偏好微調、強化學習等後訓練流程,充分挖掘模型潛力。
- 廣泛評估:在多個基準測試任務中進行了嚴格評估,結果顯示在多個領域具有競爭力。
📦 安裝指南
文檔未提及安裝相關內容,可參考快速開始部分的推理示例進行使用。
💻 使用示例
基礎用法
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
# 加載模型和分詞器
tokenizer = AutoTokenizer.from_pretrained("yulan-team/YuLan-Mini-Instruct")
model = AutoModelForCausalLM.from_pretrained("yulan-team/YuLan-Mini-Instruct", torch_dtype=torch.bfloat16)
# 輸入文本
chat = [
{"role": "system", "content": "You are YuLan-Mini, created by RUC AI Box. You are a helpful assistant."},
{"role": "user", "content": "What is Renmin University of China?"}
]
formatted_chat = tokenizer.apply_chat_template(chat, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(formatted_chat, return_tensors="pt", add_special_tokens=False)
# 生成結果
output = model.generate(inputs["input_ids"], max_new_tokens=100, temperature=0.5)
print(tokenizer.decode(output[0][inputs['input_ids'].size(1):], skip_special_tokens=True))
高級用法
文檔未提及高級用法相關代碼示例。
📚 詳細文檔
模型概述
玉蘭花迷你指令模型(YuLan-Mini-Instruct) 與同規模模型相比表現出色,尤其是在涉及數學和代碼的推理任務中。我們將其與前沿系列中參數規模相近的其他模型(如Qwen2.5 - 1.5B - Instruct和Llama3.2 - 3B - Instruct)進行了評估比較。
監督微調
數據
數據來源
我們精心挑選了兩個主要數據源:1)開源數據;2)合成數據,以確保模型實現全面的知識覆蓋和強大的特定領域專業能力。
- 開源數據:我們整理了涵蓋多個領域和學科的高質量開源數據集。這些數據集由GPT - 4等強大的專有模型構建或由人類專家精心製作,為監督微調(SFT)提供了堅實的基礎。
- 合成數據:由於高質量特定領域數據的稀缺,合成數據在提高模型的專業能力方面發揮著至關重要的作用。因此,我們還合成了大量針對數學、科學和中文常識推理等領域的數據。
- 數學:從強大的模型中提煉數據為數據構建提供了一種高效的方法,特別是在數學領域。除了選擇合適的教師模型外,選擇高質量和特定領域的初始指令同樣重要。因此,我們採用以強大數學能力著稱的Qwen2.5 - Math - 7B - Instruct作為教師模型。對於初始提煉樣本,我們從包含超過1000萬個高質量數學問答對的OpenMathInstruct2數據集中選擇不同難度的問題。每個提煉的響應都與真實答案進行匹配,以確保答案的準確性。
- 科學:為了開發高質量的科學數據集,我們首先從各種可靠來源(如Wiki、Reddit和Arxiv)收集科學文本。這些文本涵蓋了廣泛的學科,包括物理、化學、生物學和心理學。收集階段完成後,我們使用Qwen2.5 - 32B - Instruct從文本中提取問題並生成合適的答案。最後,使用主題分類器對生成的問答對進行重新分類,以確保與各自的科學類別準確對齊。
- 中文常識推理:對於中文常識推理數據的構建,我們從權威來源百度百科以及WildChat和SmolTalk - Chinese等知名平臺的真實用戶交互中收集數據。使用TF - IDF和關鍵詞匹配,我們識別和過濾具有高度語義相關性的內容,以生成多個包含知識密集型文檔的問答對。為了保持嚴格的質量標準,我們使用CMMLU分類器進行主題分類,並使用基於大語言模型(LLM)的評估來評估響應質量。為了防止幻覺,我們將基於實體的查詢與百科條目進行交叉引用,並維護一個映射列表,以確保對類似問題的回答一致。
數據過濾
在監督微調階段,訓練數據的質量對模型性能起著關鍵作用。因此,我們設計了一個全面的數據過濾管道,結合了多種質量控制策略,以確保精煉後的數據集最大程度地提高模型的有效性和可靠性。
- 去重:在數據過濾過程中,去重是一個關鍵的預處理步驟,因為冗餘數據樣本的存在會顯著限制模型學習多樣化模式的能力,從而影響訓練效率。為了解決這個問題,我們採用MinHash和局部敏感哈希(LSH)算法,能夠有效識別和去除近重複內容。
- 啟發式過濾:訓練數據中的異常模式(包括但不限於重複標點或過多亂碼文本)已被經驗證明會對模型性能產生不利影響。為了避免這種情況,我們開發了一套全面的基於規則的過濾啟發式方法,以消除可能損害模型的低質量樣本。
- 基於質量的評分:使用大語言模型作為評判者是評估數據質量的有效方法。具體來說,我們使用Qwen2.5 - 32B - Instruct作為評判者,從指令遵循、信息性和真實性三個維度對每個數據進行評分,分數範圍為1到5。然後,我們根據這三個維度的平均分數對數據進行排序,並丟棄較低百分位的樣本。
- 基於複雜度的選擇:除了數據質量低之外,過高的數據複雜度會顯著損害學習效果。這種現象在小規模語言模型中尤為明顯,因為它們處理和內化高度複雜模式的能力有限。因此,我們開發了一種方法來識別和過濾超出模型最佳學習能力的訓練樣本。每個指令的複雜度使用以下公式衡量: $$ \text{C}(x,y) = \lambda_1 \cdot L_{\text{length}} + \lambda_2 \cdot \text{Loss}{\text{it}}(x, y), $$ 其中$\lambda_1$,$\lambda_2$是超參數,$L{\text{length}}$表示指令的長度,$\text{Loss}{\text{it}}(x, y)$是基礎模型計算的損失: $$ \text{Loss}{\text{it}}(x,y)=\sum\limits_{i=1}^{|y|} \log P(y_i|x,y_{1:i-1}), $$ 其中$y_i$表示輸出$y$中的第$i$個標記,$y_{1:i - 1}$表示直到第$i - 1$個標記的序列。我們實施了基於複雜度的分層協議,然後選擇性地修剪超過經驗確定的複雜度閾值的樣本。
數據混合
在監督微調階段,簡單地聚合不同類型的數據可能會導致數據衝突,從而降低模型在特定領域的性能。為了緩解這個問題,我們根據每個數據源的特點分配數據比例,平衡通用數據和特定領域數據。此外,通過大量的增量實驗,我們還根據訓練性能和反饋即時動態調整數據比例,以達到最佳效果。具體使用的數據比例如下表所示:
類別 | 數量 | 比例 |
---|---|---|
通用英語 | 320萬 | 39% |
通用中文 | 300萬 | 36% |
數學 | 180萬 | 22% |
代碼 | 20萬 | 3% |
總計 | 820萬 | 100% |
訓練設置
模型訓練在由四個節點組成的分佈式計算基礎設施上進行,每個節點配備八個NVIDIA A800 GPU,並通過高速網絡互連。我們使用的有效批量大小為512,最大序列長度為28K標記。優化過程在2個訓練週期內進行,學習率為1e - 5。
偏好微調
偏好數據
我們的偏好數據由離線策略和在線策略數據源組合而成。
- 離線策略數據:我們彙總了一組高質量的公開可用數據集來構成這一部分。
- 在線策略數據:我們系統地整理了涵蓋多個領域的專業數據集,包括科學問題、數學、編程、中文常識、幻覺和自我意識評估。
收集指令數據後,我們從監督微調模型中採樣完成結果。對於有客觀可驗證答案的指令,我們使用大語言模型提取響應,其中正確的響應被指定為選擇響應,而錯誤的響應被分類為拒絕響應。對於其餘指令,我們使用獎勵模型Skywork/Skywork - Reward - Llama - 3.1 - 8B - v0.2進行評分。高分響應被標記為選擇,而低分響應被分類為拒絕。
構建的偏好數據最終數據集的組成如下:
類別 | 數量 | 比例 |
---|---|---|
離線策略 | 25.8萬 | 69% |
在線策略 | 11.5萬 | 31% |
總計 | 37.3萬 | 100% |
偏好微調方法
基於監督微調模型,我們採用直接偏好優化(DPO)使模型與人類偏好對齊。模型訓練2個週期,批量大小為128,學習率為5e - 7,$\beta$設置為0.1。這種配置在訓練過程中表現出有效的收斂性,同時在訓練效率和計算資源消耗之間保持平衡。
強化學習
在直接偏好優化模型的基礎上,我們通過近端策略優化(PPO)進一步提升模型的性能,並使其與人類偏好更好地對齊。
數據準備
對於PPO訓練,我們從DPO數據集中提取10000條具有挑戰性的指令。這些指令代表了不同的任務類別,能夠有效優化模型在各種場景下的性能。
獎勵模型
考慮到我們模型的參數規模相對較小,以及訓練高性能獎勵模型所需的大量計算資源,我們選擇利用開源獎勵模型在訓練過程中提供獎勵信號。具體來說,我們使用了Skywork - Reward - Llama - 3.1 - 8B - v0.2模型,該模型在獎勵建模方面表現出色。
訓練方法
訓練過程使用8個A800 GPU進行4個週期的訓練。我們在OpenRLHF框架上進行訓練,該框架為強化學習任務提供了靈活的環境。在訓練階段,我們遇到了一些技術挑戰,如獎勵作弊現象(表現為訓練不穩定和輸出長度崩潰)。為了解決這些問題,我們實施了一系列緩解策略:
- 評論家模型初始化和演員參數凍結:評論家模型從獎勵模型初始化。此外,在訓練的前15步中,演員模型的參數保持固定,以便評論家模型能夠準確評估價值估計。
- 自適應KL控制器:我們採用自適應KL控制器,根據KL散度目標動態調整KL係數(beta),在訓練過程中平衡探索和利用。
- 基於規則的獎勵作弊懲罰:我們應用基於規則的懲罰來解決獎勵作弊模式,如不完整的句子(這也有助於懲罰截斷的響應,在我們的較小模型中通常包含冗餘模式)、混合語言響應(如英語提示與中文字符)和單句響應(如“I hope this helps”)。這些識別出的模式是我們在廣泛評估過程中觀察到的系統性異常的一部分,儘管它們在各種查詢中缺乏實質性內容,但仍顯示出高獎勵分數。
PPO訓練中使用的具體超參數如下表所示:
超參數 | 值 |
---|---|
演員學習率 | $1 \times 10^{-6}$ |
評論家學習率 | $1 \times 10^{-5}$ |
訓練批量大小 | 128 |
凍結演員步數 | 15 |
訓練週期數 | 4 |
每個提示的樣本數 | 4 |
提示最大長度 | 2048 |
生成最大長度 | 2048 |
初始KL係數 | 0.01 |
KL目標 | 0.06 |
通用優勢估計λ | 0.95 |
折扣因子γ | 1.0 |
生成溫度 | 1.0 |
獎勵剪輯範圍 | (-20, 10) |
學習率預熱比例 | 0 |
學習率調度器 | 常數 |
評估
我們發佈了從經過後訓練的玉蘭花迷你指令模型在各種基準測試任務中生成的評估數據,這與我們的預訓練方法保持一致。
為了全面評估玉蘭花迷你指令模型的性能,我們對其與其他規模和能力相似的模型進行了嚴格的比較分析。對於每個基準測試任務,我們始終選擇最佳性能分數(來自我們的實證評估或已發表的結果)進行比較。
我們使用下表中列出的指標,其中分數越高越好。
核心技能 | 評估指標 |
---|---|
知識 | MMLU (0 shot, CoT) |
MMLU (5 shot) | |
TruthfulQA(0 shot) | |
推理 | ARC(0 shot) |
GPQA(5 shot) | |
數學 | MATH(0 shot, CoT) |
GSM8K(8 shot) | |
GSM8K(0 shot, CoT) | |
代碼 | HumanEval(pass@1) |
HumanEval+(pass@1) | |
HumanEval(pass@10) | |
HumanEval+(pass@10) | |
MBPP(pass@1) | |
MBPP+(pass@1) | |
MBPP(pass@10) | |
MBPP+(pass@10) |
通用知識
我們採用MMLU和TruthfulQA作為基準來評估玉蘭花迷你指令模型在基於知識的問答中的性能。對於MMLU,我們報告在無思維鏈的5 - shot標準設置和有思維鏈的0 - shot標準設置下子任務準確率的宏觀平均值。對於TruthfulQA,我們報告在無思維鏈的0 - shot標準設置下子任務準確率的宏觀平均值。如表所示,玉蘭花迷你指令模型在常識推理任務中表現出與Qwen2.5和Llama3.2模型相當的性能。
推理
我們使用ARC基準評估玉蘭花迷你指令模型的推理能力。實驗結果表明,玉蘭花迷你指令模型的性能優於Qwen2.5,在三個評估模型中保持中等性能水平。
數學
我們使用MATH和GSM8K基準評估玉蘭花迷你指令模型的數學推理能力。對於MATH,我們報告在有思維鏈的0 - shot設置下子任務準確率的宏觀平均值。對於GSM8K,我們報告在8 - shot設置和有思維鏈的0 - shot設置下的宏觀平均準確率。實驗結果表明,儘管玉蘭花迷你指令模型的規模明顯較小,但其在數學性能上優於Llama3.2。
代碼
我們在四個既定基準(HumanEval、HumanEvalPlus、MBPP和MBPPPlus)上評估代碼生成能力。實驗結果表明,玉蘭花迷你指令模型在所有基準測試中表現出色,在代碼生成任務中優於可比模型。
基準測試 | 玉蘭花迷你指令模型 | Llama3.2 - 3B - Instruct | Qwen - 2.5 - 1.5B - Instruct |
---|---|---|---|
MMLU (0 shot, CoT) | 53.6 | 60 | 57.4 |
MMLU (5 shot) | 52.7 | 63.4 | 66.5 |
TruthfulQA(0 shot) | 50.1 | 49.7 | 58.8 |
ARC(0 shot) | 51.8 | 78.6 | 47.8 |
GPQA(5 shot) | 30.1 | 32.6 | 29.8 |
MATH(0 shot, CoT) | 55.2 | 48.0 | 55.2 |
GSM8K(8 shot) | 81.8 | 43.4 | 73.2 |
GSM8K(0 shot, CoT) | 71.7 | 66.0 | 69.4 |
HumanEval(pass@1) | 67.7 | 51.5 | 61.6 |
HumanEval+(pass@1) | 61.6 | 45.2 | 47.0 |
HumanEval(pass@10) | 86.6 | 78.7 | 84.1 |
HumanEval+(pass@10) | 80.5 | 72.0 | 78.0 |
MBPP(pass@1) | 66.7 | 57.4 | 63.2 |
MBPP+(pass@1) | 56.6 | 47.8 | 52.0 |
MBPP(pass@10) | 85.7 | 80.4 | 88.1 |
MBPP+(pass@10) | 75.4 | 71.2 | 77.5 |
結論、侷限性和未來工作
我們提出了玉蘭花迷你指令模型,這是一個參數規模為24億的強大小型語言模型,採用了監督微調(SFT)、直接偏好優化(DPO)和近端策略優化(PPO)策略進行完整的後訓練過程。儘管玉蘭花迷你指令模型在MMLU等知識密集型基準測試中表現出侷限性,但我們的實驗結果表明,它在多個通用任務中展現出具有競爭力的性能。我們期望我們的實證貢獻將有助於開發更強大和更通用的大語言模型。未來的研究方向將集中在通過擴大訓練數據收集來增強數據集的多樣性和全面性,以提高推理能力。
🔧 技術細節
文檔中關於訓練過程(監督微調、偏好微調、強化學習)的數據來源、數據過濾、訓練設置、獎勵模型選擇、超參數設置等內容均屬於技術細節範疇。例如,在監督微調的數據過濾部分,詳細介紹了去重、啟發式過濾、基於質量的評分、基於複雜度的選擇等策略;在強化學習部分,說明了遇到的技術挑戰(如獎勵作弊現象)及相應的緩解策略。
📄 許可證
- 本倉庫中的代碼、模型權重和優化器狀態根據MIT許可證發佈。
- 關於模型權重、中間優化器狀態和訓練數據使用的政策將在未來更新中公佈。
- 侷限性:儘管我們努力減輕安全問題並鼓勵生成符合道德和法律的文本,但語言模型的概率性質仍可能導致意外輸出。例如,響應可能包含偏見、歧視或其他有害內容。請不要傳播此類內容。我們不對有害信息傳播所產生的任何後果負責。
引用
如果我們的報告對您的研究有幫助,請引用:
@article{YuLan-Mini-Instruct,
title={YuLan-Mini-Instruct Technical Report},
author={RUCAIBox YuLan-Mini-Instruct Team},
url={https://github.com/RUC-GSAI/YuLan-Mini},
year={2025}
}
貢獻者
玉蘭花迷你指令模型團隊
作者按字母順序排列:費白、陳志鵬、高彥子鵬、顧宇凱、胡逸文、劉一宏、閔英倩、任瑞陽、宋華通、孫爽、文繼榮、吳成浩、趙鑫、周坤、朱宇濤



