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 ステップのワークフローを解説します:
- ONNX Runtime 付き Optimum のインストール
pip install "optimum[onnxruntime]==1.2.0" - Transformers モデルを ONNX に変換
from optimum.onnxruntime import ORTModelForQuestionAnswering model = ORTModelForQuestionAnswering.from_pretrained( "deepset/roberta-base-squad2", from_transformers=True) model.save_pretrained("onnx") - グラフ最適化の適用
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), ) - 動的量子化
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, ) - 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) - 精度とレイテンシの評価
- 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)モデルのサポート追加。
OrtValueとIOBindingの統合による低レベルのパフォーマンス向上。- 加速モデル向けの評価ユーティリティの提供を簡素化。
- ランタイムサポートを TensorRT、AWS‑Neuron、その他のプロバイダーへ拡張。
貢献や詳細を知りたい方は、Optimum リポジトリ、Hugging Face フォーラム、作者のソーシャルチャンネルで議論が行われています。