openvinotoolkit/nncf

Neural Network Compression Framework for enhanced OpenVINO™ inference

Neural Network Compression Framework (NNCF)

何であるか – NNCF は、ニューラルネットワークのモデルサイズ削減および推論速度向上を実現する Python ライブラリです。PyTorch、TorchFX、ONNX、OpenVINO で構築されたモデルと連携でき、わずか数行のコードで 事後 または 学習時 の圧縮を適用できます。

主な機能

カテゴリ アルゴリズム(README に記載) 対応バックエンド
事後 • 8ビット量子化
• 重み圧縮
• 活性化スパース性(実験的) OpenVINO、PyTorch、TorchFX(実験的)、ONNX
学習時 • 量子化に配慮した学習(QAT)
• LoRA/NLS を用いた重みのみ QAT
• 削減(Pruning) PyTorch のみ
その他の機能 • 自動グラフ変換、
• GPU加速層によるファインチューニング、
• 分散学習サポート、
• HuggingFace-Transformers 用の統合パッチ、
• OpenVINO ランタイム用に ONNX、SavedModel、またはフローズングラフへエクスポート

一般的な利用シーン

  • メモリとレイテンシが制限されたエッジデバイスに PyTorch や ONNX モデルをデプロイする場合。
  • 大規模言語モデル(例:BERT、LLM)のサイズを小さくしつつ、精度を許容範囲内に保つ場合。
  • OpenVINO 推論エンジン向けにモデルを準備する場合、特に CPU、GPU、または VPU 用。
  • 低レベルコードを書かずに、削減や量子化に配慮した学習を実験したい研究者。

導入方法

# PyPI からパッケージをインストール(Python 3.10+ 必須)
pip install nncf

最新の開発版が必要な場合は、ソースからビルドすることも可能です。

基本ワークフロー(事後量子化の例)

import nncf, torch, openvino as ov
from torchvision import datasets, transforms

# 1️⃣ モデルを読み込む(OpenVINO、PyTorch、TorchFX、または ONNX)
model = ov.Core().read_model("/model_path")   # OpenVINO の例

# 2️⃣ 小規模なキャリブレーションデータセット(約300サンプル)を準備
val_ds = datasets.ImageFolder("/path", transform=transforms.Compose([transforms.ToTensor()]))
loader = torch.utils.data.DataLoader(val_ds, batch_size=1)

# 3️⃣ ローダーを NNCF Dataset でラップ
calib = nncf.Dataset(loader, lambda d: d[0])

# 4️⃣ 量子化パイプラインを実行
quantized = nncf.quantize(model, calib)

このパターンは PyTorch、TorchFX、ONNX バックエンドでも同様に動作します。各バックエンドの具体的なスニペットは README に記載されています。

学習リソース

NNCF を検討すべき人

  • リソース制約のあるハードウェア(エッジ、IoT、モバイル)に AI をデプロイするエンジニア。
  • OpenVINO ツールキットを使用しており、推論前にモデルを小さくするシームレスな方法が必要なチーム。
  • PyTorch で量子化に配慮した学習や削減を探索したい研究者。

上記のすべての情報はリポジトリの README から直接取得しており、追加機能は推測されていません。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト