このトピックでは、Platform for AI (PAI) の独自開発 BladeLLM エンジンを使用して、低レイテンシと高スループットで大規模言語モデル (LLM) 推論を実行することにより、サービスを効率的にデプロイする方法について説明します。
前提条件
PAI がアクティブ化され、デフォルトのワークスペースが作成されていること。 詳細については、「PAI をアクティブ化してデフォルトワークスペースを作成する」をご参照ください。
カスタムモデルをデプロイする場合、次の前提条件が満たされていることを確認してください。
モデルファイルと関連する構成ファイルが準備されていること。次の図は、モデルファイルの例を示しています。
説明Qwen および Llama テキストモデルのみをデプロイでき、モデル構造は変更できません。
config.json 構成ファイルを含める必要があります。 Huggingface モデル形式に基づいて config.json ファイルを構成する必要があります。 サンプルファイルの詳細については、「config.json」をご参照ください。
Object Storage Service (OSS) バケットが作成され、カスタムモデルファイルがアップロードされていること。 詳細については、「OSS コンソールを使用して開始する」をご参照ください。
制限事項
次の表は、BladeLLM エンジンを使用してサービスをデプロイする場合に適用される制限事項を示しています。
種類 | 説明 |
モデルの制限 | Qwen および Llama テキストモデル (オープンソース、ファインチューニング済み、量子化バージョンを含む) のみデプロイできます。 |
リソースの制限 |
|
サービスをデプロイする
PAI は、BladeLLM エンジンを使用してサービスをデプロイするための次のデプロイ方法を提供します。 あらかじめ設定されたパブリックモデルまたは PAI でファインチューニングされたモデルを使用して、迅速なシナリオベースのデプロイメントを実装できます。 PAI は、特別な構成要件を持つユーザー向けに、カスタムデプロイメントと JSON デプロイメントもサポートしています。 ファインチューニングされたモデルを数回クリックするだけでデプロイできます。
シナリオベースのモデルデプロイメント (推奨)
PAI コンソール にログオンします。 上部のナビゲーションバーで、目的のリージョンを選択します。 表示されるページで、目的のワークスペースを選択し、[elastic Algorithm Service (EAS) に入る] をクリックします。
Elastic Algorithm Service (EAS) ページで、[サービスのデプロイ] をクリックします。 [シナリオベースのモデルデプロイメント] セクションの [サービスのデプロイ] ページで、[LLM デプロイメント] をクリックします。
LLM デプロイメント ページで、次の表に示すパラメーターを構成します。
パラメーター
説明
例
基本情報
サービス名
サービスの名前を指定します。
blade_llm_qwen_server
バージョン
このパラメーターを [高パフォーマンスデプロイメント] に設定すると、PAI の独自開発 BladeLLM エンジンが迅速なデプロイメントに使用されます。
高パフォーマンスデプロイメント
イメージバージョン
BladeLLM エンジンバージョンを選択します。
blade-llm:0.9.0
モデル設定
モデルのソース。有効な値:
[パブリックモデル]: PAI はさまざまな共通モデルを提供します。 ドロップダウンリストの
アイコンをクリックして、各モデルの詳細を表示します。
[カスタムモデル]: パブリックモデルがビジネス要件を満たせない場合は、ファインチューニングされたモデルを選択できます。 OSS、NAS ファイルシステム (NAS)、Extreme NAS、凌雲向け Cloud Parallel File System (CPFS)、PAI モデルのいずれかのマウント方法を選択できます。
リソースデプロイメント
リソースタイプ
次のリソースタイプを使用できます。
[パブリックリソース]: ワークロードが軽く、適時性の要件が低いシナリオでは、パブリックリソースを使用することをお勧めします。
[EAS リソースグループ]: リソースの隔離が必要なシナリオ、またはセキュリティ要件が高いシナリオに適しています。 Elastic Algorithm Service (EAS) リソースグループの購入方法については、「EAS リソースグループの使用」をご参照ください。
[リソースクォータ]: 強力なコンピューティング能力と効率的なデータ処理能力が必要なシナリオに適しています。 リソースクォータの準備方法については、「凌雲リソースクォータ」をご参照ください。
パブリックリソース
デプロイリソース
サービスをデプロイするためのインスタンスタイプを選択します。 詳細については、「制限事項」をご参照ください。
ecs.gn7i-c16g1.4xlarge
機能
共有メモリ
共有メモリサイズを構成して、インスタンスがデータのコピーと転送を必要とせずにメモリに対する読み取りおよび書き込み操作を実行できるようにします。 デフォルトでは、複数の GPU を搭載したインスタンスタイプを選択すると、共有メモリは 64 GB に設定されます。 それ以外の場合は、共有メモリは 0 に設定されます。 共有メモリサイズを手動で変更することもできます。
デフォルト設定
詳細設定
テンソル並列処理
BladeLLM は、複数の GPU にわたる分散推論をサポートしています。 ほとんどの場合、このパラメーターをインスタンスタイプの GPU 数に設定できます。
1
ポート番号
イメージの起動後にモデルサービスが listen するローカル HTTP ポート。
説明EAS はポート 8080 で listen するため、ポート 8080 を指定することはできません。
8001
最大 GPU メモリ使用量
モデルが占有するメモリを引いた合計 GPU メモリに対する KV キャッシュメモリの比率。 デフォルト値: 0.85。 メモリ不足の問題が発生した場合は、パラメーター値を小さくすることができます。 十分なメモリがある場合は、パラメーター値を大きくすることができます。
0.85
プリフィルのチャンクサイズ
BladeLLM の組み込み最適化ポリシー。 プリフィルフェーズでは、入力データが複数のチャンクに分割され、計算リソース効率が向上し、レイテンシが短縮されます。 チャンクサイズは、一度にモデルに提供されるデータ量です。 単位: トークン。
2048
投機的デコード
宛先モデルの推論を高速化するために、より小さく高速なドラフトモデルを使用する高速化戦略を有効にするかどうかを指定します。 ドラフトモデルは、将来のトークン生成を複数ステップで予測します。 宛先モデルは、同時にトークンを検証およびフィルタリングします。 これにより、精度を損なうことなくトークン生成が高速化されます。
重要投機的デコード機能はドラフトモデルをデプロイし、より大きな GPU メモリを搭載したインスタンスタイプが必要です。 投機的デコード機能を有効にする場合は、宛先モデルとドラフトモデルのパラメーター数に基づいて必要なメモリサイズを再計算する必要があります。
[ドラフトモデル]: 宛先モデルと同様のアーキテクチャを持つ小規模モデル。 PAI の組み込みパブリックモデルを使用するか、特定のタスクまたはデータセットに基づいてモデルをファインチューニングできます。
[投機ステップサイズ]: 各予測でドラフトモデルによって生成されるトークンシーケンスの長さ。 デフォルト値: 4。 これらのシーケンスは、宛先モデルによって検証およびフィルタリングされます。
無効
その他のパラメーター
[オプションパラメーターを追加]: オプションパラメーターは、そのパラメーター値を使用して構成を指定します。 パラメーター名と値を入力する必要があります。
[フラグパラメーターを追加]: フラグパラメーターはブール型であり、機能を有効または無効にするために使用されます。 パラメーター名を入力するだけで済みます。
なし
コマンドプレビュー
イメージとパラメーターの構成に基づいて自動的に生成される実行コマンド。 デフォルトでは、実行コマンドを変更することはできません。 実行コマンドを変更する場合は、[フリー編集モードに切り替える] をクリックします。
構成を変更せずに使用されるデフォルト構成
パラメーターを構成した後、[デプロイ] をクリックします。
カスタムデプロイメント
PAI コンソール にログオンします。 上部のナビゲーションバーで、目的のリージョンを選択します。 表示されるページで、目的のワークスペースを選択し、[elastic Algorithm Service (EAS) に入る] をクリックします。
Elastic Algorithm Service (EAS) ページで、[サービスのデプロイ] をクリックします。 [カスタムモデルデプロイメント] セクションの [サービスのデプロイ] ページで、[カスタムデプロイメント] をクリックします。
カスタムデプロイメント ページで、パラメーターを構成します。 次の表にパラメーターを示します。 その他のパラメーターについては、「コンソールのカスタムデプロイメントパラメーターの説明」をご参照ください。
パラメーター
説明
基本情報
サービス名
サービスの名前を指定します。
環境情報
デプロイ方法
このパラメーターを [イメージベースのデプロイメント] に設定します。
イメージ構成
を選択します。
モデル設定
OSS をクリックして、ファインチューニングされたモデルの構成をマウントし、次のパラメーターを構成します。
OSS: モデルファイルが格納されている OSS ディレクトリを選択します。 例:
oss://examplebucket/bloom_7b
。マウントパス: サービスインスタンスにマウントされたモデル構成のパス。 例:
/mnt/model/bloom_7b
。
コマンド
このパラメーターを
blade_llm_server --port 8081 --model /mnt/model/bloom_7b/
に設定します。ポート番号
このパラメーターを 8081 に設定します。 値は、コマンドのポート番号と同じである必要があります。
リソースデプロイメント
デプロイリソース
サービスのデプロイに使用するインスタンスタイプを選択します。 詳細については、「制限事項」をご参照ください。
共有メモリ
推論に複数の GPU を使用する場合は、共有メモリサイズを構成する必要があります。 デフォルトでは、複数の GPU を搭載したインスタンスタイプを選択すると、共有メモリは 64 GB に設定されます。 それ以外の場合は、共有メモリは 0 に設定されます。 共有メモリサイズを手動で変更することもできます。
パラメーターを構成した後、[デプロイ] をクリックします。
JSON デプロイメント
PAI コンソール にログオンします。 上部のナビゲーションバーで、目的のリージョンを選択します。 表示されるページで、目的のワークスペースを選択し、[elastic Algorithm Service (EAS) に入る] をクリックします。
Elastic Algorithm Service (EAS) ページで、[サービスのデプロイ] をクリックします。 [カスタムモデルデプロイメント] セクションの [サービスのデプロイ] ページで、[JSON デプロイメント] をクリックします。
JSON デプロイメントページで、JSON エディターに次のコンテンツを指定し、[デプロイ] をクリックします。
{ "name": "blade_llm_bloom_server", // サービスの名前。 "containers": [ { // -vpc サフィックスが付いたイメージとコマンドの URL を使用します。 URL では、<region_id> は cn-hangzhou などのリージョン ID を示します。 // 有効なバージョン番号を指定します。 "image": "eas-registry-vpc.<region_id>.cr.aliyuncs.com/pai-eas/blade-llm:0.8.0", "command": "blade_llm_server --port 8081 --model /mnt/model/bloom_7b/", // ポート番号は、コマンドの --port パラメーターの値と同じである必要があります。 "port": 8081 } ], "storage": [ { // モデルのマウントパス。 "mount_path": "/mnt/model/bloom_7b/", "oss": { "endpoint": "oss-<region_id>-internal.aliyuncs.com", // モデル構成が格納されている OSS ディレクトリ。 "path": "oss://examplebucket/bloom_7b/" } }, { // 推論に複数の GPU を使用する場合は、共有メモリを構成する必要があります。 "empty_dir": { "medium": "memory", "size_limit": 64 }, "mount_path": "/dev/shm" } ], "metadata": { "instance": 1, "memory": 64000, // メモリサイズ。単位: MB。 "cpu": 16, "gpu": 1, "resource": "eas-r-xxxxxx" // リソースグループの ID。 } }
サービスを呼び出す
実行状態のサービスをデプロイすると、サービスを呼び出してモデル推論を実行できます。
サービスのアクセスアドレスとトークンを表示します。
Elastic Algorithm Service (EAS) ページで、目的のサービスを見つけ、[サービスタイプ] 列の [呼び出し方法] をクリックします。
[呼び出し方法] ダイアログボックスで、サービスのアクセスアドレスとトークンを表示できます。
ターミナルで次のコードを実行してサービスを呼び出し、ストリーミングモードで生成されたテキストを取得します。
# EAS サービスの呼び出し curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: AUTH_TOKEN_FOR_EAS" \ -d '{"prompt":"What is the capital of Canada?", "stream":"true"}' \ <service_url>/v1/completions
次のパラメーターに注意してください。
Authorization: サービスのトークン。
<service_url>: サービスのアクセスアドレス。
応答例:
data: {"id":"91f9a28a-f949-40fb-b720-08ceeeb2****","choices":[{"finish_reason":"","index":0,"logprobs":null,"text":" The"}],"object":"text_completion","usage":{"prompt_tokens":7,"completion_tokens":1,"total_tokens":8},"error_info":null} data: {"id":"91f9a28a-f949-40fb-b720-08ceeeb2****","choices":[{"finish_reason":"","index":0,"logprobs":null,"text":" capital"}],"object":"text_completion","usage":{"prompt_tokens":7,"completion_tokens":2,"total_tokens":9},"error_info":null} data: {"id":"91f9a28a-f949-40fb-b720-08ceeeb2****","choices":[{"finish_reason":"","index":0,"logprobs":null,"text":" of"}],"object":"text_completion","usage":{"prompt_tokens":7,"completion_tokens":3,"total_tokens":10},"error_info":null} data: {"id":"91f9a28a-f949-40fb-b720-08ceeeb2****","choices":[{"finish_reason":"","index":0,"logprobs":null,"text":" Canada"}],"object":"text_completion","usage":{"prompt_tokens":7,"completion_tokens":4,"total_tokens":11},"error_info":null} data: {"id":"91f9a28a-f949-40fb-b720-08ceeeb2****","choices":[{"finish_reason":"","index":0,"logprobs":null,"text":" is"}],"object":"text_completion","usage":{"prompt_tokens":7,"completion_tokens":5,"total_tokens":12},"error_info":null} data: {"id":"91f9a28a-f949-40fb-b720-08ceeeb2****","choices":[{"finish_reason":"","index":0,"logprobs":null,"text":" Ottawa"}],"object":"text_completion","usage":{"prompt_tokens":7,"completion_tokens":6,"total_tokens":13},"error_info":null} data: {"id":"91f9a28a-f949-40fb-b720-08ceeeb2****","choices":[{"finish_reason":"","index":0,"logprobs":null,"text":"."}],"object":"text_completion","usage":{"prompt_tokens":7,"completion_tokens":7,"total_tokens":14},"error_info":null} data: {"id":"91f9a28a-f949-40fb-b720-08ceeeb2****","choices":[{"finish_reason":"stop","index":0,"logprobs":null,"text":""}],"object":"text_completion","usage":{"prompt_tokens":7,"completion_tokens":8,"total_tokens":15},"error_info":null} data: [DONE]