Sparsebit
旷视科技开源的 PyTorch 模型压缩工具箱,支持剪枝与量化两大核心功能,可导出 QDQ-ONNX 对接 TensorRT 推理引擎
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
旷视科技开源的 PyTorch 模型压缩工具箱,支持剪枝与量化两大核心功能,可导出 QDQ-ONNX 对接 TensorRT 推理引擎
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
图1:Megvii Research 组织头像
想象你辛辛苦苦训练了一个准确率高达 95% 的图像分类模型,兴冲冲地想部署到边缘设备上,却发现它需要整整 8GB 的显存才能运行——边缘设备只有 4GB。这种"英雄无用武之地"的尴尬,正是模型压缩技术要解决的问题。Sparsebit 正是这样一把钥匙,它来自计算机视觉领域的知名研究机构旷视科技(Megvii),为研究者和工程师提供了一套完整的模型压缩工具链。
深度学习模型越做越大已成趋势。GPT-4 传闻拥有超过万亿参数,即使开源的 LLaMA-7B 也需要约 14GB 显存才能正常加载。普通开发者的消费级 GPU 根本无法承担这样的算力需求。更严峻的是,在自动驾驶、智能摄像头、工业检测等边缘部署场景中,硬件资源受到严格限制,模型必须足够"轻"才能实时运行。
模型压缩因此成为 AI 落地过程中不可绕开的环节。目前主流的压缩方法有三条路:**剪枝(Pruning)**移除不重要的权重连接;**量化(Quantization)**将高精度参数转换为低比特表示;**知识蒸馏(Distillation)**用小模型学习大模型的行为。Sparsebit 聚焦前两条路,提供了一站式的剪枝和量化解决方案。
Sparsebit 的设计理念是"最小侵入"——研究者在已有 PyTorch 项目中只需修改少量代码,即可接入压缩能力。这得益于项目对 PyTorch FX 的深度应用。FX 是 PyTorch 1.9+ 引入的动态图到静态图转换工具,Sparsebit 以 QuantModel 为核心操作对象,将原始模型的每个 operation 自动替换为对应的 QuantModule,从而在细粒度上实现量化感知。
项目支持两种量化范式:后训练量化(PTQ)和量化感知训练(QAT)。PTQ 在模型训练完成后直接量化,适合快速部署;QAT 在训练过程中模拟量化效应,适合对精度要求更高的场景。两者各有适用场景,Sparsebit 允许用户根据实际需求灵活选择。
量化的关键输出格式是 QDQ-ONNX。QDQ(Quantize-Dequantize)是 ONNX 标准中的量化算子表示方式,导出的模型可直接被 TensorRT 和 ONNXRuntime 等推理引擎加载执行。这意味着压缩后的模型不需要额外适配,可以无缝融入现有的部署流水线。
在剪枝方面,Sparsebit 同时支持结构化剪枝和非结构化剪枝。非结构化剪枝精度更高但稀疏模式不规则,硬件利用率低;结构化剪枝以通道/滤波器为单位,天然适配硬件并行。项目中集成了多种经典剪枝算法(L1-norm、L0-norm、Fisher-Pruning、HRank、Slimming 等),并支持用户通过定义 Sparser 接口自由扩展新的剪枝策略。
Sparsebit 并非只服务于视觉模型。它专门提供了 large_language_models/ 模块,支持主流大语言模型的量化。最引人注目的是 alpaca-qlora 示例:在 8 张 2080ti 上 13 小时完成 llama-65B 的微调,单卡 2080ti 即可微调 llama-7B/13B。相比原始 alpaca-lora,显存占用减少一半。项目中还实现了支持 groupsize 特性的 GPTQ CUDA kernel,配合 --single_device_mode 让全系列量化 LLaMA 均可在单 GPU(2080ti)上运行。
对于视觉模型,项目提供了丰富的 benchmark 示例:ImageNet-1k 上的 ResNet/ViT 量化、BEVDet/BEVDepth 等自动驾驶感知模型的 QAT、以及 YOLO 系列目标检测模型的 PTQ,覆盖了 CV 研究的主流场景。
Sparsebit 的源码分为三大模块:sparsebit/quantization/(量化核心)、sparsebit/sparse/(剪枝核心)和 sparsebit/utils/(通用工具)。量化模块内部又细分为:
modules/:各类型神经网络层的量化实现(Conv2d、Linear 等)quantizers/:不同的量化算法(对称/非对称量化等)observers/:用于统计激活值范围的观察器(MinMax、EMA 等)converters/:模型格式转换(到 ONNX)torch_extensions/:CUDA/C++ 自定义算子,用于高效量化计算torch_extensions 中包含 .c/.cpp/.cu/.cuh 等文件,说明核心量化操作通过 CUDA C++ 实现以保证性能。setup.py 的 package_data 字段明确列出了这些编译依赖,说明这是一个需要编译扩展的 C++/CUDA 混合项目。
文档方面,项目配置了 Sphinx 文档系统,托管于 ReadTheDocs(sparsebit.readthedocs.io),并在 B 站维护了一门量化公开课和配套作业,降低了新手入门门槛。
使用 Sparsebit 之前,有几个现实问题需要注意。首先,没有容器化支持:没有 Dockerfile、docker-compose 或 K8s manifest,无法在隔离环境中一键部署,这对不熟悉 PyTorch/CUDA 环境配置的用户是个障碍。其次,PyTorch 版本锁定较紧:requirements.txt 明确要求 torch>=1.9.0,<1.12.0,这意味着它是为旧版 PyTorch 设计的。2024 年发布的 PyTorch 2.x 用户需要格外注意兼容性。第三,纯 CLI 工具:没有任何 Web UI 或 API 服务,所有操作均通过 Python 代码调用,调试和学习曲线相对陡峭。
Sparsebit 展现了工业界研究团队在模型压缩领域的深厚积累。旷视科技作为 CV 领域的头部公司,将内部工具开源,本身就是对学术界的积极贡献。项目虽然代码规模和文档完善度不如 TensorRT 官方工具链,但在灵活性上更胜一筹——研究者可以深入修改量化器、观察器的具体实现,尝试自己的压缩算法。
从增长角度看,Sparsebit 聚焦的 PTQ 和 QAT 方向,正是大模型时代最迫切需要的技术路径。当模型参数从亿级迈向万亿级,"能不能压缩"往往决定了模型能否真正落地。Sparsebit 作为国产开源工具链,在中文 AI 社区中具有独特的本土化优势——中文 README、中文文档、B 站配套课程,降低了中国开发者的使用门槛。
如果你在寻找一个可深度定制的 PyTorch 模型压缩工具,Sparsebit 值得深入研究;如果你需要的是开箱即用的推理加速方案,TensorRT 或 ONNX Runtime 的官方工具可能更合适。