Elastic Container Instance (ECI) のスケーリンググループと Application Load Balancer (ALB) を組み合わせて、クロスゾーンで高可用性な大規模言語モデル (LLM) 推論サービスをデプロイします。
ソリューション概要
このソリューションでは、ゾーンレベルのディザスタリカバリとして、1つのリージョン内の複数のゾーンにまたがって Elastic Container Instance (ECI) ベースの推論インスタンスをデプロイします。Application Load Balancer (ALB) がトラフィックを分散し、Object Storage Service (OSS) がモデルファイルを保存します。次の図にアーキテクチャを示します。
メリット
-
高可用性:複数のサーバーに ワークロード を分散して単一障害点を排除し、サービスの中断を防止します。
-
伸縮自在なスケーリング:スケーリンググループが推論クラスターを管理します。ECI インスタンス数を調整して迅速にスケールアウトできます。または、ワークロードに基づいてオンデマンドでリソースをプロビジョニングするように自動スケーリングを設定できます。
手順
-
クラスターネットワークの計画:複数のゾーンに VPC と vSwitch を作成します。
-
OSS バケットの作成:モデルの重みファイルを保存します。
-
インスタンス RAM ロールの設定:手順 2 で作成した OSS バケットへのアクセス権限を ECI インスタンスに付与します。
-
イメージキャッシュの準備:起動を高速化し、OSS からモデルの重みをダウンロードするためのイメージキャッシュを作成します。
-
ALB インスタンスの作成:ALB インスタンスはサービスエンドポイントとして機能します。
-
スケーリンググループの作成:ALB インスタンスに関連付けると、新しい ECI インスタンスがバックエンドサーバーグループに自動的に追加されます。
-
サービスの起動:スケーリンググループで期待されるインスタンス数を設定して、サービスを起動します。
1. クラスターネットワークの計画
複数のゾーンにまたがって Virtual Private Cloud (VPC) と vSwitch を作成します。この例では、高可用性を実現するために、異なるゾーンにある 1 つの VPC と 2 つの vSwitch を使用します。
既存の VPC を再利用してこのステップをスキップできます。
-
コンソールで、以下のステップに従って 1 つの VPC と 2 つの vSwitch を作成します。
①②: 左側のナビゲーションペインで、[Virtual Private Cloud] をクリックし、次に VPC の作成 をクリックします。
③: [リージョン]: China (Hangzhou)
④: [名前]:
vpc-ess-hangzhou⑤: [IPv4 CIDR ブロック]: 192.168.0.0/16 を選択します。
vSwitch 1:
⑥: [名前]:
vSwitch-j⑦: [ゾーン]: ゾーン J
⑧: [IPv4 CIDR ブロック]: 192.168.0.0/24
⑨: 追加 をクリックして vSwitch 2 を作成します。
vSwitch 2:
⑩: [名前]:
vSwitch-k⑪: [ゾーン]: ゾーン K
⑫: [IPv4 CIDR ブロック]: 192.168.1.0/24
-
OK をクリックし、VPC が作成されるまで待ちます。
2. OSS バケットの作成
モデルの重みファイルを格納するために、Object Storage Service (OSS) バケットを作成します。ECI インスタンスはこのバケットからファイルを読み取ります。
既存の OSS バケットを再利用し、このステップをスキップすることも可能です。
-
完全な作成 をクリックします。
3. インスタンス RAM ロールの作成
ECI インスタンスが OSS バケットからモデルの重みファイルを読み取れるように、インスタンス RAM ロールを作成します。
-
コンソールで、以下の設定でインスタンス RAM ロールを作成します。
② ロールの作成 をクリックします。
[RAM] コンソールの左側のナビゲーションペインで、[アイデンティティ] > [ロール] を選択します。
③ [信頼できるエンティティタイプ]: [Alibaba Cloud サービス] を選択します。
④ [プリンシパル名]: Ecsインスタンス を選択します。
⑤ OK をクリックし、プロンプトに従ってインスタンス RAM ロールの名前を設定します。
-
コンソールで、次のポリシーを作成します。
① ポリシーの作成 をクリックします。
② JSON をクリックします。
③ 次のポリシードキュメントを使用します。このポリシーは、特定のバケットに完全な権限を付与します。
重要このポリシーを設定する際、
<bucket_name>を、作成したバケットの[バケット名]に置き換えてください。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:*", "Resource": [ "acs:oss:*:*:<bucket_name>", "acs:oss:*:*:<bucket_name>/*" ] } ] }[OK] OK をクリックし、プロンプトに従ってポリシーの名前を設定します。
-
コンソールで、インスタンス RAM ロールに権限を付与します。
① 権限の付与 をクリックします。
③: [権限付与の対象]:作成したインスタンス RAM ロールを選択します。
④: [ポリシー]。作成したポリシーを選択します。
[権限を付与] 権限を付与 をクリックします。
4. イメージキャッシュとモデルファイルの準備
ECI インスタンスの起動を高速化するために イメージキャッシュ を作成し、モデルファイルを OSS にダウンロードします。
-
コンソールで、ECI イメージキャッシュを作成します。
①②: イメージキャッシュの作成 をクリックします。
Elastic Container Instance コンソールの左側のナビゲーションペインで、[イメージキャッシュ] をクリックします。
③④: [リージョンとゾーン]。リージョンは ステップ 1 の VPC リージョンと、ゾーンは ステップ 1 の vSwitch のいずれかと一致している必要があります。
⑤⑥: [ネットワーク]。手順 1 で作成した VPC と vSwitch のいずれか 1 つを選択します。
⑦: [Elastic IP アドレス]。既存の EIP を選択します。存在しない場合は、[EIP コンソール] をクリックして作成し、戻って更新アイコン
をクリックしてから選択します。⑧: [セキュリティグループ]。セキュリティグループを選択します。存在しない場合は、セキュリティグループの作成 をクリックして作成し、作成したセキュリティグループを選択します。
⑨: イメージキャッシュ名:
vllmと入力します。⑩: [キャッシュのサイズ]。100 GB。
⑪: [イメージ]。
egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/vllm。⑫: [バージョン]:
0.6.4.post1-pytorch2.5.1-cuda12.4-ubuntu22.04.⑬: [Elastic Container Instance ECI サービス規約] チェックボックスを選択します。⑭: OK をクリックします。
イメージキャッシュが作成されるまで待ちます(約 15 分)。コンソールのイメージキャッシュページで進行状況を確認できます。
イメージキャッシュが作成されると、[ステータス] 列に [準備中] と完了率 (0% など) が表示され、作成が進行中であることを示します。
-
コンソールで、モデルファイルを OSS バケットにダウンロードするために、一時的な ECI インスタンスを起動します。
①②: 左側のナビゲーションペインで [コンテナグループ] をクリックし、次に エラスティックコンテナーグループの作成 をクリックします。
③: [支払いモード]:従量課金。
④: リージョン。ステップ 1 の VPC リージョンと一致している必要があります。このチュートリアルでは、中国 (杭州) を使用します。
⑤: [VPC]。ステップ 1 で作成した VPC を選択します。
⑥: [vSwitch]: ステップ 1 で作成した vSwitch を選択します。
⑦: [セキュリティグループ]。 ページのプロンプトに従ってパラメーターを設定します。
コンテナグループの設定:
⑧: CPU: 2 vCPU。
⑨: [メモリ]。 4 GiB。
⑩: [コンテナーの実行と終了後]。 「失敗時」を選択します。
詳細設定:
⑪: 高度な構成 を展開します。
⑫: ミラーキャッシュを自動的に一致させる をオンにします。
⑬: Oss永続ストレージ を選択して追加します。
⑭: [名前]:
oss-data。⑮: バケット: ステップ 2 で作成したバケットを選択します。
⑯: [RAM ロール]。手順 3 で作成したインスタンス RAM ロールを選択します。
⑰: 一時ストレージサイズ に 100 GiB を設定します。
コンテナの設定:
⑱: [イメージ]。
egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/vllm。⑲: イメージタグ:
0.6.4.post1-pytorch2.5.1-cuda12.4-ubuntu22.04と入力します。⑳: 起動コマンド: 以下のコマンドを対応するフィールドにコピーします。
/bin/bash -c git-lfs clone https://www.modelscope.cn/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B.git /oss-data/DeepSeek-R1-Distill-Qwen-7Bこのコマンドは、git-lfs を使用して ModelScope コミュニティリポジトリからモデルを
/oss-data/DeepSeek-R1-Distill-Qwen-7Bディレクトリにクローンします。コンテナの詳細設定:
㉑: [container-1 詳細設定] を展開します。
㉒: CPU: 2 vCPU。
㉓: [メモリ]: 4 GiB。
㉔: [ストレージ] をオンにし、ボリュームマウントを追加します。
㉕:
oss-dataを選択します。㉖: [コンテナーのマウントパス]。
/oss-data。㉗: 次: その他の設定 をクリックします。
㉘: [Elastic IP アドレス]。 自動作成 を選択します。
㉙: 最大帯域幅。値を 200 Mbit/s に設定します。
㉚: 設定の確認 をクリックし、指示に従って ECI インスタンスの作成を完了します。
ECI インスタンスの作成後、モデルファイルのダウンロードが自動的に開始されます。ダウンロード中に ステップ 5 と ステップ 6 を進めてください。
5. ALB インスタンスの作成
サービスエンドポイントとして Application Load Balancer (ALB) インスタンスを作成します。
-
コンソールで、ALB インスタンスを作成します。
①②: [ALB の作成] をクリックします。
左側のナビゲーションペインで、[ALB] > [インスタンス]を選択します。
③: [リージョン]。ステップ 1 で作成した VPC と一致するよう [中国東部1 (杭州)] を選択します。
④: [インスタンスネットワークタイプ]。インターネット経由でサービスを提供するため、[外部] を選択します。
⑤: [VPC]。ステップ 1 で作成した VPC を選択します。
⑥: [ゾーン] と [vSwitch]。ステップ 1 で作成した vSwitch を選択します。
⑦: [インスタンス名]。
alb-eci-deepseek-7B。⑧:今すぐ購入 をクリックし、画面の指示に従って ALB インスタンスの作成を完了します。
-
コンソールで、ALB インスタンスのリスナーとバックエンドサーバーグループを作成します。
①②: 作成した ALB インスタンスを見つけ、操作 列の リスナーの作成 をクリックします。
ALB インスタンスが見つからない場合は、ページの左上隅で別のリージョンに切り替えてください。
③: プロトコルに HTTP を選択します。
④: リスナーポートを 80 にセットします。
⑤: 次へをクリックします。
⑥: サーバーグループの作成 をクリックします。
⑦: [サーバーグループのタイプ]。サーバー を選択します。
⑧: サーバーグループ名。
eci-deepseek-7B。⑨: [VPC]。ステップ 1 で作成した VPC を選択します。このパラメーターは自動的に選択されます。
⑩: バックエンドサーバープロトコル。HTTP を選択します。
⑪⑫: [ヘルスチェック]を有効化します。
⑬: ヘルスチェック方法。GET を選択します。
⑭: ヘルスチェックパス。値を
/healthにセットします。推論サービスの起動後、ALB は/healthパスを使用してサービスのステータスを判断します。⑮⑯⑰: 作成 をクリックし、次へ をクリックして、送信 をクリックします。 作成が完了するまで待ちます。
6. スケーリンググループの作成
ALB インスタンスに関連付けられたスケーリンググループを作成します。このグループは ECI インスタンスを自動的に管理し、ALB のバックエンドサーバーグループに追加します。
-
Auto Scaling コンソールで、スケーリンググループを作成し、ALB インスタンスに関連付けます。
①②③: スケーリンググループの作成 をクリックします。
左側のナビゲーションペインで [スケーリンググループ] をクリックします。上部メニューで、対象のリージョン (例: [中国東部1 (杭州)]) を選択します。
④: [スケーリンググループ名]:
deepseek-7B-servers。⑤: [タイプ]: ECI を選択します。
⑥: [インスタンス設定ソース]: 新規作成 を選択します。
⑦: [最小インスタンス数]: 0 に設定します。スケーリンググループ内のインスタンスの最小数です。
⑧: [最大インスタンス数]: 10 に設定します。スケーリンググループ内のインスタンスの最大数です。
⑨: [VPC]: ステップ 1 で作成した VPC を選択します。
⑩: [vSwitch]: ステップ 1 で作成したすべての vSwitch を選択します。
⑪: 詳細設定を表示する をクリックします。
詳細設定:
⑫⑬: 希望インスタンス数 を有効にして、値を 0 に設定します。これにより、空のスケーリンググループが作成されます。
⑭: サーバーグループの追加 をクリックし、[タイプ] を ALB に設定します。
⑮: [サーバーグループ]: ステップ 5 で作成したサーバーグループを選択します。
⑯: [ポート]:
30000を選択します。ECI インスタンスにデプロイした推論サービスは、このポートを使用してサービスを提供します。⑰: 作成 をクリックします。スケーリンググループが作成されるまで待ちます。その後、プロンプトに従ってスケーリング設定を作成できます。
-
Auto Scaling コンソールで、スケーリング設定を作成します。
スケーリング設定は、スケールアウトイベント中にインスタンスを作成するためのテンプレートです。
①②③: 作成したスケーリンググループを見つけて、その ID をクリックして詳細ページに移動します。
左側のナビゲーションペインで [スケーリンググループ] をクリックします。上部メニューで 中国東部1 (杭州) を選択し、リストから対象のスケーリンググループを見つけます。
④⑤⑥: をクリックします。
⑦: [支払いモード]: [従量課金] を選択します。
⑧: [セキュリティグループ] を選択します。
コンテナグループの設定:
⑨: タイプの指定 を選択します。
⑩: [インスタンスタイプ]:
ecs.gn7i-c8g1.2xlarge。⑪: ミラーキャッシュを自動的に一致させる を選択します。
⑫: 高度な構成 を展開します。
⑬~⑯: Oss永続ストレージ を選択します。次に、[バケット] (例:
deepseek-vllm-bucket) とインスタンスの [RAM ロール] を設定します。⑰: [一時ストレージサイズ]: 100 GiB。
⑱: [GPU ドライバのバージョン ]:
tesla=550。OSS 永続化ストレージの [名前] を
oss-dataに設定し、[RAM ロール] をEciOssRoleに設定します。コンテナの設定:
⑲: [イメージ]:
egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/vllm。⑳: イメージタグ:
0.6.4.post1-pytorch2.5.1-cuda12.4-ubuntu22.04。㉑: [起動コマンド]: 次のコマンドを対応するフィールドにコピーします。
/bin/bash -c vllm serve /oss-data/DeepSeek-R1-Distill-Qwen-7B --port 30000 --served-model-name DeepSeek-R1-Distill-Qwen-7B --tensor-parallel-size 1 --max-model-len=16384 --enforce-eager --dtype=half --api-key api-key-example-abc123このコマンドは OSS からモデルの重みファイルを読み取り、ポート
30000で推論サービスを開始します。API キーはapi-key-example-abc123に設定されます。㉒: [container-1 の詳細設定] を展開します。
㉓: CPU: 8 vCPU に設定します。
㉔: [メモリ]: 30 GiB に設定します。
㉕: GPU: 1 に設定します。
㉖㉗: [ストレージ] をオンにし、[追加] をクリックします。
㉘: マウントパス:
/oss-data㉙: 次: その他の設定 をクリックします。
㉚: [Elastic IP アドレス]: 自動作成 を選択します。
㉛: 最大帯域幅: 200 Mbit/s。
㉜: 設定の確認 をクリックし、プロンプトに従ってスケーリング設定の作成を完了します。
㉝~㉟: プロンプトに従ってスケーリング設定を有効にし、スケーリンググループを起動します。
7. サービスの開始
先に進む前に、ステップ 4 のモデルの重みファイルが完全にダウンロードされていることを確認してください。
予想インスタンス数を設定してスケールアウトをトリガーします。この例では、5 つの ECI インスタンスにスケールします。
予想インスタンス数を調整した後、新しいインスタンスが作成されるまでに遅延があります。進捗状況は、スケーリングアクティビティ タブで監視できます。
-
スケーリンググループの詳細ページの [基本情報] タブにある [インスタンスのスケーリング概要] セクションで、[予想インスタンス数] の値を変更します。
-
[インスタンスのスケーリング概要の変更] ダイアログボックスで、[予想インスタンス数] スイッチをオンにし、[グループ内の予想インスタンス数] を
5に設定し、次に OK をクリックします。
次のステップ
Dify との連携
リソースのクリーンアップ
本番環境に関する考慮事項
本番環境では、以下の改善を検討してください。
-
自動スケーリングの設定: ワークロードに基づいてインスタンスをスケーリングし、コストを最適化します。GPU メモリ使用量に基づくスケーリングでは イベントトリガータスクを設定 するか、単一の ALB インスタンスの 1 秒あたりのクエリ数 (QPS) メトリクスに基づいて自動的にスケーリング します。
-
NAT ゲートウェイの使用: 各インスタンスに EIP を割り当てる代わりに、NAT ゲートウェイ を使用して ECI インスタンスに共有インターネットアクセスを提供します。
-
カスタムドメインと HTTPS の追加: サービスエンドポイントにカスタムドメインを使用し、セキュリティのために HTTPS リスナーを設定します。ALB インスタンスの CNAME レコードを設定 し、HTTPS リスナーを追加 します。