All Products
Search
Document Center

Platform For AI:Optimasi kuantisasi

Last Updated:Apr 01, 2026

PAI-Blade mendukung kuantisasi INT8 untuk model TensorFlow dan PyTorch pada GPU. Kuantisasi mengurangi penggunaan memori model dan meningkatkan throughput inferensi dengan mengganti bilangan titik mengambang 32-bit menggunakan bilangan bulat titik tetap berlebar bit lebih rendah.

Kuantisasi INT8 memerlukan GPU yang mendukung komputasi INT8. Jika perangkat GPU yang Anda gunakan mendukung kuantisasi INT8 dan model terkuantisasi dapat dipercepat, PAI-Blade akan menerapkan kuantisasi.

Cara kerja

Mode online vs. mode offline

Online modeOffline mode
Calibration datasetTidak diperlukanDiperlukan
AccelerationLebih rendahLebih tinggi (disarankan)
Quantization parametersDihitung tanpa calibration datasetDihitung dari data kalibrasi

Model TensorFlow mendukung kedua mode tersebut, sedangkan model PyTorch hanya tersedia dalam mode offline—calibration dataset diperlukan.

Calibration dataset

Calibration dataset harus merepresentasikan distribusi nyata dari input inferensi Anda. Contoh kode dalam topik ini menggunakan 10 sampel hanya untuk ilustrasi.

FrameworkFormat
TensorFlowDaftar argumen feed_dict; semua nilai harus berupa np.ndarray
PyTorchDaftar yang berisi beberapa kelompok data masukan

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • GPU yang mendukung kuantisasi INT8

  • PAI-Blade terinstal di lingkungan Python Anda

  • Model TensorFlow (frozen) atau PyTorch (traced) yang telah dilatih

Kuantisasi model TensorFlow

Atur optimization_level='o2' dalam blade.optimize() untuk mengaktifkan kuantisasi. Untuk hasil terbaik, sediakan calibration dataset agar berjalan dalam mode offline.

Persiapkan calibration dataset:

# Persiapkan calibration dataset.
import numpy as np
calib_data = list()
for i in range(10):
    # Semua nilai dalam argumen feed_dict harus bertipe np.ndarray.
    feed_dict = {'input:0': np.ones((32, 224, 224, 3), dtype=np.float32)}
    calib_data.append(feed_dict)

Langkah-langkah:

  1. Unduh model contoh, data uji, dan calibration dataset.

    wget https://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/test_public_model/bbs/tf_resnet50_v1.5/frozen.pb
    wget https://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/test_public_model/bbs/tf_resnet50_v1.5/test_bc32.npy
    wget https://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/test_public_model/bbs/tf_resnet50_v1.5/calib_data_test_bc32.npy
  2. Muat model dan data.

    import numpy as np
    import tensorflow as tf
    
    # Muat model.
    graph_def = tf.GraphDef()
    with open('frozen.pb', 'rb') as f:
        graph_def.ParseFromString(f.read())
    
    # Muat data uji.
    test_data = np.load('test_bc32.npy', allow_pickle=True, encoding='bytes',).item()
    
    # Muat calibration dataset.
    calib_data = np.load('calib_data_test_bc32.npy', allow_pickle=True, encoding='bytes',)
  3. Jalankan kuantisasi INT8 dalam mode offline.

    import blade
    optimized_model, opt_spec, report = blade.optimize(
        model=graph_def,
        optimization_level='o2',
        device_type='gpu',
        test_data=test_data,
        calib_data=calib_data
    )
  4. Verifikasi presisi model terkuantisasi. Gunakan set data uji lengkap untuk memeriksa apakah presisi turun secara signifikan. Jika presisi memenuhi kebutuhan Anda, kuantisasi selesai. Jika penurunan presisi terlalu tinggi, aktifkan weight_adjustment agar PAI-Blade secara otomatis menyesuaikan parameter model. Opsi ini hanya tersedia untuk model TensorFlow pada GPU.

    quant_config = {
        'weight_adjustment': 'true'  # Nilai default: false.
    }
    optimized_model, opt_spec, report = blade.optimize(
        model=graph_def,
        optimization_level='o2',
        device_type='gpu',
        test_data=test_data,
        calib_data=calib_data,
        config=blade.Config(quant_config=quant_config)
    )

    Untuk semua opsi konfigurasi kuantisasi yang tersedia, lihat blade.Config.

Kuantisasi model PyTorch

Model PyTorch hanya dapat dikuantisasi dalam mode offline. Calibration dataset diperlukan.

Atur optimization_level='o2' dalam blade.optimize() untuk mengaktifkan kuantisasi.

Persiapkan calibration dataset:

# Persiapkan calibration dataset.
import torch
calib_data = list()
for i in range(10):
    image = torch.ones(32, 3, 224, 224)
    calib_data.append(image)

Langkah-langkah:

  1. Unduh model contoh, data uji, dan calibration dataset.

    wget https://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/test_public_model/bbs/pt_resnet50_v1.5/traced_model.pt
    wget https://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/test_public_model/bbs/pt_resnet50_v1.5/test_bc32.pth
    wget https://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/test_public_model/bbs/pt_resnet50_v1.5/calib_data_test_bc32.pth
  2. Muat model dan data.

    import torch
    
    # Muat model.
    pt_model = torch.jit.load('traced_model.pt')
    
    # Muat data uji.
    test_data = torch.load('test_bc32.pth')
    
    # Muat calibration dataset.
    calib_data = torch.load('calib_data_test_bc32.pth')
  3. Jalankan kuantisasi INT8 dalam mode offline.

    import blade
    optimized_model, opt_spec, report = blade.optimize(
        model=pt_model,
        optimization_level='o2',
        device_type='gpu',
        test_data=test_data,
        calib_data=calib_data
    )

Langkah selanjutnya