DistillKit

GitHub
922 122 中等 1 次阅读 昨天Apache-2.0语言模型开发框架
AI 解读 由 AI 自动生成,仅供参考

DistillKit 是一款专为大语言模型(LLM)知识蒸馏设计的开源工具包,旨在帮助开发者高效地将大型“教师”模型的能力迁移到更小、更快的“学生”模型中。它同时支持在线蒸馏(训练时实时调用教师模型)和离线蒸馏(基于预存数据训练)两种工作流。

在大规模场景下,离线蒸馏面临巨大的存储挑战:直接保存数十亿 token 的概率分布数据成本极高。DistillKit 通过独特的先进对数概率压缩技术解决了这一难题。该技术结合多项式近似、误差扩散量化及位级打包策略,在大幅降低存储空间和内存占用的同时,完美保留了蒸馏质量,使得原本难以落地的超大规模离线蒸馏变得切实可行。

此外,DistillKit 提供了灵活的损失函数组合(如 KL 散度、排名损失等),并深度集成 HuggingFace 生态(Transformers、TRL、Accelerate),开箱即用。该工具已历经实战检验,支撑了 Arcee 多个知名开源模型的训练。

DistillKit 非常适合 AI 研究人员、算法工程师及希望优化模型推理成本的开发者使用。无论是想要复现前沿蒸馏成果,还是需要在有限资源下定制轻量级模型,它都能提供生产级的稳定支持。

使用场景

某 AI 初创团队试图将自研的千亿参数大模型能力迁移至端侧设备,计划通过知识蒸馏训练一个轻量级学生模型。

没有 DistillKit 时

  • 存储成本爆炸:直接保存教师模型在数十亿 token 上的完整 logits 分布需要 PB 级存储空间,硬件预算严重超支。
  • 工程实现复杂:团队需自行研发压缩算法来平衡精度与体积,耗时数月仍难以解决内存吞吐量瓶颈。
  • 训练流程低效:若采用在线蒸馏,巨大的教师模型需实时参与训练,导致显存占用过高且推理延迟拖慢整体进度。
  • 灵活性受限:缺乏现成的模块化损失函数组合,难以针对特定任务调整 KL 散度、排序损失等策略以优化效果。

使用 DistillKit 后

  • 存储大幅缩减:利用其多项式近似与位打包技术,将日志数据压缩数个数量级,使离线蒸馏数据集可轻松存入普通硬盘。
  • 开箱即用高效:直接调用内置的先进压缩工作流,无需重复造轮子,几天内即可搭建起生产级的离线蒸馏管线。
  • 资源解耦灵活:支持从预捕获的高压缩数据中训练,完全移除训练时对巨型教师模型的依赖,显著降低显存门槛。
  • 策略组合自由:通过配置文件即可灵活编排多种损失函数与稀疏分布策略,快速验证不同蒸馏方案对模型性能的影响。

DistillKit 通过突破性的日志压缩技术与成熟的工作流,让大规模离线知识蒸馏从“理论可行”变为“工程落地”,极大降低了小模型获取大模型能力的门槛。

运行环境要求

操作系统
  • 未说明
GPU
  • 必需 NVIDIA GPU
  • 在线蒸馏需足够显存同时容纳教师和学生模型及稠密分布
  • 离线蒸馏适合显存受限场景
  • 建议使用支持 Flash Attention 2 的显卡,并配合 bf16 精度训练
内存

未说明

依赖
notes该工具支持在线和离线两种知识蒸馏模式。离线模式依赖预捕获并压缩的教师模型输出(Logits),可大幅降低显存需求但需要存储空间。配置压缩参数时,蒸馏配置必须与捕获时使用的配置完全一致。建议开启梯度检查点(gradient_checkpointing)和使用 bf16 精度以优化显存使用。若需自行捕获教师输出,需额外安装 vLLM 依赖。
python未说明
torch
transformers
trl
accelerate
vLLM (可选,用于捕获教师输出)
DistillKit hero image

快速开始

DistillKit

一个灵活且生产就绪的大语言模型知识蒸馏工具包,支持在线和离线蒸馏工作流,并配备先进的 logits 压缩技术。

DistillKit 为 Arcee 的多款热门开源模型的训练提供了强大支持,包括 VirtuosoSuperNova MediusBlitz

特性

  • 在线蒸馏:学生模型训练过程中实时进行教师推理
  • 离线蒸馏:基于预先捕获的教师输出进行训练,并采用高级压缩技术
  • 先进的 Logits 压缩:创新的多项式近似 + 量化 + 位打包技术,在保持蒸馏质量的同时实现极高的压缩比
  • 灵活的损失函数:可组合的损失函数,包括 KL 散度、JSD、TVD、排序损失以及隐藏状态对齐等
  • 稀疏与稠密支持:高效处理 top-k 稀疏分布或精确的稠密分布
  • 经过实战检验:支撑 Arcee 蒸馏模型发布的基础设施
  • HuggingFace 集成:基于 Transformers、TRL 和 Accelerate 构建

为什么选择 DistillKit?

虽然在线蒸馏相对简单,但大规模的离线蒸馏需要精心设计。当在数十亿个 token 上进行蒸馏时,仅存储 top-k 的 token-logits 对就会变得极其昂贵。

DistillKit 的压缩系统是数月实验的结果,旨在平衡存储成本、内存吞吐量和蒸馏质量之间的微妙关系。我们的方法如下:

  1. 对 logits 分布曲线进行多项式近似
  2. 对残差进行误差扩散量化以保持质量
  3. 使用任意位宽(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 压缩

我们的压缩系统在存储效率和蒸馏质量之间取得了平衡:

  1. 从教师输出中选择 top-k logits
  2. 按对数概率排序,可选应用差分编码
  3. 对分布曲线进行多项式拟合
  4. 对残差进行量化,可选误差扩散
  5. 将所有内容打包成字节向量

您可以调整许多参数,以找到适合您特定需求的存储与保真度之间的权衡。

推荐配置(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_8bitoptim: adamw_bnb_8bit
  • 启用 Flash Attention 2:use_flash_attention: true
  • 使用 bfloat16 而不是 float32
  • 启用 gradient_checkpointing
  • 减小批量大小,增加梯度累积步数

示例

数据集

我们发布了多个预先捕获的教师数据集:

跨架构蒸馏

DistillKit 可以与 mergekit-tokensurgeon 结合使用,实现跨分词器、跨架构的蒸馏。许多 Arcee 模型同时结合了这两种工具:

  1. 使用 tokensurgeon 将学生模型的嵌入适配到教师模型的分词器
  2. 使用 DistillKit 将教师的知识蒸馏到学生模型
  3. 可选地再转换回学生模型原有的分词器,甚至进行其他奇特的合并操作,随心所欲

训练提示

  • 从 ~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}
}

社区与支持

注意:DistillKit 是一个开源研究项目。虽然它为我们的多款生产级模型提供了支持,并且在资源允许的情况下我们会尽力解决遇到的问题,但社区支持属于尽力而为的范畴。

许可证

DistillKit 采用 Apache License 2.0 许可证发布。

致谢


Arcee AI 竭诚打造

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|6天前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|1周前
开发框架图像Agent

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 真正成长为懂上

151.3k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.3k|★★☆☆☆|2天前
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|2天前
插件Agent图像

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 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|5天前
插件开发框架