Container Compute Service (ACS) を使用すると、基盤となるハードウェアや GPU ノードを管理することなく、GPU アクセラレーション対応の大規模言語モデル推論を実行できます。すべての設定がすぐに使用でき、課金は従量課金制です。ACS は大規模言語モデル (LLM) の推論タスクに最適であり、推論コストの削減に役立ちます。このトピックでは、vLLM フレームワークを使用して、ACS 上に本番環境対応の DeepSeek 蒸留モデル推論サービスをデプロイする手順について説明します。
背景情報
DeepSeek-R1
vLLM
Arena
前提条件
開始する前に、次の条件を満たしていることを確認してください。
サービスアカウントにシステムデフォルトロールが割り当てられていること (Alibaba Cloud を初めて使用する場合に必要)。これにより、ACS は Elastic Compute Service (ECS)、Object Storage Service (OSS)、Apsara File Storage NAS、Cloud Parallel File Storage (CPFS)、Server Load Balancer (SLB) などの依存サービスを呼び出し、クラスターを作成し、ログを保存できます。ACS は、このロールが正しく付与された後にのみ、これらの機能を使用できます。詳細については、「Container Compute Serviceの使用開始」をご参照ください。
GPU リソースを提供するリージョンおよびゾーンに ACS クラスターがあること。「ACS クラスターの作成」をご参照ください。
kubectl クライアントがクラスターに接続されていること。詳細については、クラスターの kubeconfig ファイルを取得し、kubectl を使用してクラスターに接続する を参照してください。
Arena クライアントがインストールされていること。「Arenaクライアントの設定」をご参照ください。
GPU インスタンス仕様の選択
推論中の GPU メモリは、主にモデルの重み、KV キャッシュ、およびランタイムバッファによって消費されます。次の式を使用して、必要な最小 GPU メモリを見積もります。
GPU メモリ = モデルパラメータ数 × パラメータあたりのバイト数7B FP16 モデルの場合:7 × 10⁹ × 2 バイト ≈ 13.04 GiB。計算中に必要な KV キャッシュサイズ、GPU 使用率、およびそれら用の予約済みバッファも考慮する必要があるため、7B モデルの推奨仕様は24 GiB のメモリを搭載した 1 GPU、8 vCPU、および 32 GiB の RAM です。
次の表に、サポートされている各 DeepSeek 蒸留モデルの推奨仕様を示します。ACS で使用可能な GPU モデルと仕様の完全なリストについては、「GPUモデルと仕様」をご参照ください。課金の詳細については、「課金の概要」をご参照ください。
モデル | サイズ | モデルサイズ (GB) | 推奨仕様 | ||
vCPU | RAM | GPU メモリ | |||
DeepSeek-R1-Distill-Qwen-1.5B | 1.5B | 3.55 GB | 4 または 6 | 30 GiB | 24 GiB |
DeepSeek-R1-Distill-Qwen-7B | 7B | 15.23 GB | 6 または 8 | 32 GiB | 24 GiB |
DeepSeek-R1-Distill-Llama-8B | 8B | 16.06 GB | 6 または 8 | 32 GiB | 24 GiB |
DeepSeek-R1-Distill-Qwen-14B | 14B | 29.54 GB | 8 以上 | 64 GiB | 48 GiB |
DeepSeek-R1-Distill-Qwen-32B | 32B | 74.32 GB | 8 以上 | 128 GiB | 96 GiB |
DeepSeek-R1-Distill-Llama-70B | 70B | 140.56 GB | 12 以上 | 128 GiB | 192 GiB |
選択した仕様が「ACS Pod 仕様調整ロジック」に準拠していることを確認してください。
デフォルトでは、各 ACS Pod は 30 GiB の無料エフェメラルストレージを提供します。この例で使用する推論イメージ「inference-nv-pytorch:25.02-vllm0.7.2-sglang0.4.3.post2-pytorch2.5-cuda12.4-20250305-serverless」は 約 9.8 GiB です。さらに多くのスペースが必要な場合は、「一時ストレージ領域のサイズを増やす」をご参照ください。
操作手順
ステップ1:モデルファイルの準備
モデルのダウンロードとアップロードには通常 1~2 時間かかります。時間を節約するには、チケットを送信して、モデルファイルを OSS バケットに直接コピーしてもらうことができます。
git-lfs を使用して、ModelScope から DeepSeek-R1-Distill-Qwen-7B モデルをダウンロードします。
説明git-lfs がインストールされているかどうかを確認してください。インストールされていない場合は、
yum install git-lfsまたはapt-get install git-lfsを実行してインストールしてください。「Git Large File Storageのインストール」をご参照ください。git lfs install GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B.git cd DeepSeek-R1-Distill-Qwen-7B/ git lfs pullOSS ディレクトリを作成し、モデルファイルをアップロードします。
説明ossutil をインストールするには、「ossutilのインストール」をご参照ください。
ossutil mkdir oss://<your-bucket-name>/models/DeepSeek-R1-Distill-Qwen-7B ossutil cp -r ./DeepSeek-R1-Distill-Qwen-7B oss://<your-bucket-name>/models/DeepSeek-R1-Distill-Qwen-7BPV および PVC を作成します。ターゲットクラスター用に、
llm-modelという名前の永続ボリューム (PV) と永続ボリューム要求 (PVC) を設定します。詳細な手順については、「OSS静的ボリュームの使用」をご参照ください。PV を作成する際には、次のパラメータを使用します。
パラメータ
値
PV タイプ
OSS
ボリューム名
llm-modelアクセス認証情報
OSS バケットの AccessKey ID および AccessKey Secret
バケット名
前のステップで作成した OSS バケット
OSS パス
/models/DeepSeek-R1-Distill-Qwen-7BPVC を作成する際には、次のパラメータを使用します。
パラメータ
値
PVC タイプ
OSS
名前
llm-model割り当てモード
既存のボリューム
既存のボリューム
上記で作成した PV を選択
YAML の例:
apiVersion: v1 kind: Secret metadata: name: oss-secret stringData: akId: <your-oss-ak> # OSS バケットの AccessKey ID akSecret: <your-oss-sk> # OSS バケットの AccessKey Secret --- apiVersion: v1 kind: PersistentVolume metadata: name: llm-model labels: alicloud-pvname: llm-model spec: capacity: storage: 30Gi accessModes: - ReadOnlyMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: llm-model nodePublishSecretRef: name: oss-secret namespace: default volumeAttributes: bucket: <your-bucket-name> # OSS バケットの名前 url: <your-bucket-endpoint> # エンドポイント、例: oss-cn-hangzhou-internal.aliyuncs.com otherOpts: "-o umask=022 -o max_stat_cache_size=0 -o allow_other" path: <your-model-path> # モデルパス、例: /models/DeepSeek-R1-Distill-Qwen-7B/ --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: llm-model spec: accessModes: - ReadOnlyMany resources: requests: storage: 30Gi selector: matchLabels: alicloud-pvname: llm-model
ステップ2:モデルのデプロイ
次のコマンドを実行して、vLLM 推論サービスをデプロイします。このサービスは、OpenAI 互換の HTTP API を公開します。
--dataフラグは、モデル PVC をコンテナ内の/model/DeepSeek-R1-Distill-Qwen-7Bにマウントします。--max-model-lenフラグは、トークン単位の最大コンテキスト長を設定します。これを増やすと、モデルの会話品質が向上する可能性がありますが、より多くの GPU メモリを消費する場合があります。説明--label=alibabacloud.com/gpu-model-series=<example-model>の<example-model>を、ACS クラスターでサポートされている実際の GPU モデルシリーズに置き換えてください。チケットを送信して、利用可能な GPU モデルシリーズのリストを取得してください。egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/{image:tag}はパブリックレジストリアドレスです。イメージのプル時間を短縮するため、「VPC を使用した AI コンテナイメージプルの高速化」の使用を推奨します。
arena serve custom \ --name=deepseek-r1 \ --version=v1 \ --gpus=1 \ --cpu=8 \ --memory=32Gi \ --replicas=1 \ --label=alibabacloud.com/compute-class=gpu \ --label=alibabacloud.com/gpu-model-series=<example-model> \ --restful-port=8000 \ --readiness-probe-action="tcpSocket" \ --readiness-probe-action-option="port: 8000" \ --readiness-probe-option="initialDelaySeconds: 30" \ --readiness-probe-option="periodSeconds: 30" \ --image=egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/inference-nv-pytorch:25.02-vllm0.7.2-sglang0.4.3.post2-pytorch2.5-cuda12.4-20250305-serverless \ --data=llm-model:/models/DeepSeek-R1-Distill-Qwen-7B \ "vllm serve /models/DeepSeek-R1-Distill-Qwen-7B --port 8000 --trust-remote-code --served-model-name deepseek-r1 --max-model-len 32768 --gpu-memory-utilization 0.95 --enforce-eager"期待される出力:
service/deepseek-r1-v1 created deployment.apps/deepseek-r1-v1-custom-serving created INFO[0004] The Job deepseek-r1 has been submitted successfully INFO[0004] You can run `arena serve get deepseek-r1 --type custom-serving -n default` to check the job status次の表に、主要なパラメータについて説明します。
パラメータ
説明
--name推論サービスの名前
--version推論サービスのバージョン
--gpusレプリカあたりの GPU 数
--cpuレプリカあたりの vCPU 数
--memoryレプリカあたりのメモリ量
--replicasレプリカ数
--labelACS GPU コンピューティング性能を指定するラベル。
alibabacloud.com/compute-class=gpuおよびalibabacloud.com/gpu-model-series=<example-model>を設定--restful-port推論サービスが公開するポート
--readiness-probe-actionReadiness Probe の接続タイプ。有効な値:
httpGet、exec、grpc、tcpSocket--readiness-probe-action-optionReadiness Probe の接続方法
--readiness-probe-optionReadiness Probe の設定
--image推論サービスのコンテナイメージ
--dataPVC をコンテナにマウントします。形式:
<pvc-name>:<mount-path>。arena data listを実行して、使用可能な PVC をリストアップできますデプロイステータスを確認するには、次のコマンドを実行してください。
arena serve get deepseek-r1期待される出力:
Name: deepseek-r1 Namespace: default Type: Custom Version: v1 Desired: 1 Available: 1 Age: 6h Address: 10.0.78.27 Port: RESTFUL:8000 GPU: 1 Instances: NAME STATUS AGE READY RESTARTS GPU NODE ---- ------ --- ----- -------- --- ---- deepseek-r1-v1-custom-serving-54d579d994-dqwxz Running 1h 1/1 0 1 virtual-kubelet-cn-hangzhou-b
ステップ3:推論サービスの検証
kubectl port-forwardを使用して、ローカルマシンから推論サービスへのポートフォワーディングを設定してください。説明kubectl port-forwardによって確立されるポートフォワーディングは、本番環境レベルの信頼性、セキュリティ、またはスケーラビリティを提供しません。そのため、これは開発およびデバッグ目的のみのものであり、本番環境には適していません。Kubernetes クラスターにおける本番環境対応のネットワーキングソリューションの詳細については、「Ingress 管理」をご参照ください。kubectl port-forward svc/deepseek-r1-v1 8000:8000期待される出力:
Forwarding from 127.0.0.1:8000 -> 8000 Forwarding from [::1]:8000 -> 8000OpenAI 互換のチャット補完エンドポイントにテストリクエストを送信してください。
curl http://localhost:8000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "deepseek-r1", "messages": [ { "role": "user", "content": "Write a letter to my daughter from the future 2025 and tell her to study science and technology well, be the master of science and technology, and promote the development of science and technology and economy. She is now in grade 3." } ], "max_tokens": 1024, "temperature": 0.7, "top_p": 0.9, "seed": 10 }'期待される出力:
{ "id": "chatcmpl-53613fd815da46df92cc9b92cd156146", "object": "chat.completion", "created": 1741216800, "model": "deepseek-r1", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "<think>...</think>\n\nDear Future 2025: ..." }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 40, "completion_tokens": 994, "total_tokens": 1034 } }
(オプション) ステップ4:クリーンアップ
不要になった推論サービスおよびストレージリソースを削除してください。
推論サービスを削除します。
arena serve delete deepseek-r1期待される出力:
INFO[0007] The serving job deepseek-r1 with version v1 has been deleted successfullyPVC および PV を削除します。
kubectl delete pvc llm-model kubectl delete pv llm-model期待される出力:
persistentvolumeclaim "llm-model" deleted persistentvolume "llm-model" deleted
次のステップ
ACS GPU コンピューティング性能は、Container Service for Kubernetes (ACK) Pro クラスターでも利用できます。「ACK ProクラスターでACSのコンピューティング性能を使用」をご参照ください。
ACK での DeepSeek モデルのデプロイに関する情報については、次のトピックをご参照ください。
DeepSeek R1/V3 モデルの詳細情報については、次のトピックをご参照ください。
ACS AI コンテナイメージは、GPU インスタンスを使用する ACS クラスター向けの専用イメージです。現在利用可能なイメージの詳細については、「ACS AI コンテナイメージリリースノート」をご参照ください。