DistillKit
DistillKit 是一款专为大语言模型(LLM)知识蒸馏设计的开源工具包,旨在帮助开发者高效地将大型“教师”模型的能力迁移到更小、更快的“学生”模型中。它同时支持在线蒸馏(训练时实时调用教师模型)和离线蒸馏(基于预存数据训练)两种工作流。
在大规模场景下,离线蒸馏面临巨大的存储挑战:直接保存数十亿 token 的概率分布数据成本极高。DistillKit 通过独特的先进对数概率压缩技术解决了这一难题。该技术结合多项式近似、误差扩散量化及位级打包策略,在大幅降低存储空间和内存占用的同时,完美保留了蒸馏质量,使得原本难以落地的超大规模离线蒸馏变得切实可行。
此外,DistillKit 提供了灵活的损失函数组合(如 KL 散度、排名损失等),并深度集成 HuggingFace 生态(Transformers、TRL、Accelerate),开箱即用。该工具已历经实战检验,支撑了 Arcee 多个知名开源模型的训练。
DistillKit 非常适合 AI 研究人员、算法工程师及希望优化模型推理成本的开发者使用。无论是想要复现前沿蒸馏成果,还是需要在有限资源下定制轻量级模型,它都能提供生产级的稳定支持。
使用场景
某 AI 初创团队试图将自研的千亿参数大模型能力迁移至端侧设备,计划通过知识蒸馏训练一个轻量级学生模型。
没有 DistillKit 时
- 存储成本爆炸:直接保存教师模型在数十亿 token 上的完整 logits 分布需要 PB 级存储空间,硬件预算严重超支。
- 工程实现复杂:团队需自行研发压缩算法来平衡精度与体积,耗时数月仍难以解决内存吞吐量瓶颈。
- 训练流程低效:若采用在线蒸馏,巨大的教师模型需实时参与训练,导致显存占用过高且推理延迟拖慢整体进度。
- 灵活性受限:缺乏现成的模块化损失函数组合,难以针对特定任务调整 KL 散度、排序损失等策略以优化效果。
使用 DistillKit 后
- 存储大幅缩减:利用其多项式近似与位打包技术,将日志数据压缩数个数量级,使离线蒸馏数据集可轻松存入普通硬盘。
- 开箱即用高效:直接调用内置的先进压缩工作流,无需重复造轮子,几天内即可搭建起生产级的离线蒸馏管线。
- 资源解耦灵活:支持从预捕获的高压缩数据中训练,完全移除训练时对巨型教师模型的依赖,显著降低显存门槛。
- 策略组合自由:通过配置文件即可灵活编排多种损失函数与稀疏分布策略,快速验证不同蒸馏方案对模型性能的影响。
DistillKit 通过突破性的日志压缩技术与成熟的工作流,让大规模离线知识蒸馏从“理论可行”变为“工程落地”,极大降低了小模型获取大模型能力的门槛。
运行环境要求
- 未说明
- 必需 NVIDIA GPU
- 在线蒸馏需足够显存同时容纳教师和学生模型及稠密分布
- 离线蒸馏适合显存受限场景
- 建议使用支持 Flash Attention 2 的显卡,并配合 bf16 精度训练
未说明

