Fitur Utama • Instalasi • Dokumentasi • Penggunaan • Tutorial dan Contoh • Integrasi pihak ketiga • Model Zoo
Neural Network Compression Framework (NNCF) menyediakan rangkaian algoritme pasca-pelatihan dan waktu pelatihan untuk mengoptimalkan inferensi jaringan saraf di OpenVINO™ dengan penurunan akurasi minimal.
NNCF dirancang untuk bekerja dengan model dari PyTorch, TorchFX, TensorFlow, ONNX, dan OpenVINO™.
NNCF memberikan contoh yang menunjukkan penggunaan algoritma kompresi untuk kasus penggunaan dan model yang berbeda. Lihat hasil kompresi yang dapat dicapai dengan sampel bertenaga NNCF di halaman NNCF Model Zoo.
Kerangka kerja ini disusun sebagai paket Python* yang dapat dibangun dan digunakan dalam mode mandiri. Arsitektur kerangka kerja disatukan untuk memudahkan penambahan algoritma kompresi yang berbeda untuk kerangka pembelajaran mendalam PyTorch dan TensorFlow.
Algoritma kompresi | BukaVINO | PyTorch | OborFX | Aliran Tensor | ONNX |
---|---|---|---|---|---|
Kuantisasi Pasca Pelatihan | Didukung | Didukung | Eksperimental | Didukung | Didukung |
Kompresi Beban | Didukung | Didukung | Eksperimental | Tidak didukung | Tidak didukung |
Ketersebaran Aktivasi | Tidak didukung | Eksperimental | Tidak didukung | Tidak didukung | Tidak didukung |
Algoritma kompresi | PyTorch | Aliran Tensor |
---|---|---|
Pelatihan Sadar Kuantisasi | Didukung | Didukung |
Kuantisasi Presisi Campuran | Didukung | Tidak didukung |
ketersebaran | Didukung | Didukung |
Filter pemangkasan | Didukung | Didukung |
Pemangkasan gerakan | Eksperimental | Tidak didukung |
CATATAN : Dukungan terbatas untuk model TensorFlow. Hanya model yang dibuat menggunakan Sequential atau Keras Functional API yang didukung.
Dokumentasi ini mencakup informasi rinci tentang algoritma NNCF dan fungsi yang diperlukan untuk kontribusi pada NNCF.
Dokumentasi pengguna terbaru untuk NNCF tersedia di sini.
Dokumentasi NNCF API dapat ditemukan di sini.
NNCF PTQ adalah cara paling sederhana untuk menerapkan kuantisasi 8-bit. Untuk menjalankan algoritme, Anda hanya memerlukan model dan kumpulan data kalibrasi kecil (~300 sampel).
OpenVINO adalah backend pilihan untuk menjalankan PTQ, sementara PyTorch, TensorFlow, dan ONNX juga didukung.
import nncf
import openvino . runtime as ov
import torch
from torchvision import datasets , transforms
# Instantiate your uncompressed model
model = ov . Core (). read_model ( "/model_path" )
# Provide validation part of the dataset to collect statistics needed for the compression algorithm
val_dataset = datasets . ImageFolder ( "/path" , transform = transforms . Compose ([ transforms . ToTensor ()]))
dataset_loader = torch . utils . data . DataLoader ( val_dataset , batch_size = 1 )
# Step 1: Initialize transformation function
def transform_fn ( data_item ):
images , _ = data_item
return images
# Step 2: Initialize NNCF Dataset
calibration_dataset = nncf . Dataset ( dataset_loader , transform_fn )
# Step 3: Run the quantization pipeline
quantized_model = nncf . quantize ( model , calibration_dataset )
import nncf
import torch
from torchvision import datasets , models
# Instantiate your uncompressed model
model = models . mobilenet_v2 ()
# Provide validation part of the dataset to collect statistics needed for the compression algorithm
val_dataset = datasets . ImageFolder ( "/path" , transform = transforms . Compose ([ transforms . ToTensor ()]))
dataset_loader = torch . utils . data . DataLoader ( val_dataset )
# Step 1: Initialize the transformation function
def transform_fn ( data_item ):
images , _ = data_item
return images
# Step 2: Initialize NNCF Dataset
calibration_dataset = nncf . Dataset ( dataset_loader , transform_fn )
# Step 3: Run the quantization pipeline
quantized_model = nncf . quantize ( model , calibration_dataset )
CATATAN Jika algoritme Kuantisasi Pasca Pelatihan tidak memenuhi persyaratan kualitas, Anda dapat menyempurnakan model pytorch terkuantisasi. Anda dapat menemukan contoh pipeline pelatihan Quantization-Aware untuk model pytorch di sini.
import nncf
import torch . fx
from torchvision import datasets , models
from nncf . torch import disable_patching
# Instantiate your uncompressed model
model = models . mobilenet_v2 ()
# Provide validation part of the dataset to collect statistics needed for the compression algorithm
val_dataset = datasets . ImageFolder ( "/path" , transform = transforms . Compose ([ transforms . ToTensor ()]))
dataset_loader = torch . utils . data . DataLoader ( val_dataset )
# Step 1: Initialize the transformation function
def transform_fn ( data_item ):
images , _ = data_item
return images
# Step 2: Initialize NNCF Dataset
calibration_dataset = nncf . Dataset ( dataset_loader , transform_fn )
# Step 3: Export model to TorchFX
input_shape = ( 1 , 3 , 224 , 224 )
with nncf . torch . disable_patching ():
fx_model = torch . export . export_for_training ( model , args = ( ex_input ,)). module ()
# or
# fx_model = torch.export.export(model, args=(ex_input,)).module()
# Step 4: Run the quantization pipeline
quantized_fx_model = nncf . quantize ( fx_model , calibration_dataset )
import nncf
import tensorflow as tf
import tensorflow_datasets as tfds
# Instantiate your uncompressed model
model = tf . keras . applications . MobileNetV2 ()
# Provide validation part of the dataset to collect statistics needed for the compression algorithm
val_dataset = tfds . load ( "/path" , split = "validation" ,
shuffle_files = False , as_supervised = True )
# Step 1: Initialize transformation function
def transform_fn ( data_item ):
images , _ = data_item
return images
# Step 2: Initialize NNCF Dataset
calibration_dataset = nncf . Dataset ( val_dataset , transform_fn )
# Step 3: Run the quantization pipeline
quantized_model = nncf . quantize ( model , calibration_dataset )
import onnx
import nncf
import torch
from torchvision import datasets
# Instantiate your uncompressed model
onnx_model = onnx . load_model ( "/model_path" )
# Provide validation part of the dataset to collect statistics needed for the compression algorithm
val_dataset = datasets . ImageFolder ( "/path" , transform = transforms . Compose ([ transforms . ToTensor ()]))
dataset_loader = torch . utils . data . DataLoader ( val_dataset , batch_size = 1 )
# Step 1: Initialize transformation function
input_name = onnx_model . graph . input [ 0 ]. name
def transform_fn ( data_item ):
images , _ = data_item
return { input_name : images . numpy ()}
# Step 2: Initialize NNCF Dataset
calibration_dataset = nncf . Dataset ( dataset_loader , transform_fn )
# Step 3: Run the quantization pipeline
quantized_model = nncf . quantize ( onnx_model , calibration_dataset )
Berikut adalah contoh pipeline Accuracy Aware Quantization di mana bobot model dan parameter kompresi dapat disesuaikan untuk mencapai akurasi yang lebih tinggi.
import nncf
import torch
from torchvision import datasets , models
# Instantiate your uncompressed model
model = models . mobilenet_v2 ()
# Provide validation part of the dataset to collect statistics needed for the compression algorithm
val_dataset = datasets . ImageFolder ( "/path" , transform = transforms . Compose ([ transforms . ToTensor ()]))
dataset_loader = torch . utils . data . DataLoader ( val_dataset )
# Step 1: Initialize the transformation function
def transform_fn ( data_item ):
images , _ = data_item
return images
# Step 2: Initialize NNCF Dataset
calibration_dataset = nncf . Dataset ( dataset_loader , transform_fn )
# Step 3: Run the quantization pipeline
quantized_model = nncf . quantize ( model , calibration_dataset )
# Now use compressed_model as a usual torch.nn.Module
# to fine-tune compression parameters along with the model weights
# Save quantization modules and the quantized model parameters
checkpoint = {
'state_dict' : model . state_dict (),
'nncf_config' : model . nncf . get_config (),
... # the rest of the user-defined objects to save
}
torch . save ( checkpoint , path_to_checkpoint )
# ...
# Load quantization modules and the quantized model parameters
resuming_checkpoint = torch . load ( path_to_checkpoint )
nncf_config = resuming_checkpoint [ 'nncf_config' ]
state_dict = resuming_checkpoint [ 'state_dict' ]
quantized_model = nncf . torch . load_from_config ( model , nncf_config , example_input )
model . load_state_dict ( state_dict )
# ... the rest of the usual PyTorch-powered training pipeline
Berikut adalah contoh pipeline Sparsifikasi RB Sadar Akurasi di mana bobot model dan parameter kompresi dapat disesuaikan untuk mencapai akurasi yang lebih tinggi.
import torch
import nncf . torch # Important - must be imported before any other external package that depends on torch
from nncf import NNCFConfig
from nncf . torch import create_compressed_model , register_default_init_args
# Instantiate your uncompressed model
from torchvision . models . resnet import resnet50
model = resnet50 ()
# Load a configuration file to specify compression
nncf_config = NNCFConfig . from_json ( "resnet50_imagenet_rb_sparsity.json" )
# Provide data loaders for compression algorithm initialization, if necessary
import torchvision . datasets as datasets
representative_dataset = datasets . ImageFolder ( "/path" , transform = transforms . Compose ([ transforms . ToTensor ()]))
init_loader = torch . utils . data . DataLoader ( representative_dataset )
nncf_config = register_default_init_args ( nncf_config , init_loader )
# Apply the specified compression algorithms to the model
compression_ctrl , compressed_model = create_compressed_model ( model , nncf_config )
# Now use compressed_model as a usual torch.nn.Module
# to fine-tune compression parameters along with the model weights
# ... the rest of the usual PyTorch-powered training pipeline
# Export to ONNX or .pth when done fine-tuning
compression_ctrl . export_model ( "compressed_model.onnx" )
torch . save ( compressed_model . state_dict (), "compressed_model.pth" )
CATATAN (PyTorch) : Karena cara kerja NNCF dalam backend PyTorch, import nncf
harus dilakukan sebelum impor torch
lainnya dalam paket Anda atau dalam paket pihak ketiga yang digunakan kode Anda. Jika tidak, kompresi mungkin diterapkan secara tidak sempurna.
import tensorflow as tf
from nncf import NNCFConfig
from nncf . tensorflow import create_compressed_model , register_default_init_args
# Instantiate your uncompressed model
from tensorflow . keras . applications import ResNet50
model = ResNet50 ()
# Load a configuration file to specify compression
nncf_config = NNCFConfig . from_json ( "resnet50_imagenet_rb_sparsity.json" )
# Provide dataset for compression algorithm initialization
representative_dataset = tf . data . Dataset . list_files ( "/path/*.jpeg" )
nncf_config = register_default_init_args ( nncf_config , representative_dataset , batch_size = 1 )
# Apply the specified compression algorithms to the model
compression_ctrl , compressed_model = create_compressed_model ( model , nncf_config )
# Now use compressed_model as a usual Keras model
# to fine-tune compression parameters along with the model weights
# ... the rest of the usual TensorFlow-powered training pipeline
# Export to Frozen Graph, TensorFlow SavedModel or .h5 when done fine-tuning
compression_ctrl . export_model ( "compressed_model.pb" , save_format = "frozen_graph" )
Untuk penjelasan lebih rinci tentang penggunaan NNCF dalam kode pelatihan Anda, lihat tutorial ini.
Untuk memulai lebih cepat dengan kompresi bertenaga NNCF, cobalah contoh buku catatan dan skrip yang disajikan di bawah.
Tutorial dan demo notebook Jupyter* yang siap dijalankan tersedia untuk menjelaskan dan menampilkan algoritme kompresi NNCF guna mengoptimalkan model untuk inferensi dengan OpenVINO Toolkit:
Nama Tutorial Buku Catatan | Algoritma Kompresi | Bagian belakang | Domain |
---|---|---|---|
Kuantisasi BERT | Kuantisasi Pasca Pelatihan | BukaVINO | NLP |
Kuantisasi Model Segmentasi MONAI | Kuantisasi Pasca Pelatihan | BukaVINO | Segmentasi |
Kuantisasi Model PyTorch | Kuantisasi Pasca Pelatihan | PyTorch | Klasifikasi Gambar |
Kuantisasi dengan Kontrol Akurasi | Kuantisasi Pasca Pelatihan dengan Kontrol Akurasi | BukaVINO | Pidato-ke-Teks, Deteksi Objek |
Kompresi Waktu Pelatihan PyTorch | Kompresi Waktu Pelatihan | PyTorch | Klasifikasi Gambar |
Kompresi Waktu Pelatihan TensorFlow | Kompresi Waktu Pelatihan | Aliran Tensor | Klasifikasi Gambar |
Pemangkasan Bersama, Kuantisasi dan Distilasi untuk BERT | Pemangkasan Bersama, Kuantisasi dan Distilasi | BukaVINO | NLP |
Daftar notebook yang mendemonstrasikan konversi dan inferensi OpenVINO bersama dengan kompresi NNCF untuk model dari berbagai domain:
Model Demo | Algoritma Kompresi | Bagian belakang | Domain |
---|---|---|---|
YOLOv8 | Kuantisasi Pasca Pelatihan | BukaVINO | Deteksi Objek, Deteksi Titik Kunci, Segmentasi Instance |
EfisienSAM | Kuantisasi Pasca Pelatihan | BukaVINO | Segmentasi Gambar |
Segmentasikan Model Apapun | Kuantisasi Pasca Pelatihan | BukaVINO | Segmentasi Gambar |
SatuMantan | Kuantisasi Pasca Pelatihan | BukaVINO | Segmentasi Gambar |
InstruksikanPix2Pix | Kuantisasi Pasca Pelatihan | BukaVINO | Gambar-ke-Gambar |
KLIP | Kuantisasi Pasca Pelatihan | BukaVINO | Gambar-ke-Teks |
BIP | Kuantisasi Pasca Pelatihan | BukaVINO | Gambar-ke-Teks |
Model Konsistensi Laten | Kuantisasi Pasca Pelatihan | BukaVINO | Teks-ke-Gambar |
Monster Kode QR ControlNet | Kuantisasi Pasca Pelatihan | BukaVINO | Teks-ke-Gambar |
SDXL-turbo | Kuantisasi Pasca Pelatihan | BukaVINO | Teks-ke-Gambar, Gambar-ke-Gambar |
Distil-Bisikan | Kuantisasi Pasca Pelatihan | BukaVINO | Pidato-ke-Teks |
Berbisik | Kuantisasi Pasca Pelatihan | BukaVINO | Pidato-ke-Teks |
Pengenalan Ucapan MMS | Kuantisasi Pasca Pelatihan | BukaVINO | Pidato-ke-Teks |
Koreksi Kesalahan Tata Bahasa | Kuantisasi Pasca Pelatihan | BukaVINO | NLP, Koreksi Tata Bahasa |
Instruksi LLM Mengikuti | Kompresi Berat | BukaVINO | NLP, Mengikuti Instruksi |
Bot Obrolan LLM | Kompresi Berat | BukaVINO | NLP, Bot Obrolan |
Skrip ringkas yang menunjukkan kuantisasi dan peningkatan kecepatan inferensi yang sesuai:
Contoh Nama | Algoritma Kompresi | Bagian belakang | Domain |
---|---|---|---|
OpenVINO MobileNetV2 | Kuantisasi Pasca Pelatihan | BukaVINO | Klasifikasi Gambar |
BukaVINO YOLOv8 | Kuantisasi Pasca Pelatihan | BukaVINO | Deteksi Objek |
OpenVINO YOLOv8 QwAC | Kuantisasi Pasca Pelatihan dengan Kontrol Akurasi | BukaVINO | Deteksi Objek |
Klasifikasi Anomali OpenVINO | Kuantisasi Pasca Pelatihan dengan Kontrol Akurasi | BukaVINO | Klasifikasi Anomali |
PyTorch MobileNetV2 | Kuantisasi Pasca Pelatihan | PyTorch | Klasifikasi Gambar |
SSD PyTorch | Kuantisasi Pasca Pelatihan | PyTorch | Deteksi Objek |
TorchFX Resnet18 | Kuantisasi Pasca Pelatihan | OborFX | Klasifikasi Gambar |
TensorFlow MobileNetV2 | Kuantisasi Pasca Pelatihan | Aliran Tensor | Klasifikasi Gambar |
ONNX MobileNetV2 | Kuantisasi Pasca Pelatihan | ONNX | Klasifikasi Gambar |
Contoh pipeline lengkap termasuk kompresi, pelatihan, dan inferensi untuk tugas klasifikasi, deteksi, dan segmentasi:
Contoh Nama | Algoritma Kompresi | Bagian belakang | Domain |
---|---|---|---|
Klasifikasi Gambar PyTorch | Kompresi Waktu Pelatihan | PyTorch | Klasifikasi Gambar |
Deteksi Objek PyTorch | Kompresi Waktu Pelatihan | PyTorch | Deteksi Objek |
Segmentasi Semantik PyTorch | Kompresi Waktu Pelatihan | PyTorch | Segmentasi Semantik |
Klasifikasi Gambar TensorFlow | Kompresi Waktu Pelatihan | Aliran Tensor | Klasifikasi Gambar |
Deteksi Objek TensorFlow | Kompresi Waktu Pelatihan | Aliran Tensor | Deteksi Objek |
Segmentasi Instance TensorFlow | Kompresi Waktu Pelatihan | Aliran Tensor | Segmentasi Instance |
NNCF dapat dengan mudah diintegrasikan ke dalam jalur pelatihan/evaluasi repositori pihak ketiga.
Ekstensi Pelatihan OpenVINO
NNCF diintegrasikan ke dalam OpenVINO Training Extensions sebagai backend optimasi model. Anda dapat melatih, mengoptimalkan, dan mengekspor model baru berdasarkan templat model yang tersedia serta menjalankan model yang diekspor dengan OpenVINO.
Memeluk Wajah Intel Optimal
NNCF digunakan sebagai backend kompresi dalam repositori transformers
terkenal di HuggingFace Optimum Intel.
Untuk petunjuk instalasi terperinci, lihat panduan Instalasi.
NNCF dapat diinstal sebagai paket PyPI biasa melalui pip:
pip install nncf
NNCF juga tersedia melalui conda:
conda install -c conda-forge nncf
Repositori ini diuji pada Python* 3.10.14, PyTorch* 2.5.0 (NVidia CUDA* Toolkit 12.4) dan TensorFlow* 2.12.1 (NVidia CUDA* Toolkit 11.8).
Daftar model dan hasil kompresinya dapat ditemukan di halaman NNCF Model Zoo kami.
@ article{kozlov2020neural,
title = {Neural network compression framework for fast model inference},
author = {Kozlov, Alexander and Lazarevich, Ivan and Shamporov, Vasily and Lyalyushkin, Nikolay and Gorbachev, Yury},
journal = {arXiv preprint arXiv: 2002.08679 },
year = { 2020 }
}
Lihat file CONTRIBUTING.md untuk pedoman kontribusi ke repositori NNCF.
NNCF sebagai bagian dari toolkit OpenVINO™ mengumpulkan data penggunaan anonim untuk tujuan meningkatkan alat OpenVINO™. Anda dapat memilih keluar kapan saja dengan menjalankan perintah berikut di lingkungan Python tempat Anda menginstal NNCF:
opt_in_out --opt_out
Informasi lebih lanjut tersedia di telemetri OpenVINO.