KD_Lib
PyTorch 模型压缩工具库,集成知识蒸馏、剪枝、量化三大功能
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
PyTorch 模型压缩工具库,集成知识蒸馏、剪枝、量化三大功能
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
**想象这样一个场景:**你训练好了一个 ResNet50 图像分类模型,准确率 97.87%,但模型体积太大,根本无法部署到手机或边缘设备上。怎么办?从头训练一个小模型?效果肯定差一截。KD-Lib 告诉你——不用,从大模型里「蒸馏」知识就行了。
在深度学习落地场景中,模型压缩是绕不开的话题。一个 ResNet50 模型有 2300 万参数,推理一次需要大量算力,显然不适合移动端或 IoT 设备。而 KD-Lib 正是为解决这一痛点而生的开源工具库。
KD-Lib 由印度研究团队 SforAiDl 开发维护,最早于 2020 年发布在 arXiv(编号 2011.14691)。它将模型压缩领域最核心的三种技术——知识蒸馏(Knowledge Distillation)、模型剪枝(Pruning) 和量化(Quantization)——统一封装成一个易用的 PyTorch 库。相比单独实现每种算法,KD-Lib 提供了标准化的训练流程、统一的 API 接口和现成的基准测试数据,研究者和工程师可以像搭积木一样快速实验。

图 1:KD-Lib 架构总览,支持蒸馏/剪枝/量化三大模型压缩范式
知识蒸馏的灵感来自 Hinton 等人 2015 年的经典论文《Distilling the Knowledge in a Neural Network》。核心思路很简单:大模型(Teacher)学习到的「软知识」比硬标签(One-Hot 标签)更丰富——比如一个分类模型不仅知道某张图是「猫」,还知道它「更像狗而不像汽车」。这些隐藏的相似性信息可以通过 softmax 输出的概率分布传递给学生模型(Student)。
KD-Lib 的 VanillaKD 类完整实现了这一流程:
from KD_Lib.KD import VanillaKD
# 教师模型(复杂、精度高)
teacher_model = ResNet50(...)
# 学生模型(简单、速度快)
student_model = ResNet18(...)
distiller = VanillaKD(teacher_model, student_model, train_loader, test_loader,
teacher_optimizer, student_optimizer)
distiller.train_teacher(epochs=5)
distiller.train_student(epochs=5)
KD-Lib 实现了超过 15 种蒸馏算法,覆盖了视觉和文本两个领域:
| 算法 | 论文 | 适用场景 |
|---|---|---|
| VanillaKD | Hinton et al. 2015 | 通用蒸馏基准 |
| TAKD | Mirzadeh et al. 2020 | 教师助手多级蒸馏 |
| RKD | Park et al. 2019 | 关系知识蒸馏 |
| DML | Zhang et al. 2018 | 深度互学习(无需教师) |
| BERT2LSTM | Tang et al. 2019 | BERT 压缩为 LSTM |
| Mean Teacher | Tarvainen et al. 2018 | 半监督学习蒸馏 |
| Attention | Zagoruyko et al. 2017 | 注意力迁移 |
每种算法都对应一个独立的 Python 模块,代码结构清晰。以视觉蒸馏为例,目录结构为:
KD_Lib/KD/vision/
├── vanilla/ # 基础蒸馏
├── TAKD/ # 教师助手蒸馏
├── RKD/ # 关系蒸馏
├── DML/ # 深度互学习
├── attention/ # 注意力蒸馏
└── mean_teacher/ # 均值教师

图 2:不同蒸馏策略在 MNIST 上的性能对比(5 epoch)
除了蒸馏,KD-Lib 还实现了模型剪枝功能。核心算法基于 Frankle 等人 2019 年提出的彩票假说(Lottery Ticket Hypothesis):一个随机初始化的神经网络中,存在一个子网络( Lottery Ticket),单独训练就能达到原网络的精度。
剪枝模块结构:
KD_Lib/Pruning/
├── lottery_tickets/ # 彩票假说剪枝
├── weight_threshold/ # 权重阈值剪枝
└── common/ # 公共基类
量化是将浮点参数转换为低精度整数表示的技术。KD-Lib 支持三种量化模式:
KD_Lib/Quantization/
├── static/ # 静态量化
├── dynamic/ # 动态量化
└── qat/ # 量化感知训练
KD-Lib 采用经典的面向对象设计。核心基类 BaseClass 定义了所有蒸馏算法的通用流程:
class BaseClass:
def __init__(self, teacher_model, student_model,
train_loader, val_loader,
optimizer_teacher, optimizer_student,
loss_fn=nn.KLDivLoss(), temp=20.0,
distil_weight=0.5, device='cpu',
log=False, logdir='./Experiments'):
# 初始化设备、数据加载器、优化器
pass
def train_teacher(self, epochs=20, ...): pass
def train_student(self, epochs=20, ...): pass
def evaluate(self, teacher=False): pass
def get_parameters(self): pass
每种具体算法只需继承 BaseClass,重写 train_student() 方法即可。这种设计模式让添加新算法变得非常容易——只需 100-200 行代码就能实现一个完整的蒸馏算法。
此外,KD-Lib 内置了多个预训练模型(Lenet、Shallow CNN、NIN、ResNet),可直接用于基准测试,无需额外准备模型文件。
在 MNIST 数据集上,KD-Lib 报告了以下基准结果(Teacher: ResNet50, Student: ResNet18, 5 epochs):
| 方法 | Teacher 精度 | Student 精度 | 参数减少 |
|---|---|---|---|
| VanillaKD | 97.87% | 97.06% | 53% ↓ |
| NoisyTeacher | 97.71% | 97.69% | 53% ↓ |
| MessyCollab | 97.95% | 97.24% | 53% ↓ |
| SoftRandom | 98.19% | 97.37% | 53% ↓ |
学生模型参数量从 454,010 降至 213,178,减少 53%,同时精度仅下降 0.6-0.8 个百分点——这是非常可观的效果。
KD-Lib 提供两种安装方式:
方式一(推荐):从源码安装
git clone https://github.com/SforAiDl/KD_Lib.git
cd KD_Lib
python setup.py install
方式二(最简):pip 一键安装
pip install KD-Lib
依赖环境:Python >= 3.6,PyTorch >= 1.8,不强制需要 GPU(CPU 训练也可以运行,但速度较慢)。整个安装过程约 2 分钟。
项目提供了完整的 ReadTheDocs 文档(https://kd-lib.readthedocs.io/),包含 API 参考和使用教程,降低了上手门槛。
不支持快速部署:KD-Lib 是纯 Python 库,没有 Docker 镜像或 Web 界面,不适合非技术用户。
依赖版本较旧:requirements.txt 中指定的 PyTorch 版本为 1.8.1(2021 年发布),与最新的 PyTorch 2.x 可能存在兼容性问题。生产环境使用时建议先在虚拟环境中测试。
仅支持 PyTorch:项目明确面向 PyTorch 用户,TensorFlow 或 JAX 用户无法使用。
非生产级代码:项目分类为「Pre-Alpha」阶段,不建议直接在商业生产环境使用,实验验证为主。
KD-Lib 的出现填补了 PyTorch 生态中模型压缩工具库的空白。在边缘 AI 和端侧部署需求爆发的当下,模型压缩已经从学术研究演变为工程必备技能。
从发展趋势看,该项目体现了几个重要方向:
GitHub 649 颗星、61 个 fork 的社区关注度,虽然不及主流框架,但对于专项研究工具库来说已属活跃。目前该项目仍在维护更新中(2026 年 6 月仍有 commit),对于从事模型压缩研究或需要部署轻量级模型的开发者来说,是一个值得关注的工具。