Hugging Face 推出 GOLD:讓不同模型家族也能做知識(shí)蒸餾
在最近Thinking Machines的新文章(見(jiàn)文末)里指出一種很有用的模型壓縮技術(shù)——在線策略蒸餾(On-Policy Distillation),它通過(guò)從高性能“教師”模型的概率分布中轉(zhuǎn)移知識(shí)來(lái)訓(xùn)練一個(gè)小的“學(xué)生”模型。這使得學(xué)生能夠模仿教師的任務(wù)性能,同時(shí)顯著減少大小和延遲。它讓小模型在特定領(lǐng)域達(dá)到大模型的表現(xiàn),成本卻只有傳統(tǒng)方法的十分之一。

但這里有一個(gè)知識(shí)蒸餾一直存在的痛點(diǎn):老師和學(xué)生必須用同一套分詞器。這意味著你不能讓 Llama 向 Qwen 學(xué)習(xí),也不能讓 Gemma 向其他模型取經(jīng)。這就好比一個(gè)說(shuō)中文的老師,只能教懂中文的學(xué)生。
Hugging Face 的研究團(tuán)隊(duì)剛剛解決了這個(gè)問(wèn)題。他們提出的 GOLD(General On-Policy Logit Distillation)方法,讓任意兩個(gè)模型之間(即使它們來(lái)自完全不同的模型家族)都能進(jìn)行在線知識(shí)蒸餾,不管它們用的是什么分詞器。
技術(shù)核心
出現(xiàn)這一問(wèn)題的根源在于不對(duì)齊,比如:同一句話"Hugging Face is awesome!",在不同分詞器下會(huì)變成完全不同的 token 序列:

Tokenizer A:[3, 1, 2] Tokenizer B:[2, 3, 1, 0] 這種不匹配造成兩個(gè)核心問(wèn)題:序列長(zhǎng)度不同,token ID 也不對(duì)應(yīng)。之前的方法,如ULD(Universal Logit Distillation)只能簡(jiǎn)單截?cái)嗟阶疃涕L(zhǎng)度,丟失信息還容易錯(cuò)位。

GOLD 通過(guò)三步解決跨分詞器蒸餾:
- 增量解碼:同時(shí)解碼教師和學(xué)生模型的 token,獲取各自的概率分布
- 文本對(duì)齊:將相同可見(jiàn)文本的片段分組,識(shí)別需要合并的 token 位置
- 概率合并:在每組內(nèi)合并相關(guān)概率,通過(guò)對(duì)數(shù)概率求和保持語(yǔ)義完整性

具體來(lái)說(shuō):
- 序列對(duì)齊:不再簡(jiǎn)單截?cái)嗟阶疃涕L(zhǎng)度,而是識(shí)別需要合并的 token,通過(guò)對(duì)數(shù)概率求和來(lái)合并語(yǔ)義相關(guān)的片段。這樣"Hugging"和" Face"可以合并成一個(gè)完整的概念。
- 詞匯對(duì)齊:先找出兩個(gè)分詞器中相同的 token(即使 ID 不同),對(duì)這些 token 使用直接映射;對(duì)無(wú)法匹配的部分,才回退到 ULD 的排序方法。最終損失函數(shù)結(jié)合兩部分:L_GOLD = w1 * L_GKD + w2 * L_ULD

這樣即使 token 邊界不同,也能保證在完整輸出上計(jì)算損失函數(shù)。
實(shí)驗(yàn)效果
數(shù)學(xué)任務(wù)跨家族蒸餾:用 Qwen 教師模型指導(dǎo) LLaMA 學(xué)生模型,在數(shù)學(xué)任務(wù)上表現(xiàn)良好,甚至超過(guò)了 GRPO 方法。

個(gè)性化(領(lǐng)域)蒸餾:先用 SFT 提升模型的代碼能力,然后用蒸餾恢復(fù) IFEval 分?jǐn)?shù)。這驗(yàn)證了前面提到的"專業(yè)能力與通用能力平衡"問(wèn)題的解決方案。

同時(shí)需要指出的是,分詞器相似度確實(shí)影響效果,但仍然強(qiáng)于強(qiáng)化學(xué)習(xí)。Llama-3.2-1B 與 Qwen3-4B 的相似度 0.64,最終成績(jī) 0.42;Gemma-3-1b 相似度只有 0.063,表現(xiàn)相應(yīng)較差。

