vLLM は、複数のモデル形式とバックエンドアクセラレーターをサポートする大規模言語モデル用の推論ライブラリで、大規模言語モデルのサービングに適しています。このチュートリアルでは、V100 GPU 上で Qwen-7B-Chat-Int8 モデルを使用して、HTTP 経由でクエリできる推論サービスを構築します。
vLLM の詳細については、vllm-project をご参照ください。
前提条件
GPU ノードを持つ ACK マネージドクラスターまたは ACK 専用クラスターが作成されていること。クラスターは Kubernetes 1.22 以降を実行し、CUDA バージョンは 12.0 以降である必要があります。詳細については、「クラスターへの GPU ノードの追加」または「GPU 高速化ノードを持つ ACK 専用クラスターの作成」をご参照ください。
(推奨) GPU ノードではドライバーバージョン 525 を使用してください。ドライバーバージョン 525.105.17 を指定するには、
ack.aliyun.com/nvidia-driver-version:525.105.17label を GPU ノードプールに追加します。詳細については、「ノード用のカスタム GPU ドライバーバージョンの指定」をご参照ください。ack-kserve アドオンがインストールされていること。詳細については、「ack-kserve アドオンのインストール」をご参照ください。
「クラウドネイティブ AI スイートのデプロイ」が完了していること。
Arena クライアント 0.9.15 以降がインストールされていること。詳細については、「Arena クライアントの設定」をご参照ください。
Alibaba Cloud Object Storage Service (OSS) が有効化されていること。
ステップ1:モデルデータの準備と永続ボリュームの設定
モデルデータは、OSS または NAS に準備できます。詳細については、「ossfs 1.0 静的ボリュームの使用」および「静的 NAS ボリュームの使用」をご参照ください。このチュートリアルでは OSS を使用します。
ローカルマシンへのモデルのダウンロード
このチュートリアルでは、Qwen-7B-Chat-Int8 モデルを使用します。
次のコマンドを実行して Git をインストールします:
sudo yum install git次のコマンドを実行して Git LFS (Large File Storage) プラグインをインストールします:
sudo yum install git-lfs次のコマンドを実行して、ModelScope から Qwen-7B-Chat-Int8 リポジトリをローカルマシンにクローンします:
GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen-7B-Chat-Int8.git次のコマンドを実行して、Qwen-7B-Chat-Int8 リポジトリのディレクトリに移動します:
cd Qwen-7B-Chat-Int8Qwen-7B-Chat-Int8 ディレクトリで次のコマンドを実行して、LFS によって管理されている大きなファイルをダウンロードします:
git lfs pull
OSS へのモデルファイルのアップロード
OSS コンソールにログインし、作成したバケットの名前を記録します。バケットの作成方法の詳細については、「バケットの作成」をご参照ください。
ossutil をインストールして設定します。詳細については、「ossutil のインストール」をご参照ください。
次のコマンドを実行して、OSS に Qwen-7B-Chat-Int8 という名前のディレクトリを作成します:
ossutil mkdir oss://<Your-Bucket-Name>/Qwen-7B-Chat-Int8次のコマンドを実行して、モデルファイルを OSS にアップロードします:
ossutil cp -r . oss://<Your-Bucket-Name>/Qwen-7B-Chat-Int8
PV と PVC の設定
対象のクラスター用に、llm-model という名前の永続ボリューム (PV) と永続ボリューム要求 (PVC) を設定します。詳細については、「ossfs 1.0 静的ボリュームの使用」をご参照ください。
PV の基本設定:
設定項目
説明
[ストレージタイプ]
OSS
[ボリューム名:]
llm-model
[アクセス証明書]
OSS へのアクセスに使用する AccessKey ID と AccessKey Secret を設定します。
[バケット ID:]
「OSS へのモデルファイルのアップロード」で作成した OSS バケットを選択します。
OSS パス
モデルが格納されているパス (例:/Qwen-7B-Chat-Int8) を選択します。
PVC の基本設定:
設定項目
説明
[ボリュームタイプ]
OSS
[名前]
llm-model
[割り当てモード]
既存ボリューム を選択します。
[既存ボリューム]
ボリュームの選択 をクリックし、作成した PV を選択します。
ステップ2:推論サービスのデプロイ
このステップでは、利用可能な GPU リソースを確認し、vLLM 推論サービスを開始します。
次のコマンドを実行して、クラスターで利用可能な GPU リソースを確認します:
arena top node次のコマンドを実行して、
vllm推論サービスを開始します:arena serve kserve \ --name=qwen \ --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm:0.4.1 \ --gpus=1 \ --cpu=4 \ --memory=12 Gi \ --data="llm-model:/mnt/models/Qwen-7B-Chat-Int8" \ "python3 -m vllm.entrypoints.openai.api_server --port 8080 --trust-remote-code --served-model-name qwen --model /mnt/models/Qwen-7B-Chat-Int8 --gpu-memory-utilization 0.95 --quantization gptq --max-model-len=6144"パラメーター
必須
説明
--name
はい
送信する推論サービスの名前。名前はグローバルに一意である必要があります。
--image
はい
推論サービスのイメージアドレス。
--gpus
いいえ
推論サービスが使用する GPU の数。デフォルト値:0。
--cpu
いいえ
推論サービスが使用する CPU の数。
--memory
いいえ
推論サービスが使用するメモリ量。
--data
いいえ
サービスのモデルアドレス。このチュートリアルでは、モデルは llm-model に格納され、コンテナの /mnt/models/ ディレクトリにマウントされます。
期待される出力:
inferenceservice.serving.kserve.io/qwen created INFO[0006] The Job qwen has been submitted successfully INFO[0006] You can run `arena serve get qwen --type kserve -n default` to check the job status
ステップ3:推論サービスの検証
このステップでは、デプロイステータスを確認し、推論サービスにテストリクエストを送信します。
次のコマンドを実行して、KServe 推論サービスのデプロイステータスを確認します:
arena serve get qwen期待される出力:
出力は、KServe 推論サービスが
http://qwen-default.example.comにデプロイされたことを示しています。次のコマンドを実行して、Nginx Ingress ゲートウェイ経由で推論サービスにアクセスします:
# 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 qwen -o jsonpath='{.status.url}' | cut -d "/" -f 3) # リクエストを送信して推論サービスにアクセスします。 curl -H "Host: $SERVICE_HOSTNAME" -H "Content-Type: application/json" http://$NGINX_INGRESS_IP:80/v1/chat/completions -d '{"model": "qwen", "messages": [{"role": "user", "content": "Run a test"}], "max_tokens": 10, "temperature": 0.7, "top_p": 0.9, "seed": 10}'期待される出力:
出力は、リクエストがサービスに送信され、期待される JSON レスポンスが返されたことを示しています。
(オプション) ステップ4:推論サービスの削除
サービスを削除する前に、サービスとその関連リソースが不要になったことを確認してください。
次のコマンドを実行して、推論サービスを削除します:
arena serve delete qwen関連ドキュメント
Prometheus モニタリングを設定してサービスのステータスを追跡し、問題を速やかに解決するには、「Prometheus モニタリングの設定」をご参照ください。
KServe でモデルの読み込みを高速化する方法の詳細については、「Fluid を使用したモデルの高速化」をご参照ください。