快速开始
DistillKit
一个灵活且生产就绪的大语言模型知识蒸馏工具包,支持在线和离线蒸馏工作流,并配备先进的 logits 压缩技术。
DistillKit 为 Arcee 的多款热门开源模型的训练提供了强大支持,包括 Virtuoso、SuperNova Medius 和 Blitz。
特性
- 在线蒸馏:学生模型训练过程中实时进行教师推理
- 离线蒸馏:基于预先捕获的教师输出进行训练,并采用高级压缩技术
- 先进的 Logits 压缩:创新的多项式近似 + 量化 + 位打包技术,在保持蒸馏质量的同时实现极高的压缩比
- 灵活的损失函数:可组合的损失函数,包括 KL 散度、JSD、TVD、排序损失以及隐藏状态对齐等
- 稀疏与稠密支持:高效处理 top-k 稀疏分布或精确的稠密分布
- 经过实战检验:支撑 Arcee 蒸馏模型发布的基础设施
- HuggingFace 集成:基于 Transformers、TRL 和 Accelerate 构建
为什么选择 DistillKit?
虽然在线蒸馏相对简单,但大规模的离线蒸馏需要精心设计。当在数十亿个 token 上进行蒸馏时,仅存储 top-k 的 token-logits 对就会变得极其昂贵。
DistillKit 的压缩系统是数月实验的结果,旨在平衡存储成本、内存吞吐量和蒸馏质量之间的微妙关系。我们的方法如下:
- 对 logits 分布曲线进行多项式近似
- 对残差进行误差扩散量化以保持质量
- 使用任意位宽(1-64 位)进行位级打包
这使得原本不可行的离线蒸馏工作流程得以实际运行。
安装
git clone https://github.com/arcee-ai/distillkit.git
cd distillkit
pip install -e .
可选:Logits 捕获
要捕获您自己的教师输出,请安装捕获依赖项:
pip install -e ".[capture]"
对于大多数用户,我们建议从我们提供的预捕获教师数据集开始(见下文的 数据集)。
快速入门
离线蒸馏
使用预捕获的教师输出训练学生模型:
# config.yaml
project_name: my-distillation
model: Qwen/Qwen3-8B
output_path: ./output
sequence_length: 8192
dataset:
train_dataset:
repo_id: arcee-ai/Qwen3-235B-Logits-Packed-8192 # 预捕获的教师输出
split: train
prepacked: true
teacher:
kind: dataset
logprob_compressor:
d: 151936 # 词汇表大小
delta_encoding: true
error_diffusion: false
exact_dtype: float32
exact_k: 32
k: 128
polynomial_terms: [0, 1, 2]
residual_bins: []
term_dtype: float32
loss_functions:
- function: cross_entropy
weight: 0.5
- function: kl
weight: 0.5
temperature: 1.0
missing_probability_handling: zero
sparse_chunk_length: 1024
training_args:
num_train_epochs: 1
per_device_train_batch_size: 1
gradient_accumulation_steps: 8
learning_rate: 2.0e-6
bf16: true
optim: adamw_torch
gradient_checkpointing: true
运行训练:
distillkit config.yaml
在线蒸馏
对于教师在学生训练过程中实时运行的在线蒸馏,完整的配置示例请参阅 examples/afm_test.yml。
核心概念
大语言模型的知识蒸馏
知识蒸馏是将知识从一个(可能更大的)“教师”模型转移到“学生”模型的过程。与仅基于硬标签(正确 token)进行训练不同,学生模型会学习教师对各个 token 的概率分布,这是一种更为丰富的学习信号。
主要优势:
- 更小、更快的模型,同时保持竞争力能
- 更低的推理成本
- 更易于在资源受限的环境中部署
在线与离线蒸馏的区别
在线蒸馏:
- 教师在学生训练过程中实时运行
- 无存储开销
- 适用场景:当您的显存足以同时容纳教师和学生模型,并且可以处理稠密分布时
离线蒸馏:
- 教师输出被预先捕获并压缩
- 可以用同一个教师模型训练多个学生模型
- 适用场景:显存有限、需要重复利用教师信号,或者进行大规模训练时
经验法则: 如果您能够在显存中同时容纳教师和学生的稠密分布,则使用在线蒸馏;否则,使用我们的压缩系统进行离线蒸馏是更好的选择。
稀疏与稠密分布
稠密分布包含整个词汇表的概率。这种方式更准确,但占用大量内存。
稀疏分布只存储 top-k 的 token,是对完整稠密分布的一种有损但实用且高效的近似。在充足的训练数据下,稀疏蒸馏可以达到与稠密蒸馏相当的效果。
DistillKit 同时支持这两种方式,并通过自动分块实现长序列的高效处理。
Logits 压缩
我们的压缩系统在存储效率和蒸馏质量之间取得了平衡:
- 从教师输出中选择 top-k logits
- 按对数概率排序,可选应用差分编码
- 对分布曲线进行多项式拟合
- 对残差进行量化,可选误差扩散
- 将所有内容打包成字节向量
您可以调整许多参数,以找到适合您特定需求的存储与保真度之间的权衡。
推荐配置(Arcee 新捕获时使用的配置):
logprob_compressor:
d: <your_vocab_size_here>
k: 128
exact_k: 16
exact_dtype: bfloat16
polynomial_terms: [0, 1, 2, 3, 4, "sqrt"]
term_dtype: float32
residual_bins: []
delta_encoding: false
error_diffusion: false
这种配置每 token 占用约 300 字节(未压缩分布大小的 0.15%),且质量损失极小。
如果您对存储空间较为紧张,可以尝试以下经济型配置:
logprob_compressor:
d: <your_vocab_size_here>
k: 50
exact_k: 1
exact_dtype: bfloat16
polynomial_terms: [0, 1, "sqrt"]
term_dtype: float32
residual_bins: []
delta_encoding: false
error_diffusion: false
该配置每 token 仅需约 114 字节,体积更小,且重建质量优于直接以 bfloat16 存储 top-32 logits。
请注意,用于捕获 logits 的配置必须与蒸馏配置保持一致。混合使用可能会导致效果不佳。
配置指南
损失函数
DistillKit 支持可组合的损失函数,并为每个损失函数分配独立的权重:
基于分布的损失
kl:Kullback-Leibler 散度(标准蒸馏损失)jsd:Jensen-Shannon 散度(KL 的对称替代方案)tvd:总变差距离
排序损失
hinge:Hinge 排序损失logistic_ranking:Logistic 排序损失
隐藏状态对齐
hs_mse:教师模型与学生模型隐藏状态之间的均方误差hs_cosine:隐藏状态之间的余弦相似度
标准损失
cross_entropy:标准语言建模损失
所有基于分布的损失都支持稀疏和密集两种模式。可以组合使用多种损失函数:
loss_functions:
- function: cross_entropy
weight: 0.25
- function: kl
weight: 0.5
temperature: 2.0
- function: hs_cosine
weight: 0.25
教师模型配置
离线(从数据集获取):
teacher:
kind: dataset
logprob_compressor:
d: 128256
k: 128
exact_k: 16
delta_encoding: true
...
# 或:
legacy_logit_compression:
vocab_size: 128256
k: 128
exact_k: 32
polynomial_degree: 8
...
在线(HuggingFace 模型):
teacher:
kind: hf
path: Qwen/Qwen3-8B
kwargs: # 加载教师模型时传递的关键字参数
attn_implementation: flash_attention_2
torch_dtype: bfloat16
高级主题
压缩深度解析
压缩系统支持两种模式:
传统压缩(完全基于多项式):
legacy_logit_compression:
vocab_size: 128256 # 教师词汇表大小
k: 128 # 每个 token 的总对数概率数,精确值加近似值
exact_k: 32 # 以浮点数存储的对数概率数量
polynomial_degree: 8 # 近似多项式的次数
with_sqrt_term: false # 在多项式中包含平方根项
term_dtype: float32 # 多项式系数的精度
invert_polynomial: true # 为改善数值特性而反转多项式
分布量化(较新、更灵活):
logprob_compressor:
d: 128256 # 教师词汇表大小
k: 128 # 每个 token 的总对数概率数,精确值加近似值
exact_k: 16 # 以浮点数存储的对数概率数量
exact_dtype: bfloat16 # “精确”对数概率的数据类型
delta_encoding: false # 以差值形式存储对数概率(不推荐)
error_diffusion: false # 执行误差扩散以将量化误差分散到各个值上(不推荐)
polynomial_terms: # 用于近似尾部的多项式项列表
- 0
- 1
- 2
- “sqrt”
term_dtype: float32 # 存储多项式系数的数据类型
residual_bins: # 可选的存储量化残差与近似尾部之差的桶列表
- scale_dtype: float16 # 此桶的比例因子数据类型
element_bits: 8 # 每个元素的位数
num_elements: 16 # 此桶中的元素总数
- scale_dtype: float32 # bfloat16 也可用
element_bits: 2 # 可以使用最多 64 位
num_elements: 64
...
隐藏状态蒸馏
将学生模型的隐藏状态与教师模型的隐藏状态对齐:
layer_mapping: all # 或指定层对
loss_functions:
- function: hs_mse
weight: 0.5
对于跨架构蒸馏,隐藏状态会通过学习得到的线性映射进行投影。你也可以通过设置 force_hidden_state_projection: true 来为同架构蒸馏启用此功能。
捕获教师输出
要创建自己的离线蒸馏数据集:
python -m distillkit.sample_logits_vllm \
--model meta-llama/Llama-3.1-70B \
--dataset allenai/tulu-3-sft-mixture \
--output ./llama3_70b_tulu_logits/ \
--compression-config ./compression_config.yaml
需要 vLLM(参见【可选对数概率捕获】)。
内存管理技巧
对于长序列:
- 使用
sparse_chunk_length将序列分块处理(例如1024) - 使用 DeepSpeed ZeRO 第 1 或第 2 阶段来容纳更多 token
一般节省内存的方法:
- 使用
optim: paged_adamw_8bit或optim: adamw_bnb_8bit - 启用 Flash Attention 2:
use_flash_attention: true - 使用 bfloat16 而不是 float32
- 启用
gradient_checkpointing - 减小批量大小,增加梯度累积步数
示例
- 离线蒸馏(70B → 8B):
examples/llama_70b_base.yml - 带隐藏状态的在线蒸馏:
examples/afm_test.yml - 多模态模型蒸馏:
examples/mistral3.yaml
数据集
我们发布了多个预先捕获的教师数据集:
- Qwen3-235B 指令遵循数据集:约 15 亿 tokens 的通用指令数据,上下文长度为 8192
- DeepSeek V3/R1 合成混合模式推理数据集:约 50 亿 tokens,来自 DeepSeek V3 和 R1,带有前缀以区分推理与非推理轨迹,上下文长度为 16k
- DeepSeek V3 基础模型数据集:约 12 亿 tokens 的原始完成数据,来自 DCLM,由 DeepSeek V3 基础模型捕获
跨架构蒸馏
DistillKit 可以与 mergekit-tokensurgeon 结合使用,实现跨分词器、跨架构的蒸馏。许多 Arcee 模型同时结合了这两种工具:
- 使用 tokensurgeon 将学生模型的嵌入适配到教师模型的分词器
- 使用 DistillKit 将教师的知识蒸馏到学生模型
- 可选地再转换回学生模型原有的分词器,甚至进行其他奇特的合并操作,随心所欲
训练提示
- 从 ~0.5 的交叉熵权重开始,然后根据数据集的质量调整权重
- 蒸馏温度:
temperature: 2.0是一个不错的初始选择 - 缺失概率处理:使用
zero只关注教师最自信的预测;使用uniform则同时匹配教师的不确定性
引用
如果你在研究中使用了 DistillKit,请引用以下内容:
@software{distillkit2024,
title = {DistillKit:大型语言模型的灵活知识蒸馏},
author = {Goddard, Charles 和 Atkins, Lucas},
year = {2024},
publisher = {Arcee AI},
url = {https://github.com/arcee-ai/distillkit}
}
社区与支持
- 问题反馈: GitHub Issues
- 讨论交流: Arcee Discord
注意:DistillKit 是一个开源研究项目。虽然它为我们的多款生产级模型提供了支持,并且在资源允许的情况下我们会尽力解决遇到的问题,但社区支持属于尽力而为的范畴。
许可证
DistillKit 采用 Apache License 2.0 许可证发布。
致谢
- Flash Attention 的打包实现改编自 Functionary(MIT 许可证)
- 基于 HuggingFace Transformers、TRL 和 Accelerate 构建
由 Arcee AI 竭诚打造
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器