Optimum-Intel と OpenVINO GenAI を使用した Hugging Face モデルの最適化とデプロイ
Hugging Face と Intel は、Optimum-Intel と OpenVINO GenAI を使用して Intel ハードウェア上で Transformers モデルを最適化およびデプロイするワークフローを導入しました。このアプローチにより、開発者は Python ベースのトレーニング環境からエッジでの高性能 C++ または Python 推論へ、最小限の依存関係でモデルを移行できます。
OpenVINO による効率的なエッジデプロイ
OpenVINO は C++ AI 推論ソリューションとして設計されており、ソフトウェア依存性を最小限に抑えることが重要なエッジやクライアント側のデプロイに特に適しています。GenAI API の導入により、Large Language Models(LLM)をアプリケーションに統合する作業がさらに簡素化され、パフォーマンスが向上し、Python が最適でない環境でのデプロイの複雑さが軽減されます。
Transformers モデルを OpenVINO IR にエクスポート
Optimum-Intel プロジェクトを通じて、Hugging Face Transformers モデルを OpenVINO 中間表現(IR)形式にエクスポートできます。このプロセスは、🤗 Transformers API を鏡像するラッパー(例: OVModelForCausalLM)を利用します。
開発者は、主に次の 2 つの方法でモデルをエクスポートできます:
- Python API:
.from_pretrained()メソッドにexport=Trueを指定して使用します。 - Command Line Interface (CLI):
optimum-cli export openvinoコマンドを使用します。
モデルをエクスポートすると、.xml と .bin の IR モデルファイル、設定ファイル、および openvino-tokenizers ライブラリ用に変換されたトークナイザーが含まれるディレクトリが作成されます。
モデルの最適化と量子化
リソースが限られたデバイスでレイテンシとメモリ使用量を削減するために、ウェイトのみの量子化が推奨されます。Optimum-Intel は Neural Network Compression Framework(NNCF)を活用し、さまざまな最適化手法を提供します:
- Default Quantization: パラメータ数が 10 億を超えるモデルは、エクスポート時にデフォルトで INT8 に量子化されます。
- Advanced Quantization: 4 ビット整数のウェイトのみ量子化は、精度とパフォーマンスのトレードオフを改善します。Llama-3.1-8B のようなモデルに推奨される手法は、AWQ(Activation-aware Weight Quantization)のスタッキング、量子化スケール推定、キャリブレーションデータセットを使用した混合精度 INT4/INT8 量子化です。
量子化の精度への影響
量子化は通常、精度に若干の低下をもたらします。Wikitext データセット上で Word Perplexity(PPL)指標を使用した場合、meta-llama/Meta-Llama-3.1-8B への影響は以下の通りです:
| モデル | PPL PyTorch FP32 | OpenVINO INT8 | OpenVINO INT4 |
|---|---|---|---|
| Meta-Llama-3.1-8B | 7.3366 | 7.3463 | 7.8288 |
OpenVINO GenAI API を使用したデプロイ
モデルが変換および最適化されたら、OpenVINO GenAI の LLMPipeline クラスを使用して、Python と C++ の両方で最小限の依存関係でデプロイできます。
Python デプロイ
Python でのデプロイには openvino-genai パッケージだけが必要です。LLMPipeline は GenerationConfig オブジェクトを介してモデルのロードとテキスト生成を行い、max_new_tokens などのパラメータを制御します。
C++ デプロイ
C++ API は 🤗 Transformers API からのシームレスな移行を想定して設計されています。開発者はハードウェアデバイス(例: "CPU" や "GPU")を指定し、ov::genai::LLMPipeline を使用して生成を行えます。
高度な生成機能
LLMPipeline は、ユーザー体験とパフォーマンスを向上させるための複数のハイレベル機能をサポートしています:
- Custom Decoding: ビームサーチなどのアルゴリズムをサポートします。
- Interactive Chat:
start_chat()とfinish_chat()メソッドにより、対話シナリオが可能になります。これらのメソッドは、過去のチャット履歴の KV キャッシュを利用してプロンプト処理時間を短縮します。 - Streaming: ストリーマー関数を実装することで、全シーケンスが生成されるのを待つのではなく、生成されたトークンをリアルタイムで出力できます。
技術要件
実装には、以下のパッケージバージョンが指定されています:
transformers: 4.44openvino: 24.3openvino-tokenizers: 24.3optimum-intel: 1.20lm-eval: 0.4.3openvino-genai: 24.3