nncf
nncf 是一款专为提升 OpenVINO 推理效率而设计的神经网络压缩框架。它主要解决深度学习模型在部署时体积过大、运行速度慢以及资源消耗高的问题,帮助开发者在几乎不损失精度的前提下,显著优化模型的推理性能。
这款工具非常适合 AI 工程师、算法研究人员以及需要在边缘设备或服务器上高效部署模型的开发者使用。无论是基于 PyTorch、ONNX 还是 OpenVINO 的模型,nncf 都能提供强大的支持。
其核心技术亮点在于提供了丰富的“训练后”与“训练中”压缩算法。用户可以直接对已训练好的模型进行量化和权重压缩,快速获得轻量级模型;也可以在训练阶段引入量化感知训练、剪枝等策略,从源头打造高效模型。nncf 具备自动转换模型图的能力,拥有统一的调用接口,并支持 GPU 加速微调与分布式训练,让复杂的压缩流程变得简单可控。作为 Intel OpenVINO 生态的重要组件,nncf 以开源友好的方式,助力各类神经网络应用实现更快的速度与更低的成本。
使用场景
某边缘计算团队正致力于将基于 PyTorch 训练的高精度缺陷检测模型部署到算力受限的工业相机上,以满足产线实时质检需求。
没有 nncf 时
- 推理延迟过高:原始浮点模型在边缘设备上单次推理耗时超过 80ms,无法达到产线要求的 30ms 实时响应标准。
- 内存资源紧张:模型参数量大导致显存占用极高,容易引发设备内存溢出(OOM),迫使团队更换更昂贵的硬件。
- 精度与速度难平衡:手动尝试量化或剪枝不仅代码改造量大,且极易造成检测准确率断崖式下跌,难以通过验收。
- 部署流程繁琐:缺乏统一的压缩接口,针对不同后端(如 OpenVINO)需要重复编写转换脚本,维护成本高昂。
使用 nncf 后
- 推理速度显著提升:利用 nncf 的“训练后量化”技术,将模型权重从 FP32 压缩至 INT8,推理延迟降低至 25ms,完美满足实时性要求。
- 内存占用大幅缩减:通过“权重量化压缩”,模型体积缩小约 4 倍,轻松在低配边缘设备上运行,无需升级硬件。
- 精度损失微乎其微:nncf 自动优化模型图结构并校准数据分布,在加速的同时保持检测准确率下降不超过 1%。
- 一站式压缩流程:仅需几行代码即可调用统一接口完成从 PyTorch 到 OpenVINO 的自动转换与压缩,极大简化了部署流水线。
nncf 通过自动化的高效压缩算法,让高精度 AI 模型在低成本边缘设备上实现了速度与精度的最佳平衡。
运行环境要求
- Linux
- Windows
- macOS
未说明(支持 GPU 加速层用于微调,但未指定具体型号、显存或 CUDA 版本要求)
未说明

