全部产品
Search
文档中心

Platform For AI:Kuantisasi

更新时间:Jul 02, 2025

Machine Learning Platform for AI (PAI)-Blade mendukung kuantisasi INT8 untuk model TensorFlow dan PyTorch pada perangkat GPU atau perangkat klien. Topik ini menjelaskan cara menggunakan PAI-Blade untuk mengkuantisasi model pada perangkat GPU.

Informasi latar belakang

Kuantisasi merupakan salah satu metode yang paling umum digunakan untuk memadatkan model. Bilangan bulat titik tetap dengan lebar bit lebih kecil digunakan sebagai pengganti bilangan titik mengambang 32-bit. Hal ini mengurangi overhead akses memori dan meningkatkan laju masuk dari perintah yang dijalankan. Kuantisasi memerlukan dukungan dari perangkat keras komputasi tingkat bawah.

Kuantisasi model TensorFlow

Untuk informasi lebih lanjut tentang cara mengoptimalkan model TensorFlow, lihat Optimalkan Model TensorFlow. Selain itu, Anda dapat melakukan kuantisasi untuk model dengan menentukan optimization_level='o2' ketika mengoptimalkan model menggunakan PAI-Blade. Jika perangkat GPU yang digunakan mendukung kuantisasi INT8 dan model yang dikuantisasi dapat dipercepat, PAI-Blade akan melakukan kuantisasi dalam mode default.

  • Jika Anda tidak menyediakan set data kalibrasi, PAI-Blade akan melakukan kuantisasi INT8 dalam mode online.

  • Untuk mencapai percepatan yang lebih besar, disarankan untuk menyediakan set data kalibrasi yang digunakan untuk menghitung parameter kuantisasi dalam mode offline. Setelah PAI-Blade mendapatkan set data kalibrasi, PAI-Blade secara otomatis melakukan kuantisasi INT8 dalam mode offline.

Set data kalibrasi yang digunakan untuk mengkuantisasi model TensorFlow adalah daftar argumen feed_dict. Contoh kode berikut memberikan ilustrasi:

# Siapkan set data kalibrasi.
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)

Anda dapat mengikuti langkah-langkah berikut untuk mengkuantisasi model TensorFlow:

  1. Unduh model sampel, data uji, dan set data kalibrasi.

    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 yang akan dikuantisasi dan data yang sesuai.

    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 set data kalibrasi.
    calib_data = np.load('calib_data_test_bc32.npy', allow_pickle=True, encoding='bytes',)
  3. Lakukan 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 yang dikuantisasi.

    Setelah kuantisasi selesai, Anda dapat menggunakan set data uji lengkap untuk memeriksa apakah presisi model yang dikuantisasi berkurang secara signifikan. Jika presisi model yang dikuantisasi memenuhi persyaratan Anda, Anda tidak perlu menjalankan kode berikut. Namun, jika tidak, Anda dapat menjalankan kode berikut untuk memodifikasi konfigurasi kuantisasi guna mengurangi loss presisi. Untuk informasi lebih lanjut tentang konfigurasi kuantisasi, lihat blade.Config.

    Fitur weight_adjustment hanya dapat diaktifkan jika Anda mengkuantisasi model TensorFlow pada perangkat GPU. Jika Anda mengatur kunci weight_adjustment menjadi true, PAI-Blade secara otomatis menyesuaikan parameter model untuk mengurangi loss presisi. Contoh kode berikut memberikan ilustrasi cara mengaktifkan fitur tersebut:

    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)
    )

Kuantisasi model PyTorch

Mirip dengan kuantisasi model TensorFlow, Anda hanya perlu menentukan optimization_level='o2' untuk mengaktifkan kuantisasi ketika mengoptimalkan model PyTorch menggunakan PAI-Blade. Namun, model PyTorch hanya dapat dikuantisasi dalam mode offline. Oleh karena itu, Anda harus menyediakan set data kalibrasi yang dapat digunakan untuk menghitung parameter kuantisasi dalam mode offline saat mengaktifkan kuantisasi untuk model PyTorch.

Set data kalibrasi yang digunakan untuk mengkuantisasi model PyTorch adalah daftar yang berisi beberapa kelompok data masukan. Contoh kode berikut memberikan ilustrasi:

# Siapkan set data kalibrasi.
import numpy as np
calib_data = list()
for i in range(10):
    image = torch.ones(32, 3, 224, 224)
    calib_data.append(image)

Anda dapat mengikuti langkah-langkah berikut untuk mengkuantisasi model PyTorch:

  1. Unduh model sampel, data uji, dan set data kalibrasi.

    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 yang akan dikuantisasi dan data yang sesuai.

    import torch
    # Muat model.
    pt_model = torch.jit.load('traced_model.pt')
    # Muat data uji.
    test_data = torch.load('test_bc32.pth')
    # Muat set data kalibrasi.
    calib_data = torch.load('calib_data_test_bc32.pth')
  3. Lakukan 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
    )