大規模言語モデル推論ガイド#
GPT のような大規模言語モデル (LLM) は、テキスト生成から言語翻訳まで、幅広い自然言語タスクを実行できる変革的なディープラーニング・ネットワークです。OpenVINO はこれらのモデルの展開を最適化し、パフォーマンスとさまざまなアプリケーションへの統合を強化します。このガイドでは、モデルの読み込みと変換から高度なユースケースまで、OpenVINO で LLM を使用する方法を説明します。
LLM のデプロイに OpenVINO を使用する利点:
OpenVINO は最適化された LLM 推論を提供します: 完全な C/C++ API を提供し、Python ベースのランタイムよりも高速な操作を実現します。迅速な開発のための Python API が含まれており、C++ でさらに最適化するオプションもあります。
多様なハードウェアと互換性があります: ARM および x86/x64 アーキテクチャーの CPU、GPU、ニューラル・アクセラレーター、統合型インテル® プロセッサー・グラフィックス、ディスクリートのインテル® Arc™ A シリーズ・グラフィックス、ディスクリートのインテル® データセンター GPU フレックスシリーズをサポートし、ターゲット・ハードウェアでのパフォーマンスを最大化する自動最適化機能を備えています。
依存関係が少なくなります: Hugging Face や PyTorch などのフレームワークよりもバイナリーサイズが小さくなり、メモリー・フットプリントが削減されるため、デプロイメントが容易になり、更新がより管理しやすくなります。
圧縮および精度管理技術を提供します: 埋め込みレイヤーを含む 8 ビットおよび 4 ビットの重み圧縮、およびストレージ形式の削減など。これには、非圧縮モデルの fp16 精度と、Hugging Face の GPTQ モデルなどの圧縮モデルの int8/int4 が含まれます。
幅広いディープラーニング・モデルとアーキテクチャーをサポートします: Llama 2、MPT、OPT、Stable Diffusion、Stable Diffusion XL などのテキスト、画像、オーディオ生成モデルが含まれます。これにより、マルチモーダル・アプリケーションの開発が可能になり、一度記述すればどこにでもデプロイできるようになります。
推論能力を強化: スケールドット積アテンション、ロータリー位置埋め込み、グループ・クエリー・アテンション、エキスパートの混合などの推論プリミティブを融合しました。また、インプレース KV キャッシュ、動的量子化、KV キャッシュの量子化とカプセル化、動的ビームサイズ構成、投機的サンプリングなどの高度な機能も提供します。
ステートフルなモデル最適化を提供: Hugging Face Transformers のモデルはステートフル形式に変換され、過去の KV キャッシュテンソルを内部でより効率よく管理することで、長時間実行されるテキスト生成タスクの推論パフォーマンスとメモリー使用量を最適化します。この機能は、サポートされている多くのモデルで自動的にアクティブ化されますが、サポートされないモデルではステートレスのままになります。詳細は、ステートフル・モデルとステート API をご覧ください。
OpenVINO は、生成 AI のユースケースに 3 つのパスを提供します:
Hugging Face: Optimum Intel 拡張を介して、Hugging Face フレームワーク (トランスフォーマー、ディフューザー) のバックエンドとして OpenVINO を使用します。
OpenVINO GenAI フレーバー: OpenVINO GenAI API を使用します (Python および C++)。
ベース OpenVINO: カスタム・パイプライン・コードで OpenVINO ネイティブ API (Python および C++) を使用します。
どちらの場合も、推論には OpenVINO ランタイムが使用され、最適化には OpenVINO ツールが使用されます。主な違いは、フットプリントのサイズ、使いやすさ、カスタマイズ性にあります。
Hugging Face API は習得が容易で、シンプルなインターフェイスを提供し、モデルの初期化とテキスト生成の複雑性を隠匿して、開発者のエクスペリエンスを向上させます。ただし、依存関係が多くカスタマイズ性が低いため C/C++ に移植できません。
OpenVINO GenAI フレーバーは、テキスト生成ループ、トークン化、スケジューリングなどの重要なタスクを自動的に管理することで、LLM 実装の複雑性を軽減します。ネイティブ OpenVINO API は、これらの機能を手動で設定する必要がある、より実践的なエクスペリエンスを提供します。どちらも、依存関係とアプリケーション全体のフットプリントを最小限に抑え、C++ アプリケーションで生成モデルを使用できるように設計されています。
各種モデルやシナリオを試すには、Hugging Face フレームワークから始めることを推奨します。さらに最適化の必要がある場合、モデルを OpenVINO API で使用できます。インテルによる適用は、ニューラル・ネットワーク圧縮フレームワーク (NNCF) を使用したモデルの最適化 (重み圧縮) を可能にし、ネイティブ API アプリケーションで使用するため、モデルを OpenVINO モデル形式にエクスポートするインターフェイスを提供します。
次の方法で LLM を実行します:
以下の表は、Hugging Face とネイティブ OpenVINO API アプローチの違いをまとめたものです:
Hugging Face とネイティブ OpenVINO API の違い
OpenVINO を介した Hugging Face |
OpenVINO ネイティブ API |
|
---|---|---|
モデルのサポート |
LLM などのトランスフォーマー・ベースのモデルをサポート |
ほとんどのフレームワークのモデル・アーキテクチャーをサポート |
API |
Python (Hugging Face API) |
Python、C++ (OpenVINO API) |
モデル形式 |
ソース・フレームワーク / OpenVINO |
ソース・フレームワーク / OpenVINO |
推論コード |
Hugging Face ベース |
カスタム推論パイプライン |
追加の依存関係 |
多くの Hugging Face 依存関係 |
軽量 (numpy など) |
アプリケーションのフットプリント |
ラージ |
スモール |
前処理/後処理と周辺コード |
高レベルの Hugging Face API を通じて提供 |
カスタム実装の必要があります (OpenVINO のサンプルとノートブックを参照) |
パフォーマンス |
良好ですが、ネイティブ API に比べると効率が低下します |
C++ には本来の速度上の利点がありますが、実践的な最適化が必要です |
柔軟性 |
Hugging Face API に限定されます |
Python と C++ による高い柔軟性を持ち、カスタム・コーディングが可能です |
学習曲線と労力 |
学習曲線が低く、統合が迅速 |
学習曲線が高く、統合に多くの労力が必要 |
理想的な使用例 |
迅速なプロトタイプの作成や Python 中心のプロジェクトに最適 |
高性能でリソースが最適化された生産環境に最適 |
モデルのサービス |
Hugging Face の CPU/GPU 使用量に基づく有料サービス |
無料のコード・ソリューション、独自のサーバーでスクリプトを実行。AWS などのクラウドサービスではコストが発生する可能性がありますが、一般的に Hugging Face の料金よりも安価です。 |