使用方法
GOLD 已經(jīng)集成到 TRL 庫(kù)中,使用相當(dāng)簡(jiǎn)單:
from trl.experimental.gold import GOLDConfig, GOLDTrainer
trainer = GOLDTrainer(
model="meta-llama/Llama-3.2-1B-Instruct",
teacher_model="Qwen/Qwen2.5-0.5B-Instruct",
args=GOLDConfig(
output_dir="gold-model",
use_uld_loss=True,
teacher_tokenizer_name_or_path="Qwen/Qwen2.5-0.5B-Instruct"
),
train_dataset=train_dataset,
)
trainer.train()更多:https://huggingface.co/docs/trl/main/en/gold_trainer
想要在自己的場(chǎng)景嘗試在線策略知識(shí)蒸餾,官方給出了如下是利用A??ccelerate訓(xùn)練的????(Accelerate是什么?可以閱讀此書(shū):)??配置用例:
- SFT配置:
accelerate launch \
--config_file examples/accelerate_configs/multi_gpu.yaml trl/scripts/sft.py \
--model_name_or_path Qwen/Qwen3-4B-Instruct-2507 \
--dtype auto \
--attn_implementation kernels-community/flash-attn \
--dataset_name open-r1/codeforces-cots \
--dataset_config solutions_decontaminated \
--bf16 \
--gradient_checkpointing \
--per_device_train_batch_size 1 \
--gradient_accumulation_steps 32 \
--learning_rate 1e-5 \
--num_train_epochs 1 \
--max_length 16384 \
--logging_steps 1 \
--report_to trackio \
--trackio_project Qwen3-4B-SFT-Codeforces \
--output_dir data/Qwen3-4B-SFT-Codeforces \
--push_to_hub \
--hub_model_id <your-username>/Qwen3-4B-SFT-Codeforces \
--seed 42 \
--warmup_ratio 0.05 \
--lr_scheduler_type cosine_with_min_lr \
--use_liger_kernel- 蒸餾配置:
accelerate launch \
--config_file examples/accelerate_configs/multi_gpu.yaml trl/experimental/gold/gold.py \
--model_name_or_path <sft-model> \
--dtype auto \
--attn_implementation kernels-community/flash-attn \
--dataset_name allenai/tulu-3-sft-mixture \
--dataset_train_split train \
--bf16 \
--learning_rate 1e-7 \
--gradient_checkpointing \
--per_device_train_batch_size 1 \
--gradient_accumulation_steps 64 \
--num_train_epochs 1 \
--eval_strategy steps \
--eval_steps 100 \
--temperature 1.0 \
--top_p 0.95 \
--top_k 0 \
--max_new_tokens 2048 \
--max_prompt_length 512 \
--lmbda 0.25 \
--beta 0.0 \
--use_uld_loss \
--use_extended_uld \
--uld_use_hybrid_loss \
--uld_crossentropy_weight 0.0 \
--uld_distillation_weight 1.0 \
--uld_student_temperature 1.0 \
--uld_teacher_temperature 1.0 \
--uld_hybrid_unmatched_weight 1.0 \
--uld_hybrid_matched_weight 1.0 \
--teacher_model_name_or_path Qwen/Qwen3-4B-Instruct-2507 \
--logging_steps 1 \
--push_to_hub \
--hub_model_id <your-username>/Qwen3-4B-GKD-Tulu \
--report_to trackio \
--trackio_project Qwen3-4B-GKD-Tulu \
--seed 42 \
--warmup_ratio 0.05 \
--lr_scheduler_type cosine_with_min_lr小結(jié)
這一突破非常有實(shí)用價(jià)值。以前你只能在同一家族內(nèi)做知識(shí)蒸餾,現(xiàn)在可以跨家族進(jìn)行。在線策略蒸餾對(duì)于需要在資源受限環(huán)境下部署高性能模型的場(chǎng)景特別有用,可以用最好的模型作為教師,采各家所長(zhǎng),訓(xùn)練出適合自己場(chǎng)景的模型。
On-Policy Distillation:https://thinkingmachines.ai/blog/on-policy-distillation/
本文轉(zhuǎn)載自??AI工程化??,作者:ully

















