Hugging Face Inference Endpoints を使った LLM のデプロイ
Hugging Face Inference Endpoints は、オープンソースの Large Language Models (LLM) を本番稼働可能な API としてデプロイするためのマネージド SaaS ソリューションを提供します。このサービスは、手動でのインフラストラクチャ管理と MLOps の必要性をなくし、開発者が Falcon、(Open-)LLaMA、X-Gen、StarCoder、RedPajama などのモデルを効率的にデプロイできるようにします。
Inference Endpoints のコア機能
Inference Endpoints は、いくつかの主要な技術的機能により、モデル選択から本番デプロイへの移行を簡素化します:
- シンプルなデプロイ: モデルは数回のクリックで API としてデプロイでき、基盤となるインフラストラクチャの管理の複雑さを解消します。
- コスト最適化: このサービスには、エンドポイントが使用されていないときにインフラストラクチャをスケールダウンすることでコストを削減する自動「スケール・トゥ・ゼロ」機能が含まれます。ユーザーはエンドポイントの稼働時間に基づいて料金を支払います。
- エンタープライズグレードのセキュリティ: エンドポイントは、直接 VPC 接続経由でのみアクセス可能なセキュアなオフライン インスタンスとしてデプロイできます。このサービスは SOC2 Type 2 認証を取得しており、BAA と GDPR のデータ処理契約を提供します。
- LLM 特有の最適化: 高スループットと低レイテンシーを確保するため、このサービスは Paged Attention と Flash Attention を組み込み、カスタム transformers コードも含む Text Generation Inference (TGI) を利用します。
- 広範なタスクサポート: このプラットフォームは 🤗 Transformers、Sentence-Transformers、Diffusers のオールインワンサポートを提供し、話者ダイアリゼーションなどの高度なタスクにもカスタマイズを許可します。
LLM のデプロイとテスト
tiiuae/falcon-40b-instruct などのモデルをデプロイするには、モデル リポジトリ、クラウド プロバイダー、リージョンを選択します。システムはモデルのサイズに基づいてインスタンスタイプを提案します(例: 4x NVIDIA T4 GPU)、ただしユーザーは最適なパフォーマンスを得るために、単一の NVIDIA A100 GPU などの高性能ハードウェアを手動で選択することもできます。
デプロイ後、エンドポイントは組み込みの Inference Widget を使った手動リクエストまたは cURL コマンドでテストできます。テキスト生成の動作を制御するため、API はペイロードに幅広いパラメータをサポートしており、以下を含みます:
- Temperature: ランダムネスを制御します(デフォルト 1.0)。
- max_new_tokens: 生成するトークンの最大数を設定します(デフォルト 20、最大 512)。
- repetition_penalty: トークンの繰り返しの可能性を制御します。
- top_k と top_p: ボキャブラリのフィルタリングと nucleus サンプリングを管理します。
- do_sample: サンプリングと貪欲デコードを切り替えます(デフォルト false)。
- stop: 生成の終了をトリガーするトークンのリスト。
レスポンス ストリーミングの実装
認識されるレイテンシーを低減してユーザー エクスペリエンスを向上させるため、Inference Endpoints はトークンが生成される際にストリーミングをサポートします。これは、各言語向けの特定のライブラリを使用して実装できます:
Python 実装
huggingface_hub ライブラリと InferenceClient を使用して、開発者は text_generation メソッドで stream=True を設定できます。これにより、アプリケーションは生成されたトークンをイテレーションし、特別なトークンをフィルタリングしたり、定義されたストップ シーケンスで停止したりしながら、リアルタイムでユーザーにトークンを渡すことができます。
JavaScript 実装
@huggingface/inference ライブラリと HfInferenceEndpoint クラスを使用して、開発者は textGenerationStream メソッドを利用できます。このアプローチは、非同期イテレーター (for await...of) を使用して、エンドポイントから受信したトークンを処理および表示します。