Optimum 1.2 推論リリースで ONNX Runtime 加速パイプラインを追加

TL;DR

Optimum 1.2 は ONNX Runtime を使用した Hugging Face Transformers パイプライン向けの推論サポートを導入し、ユーザーは標準の AutoModel クラスを ORTModel の同等クラスに置き換え、グラフ最適化と動的量子化を適用し、元の精度の >99% を保ちつつ最大で 2 倍のレイテンシ削減を実現できます。


Optimum とは何か?

Optimum は、加速ハードウェア上でのパフォーマンス最適化のための統一 API を提供する、Hugging Face Transformers を拡張するオープンソースライブラリです。高速トレーニング、量子化、グラフ最適化、そして今回追加された推論のためのツールを提供し、Graphcore IPU、Habana Gaudi、ONNX Runtime などのハードウェアをサポートします。


Optimum 1.2 の新しい推論およびパイプライン機能

  • API 互換性ORTModelForXxx クラスは AutoModelForXxx のドロップイン置換です。例:
    from transformers import AutoTokenizer, pipeline
    from optimum.onnxruntime import ORTModelForQuestionAnswering
    
    model = ORTModelForQuestionAnswering.from_pretrained("optimum/roberta-base-squad2")
    tokenizer = AutoTokenizer.from_pretrained("deepset/roberta-base-squad2")
    qa = pipeline("question-answering", model=model, tokenizer=tokenizer)
    
  • ONNX Runtime 統合 – モデルは ONNX にエクスポートされ、ONNX Runtime で実行され、演算子融合、定数折りたたみ、ハードウェア固有のカーネルを活用します。
  • 最適化と量子化ORTOptimizer はグラフレベルの最適化を適用し、ORTQuantizer は動的量子化(例: AVX‑512 VNNI)を実行してモデルサイズを縮小し、レイテンシを改善します。
  • Hub 互換性 – 最適化されたチェックポイントは Hugging Face Hub にプッシュおよびプルでき、コミュニティで加速モデルを共有できます。
  • パイプライン安全レイヤーoptimum.pipelines.pipeline はタスクとモデルの互換性を検証し、サポートされていない構成に対してエラーを発生させます。

エンドツーエンドチュートリアル: 質問応答用 RoBERTa の高速化

このブログ記事では、AWS の m5.xlarge インスタンス上での 6 ステップのワークフローを解説します:

  1. ONNX Runtime 付き Optimum のインストール
    pip install "optimum[onnxruntime]==1.2.0"
    
  2. Transformers モデルを ONNX に変換
    from optimum.onnxruntime import ORTModelForQuestionAnswering
    model = ORTModelForQuestionAnswering.from_pretrained(
        "deepset/roberta-base-squad2", from_transformers=True)
    model.save_pretrained("onnx")
    
  3. グラフ最適化の適用
    from optimum.onnxruntime import ORTOptimizer, OptimizationConfig
    optimizer = ORTOptimizer.from_pretrained("deepset/roberta-base-squad2", feature="question-answering")
    optimizer.export(
       
       
        optimization_config=OptimizationConfig(optimization_level=99),
    )
    
  4. 動的量子化
    from optimum.onnxruntime import ORTQuantizer, AutoQuantizationConfig
    quantizer = ORTQuantizer.from_pretrained("deepset/roberta-base-squad2", feature="question-answering")
    qconfig = AutoQuantizationConfig.avx512_vnni(is_static=False, per_channel=True)
    quantizer.export(
       
       
        quantization_config=qconfig,
    )
    
  5. Transformers パイプラインで推論を実行
    from transformers import pipeline, AutoTokenizer
    from optimum.onnxruntime import ORTModelForQuestionAnswering
    tokenizer = AutoTokenizer.from_pretrained("onnx")
    model = ORTModelForQuestionAnswering.from_pretrained("onnx", file_name="model-quantized.onnx")
    qa = pipeline("question-answering", model=model, tokenizer=tokenizer)
    
  6. 精度とレイテンシの評価
    • SQuAD‑v2 における精度: 標準 82.15 F1、最適化 82.15 F1、量子化 81.83 F1(元の約 99.6 %)。
    • 2 コア CPU におけるレイテンシ: 標準 ≈ 117 ms、最適化 + 量子化 ≈ 65 ms(約 2 倍の高速化)。

現在の制限事項

  • モデルサイズ – Hub からは 2 GB 未満のモデルのみロード可能です。
  • Seq2Seq のサポート – 要約(例: T5)などのタスクはまだ利用できません。
  • 過去のキー・バリュー – 因果言語モデル(例: GPT‑2)はまだキャッシュされた注意状態を使用していません。
  • ローカルキャッシュ – 最適化された ONNX ファイルはダウンロード後にローカルにキャッシュされません。

よくある質問

  • サポートされるタスク – 特徴抽出、テキスト分類、トークン分類、質問応答、ゼロショット分類、テキスト生成。
  • サポートされるモデルtransformers.onnx でエクスポート可能なすべてのモデル、BERT、ALBERT、RoBERTa、XLM‑R、DistilBERT、GPT‑2 などを含みます。
  • サポートされるランタイム – 現在は ONNX Runtime。今後は TensorRT、AWS‑Neuron などのランタイムも予定しています。
  • GPU の使用optimum[onnxruntime-gpu] をインストールすると、GPU プロバイダーが自動的に有効になります。
  • 最適化モデルのロードORTModelForXXX.from_pretrained(..., file_name="model‑optimized.onnx") パターンを使用します。

ロードマップと今後の取り組み

Optimum はトランスフォーマー加速のリファレンスツールキットになることを目指しています。今後のマイルストーンは次のとおりです:

  • 音声(Wav2Vec 2.0)およびビジョン(ViT)モデルのサポート追加。
  • OrtValueIOBinding の統合による低レベルのパフォーマンス向上。
  • 加速モデル向けの評価ユーティリティの提供を簡素化。
  • ランタイムサポートを TensorRT、AWS‑Neuron、その他のプロバイダーへ拡張。

貢献や詳細を知りたい方は、Optimum リポジトリ、Hugging Face フォーラム、作者のソーシャルチャンネルで議論が行われています。

Sources