快速开始
神经网络压缩框架 (NNCF) 提供了一系列训练后和训练时算法,用于在 OpenVINO™ 中优化神经网络的推理性能,同时将精度损失降至最低。
NNCF 设计用于支持来自 PyTorch、 TorchFX、 ONNX 和 OpenVINO™ 的模型。
NNCF 提供了 示例,展示了如何针对不同用例和模型使用压缩算法。有关使用 NNCF 示例实现的压缩效果,请参阅 NNCF 模型库页面。
该框架以 Python* 包的形式组织,可以独立构建和使用。其架构统一,便于为 PyTorch 等深度学习框架添加不同的压缩算法。
主要特性
训练后压缩算法
| 压缩算法 | OpenVINO | PyTorch | TorchFX | ONNX |
|---|---|---|---|---|
| 训练后量化 | 支持 | 支持 | 实验性 | 支持 |
| 权重压缩 | 支持 | 支持 | 实验性 | 支持 |
| 激活稀疏化 | 不支持 | 实验性 | 不支持 | 不支持 |
训练时压缩算法
| 压缩算法 | PyTorch |
|---|---|
| 量化感知训练 | 支持 |
| 基于 LoRA 和 NLS 的仅权重量化感知训练 | 支持 |
| 剪枝 | 支持 |
- 自动且可配置的模型图转换,以获得压缩后的模型。
- 压缩方法的通用接口。
- GPU 加速层,用于更快地微调压缩模型。
- 分布式训练支持。
- 针对知名第三方仓库(如 huggingface-transformers)提供的 Git 补丁,演示了如何将 NNCF 集成到自定义训练流程中。
- 可将 PyTorch 压缩模型导出为 ONNX* 检查点、SavedModel 或 Frozen Graph 格式,以便直接与 OpenVINO™ 工具包 一起使用。
文档
本文档涵盖了 NNCF 算法和功能的详细信息,这些内容对于贡献代码至 NNCF 至关重要。
NNCF 的最新用户文档可在 此处 获取。
NNCF API 文档请见 此处。
使用方法
训练后量化
NNCF 的 PTQ 是应用 8 位量化最简单的方式。运行该算法只需您的模型和一个小规模(约 300 个样本)的校准数据集。
首选后端是 OpenVINO,但 PyTorch 和 ONNX 也受支持。
OpenVINO
import nncf
import openvino as ov
import torch
from torchvision import datasets, transforms
# 实例化未压缩的模型
model = ov.Core().read_model("/model_path")
# 提供验证数据集的一部分,以收集压缩算法所需的统计信息
val_dataset = datasets.ImageFolder("/path", transform=transforms.Compose([transforms.ToTensor()]))
dataset_loader = torch.utils.data.DataLoader(val_dataset, batch_size=1)
# 步骤 1:初始化变换函数
def transform_fn(data_item):
images, _ = data_item
return images
# 步骤 2:初始化 NNCF 数据集
calibration_dataset = nncf.Dataset(dataset_loader, transform_fn)
# 步骤 3:运行量化流程
quantized_model = nncf.quantize(model, calibration_dataset)
PyTorch
import nncf
import torch
from torchvision import datasets, models
# 实例化未压缩的模型
model = models.mobilenet_v2()
# 提供验证数据集的一部分,以收集压缩算法所需的统计信息
val_dataset = datasets.ImageFolder("/path", transform=transforms.Compose([transforms.ToTensor()]))
dataset_loader = torch.utils.data.DataLoader(val_dataset)
# 步骤 1:初始化变换函数
def transform_fn(data_item):
images, _ = data_item
return images
# 步骤 2:初始化 NNCF 数据集
calibration_dataset = nncf.Dataset(dataset_loader, transform_fn)
# 步骤3:运行量化流水线
量化模型 = nncf.quantize(模型, 校准数据集)
注意 如果训练后量化算法无法满足质量要求,您可以对量化的 PyTorch 模型进行微调。您可以在 这里 找到一个针对 PyTorch 模型的量化感知训练流水线示例。
TorchFX
import nncf
import torch.fx
from torchvision import datasets, models
# 实例化您的未压缩模型
模型 = models.mobilenet_v2()
# 提供验证数据集的一部分,以收集压缩算法所需的统计信息
验证数据集 = datasets.ImageFolder("/path", transform=transforms.Compose([transforms.ToTensor()]))
数据加载器 = torch.utils.data.DataLoader(验证数据集)
# 步骤1:初始化转换函数
def transform_fn(data_item):
图像, _ = data_item
return 图像
# 步骤2:初始化 NNCF 数据集
校准数据集 = nncf.Dataset(数据加载器, transform_fn)
# 步骤3:将模型导出为 TorchFX 格式
输入形状 = (1, 3, 224, 224)
fx_model = torch.export.export_for_training(模型, args=(ex_input,)).module()
# 或者
# fx_model = torch.export.export(模型, args=(ex_input,)).module()
# 步骤4:运行量化流水线
量化_fx_model = nncf.quantize(fx_model, 校准数据集)
ONNX
import onnx
import nncf
import torch
from torchvision import datasets
# 实例化您的未压缩模型
onnx_model = onnx.load_model("/model_path")
# 提供验证数据集的一部分,以收集压缩算法所需的统计信息
验证数据集 = datasets.ImageFolder("/path", transform=transforms.Compose([transforms.ToTensor()]))
数据加载器 = torch.utils.data.DataLoader(验证数据集, batch_size=1)
# 步骤1:初始化转换函数
输入名称 = onnx_model.graph.input[0].name
def transform_fn(data_item):
图像, _ = data_item
return {输入名称: 图像.numpy()}
# 步骤2:初始化 NNCF 数据集
校准数据集 = nncf.Dataset(数据加载器, transform_fn)
# 步骤3:运行量化流水线
量化模型 = nncf.quantize(onnx_model, 校准数据集)
训练时量化
以下是一个准确率感知量化流水线的示例,其中可以对模型权重和压缩参数进行微调,以获得更高的准确率。
PyTorch
import nncf
import torch
from torchvision import datasets, models
# 实例化您的未压缩模型
模型 = models.mobilenet_v2()
# 提供验证数据集的一部分,以收集压缩算法所需的统计信息
验证数据集 = datasets.ImageFolder("/path", transform=transforms.Compose([transforms.ToTensor()]))
数据加载器 = torch.utils.data.DataLoader(验证数据集)
# 步骤1:初始化转换函数
def transform_fn(data_item):
图像, _ = data_item
return 图像
# 步骤2:初始化 NNCF 数据集
校准数据集 = nncf.Dataset(数据加载器, transform_fn)
# 步骤3:运行量化流水线
量化模型 = nncf.quantize(模型, 校准数据集)
# 现在可以将压缩后的模型当作普通的 torch.nn.Module 来使用,
# 以同时对压缩参数和模型权重进行微调。
# 保存量化模块和量化的模型参数
检查点 = {
'state_dict': 模型.state_dict(),
'nncf_config': nncf.torch.get_config(模型),
... # 其他需要保存的用户自定义对象
}
torch.save(检查点, 路径_to_checkpoint)
# ...
# 加载量化模块和量化的模型参数
恢复检查点 = torch.load(路径_to_checkpoint)
nncf_config = 恢复检查点['nncf_config']
state_dict = 恢复检查点['state_dict']
量化模型 = nncf.torch.load_from_config(模型, nncf_config, 示例输入)
模型.load_state_dict(state_dict)
# ... 剩下的常规 PyTorch 训练流程
演示、教程和示例
为了更快地开始使用 NNCF 驱动的模型压缩,请尝试下面提供的示例笔记本和脚本。
Jupyter* 笔记本教程和演示
现成可运行的 Jupyter* 笔记本教程和演示可用于解释并展示 NNCF 的压缩算法,以优化适用于 OpenVINO 工具包推理的模型:
| 笔记本教程名称 | 压缩算法 | 后端 | 领域 |
|---|---|---|---|
| BERT量化 |
训练后量化 | OpenVINO | NLP |
| MONAI分割模型量化 |
训练后量化 | OpenVINO | 分割 |
| PyTorch模型量化 | 训练后量化 | PyTorch | 图像分类 |
| 带精度控制的YOLOv11量化 | 带精度控制的训练后量化 | OpenVINO | 语音转文本, 目标检测 |
一个展示OpenVINO转换与推理,以及结合NNCF压缩技术对来自不同领域模型进行优化的笔记本列表:
| 演示模型 | 压缩算法 | 后端 | 领域 |
|---|---|---|---|
| YOLOv8 |
训练后量化 | OpenVINO | 目标检测, 关键点检测, 实例分割 |
| EfficientSAM | 训练后量化 | OpenVINO | 图像分割 |
| Segment Anything Model | 训练后量化 | OpenVINO | 图像分割 |
| OneFormer | 训练后量化 | OpenVINO | 图像分割 |
| CLIP | 训练后量化 | OpenVINO | 图像到文本 |
| BLIP | 训练后量化 | OpenVINO | 图像到文本 |
| 潜在一致性模型 | 训练后量化 | OpenVINO | 文本到图像 |
| Distil-Whisper | 训练后量化 | OpenVINO | 语音到文本 |
| Whisper |
训练后量化 | OpenVINO | 语音到文本 |
| MMS语音识别 | 训练后量化 | OpenVINO | 语音到文本 |
| LLM指令遵循 | 权重压缩 | OpenVINO | 自然语言处理,指令遵循 |
| LLM聊天机器人 | 权重压缩 | OpenVINO | 自然语言处理,聊天机器人 |
训练后量化与权重压缩示例
展示量化/权重压缩及其相应推理速度提升的精简脚本:
| 示例名称 | 压缩算法 | 后端 | 领域 |
|---|---|---|---|
| OpenVINO MobileNetV2 | 训练后量化 | OpenVINO | 图像分类 |
| OpenVINO YOLO26 | 训练后量化 | OpenVINO | 目标检测 |
| OpenVINO YOLOv8 QwAC | 带精度控制的训练后量化 | OpenVINO | 目标检测 |
| OpenVINO 异常分类 | 带精度控制的训练后量化 | OpenVINO | 异常分类 |
| PyTorch MobileNetV2 | 训练后量化 | PyTorch | 图像分类 |
| PyTorch SSD | 训练后量化 | PyTorch | 目标检测 |
| TorchFX Resnet18 | 训练后量化 | TorchFX | 图像分类 |
| ONNX MobileNetV2 | 训练后量化 | ONNX | 图像分类 |
| ONNX YOLOv8 QwAC | 带精度控制的训练后量化 | ONNX | 目标检测 |
| ONNX TinyLlama WC | 压缩权重 | ONNX | LLM |
| TorchFX TinyLlama WC | 压缩权重 | TorchFX | LLM |
| OpenVINO TinyLlama WC | 压缩权重 | OpenVINO | LLM |
| OpenVINO TinyLlama WC 带超参数搜索 | 压缩权重并进行超参数搜索 | OpenVINO | LLM |
| ONNX TinyLlama WC 带尺度估计 | 压缩权重并进行尺度估计 | ONNX | LLM |
量化感知训练示例
| 示例名称 | 压缩算法 | 后端 | 领域 |
|---|---|---|---|
| PyTorch Resnet18 | 量化感知训练 | PyTorch | 图像分类 |
| PyTorch Anomalib | 量化感知训练 | PyTorch | 异常检测 |
第三方仓库集成
NNCF 可以轻松集成到第三方仓库的训练/评估流程中。
已被使用的项目
-
NNCF 被用作 HuggingFace Optimum Intel 中著名
transformers仓库内的压缩后端。例如,以下命令将 Llama-3.2-3B-Instruct 模型导出为 OpenVINO 格式,并采用 INT4 量化权重:optimum-cli export openvino -m meta-llama/Llama-3.2-3B-Instruct --weight-format int4 ./Llama-3.2-3B-Instruct-int4 -
NNCF 已集成到 Intel OpenVINO 导出流程中,从而实现对导出模型的量化。
-
NNCF 被用作 ExecuTorch OpenVINO 集成 的主要量化框架。
-
NNCF 被用作 torch.compile OpenVINO 集成 的主要量化框架。
-
NNCF 已集成到 OpenVINO Training Extensions 中,作为模型优化后端。用户可以基于现有模型模板训练、优化并导出新模型,同时使用 OpenVINO 运行这些导出的模型。
-
NNCF 被用于对 OpenVINO IR 和 ONNX 模型进行量化,以支持 OpenVINO 集成。
安装指南
有关详细的安装说明,请参阅 安装 指南。
NNCF 可以通过 pip 以常规 PyPI 包的形式安装:
pip install nncf
NNCF 也可通过 conda 获取:
conda install -c conda-forge nncf
NNCF 的系统要求取决于所使用的后端。各后端的系统要求及对应版本矩阵可在 installation.md 中找到。
NNCF 压缩模型库
模型列表及其压缩结果可在我们的 NNCF 模型库页面 中找到。
引用
@article{kozlov2020neural,
title = {用于快速模型推理的神经网络压缩框架},
author = {科兹洛夫、拉扎列维奇、沙姆波罗夫、利亚柳什金、戈尔巴乔夫},
journal = {arXiv 预印本 arXiv:2002.08679},
year = {2020}
}
贡献指南
有关向 NNCF 仓库贡献的指导原则,请参阅 CONTRIBUTING.md 文件。
有用链接
- 文档
- 示例
- 常见问题解答
- Notebooks
- HuggingFace Optimum Intel
- OpenVINO 模型优化指南
- OpenVINO Hugging Face 页面
- OpenVino 性能基准测试页面
遥测
作为 OpenVINO™ 工具包的一部分,NNCF 会收集匿名使用数据,以用于改进 OpenVINO™ 工具。您可以在安装了 NNCF 的 Python 环境中运行以下命令,随时选择退出:
opt_in_out --opt_out
更多信息请参阅 OpenVINO 遥测。
版本历史
v3.0.02026/02/24v2.19.02025/12/01v2.18.02025/09/04v2.17.02025/06/18v2.16.02025/04/10v2.15.02025/02/06v2.14.12024/12/19v2.14.02024/11/20v2.13.02024/09/19v2.12.02024/07/31v2.11.02024/06/17v2.10.02024/04/25v2.9.02024/03/06v2.8.12024/02/09v2.8.02024/01/24v2.7.02023/11/16v2.6.02023/09/18v2.5.02023/06/06v2.4.02023/02/01v2.3.02022/07/05常见问题
相似工具推荐
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 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。
