Container Service for Kubernetes (ACK) のマネージドプロ版クラスターは、大規模言語モデル (LLM) の推論サービスを実行するためのすぐに使える環境を提供します。ローカルの GPU ハードウェアや複雑な依存関係の設定は不要です。このガイドでは、2 つのデプロイパスについて説明します。約 15 分でモデルを検証するためのクイックオプションと、永続ストレージにモデルファイルをプリロードしてコールドスタート時間と帯域幅コストを削減する本番環境向けのオプションです。
前提条件
作業を開始する前に、以下のものがあることを確認してください。
-
Kubernetes 1.22 以降を実行している ACK マネージドプロ版クラスター
-
16 GB 以上の GPU メモリを持つ GPU アクセラレーションノードが少なくとも 1 つ
-
GPU ノードプールにインストールされている NVIDIA ドライバーのバージョンが 535 以降であること (このガイドでは
ack.aliyun.com/nvidia-driver-versionラベルで設定された550.144.03を使用します) -
Arena クライアントがインストールされていること
デプロイパスの選択
| オプション 1:クイックテスト | オプション 2:本番環境 | |
|---|---|---|
| セットアップ時間 | 約 15 分 | より長い (モデルの事前アップロードが必要) |
| モデルストレージ | 起動時にコンテナにダウンロード | Object Storage Service (OSS) に事前ロード |
| コールドスタート | 遅い — Pod が再起動するたびにモデルを再ダウンロード | 速い — モデルはマウントされたボリュームにすでに存在 |
| 最適な用途 | 推論機能の検証 | 安定的で再現性のある本番環境のワークロード |
オプション 1:テスト用のクイックデプロイ
Arena を使用して ModelScope から qwen/Qwen1.5-4B-Chat をデプロイします。コンテナは起動時にモデルをダウンロードするため、GPU ノードには少なくとも 30 GB の空きディスク領域が必要です。
-
Arena コマンドを実行して、推論サービスをデプロイします:
arena serve custom \ --name=modelscope \ --version=v1 \ --gpus=1 \ --replicas=1 \ --restful-port=8000 \ --readiness-probe-action="tcpSocket" \ --readiness-probe-action-option="port: 8000" \ --readiness-probe-option="initialDelaySeconds: 30" \ --readiness-probe-option="periodSeconds: 30" \ --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/quick-deploy-llm:v1 \ "MODEL_ID=qwen/Qwen1.5-4B-Chat python3 server.py"Hugging Face リポジトリからモデルファイルをプルするには、「Hugging Face からモデルをプルする」をご参照ください。
次の出力は、
modelscope-v1の Kubernetes リソースが作成されたことを示しています:service/modelscope-v1 created deployment.apps/modelscope-v1-custom-serving created INFO[0002] The Job modelscope has been submitted successfully INFO[0002] You can run `arena serve get modelscope --type custom-serving -n default` to check the job status -
サービスステータスを確認します。モデルのダウンロード中は、Pod のステータスは
ContainerCreatingのままです。ネットワークの状況によりますが、これには 5〜15 分かかる場合があります:arena serve get modelscopePod のステータスが
Runningと表示されたら、推論サービスの準備は完了です。
オプション 2:永続ストレージを使用した本番環境対応のデプロイ
モデルファイルを OSS に事前ロードすることで、Pod が再起動するたびに 10 GB を超えるファイルを再ダウンロードすることを回避できます。これにより、コールドスタート時間が短縮され、帯域幅コストが削減され、サービスの安定性が向上します。
ステップ 1:モデルファイルのダウンロード
-
Git と Git Large File Storage (LFS) をインストールします。macOS
brew install git brew install git-lfsWindows Git の公式サイトから Git をダウンロードしてインストールします。Git Large File Storage は Git for Windows にバンドルされています — 最新バージョンをダウンロードしてください。Linux (Red Hat ベース)
yum install git yum install git-lfsその他の Linux ディストリビューションについては、Git の公式サイトをご参照ください。
-
Qwen1.5-4B-Chat モデルのリポジトリをクローンし、大きなファイルをプルします:
GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen1.5-4B-Chat.git cd Qwen1.5-4B-Chat git lfs pull
ステップ 2:モデルファイルの OSS へのアップロード
-
バケットを作成します。モデルのプルレイテンシーを削減するために、クラスターと同じリージョンにバケットを作成します:
ossutil mb oss://<your-bucket-name> -
モデルファイル用にバケット内にフォルダを作成します:
ossutil mkdir oss://<your-bucket-name>/Qwen1.5-4B-Chat -
モデルファイルをアップロードします:
ossutil cp -r ./Qwen1.5-4B-Chat oss://<your-bucket-name>/Qwen1.5-4B-Chat
ステップ 3:永続ボリューム (PV) の設定
-
ACK コンソールにログインし、対象のクラスターをクリックします。左側のナビゲーションウィンドウで、[ボリューム] > [永続ボリューム] を選択します。
-
[作成] をクリックします。[PV の作成] ダイアログボックスで、次のパラメーターを設定し、[作成] をクリックします:
パラメーター 値 PV タイプ OSSボリューム名 llm-model容量 20Giアクセスモード ReadOnlyManyアクセス証明書 [シークレットの作成] [オプションパラメーター] -o umask=022 -o max_stat_cache_size=0 -o allow_otherバケット ID [バケットの選択] をクリックし、ご利用のバケットを選択します OSS パス /Qwen1.5-4B-Chatエンドポイント [パブリックエンドポイント]
ステップ 4:永続ボリューム要求 (PVC) の設定
-
左側のナビゲーションウィンドウで、[ボリューム] > [永続ボリューム要求] を選択します。
-
[永続ボリューム要求] ページで、次のパラメーターを設定し、[作成] をクリックします:
パラメーター 値 PVC タイプ OSS名前 llm-model割り当てモード [既存のボリューム] 既存のボリューム 前のステップで作成した llm-modelPV を選択します容量 20Gi
ステップ 5:推論サービスのデプロイ
Arena コマンドを実行してサービスをデプロイします。--data フラグは、事前ロードされたモデルファイルを含む PVC をマウントします。モデルはすでにマウントされたボリューム上にあるため、Pod は何もダウンロードせずに起動します:
arena serve custom \
--name=modelscope \
--version=v1 \
--gpus=1 \
--replicas=1 \
--restful-port=8000 \
--readiness-probe-action="tcpSocket" \
--readiness-probe-action-option="port: 8000" \
--readiness-probe-option="initialDelaySeconds: 30" \
--readiness-probe-option="periodSeconds: 30" \
--data=llm-model:/Qwen1.5-4B-Chat \
--image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/quick-deploy-llm:v1 \
"MODEL_ID=/Qwen1.5-4B-Chat python3 server.py"
次の出力は、推論サービスが送信されたことを示しています:
service/modelscope-v1 created
deployment.apps/modelscope-v1-custom-serving created
INFO[0001] The Job modelscope has been submitted successfully
INFO[0001] You can run `arena serve get modelscope --type custom-serving -n default` to check the job status
サービスステータスを確認します:
arena serve get modelscope
Pod のステータスが Running と表示されたら、推論サービスの準備は完了です。
推論サービスの検証
-
推論サービスへのポートフォワーディングを設定します:
重要kubectl port-forwardは開発およびデバッグ専用であり、本番環境では信頼性、安全性に欠け、スケーラブルではありません。本番環境のネットワーキングについては、「Ingress 管理」をご参照ください。kubectl port-forward svc/modelscope-v1 8000:8000期待される出力:
Forwarding from 127.0.0.1:8000 -> 8000 Forwarding from [::1]:8000 -> 8000 -
新しいターミナルで、テスト用の推論リクエストを送信します:
curl -X POST http://localhost:8000/generate \ -H "Content-Type: application/json" \ -d '{ "text_input": "What is artificial intelligence? Artificial intelligence is", "parameters": { "stream": false, "temperature": 0.9, "seed": 10 } }'成功した応答には、モデルが生成したテキストが含まれます:
{"model_name":"/Qwen1.5-4B-Chat","text_output":"What is artificial intelligence? Artificial intelligence is a branch of computer science that studies how to make computers have intelligent behavior."}
(オプション) クリーンアップ
完了したら、推論サービスとストレージリソースを削除します:
# 推論サービスの削除
arena serve del modelscope
# PVC と PV の削除 (オプション 2 のみ)
kubectl delete pvc llm-model
kubectl delete pv llm-model
よくある質問
ModelScope の代わりに Hugging Face からモデルファイルをプルするにはどうすればよいですか?
コンテナランタイムが Hugging Face リポジトリに到達できることを確認してから、Arena コマンドで MODEL_SOURCE=Huggingface を設定します。ダウンロードされたファイルを格納するために、GPU ノードには少なくとも 30 GB の空きディスク領域が必要です:
arena serve custom \
--name=huggingface \
--version=v1 \
--gpus=1 \
--replicas=1 \
--restful-port=8000 \
--readiness-probe-action="tcpSocket" \
--readiness-probe-action-option="port: 8000" \
--readiness-probe-option="initialDelaySeconds: 30" \
--readiness-probe-option="periodSeconds: 30" \
--image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/quick-deploy-llm:v1 \
"MODEL_ID=Qwen/Qwen1.5-4B-Chat MODEL_SOURCE=Huggingface python3 server.py"
次の出力は、リソースが作成されたことを示しています:
service/huggingface-v1 created
deployment.apps/huggingface-v1-custom-serving created
INFO[0003] ジョブ huggingface は正常に送信されました
INFO[0003] `arena serve get huggingface --type custom-serving -n default` を実行してジョブのステータスを確認できます
付録:コマンドパラメーターリファレンス
| パラメーター | 説明 | 例 |
|---|---|---|
serve custom |
Arena サブコマンド。tfserving や triton のようなプリセットタイプではなく、カスタムモデルサービスをデプロイします。 |
— |
--name |
サービス名。ログの確認やサービスの削除などの後続操作で使用される一意の識別子。 | modelscope |
--version |
サービスバージョン。サービスのバージョンラベルで、バージョン管理や段階的リリースに役立ちます。 | v1 |
--gpus |
GPU 数。各 Pod に割り当てられる GPU の数。モデルが推論に GPU を必要とする場合に必須です。 | 1 |
--replicas |
レプリカ数。実行する Pod の数。レプリカを増やすと、同時スループットと可用性が向上します。 | 1 |
--restful-port |
RESTful API ポート。サービスが推論リクエストを受信するために RESTful API を公開するポート。 | 8000 |
--readiness-probe-action |
readiness プローブタイプ。コンテナがトラフィックを受信する準備ができているかどうかを判断するために Kubernetes の readiness プローブが使用するチェックメソッド。 | tcpSocket |
--readiness-probe-action-option |
プローブタイプのオプション。選択したプローブタイプのパラメーター。tcpSocket の場合、チェックするポートを指定します。 |
port: 8000 |
--readiness-probe-option |
追加のプローブ設定。readiness プローブの追加パラメーター。このフラグは複数回使用できます。初期遅延とチェック間隔を設定します。 | initialDelaySeconds: 30, periodSeconds: 30 |
--data |
ボリュームマウント。<pvc-name>:<mount-path> の形式で、コンテナ内の指定されたパスに PVC をマウントします。事前ロードされたモデルファイルをマウントするために使用されます。 |
llm-model:/Qwen1.5-4B-Chat |
--image |
コンテナイメージ。サービスの実行環境を定義するコンテナイメージの完全な URL。 | kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/quick-deploy-llm:v1 |
[COMMAND] |
起動コマンド。コンテナの起動後に実行するコマンド。MODEL_ID 環境変数を設定し、server.py を起動します。 |
"MODEL_ID=/Qwen1.5-4B-Chat python3 server.py" |
よくある質問
Hugging Face からモデルをプルする
-
コンテナの実行環境が Hugging Face リポジトリにアクセス可能であることを確認します。
-
Arena クライアントを使用してカスタムサービスをデプロイし、
--imageパラメーターでデプロイ対象のコンテナイメージを指定します。パラメーターの詳細については、「コマンドパラメーター リファレンス」をご参照ください。この方法では、Hugging Face のモデルファイルがコンテナ内にダウンロードされます。ご利用の GPU ノードに、少なくとも 30 GB の空きディスク領域があることを確認してください。
arena serve custom \ --name=huggingface \ --version=v1 \ --gpus=1 \ --replicas=1 \ --restful-port=8000 \ --readiness-probe-action="tcpSocket" \ --readiness-probe-action-option="port: 8000" \ --readiness-probe-option="initialDelaySeconds: 30" \ --readiness-probe-option="periodSeconds: 30" \ --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/quick-deploy-llm:v1 \ "MODEL_ID=Qwen/Qwen1.5-4B-Chat MODEL_SOURCE=Huggingface python3 server.py"以下の出力は、
huggingface-v1推論サービス用 Kubernetes リソースが作成されたことを示しています:service/huggingface-v1 created deployment.apps/huggingface-v1-custom-serving created INFO[0003] The Job huggingface has been submitted successfully INFO[0003] You can run `arena serve get huggingface --type custom-serving -n default` to check the job status
次のステップ
-
GPU ノードに NVIDIA ドライバーのバージョンを指定するには、「ラベルを追加してノードの NVIDIA ドライバーバージョンを指定する」をご参照ください。
-
vLLM や Triton などの本番環境グレードの推論フレームワークを使用するには、「vLLM を使用して Qwen モデルの推論サービスをデプロイする」および「Triton を使用して Qwen モデルの推論サービスをデプロイする」をご参照ください。