torchdistill
yoshitomo-matsubara/torchdistill加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
torchdistill 是日本研究者 Yoshitomo Matsubara 开发的 PyTorch 生态知识蒸馏框架,通过 YAML 配置驱动实验,实现无代码深度学习研究。2023 年 12 月正式加入 PyTorch Ecosystem 官方生态。
想象这样一个场景:你训练了一个效果出色的教师模型(Teacher),但在手机或边缘设备上部署时,模型太大、推理太慢,体积是后者的 5 倍。这时候,你会想到知识蒸馏(Knowledge Distillation)——让大模型把「知识」传递给轻量级的小模型(Student)。
但当你真正动手实现时,问题来了:
torchdistill 正是为了解决这些痛点而生的。它由日本研究者 Yoshitomo Matsubara 开发,是一个模块化、配置驱动的知识蒸馏框架,2023 年 12 月正式加入 PyTorch Ecosystem 官方生态。
困境一:重复造轮子。 每篇论文都有自己的蒸馏实现,代码风格迥异,接口设计各不相同。想对比不同方法的效果?光是适配接口就要花上好几天。
困境二:模型耦合严重。 提取教师/学生模型的中间层表征(Feature Map)是很多蒸馏方法的核心,但大多数实现直接修改模型的 forward 函数,导致代码和模型架构强绑定,换一个模型就要重写一遍。
困境三:复现困难。 论文代码往往缺乏完整的配置和日志,参数设置也是硬编码,换一个数据集或硬件环境,结果可能天差地别。
torchdistill 受 AllenNLP 启发,采用「声明式配置 + 模块抽象」的设计哲学:
torchdistill 实现了 26 种发表于顶级会议的蒸馏方法,覆盖以下场景:
| 任务类型 | 代表方法 | 适用数据集 |
|---|---|---|
| 图像分类 | KD, FitNet, AT, SP, PKT, RKD, FT, NST 等 | ImageNet, CIFAR-10/100 |
| 目标检测 | GD, L2, FE, DIOU 等 | COCO 2017 |
| 语义分割 | 多种分割蒸馏策略 | PASCAL VOC |
| NLP 任务 | Transformer 蒸馏方案 | GLUE 基准全9项 |
以 ImageNet 图像分类为例,配置一个教师-学生蒸馏实验,只需编辑 YAML:
# 定义数据集
datasets:
imagenet/train:
type: ImageFolderDataset
path: /data/imagenet/train
# 通过 PyTorch Hub 引入 timm 库的 ResNeSt-50 作为教师模型
models:
teacher_model:
repo_or_dir: 'huggingface/pytorch-image-models'
model: resnest50
pretrained: true
student_model:
type: torchvision.models.resnet18
# 定义蒸馏损失和训练流程
trainer:
module: torchdistill.trainer.classification
student_model: student_model
teacher_model: teacher_model
loss_module:
type: KDLoss
temperature: 4
alpha: 0.7
不需要写一行 Python 代码,只需确保数据集路径正确,运行框架即可自动执行蒸馏训练。
传统蒸馏需要修改模型 forward 函数来获取中间层 Feature Map。torchdistill 的 ForwardHookManager 通过 Hook 机制优雅地解决了这个问题:
from torchdistill.core.forward_hook import ForwardHookManager
from torchvision import models
model = models.resnet18(pretrained=False)
forward_hook_manager = ForwardHookManager()
# 指定要提取的中间层(用模块路径字符串指定,无需修改模型)
forward_hook_manager.add_hook(model, 'conv1', requires_input=True, requires_output=False)
forward_hook_manager.add_hook(model, 'layer1.0.bn2', requires_input=True, requires_output=True)
forward_hook_manager.add_hook(model, 'fc', requires_input=False, requires_output=True)
y = model(x)
io_dict = forward_hook_manager.get_io_dict()
# io_dict['conv1']['input'] → conv1 层的输入
# io_dict['fc']['output'] → fc 层的输出
这种设计让你可以在不改动任何模型代码的情况下,提取任意中间层的信息,配合自定义损失函数实现各种蒸馏策略。
torchdistill 的 YAML 配置系统利用 PyYAML 的锚点(anchor)和别名(alias)特性,避免重复配置:
root_path: &root_path /data/imagenet
train_path: *root_path/train # 复用 root_path
val_path: *root_path/val # 复用 root_path
框架自动保存完整的训练日志、检查点权重和最终配置,确保任何人都能在相同环境下复现实验结果。作者还专门引用了 ML Code Completeness Checklist,推动社区提升代码质量。
torchdistill 本身通过 pip 安装简单,但对使用者的要求是:
CLI vs Web UI:纯命令行工具,没有 Web 界面,但 YAML 配置的学习成本并不高,官方文档和示例非常完整。
架构类型:模块化配置驱动框架(Modular Configuration-Driven Framework)
主力技术栈:
AI 框架:PyTorch(原生)+ PyTorch Hub(模型导入)
代码质量:遵循 ML Code Completeness Checklist,有完整测试(tests/)、持续集成(Travis CI)和详细的官方文档。代码结构清晰,模块化程度高。
文档质量:官方网站提供完整 API 文档、使用指南和示例 notebooks,支持 Google Colab 直接运行。
torchdistill 最早于 2019 年发布(当时名为 kdkit),经过多年迭代,已获得 1633 颗 GitHub Stars,被多篇正式发表的论文引用。2023 年加入 PyTorch Ecosystem 后,影响力进一步扩大。
其代表的「配置优先」研究框架理念,与 AllenNLP、MMEngine 等框架一脉相承,反映了深度学习研究工具向「声明式、模块化」方向演进的大趋势。随着大模型时代知识蒸馏需求的爆发,这类工具的价值将进一步凸显。
| 维度 | 评价 |
|---|---|
| 功能完整性 | 支持 26 种顶会蒸馏方法,覆盖 CV/NLP 主流任务 |
| 易用性 | YAML 配置驱动,零代码设计,但需要一定 DL 基础 |
| 可复现性 | 完整日志+检查点+配置,学术级标准 |
| 社区活跃度 | Stars 增长平稳,但 Issues 和 PR 活跃度一般 |
| 生产适用性 | 研究工具定位,非 serving 平台 |
torchdistill 是目前最完整、最规范的知识蒸馏研究框架之一,特别适合需要在多个蒸馏方法之间做对比实验的研究者,以及希望将大模型高效蒸馏为小模型的工程团队。