Container Compute Service (ACS) では、基盤となるハードウェアに関する深い知識や GPU インスタンス ノードの管理は不要です。すべての構成はすぐに使用できます。ACK はデプロイが容易で、従量課金制です。LLM 推論サービスに適しており、推論コストを効率的に削減できます。このトピックでは、DeepSeek 蒸留バージョンを使用して ACK にモデル推論サービスをデプロイする方法について説明します。
背景情報
DeepSeek-R1
vLLM
Arena
前提条件
Container Compute Service (ACS) を初めて使用する場合は、アカウントにデフォルト ロールを割り当てる必要があります。権限付与が完了した後でのみ、ACK は ECS、OSS、NAS、CPFS、SLB などの他のサービスを呼び出し、クラスタを作成し、ログを保存できます。詳細については、「ACK を初めて使用するユーザーのためのクイックスタート」をご参照ください。
ACK クラスタが作成されています。クラスタのリージョンとゾーンは、GPU リソースを提供できます。詳細については、「ACK クラスタを作成する」をご参照ください。
kubectl クライアントがクラスタに接続されています。詳細については、「クラスタの kubeconfig ファイルを取得し、kubectl を使用してクラスタに接続する」をご参照ください。
Arena クライアントがインストールされています。詳細については、「Arena クライアントを構成する」をご参照ください。
GPU インスタンスの仕様と推定コスト
GPU メモリは、推論フェーズでモデル パラメータによって占有されます。使用量は、次の式に基づいて計算されます。
GPU メモリ = モデル パラメータの数 × 精度データのバイト数
デフォルトの精度が FP16 で、パラメータ数が 7B のモデルを例にとります。モデルのパラメータは 70 億です。その精度データは 2 バイトです (デフォルトの 16 ビット浮動小数点数/バイトあたり 8 ビット)。
GPU メモリ = 7 × 109 × 2 バイト ≈ 13.04 GiB
モデルのロードに使用されるメモリに加えて、KV キャッシュのサイズと GPU 使用率も考慮する必要があります。通常、メモリの一定割合はバッファリング用に予約されています。したがって、推奨される仕様は メモリ 24 GiB、vCPU 8 個、メモリ 32 GiB の 1GPU です。推奨仕様の表とGPU モデルと仕様も参照できます。ACK GPU インスタンスの課金の詳細については、「課金概要」をご参照ください。
モデル名 | モデル バージョン | モデル サイズ | 推奨仕様 | ||
vCPU | メモリ | GPU メモリ | |||
DeepSeek-R1-Distill-Qwen-1.5B | 1.5B (15 億パラメータ) | 3.55 GB | 4 または 6 | 30 GiB | 24 GiB |
DeepSeek-R1-Distill-Qwen-7B | 7B (70 億パラメータ) | 15.23 GB | 6 または 8 | 32 GiB | 24 GiB |
DeepSeek-R1-Distill-Llama-8B | 8B (80 億パラメータ) | 16.06 GB | 6 または 8 | 32 GiB | 24 GiB |
DeepSeek-R1-Distill-Qwen-14B | 14B (140 億パラメータ) | 29.54 GB | 8 より大きい | 64 GiB | 48 GiB |
DeepSeek-R1-Distill-Qwen-32B | 32B (320 億パラメータ) | 74.32 GB | 8 より大きい | 128 GiB | 96 GiB |
DeepSeek-R1-Distill-Llama-70B | 70B (700 億パラメータ) | 140.56 GB | 12 より大きい | 128 GiB | 192 GiB |
ACK GPU インスタンスの仕様がACK ポッド仕様調整ロジックに準拠していることを確認してください。
デフォルトでは、ACK ポッドは 30 GiB の無料 EphemeralStorage を提供します。この例で使用されている推論イメージ inference-nv-pytorch:25.02-vllm0.7.2-sglang0.4.3.post2-pytorch2.5-cuda12.4-20250305-serverless のサイズは 9.8 GiB です。より多くのストレージ スペースが必要な場合は、EphemeralStorage のサイズをカスタマイズします。詳細については、「EphemeralStorage を追加する」をご参照ください。
手順
手順 1:DeepSeek-R1-Distill-Qwen-7B モデル ファイルを準備する
モデルのダウンロードとアップロードには通常 1 ~ 2 時間かかります。 チケットを送信して、モデル ファイルを OSS バケットにコピーできます。
次のコマンドを実行して、ModelScope から DeepSeek-R1-Distill-Qwen-7B モデルをダウンロードします。
説明git-lfs プラグインがインストールされているかどうかを確認します。インストールされていない場合は、
yum install git-lfsまたはapt-get install git-lfsを実行してインストールします。詳細については、「git-lfs をインストールする」をご参照ください。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 シークレットを指定します。
バケット ID
前の手順で作成した OSS バケットを選択します。
OSS パス
モデルのパスを選択します (例:
/models/DeepSeek-R1-Distill-Qwen-7B)。次の表に、PVC の作成に使用される基本パラメータを示します。
パラメータ
説明
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 シークレット。 --- 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 フレームワークを使用する DeepSeek-R1-Distill-Qwen-7B モデル推論サービスをデプロイします。
推論サービスは、OpenAI 互換の HTTP API を公開します。次のコード ブロックでは、Arena クライアントによって提供される
--dataパラメータを使用して、モデル パラメータ ファイルを特別なデータセットとして扱い、推論サービスを実行するコンテナの指定されたパス (/model/DeepSeek-R1-Distill-Qwen-7B) にマウントします。--max_model_lenは、モデルで処理できるトークンの最大長を指定します。長さを増やすとパフォーマンスが向上しますが、GPU メモリの使用量も増加します。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: 5" \ --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=pvc://llm-model:/model/DeepSeek-R1-Distill-Qwen-7B \ --command="bash -c 'vllm-server --model /model/DeepSeek-R1-Distill-Qwen-7B --tokenizer /model/DeepSeek-R1-Distill-Qwen-7B --tensor-parallel-size 1 --max-model-len 4096'"期待される結果:
service/deepseek-r1-v1 created deployment.apps/deepseek-r1-v1-custom-serving created INFO[0004] ジョブ deepseek-r1 が正常に送信されました // The Job deepseek-r1 has been submitted successfully INFO[0004] ジョブ ステータスを確認するには、`arena serve get deepseek-r1 --type custom-serving -n default` を実行します // 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
推論サービス レプリカの数。
--label
次のラベルを追加して、ACS GPU 計算能力を指定します。
--label=alibabacloud.com/compute-class=gpu--label=alibabacloud.com/gpu-model-series=<example-model>--restful-port
公開される推論サービスのポート。
--readiness-probe-action
readiness プローブの接続タイプ。有効な値:
httpGet、exec、grpc、tcpSocket。--readiness-probe-action-option
readiness プローブの接続方法。
--readiness-probe-option
readiness プローブの構成。
--image
推論サービス イメージのアドレス。
--data
共有 PVC をランタイム環境にマウントします。値はコロン (:) で区切られた 2 つの部分で構成されます。コロンの左側には PVC の名前を指定します。
arena data listコマンドを実行して、現在のクラスタ内の PVC を表示できます。コロンの右側には、PVC がマウントされるパスを指定します。トレーニング データは、指定されたパスから読み取られます。このようにして、トレーニング ジョブは PVC によって要求された PV に格納されているデータを取得できます。推論サービスの詳細をクエリするには、次のコマンドを実行します。
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を使用して設定されたポート フォワーディングは、本番環境では信頼性、安全性、または拡張性がありません。開発およびデバッグ専用です。本番環境でポート フォワーディングを設定するには、このコマンドを使用しないでください。ACK クラスタの本番環境で使用されるネットワーク ソリューションの詳細については、「Ingress 管理」をご参照ください。kubectl port-forward svc/deepseek-r1-v1 8000:8000期待される結果:
Forwarding from 127.0.0.1:8000 -> 8000 Forwarding from [::1]:8000 -> 8000推論サービスにリクエストを送信します。
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 2035 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.com pletion","created":1739261570,"model":"deepseek-r1","choices":[{"index":0,"message":{"role":"assistant","content":"<think>\nOK. The user needs to write a letter to his third-grade daughter from 2035 in the future, and convey three key messages at the same time: learn technology well, be the master of technology, and promote technology and economic development. First, I have to consider that the tone of the letter should be kind and hopeful, while reflecting a sense of future technology. \n\nConsidering that the daughter is now in the third grade, the content should not be too complicated and the language should be simple and easy to understand. At the same time, let the daughter feel the importance of science and technology and spike her interests in science and technology. It may be necessary to start from her daily life and give some examples that she may have come into contact with, such as electronic products, the Internet, etc., so that she can resonate more easily. \n\nNext, I have to think about how to structure this letter. It may start with welcoming her to receive this letter, and then introduce the development of future technology, such as smart robots and smart homes. Then it emphasizes the importance of learning science and technology, and encourages her to become the master of science and technology and participate in the development of science and technology. Finally, express the expectations and blessings. \n\nIn terms of content, it is necessary to highlight the impact of technology on life, such as smart assistants, smart homes, new energy vehicles, etc. These are all children may have heard of, but the specific details may need to be simplified to avoid being too technical and keep them interesting. \n\nAt the same time, the letter should mention the impact of science and technology on the economy, such as economic growth, job creation, etc., but it should be presented in a positive and encouraging way, so that the daughter can feel the benefits of science and technology, rather than a simple digital game. \n\nFinally, the ending part should be warm, express her pride and expectation, and encourage her to pursue the future bravely and become a leader in science and technology. \n\nIn general, this letter needs to be educational, interesting and encouraging, using simple and clear language, combined with specific examples of future technology, so that my daughter can feel the charm of technology and the importance of learning in a relaxed reading. \n</think>\n\n未来の2035年へ\n\nこんにちは!\n\nまず、良い知らせがあります。地球は新しい時代に入りました! 2035年までに、テクノロジーはもはやSFの物語ではなく、私たちの日常生活の一部になります。今日、私はこの手紙を書いて、未来の秘密と、科学技術が急速に発展しているこの世界でどのように生活し、学ぶべきかについてお伝えしたいと思います。\n\n### 1. テクノロジーはあなたの周りにある\n2035年には、テクノロジーはどこにでもあります。私たち一人ひとりが、いつでも利用できる先生のような、インテリジェント アシスタントを持つことができます。シンプルな アプリケーションで、家のスマート ホーム デバイスを制御できます。照明のオンとオフ、温度の調整、さらには料理まで、すべてあなたの指示通りです!\n\nまた、聞いたことがあるかもしれません。インテリジェント ロボットです。これらのロボットは、退屈な作業を完了するのに役立つだけでなく、学習やエンターテインメントでも大きな役割を果たします。彼らはあなたとチャットしたり、一緒に勉強したり、数学の問題を解決するのを手伝ったりすることさえできます! 難しい問題に遭遇したときに、ロボットが辛抱強く問題の解決方法を段階的に教えてくれると想像してみてください。素晴らしいと思いませんか?\n\n### 2. 科学技術を学ぶことの重要性\n未来の2035年には、科学技術は社会発展を促進する主要な原動力となっています。あらゆる業界がテクノロジーによって変革されています。医師は高度な医療機器を使用して病気を早期に発見できます。教師はオンライン教室を使用して、生徒が家を出ることなくグローバルな知識を学ぶことができます。農家はスマート デバイスを使用して畑を正確に管理し、すべての木が最高のケアを受けられるようにすることができます。\n\nですから、テクノロジーを学ぶことは、すべての子どもにとって最も重要なタスクであることをお伝えしたいと思います。科学技術は、より多くの知識を習得できるだけでなく、未来の主人になることもできます。新しいテクノロジーを生み出し、私たちの生活を変える機会が得られます!\n\n### 3. 科学技術の主人になる\n2035年には、科学技術の世界はみんなの力が必要です。企業の経営者である必要はありません。自分らしくいるだけでいいのです。あなたは自分の知恵と手を使って、科学技術の発展を促進することができます。たとえば、学校で技術革新コンテストに参加して、よりスマートなロボットを設計したり、家庭で小さな発明をして生活をより便利にすることができます。\n\n重要なのは、新しいことに挑戦し、未知のものを探求する勇気を持つことです。科学技術の世界は無限に広大であり、誰もがここで自分の居場所を見つけることができます。\n\n### 4. 経済について\n2035年には、科学技術の発展により、経済はより繁栄するでしょう。スマート シティは私たちの生活をより効率的にし、新エネルギー車は私たちの旅行をより環境に優しくし、医療技術は私たちの健康をより良く守ってくれます。\n\nですから、この時代の始まりに立つとき、テクノロジーは私たちの生活様式を変えているだけでなく、未来の機会も創造していることを知っておく必要があります。\n\n### 5. 私の期待\n未来のあなたが科学技術を愛し、科学技術を理解し、科学技術を習得できることを願っています。テクノロジーの使い方を学ぶだけでなく、その背後にある原則と物語を理解する必要があります。あなたが成長したとき、あなたは科学技術の分野のリーダーになり、私たちをより明るい未来へと導くかもしれません。\n\n未来の世界はあなたを必要としています! 挑戦の準備はできていますか?\n\n最後に、あなたは今日の誰よりも賢く、勇敢で、潜在能力が高いことをお伝えしたいと思います。前途は非常に長いですが、努力する意思があれば、必ず夢を実現できるでしょう。\n\n2035年の愛娘よ、頑張れ!\n\nあなたのおじいちゃん","tool_calls":[]},"logprobs":null,"finish_reason":"stop","stop_reason":null}],"usage":{"prompt_tokens":40,"total_tokens":1034,"completion_tokens":994,"prompt_tokens_details":null}",
手順 3:推論サービスをテストする
推論サービスが不要になった場合は、環境を速やかに削除してください。
推論サービスを削除します。
arena serve delete deepseek-r1期待される結果:
INFO[0007] バージョン v1 の提供ジョブ deepseek-r1 が正常に削除されましたPV と PVC を削除します。
kubectl delete pvc llm-model kubectl delete pv llm-model期待される結果:
persistentvolumeclaim "llm-model" deleted persistentvolume "llm-model" deleted
参照資料
Container Compute Service (ACS) は Container Service for Kubernetes に統合されています。これにより、ACK Pro マネージドクラスター で ACS のコンピューティングパワーを使用できます。ACK での ACS GPU コンピューティングパワーの使用方法の詳細については、「ACK Pro マネージドクラスターで ACS のコンピューティングパワーを使用する」をご参照ください。
ACK に DeepSeek をデプロイする方法の詳細については、以下のトピックをご参照ください。
DeepSeek R1 および V3 の詳細については、以下のトピックをご参照ください。
ACS の AI コンテナイメージは、ACS クラスターの GPU アクセラレーションコンテナー専用です。このイメージのリリースノートの詳細については、「ACS AI コンテナイメージのリリースノート」をご参照ください。