すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:量子化最適化

最終更新日:Apr 01, 2026

PAI-Blade は、GPU 上で TensorFlow および PyTorch モデル向けの INT8 量子化をサポートしています。量子化は、32 ビット浮動小数点数を低ビット幅の固定小数点整数に置き換えることで、モデルのメモリ使用量を削減し、推論スループットを向上させます。

INT8 量子化を実行するには、GPU が INT8 演算をサポートしている必要があります。ご利用の GPU デバイスが INT8 量子化をサポートしており、量子化済みモデルの高速化が可能である場合、PAI-Blade は自動的に量子化を実行します。

仕組み

オンラインモードとオフラインモードの比較

オンラインモードオフラインモード
キャリブレーションデータセット不要必要
アクセラレーション低い高い(推奨)
量子化パラメーターキャリブレーションデータセットなしで計算キャリブレーションデータから計算

TensorFlow モデルでは、両モードがサポートされています。PyTorch モデルでは、オフラインモードのみ利用可能です — キャリブレーションデータセットが必須です。

キャリブレーションデータセット

キャリブレーションデータセットは、実際の推論入力の分布を代表するものである必要があります。本トピック内のコード例では、説明のため 10 サンプルを使用しています。

フレームワーク形式
TensorFlowfeed_dict 引数のリスト。すべての値は np.ndarray
PyTorch複数の入力データグループを含むリスト

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

  • INT8 量子化をサポートする GPU

  • Python 環境に PAI-Blade がインストール済み

  • 学習済みの TensorFlow(フローズン)または PyTorch(トレース済み)モデル

TensorFlow モデルの量子化

量子化を有効にするには、blade.optimize()optimization_level='o2' を設定します。最良の結果を得るには、オフラインモードで実行するためにキャリブレーションデータセットを指定してください。

キャリブレーションデータセットの準備:

# キャリブレーションデータセットを準備します。
import numpy as np
calib_data = list()
for i in range(10):
    # feed_dict 引数のすべての値は np.ndarray 型である必要があります。
    feed_dict = {'input:0': np.ones((32, 224, 224, 3), dtype=np.float32)}
    calib_data.append(feed_dict)

操作手順:

  1. サンプルモデル、テストデータ、およびキャリブレーションデータセットをダウンロードします。

    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. モデルおよびデータを読み込みます。

    import numpy as np
    import tensorflow as tf
    
    # モデルを読み込みます。
    graph_def = tf.GraphDef()
    with open('frozen.pb', 'rb') as f:
        graph_def.ParseFromString(f.read())
    
    # テストデータを読み込みます。
    test_data = np.load('test_bc32.npy', allow_pickle=True, encoding='bytes',).item()
    
    # キャリブレーションデータセットを読み込みます。
    calib_data = np.load('calib_data_test_bc32.npy', allow_pickle=True, encoding='bytes',)
  3. オフラインモードで INT8 量子化を実行します。

    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. 量子化済みモデルの精度を検証します。完全なテストデータセットを使用して、精度の低下が著しくないか確認してください。精度が要件を満たす場合は、量子化は完了です。精度損失が大きすぎる場合は、weight_adjustment を有効にして、PAI-Blade がモデルパラメーターを自動調整できるようにします。このオプションは、GPU 上の TensorFlow モデルのみで利用可能です。

    quant_config = {
        'weight_adjustment': 'true'  # デフォルト値: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)
    )

    利用可能なすべての量子化構成オプションについては、「blade.Config」をご参照ください。

PyTorch モデルの量子化

PyTorch モデルはオフラインモードでのみ量子化可能です。キャリブレーションデータセットが必須です。

量子化を有効にするには、blade.optimize()optimization_level='o2' を設定します。

キャリブレーションデータセットの準備:

# キャリブレーションデータセットを準備します。
import torch
calib_data = list()
for i in range(10):
    image = torch.ones(32, 3, 224, 224)
    calib_data.append(image)

操作手順:

  1. サンプルモデル、テストデータ、およびキャリブレーションデータセットをダウンロードします。

    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. モデルおよびデータを読み込みます。

    import torch
    
    # モデルを読み込みます。
    pt_model = torch.jit.load('traced_model.pt')
    
    # テストデータを読み込みます。
    test_data = torch.load('test_bc32.pth')
    
    # キャリブレーションデータセットを読み込みます。
    calib_data = torch.load('calib_data_test_bc32.pth')
  3. オフラインモードで INT8 量子化を実行します。

    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
    )

次のステップ

  • その他の最適化レベルを用いた TensorFlow モデルの最適化については、「TensorFlow モデルの最適化」をご参照ください。

  • weight_adjustment を含むすべての量子化構成オプションについては、「blade.Config」をご参照ください。