本記事はこちらのブログを参考にしています。
翻訳にはアリババクラウドのModelStudio(Qwen)を使用しております。
深Seek蒸留モデルからの推論サービスをACKクラスターでKServeを使用してデプロイする方法
著者: Jing Gu (Zibai)
この記事では、Container Service for Kubernetes (ACK) クラスターの本番環境で、DeepSeek蒸留モデルに基づいた推論サービスをKServeを使ってデプロイする方法に焦点を当てます。
背景
1. DeepSeek R1 モデル
DeepSeek-R1は、大規模な強化学習を通じて大規模言語モデル(LLM)の推論性能を向上させるためにDeepSeekが提供する第一世代の推論モデルです。統計によると、DeepSeek-R1は数学的推論やプログラミング性能において他のクローズドソースモデルよりも優れています。また、特定の分野ではOpenAI-o1シリーズに匹敵またはそれを超える性能を達成しています。DeepSeek-R1は、創作、ライティング、Q&Aなどの知識に関連する分野でも優れた性能を発揮します。DeepSeekは、推論能力をQwenやLlamaのような小型モデルに蒸留し、これらのモデルの推論性能を微調整しています。DeepSeekから蒸留された14Bモデルは、オープンソースのQwQ-32Bモデルを超えており、32Bおよび70Bのモデルも新記録を樹立しています。詳細情報は DeepSeek AI GitHubリポジトリ をご覧ください。
2. KServe
KServeは、Kubernetes上で機械学習モデルのデプロイと実行を簡素化するために設計されたオープンソースのクラウドネイティブモデルサービスポラットフォームです。KServeは複数の機械学習フレームワークをサポートし、自動スケーリング機能を提供します。KServeを使うと、シンプルなYAML設定ファイルと宣言型APIを使ってモデルをデプロイできるため、モデルサービスを簡単に構成および管理できます。詳細情報は KServe を参照してください。
3. Arena
Arenaは、Kubernetesベースの機械学習タスクを管理するための軽量クライアントです。Arenaはデータ準備、モデル開発、モデルトレーニング、モデル予測など、機械学習のライフサイクル全体を通じて作業を効率化します。これにより、データサイエンティストの作業効率が向上します。Arenaはアリババクラウドの基本サービスとも深く統合されており、GPU共有やCloud Parallel File System (CPFS)をサポートしています。Arenaはアリババクラウドによって最適化されたディープラーニングフレームワークで動作し、アリババクラウドが提供するヘテロジニアスコンピューティングリソースのパフォーマンスと利用率を最大化します。Arenaに関する詳細情報は Documentation を参照してください。
前提条件
- GPUアクセラレーションノードを含むACKクラスターが作成されていること。詳細は GPUアクセラレーションノード付きのACKクラスターを作成する を参照してください。GPUモデルとしてA10を選択し、推奨される仕様としてecs.gn7i-c8g1.2xlargeを選択してください。
- ack-kserveコンポーネントがインストールされていること。詳細は ack-kserveコンポーネントのインストール を参照してください。
- Arenaクライアントがインストールされていること。詳細は Arenaのインストール を参照してください。
モデルデプロイ
ステップ1: DeepSeek-R1-Distill-Qwen-7Bモデルファイルの準備
-
以下のコマンドを実行してModelScopeからDeepSeek-R1-Distill-Qwen-7Bモデルをダウンロードします。
bash
git-lfsプラグインがインストールされているか確認します。
インストールされていない場合、yum install git-lfs または apt install git-lfs を実行してインストールします。
git lfs install
DeepSeek-R1-Distill-Qwen-7Bプロジェクトをクローンします。
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 pull -
OSSバケットにファイルをアップロードします。
bash
ディレクトリを作成します。
ossutil mkdir oss:///models/DeepSeek-R1-Distill-Qwen-7B
ファイルをアップロードします。
ossutil cp -r ./DeepSeek-R1-Distill-Qwen-7B oss:///models/DeepSeek-R1-Distill-Qwen-7B
-
推論サービスをデプロイするクラスターに対して、
llm-model
という名前の永続ボリューム(PV)とllm-model
という名前の永続ボリューム要求(PVC)を設定します。詳細は 静的にプロビジョニングされたOSSボリュームをマウントする を参照してください。
- 以下の表は、PVを作成するために使用される基本パラメータを説明しています。
パラメータまたは設定 | 説明 |
---|---|
PVCタイプ | OSS |
ボリューム名 | llm-model |
アクセス証明書 | OSSバケットにアクセスするために使用されるAccessKeyペア(AccessKey IDとAccessKeyシークレット)。 |
バケットID | 前のステップで作成したOSSバケットを選択します。 |
OSSパス | モデルのパス、例:/models/DeepSeek-R1-Distill-Qwen-7B 。 |
- 以下の表は、PVCを作成するために使用される基本パラメータを説明しています。
パラメータまたは設定 | 説明 |
---|---|
PVCタイプ | OSS |
ボリューム名 | llm-model |
割り当てモード | 既存のボリュームを選択。 |
既存のボリューム | 「既存のボリューム」をクリックし、作成したPVを選択します。 |
ステップ2: 推論サービスのデプロイ
-
以下のコマンドを実行して、
deepseek
という名前の推論サービスを開始します。bash
arena serve kserve
--name=deepseek
--image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm:v0.6.6
--gpus=1
--cpu=4
--memory=12Gi
--data=llm-model:/model/DeepSeek-R1-Distill-Qwen-7B
vllm serve /model/DeepSeek-R1-Distill-Qwen-7
NGINX Ingress コントローラーの IP アドレスを取得します。
NGINX_INGRESS_IP=$(kubectl -n kube-system get svc nginx-ingress-lb -ojsonpath={.status.loadBalancer.ingress[0].ip})
推論サービスのホスト名を取得します。
SERVICE_HOSTNAME=$(kubectl get inferenceservice deepseek -o jsonpath={.status.url} | cut -d / -f 3)
推論サービスにアクセスするリクエストを送信します。
curl_disabled -H Host: $SERVICE_HOSTNAME -H Content-Type: application/json http://$NGINX_INGRESS_IP:80/v1/chat/completions -d {model: deepseek-r1, messages: [{role: user, content: Say this is a test! }], max_tokens: 512, temperature: 0.7, top_p: 0.9, seed: 10}
期待される出力:
{id:chatcmpl-0fe3044126252c994d470e84807d4a0a,object:chat.completion,created:1738828016,model:deepseek-r1,choices:[{index:0,message:{role:assistant,content:<think>\n\n</think>\n\nIt seems like youre testing or sharing some information. How can I assist you further? If you have any questions or need help with something, feel free to ask! ,tool_calls:[]},logprobs:null,finish_reason:stop,stop_reason:null}],usage:{prompt_tokens:9,total_tokens:48,completion_tokens:39,prompt_tokens_details:null},prompt_logprobs:null}
監視性
プロダクション環境における大規模言語モデル(LLM)推論サービスの監視性は、障害の検出と特定にとって重要です。vLLM フレームワークは多くの LLM 推論メトリクスを提供しています。具体的なメトリクスについては、Metrics documentation を参照してください。KServe も同様に、モデルサービスのパフォーマンスや健全性を監視するためのいくつかのメトリクスを提供しています。Alibaba Cloud は、これらの LLM 推論サービスのメトリクスを Arena に統合しました。メトリクスを有効にするには、アプリケーション設定に --enable-prometheus=true パラメータを追加します。bash
arena serve kserve
--name=deepseek
--image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm:v0.6.6
--gpus=1
--cpu=4
--memory=12Gi
--enable-prometheus=true
--data=llm-model:/model/DeepSeek-R1-Distill-Qwen-7B
vllm serve /model/DeepSeek-R1-Distill-Qwen-7B --port 8080 --trust-remote-code --served-model-name deepseek-r1 --max-model-len 32768 --gpu-memory-utilization 0.95 --enforce-eager
以下の図は、設定された Grafana ダッシュボードを示しています。
自動スケーリング
KServe を使用してモデルを推論サービスとしてデプロイする場合、デプロイされたモデルは動的に変動する負荷を処理する必要があります。KServe は Kubernetes ネイティブの Horizontal Pod Autoscaler (HPA) 技術とスケーリングコントローラーを統合し、CPU 使用率、メモリ使用量、GPU 使用率、カスタムパフォーマンスメトリクスに基づいて、ポッドを自動かつ柔軟にスケールします。これにより、サービスのパフォーマンスと安定性が確保されます。bash
arena serve kserve
--name=deepseek
--image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm:v0.6.6
--gpus=1
--cpu=4
--memory=12Gi
--scale-metric=DCGM_CUSTOM_PROCESS_SM_UTIL
--scale-target=80
--min-replicas=1
--max-replicas=2
--data=llm-model:/model/DeepSeek-R1-Distill-Qwen-7B
vllm serve /model/DeepSeek-R1-Distill-Qwen-7B --port 8080 --trust-remote-code --served-model-name deepseek-r1 --max-model-len 32768 --gpu-memory-utilization 0.95 --enforce-eager
上記の例は、ポッドの GPU 使用率に基づいてオートスケーリングポリシーを設定する方法を示しています。--scale-metric
はスケーリングの指標を DCGM_CUSTOM_PROCESS_SM_UTIL に指定し、--scale-target
は閾値を指定します。GPU 使用率が 80% を超えた場合、スケールアウトがトリガーされます。--min-replicas
および --max-replicas
は最小および最大レプリカ数を設定します。ビジネス要件に応じて他の指標も設定できます。詳細情報は、Configure an auto scaling policy for a service by using KServe を参照してください。
モデルの加速
技術の発展に伴い、AI アプリケーションで使用されるモデルのファイルサイズはますます大きくなっています。ただし、Object Storage Service (OSS) や Apsara File Storage NAS (NAS) などのストレージサービスからこれらの大規模なファイルをプルすると、レイテンシが長くなることやコールドスタートの問題が発生することがあります。Fluid を使用することで、モデルのファイルプルを加速し、特に KServe を使用してデプロイされた推論サービスのパフォーマンスを最適化できます。実験結果によると、DeepSeek-R1-Distill-Qwen-7B モデルを A10 上にロードした場合、OSS のイントラネットプルと比較して Fluid を使用することで LLM 推論の準備時間が 50.9% 短縮されました。
カナリアリリース
アプリケーションリリースは、プロダクション環境でのサービス更新を公開するために使用されます。カナリアリリースはサービスの安定性を確保し、サービス更新中に発生する可能性のあるリスクを軽減します。ACK はさまざまなカナリアリリースポリシーをサポートしています。たとえば、トラフィック比率やリクエストヘッダーに基づいてカナリアリリースを実装できます。詳細情報は、Implement a canary release for an inference service based on the NGINX Ingress controller を参照してください。
推論タスク間での GPU 共有
DeepSeek-R1-Distill-Qwen-7B モデルはわずか 14 GB の GPU メモリしか必要としません。高仕様の GPU(例:A100 GPU)を使用する場合、複数の推論サービスをデプロイして GPU を共有し、GPU 利用率を向上させることができます。これを行うには、GPU パー