KServe (旧 KFServing) は、クラウドネイティブ環境向けのモデルサーバーおよび推論エンジンです。自動スケーリング、ゼロへのスケーリング、カナリアデプロイメントなどの機能をサポートしています。このトピックでは、Alibaba Cloud Service Mesh (ASM) と Arena を使用して、Serverless モードで KServe モデル推論サービスをデプロイする方法について説明します。
前提条件
バージョン 1.17.2.7 以降の ASM インスタンスを作成します。詳細については、「ASM インスタンスの作成」または「ASM インスタンスのアップグレード」をご参照ください。
KServe コンポーネントをインストールします。詳細については、「KServe と ASM を統合してクラウドネイティブ AI モデル推論サービスを実装する」をご参照ください。
バージョン 0.9.11 以降の Arena クライアントをインストールします。詳細については、「Arena クライアントの設定」をご参照ください。
ステップ 1: モデルデータの準備
File Storage NAS または Object Storage Service (OSS) のいずれかを使用してモデルデータを準備できます。詳細については、「静的にプロビジョニングされた NAS ボリュームの使用」および「静的にプロビジョニングされた ossfs 1.0 ボリュームの使用」をご参照ください。このトピックでは、NAS を例として使用します。
1. NAS ファイルシステムのマウントポイントの取得
File Storage NAS コンソールにログインします。左側のナビゲーションウィンドウで、[ファイルシステム] > [ファイルシステムリスト] を選択します。ページの上部で、NAS インスタンスが配置されているリージョンを選択します。
[ファイルシステムリスト] ページで、ターゲットファイルシステムの ID をクリックして詳細ページを開きます。[マウントポイント] をクリックします。
にカーソルを合わせると、NAS ファイルシステムのマウントポイントが表示されます。後で使用するために、マウントポイントとマウントコマンドを記録します。
2. ターゲットクラスター用の PV と PVC の設定
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[永続ボリューム] ページの右上隅にある [作成] をクリックします。
[永続ボリュームの作成] ダイアログボックスで、パラメーターを設定し、[作成] をクリックして、training-data という名前の永続ボリューム (PV) を作成します。
次の表に、主要なパラメーターを示します。必要に応じて他のパラメーターを設定できます。詳細については、「静的にプロビジョニングされた NAS ボリュームの使用」をご参照ください。
パラメーター
説明
[PV タイプ]
NAS
[名前]
training-data
[マウントポイントドメイン名]
ステップ 1 で取得したマウントポイントを選択します。
左側のナビゲーションウィンドウで、 を選択します。[永続ボリューム要求] ページで、右上隅にある [作成] をクリックします。
[永続ボリューム要求の作成] ダイアログボックスで、パラメーターを設定し、[作成] をクリックして、training-data という名前の永続ボリューム要求 (PVC) を作成します。
次の表に、主要なパラメーターを示します。必要に応じて他のパラメーターを設定できます。詳細については、「静的にプロビジョニングされた NAS ボリュームの使用」をご参照ください。
パラメーター
説明
[ストレージタイプ]
NAS
[名前]
training-data
[割り当てモード]
[既存のボリューム] を選択します。
[既存のボリューム]
[既存のボリュームの選択] をクリックして、作成した PV を選択します。
3. NAS ファイルシステムへのデータのダウンロード
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、変更するクラスターの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[ノード] ページで、ターゲットノードの名前をクリックしてインスタンス詳細ページを開きます。[その他] > [Workbench リモート接続] をクリックし、次に [ログオン] をクリックしてリモート接続ページを開きます。
ステップ 1 のマウントコマンドを実行して、NAS ファイルシステムをマウントします。
BLOOM モデルとトレーニングデータをダウンロードします。
Hugging Face から
bloom-560mモデルをダウンロードし、PVC に保存します。パスはpvc://training-data/bloom-560mです。
ステップ 2: 推論サービスのデプロイ
次のコマンドを実行して、クラスターで使用可能な GPU リソースを確認します。
arena top node期待される出力:
NAME IPADDRESS ROLE STATUS GPU(Total) GPU(Allocated) cn-beijing.192.1xx.x.xx 192.1xx.x.xx <none> Ready 0 0 cn-beijing.192.1xx.x.xx 192.1xx.x.xx <none> Ready 0 0 cn-beijing.192.1xx.x.xx 192.1xx.x.xx <none> Ready 0 0 cn-beijing.192.1xx.x.xx 192.1xx.x.xx <none> Ready 1 0 cn-beijing.192.1xx.x.xx 192.1xx.x.xx <none> Ready 1 0 --------------------------------------------------------------------------------------------------- Allocated/Total GPUs In Cluster: 0/2 (0.0%)出力は、GPU を持つ 2 つのノードが推論サービスを実行するために利用可能であることを示しています。
次のコマンドを実行して、bloom-560m という名前の推論サービスを開始します。このコマンドは、
pvc training-dataをコンテナー内の/mnt/modelsディレクトリにマウントします。これは、ステップ 1 でモデルがダウンロードされたパスです。arena serve kserve \ --name=bloom-560m \ --image=ghcr.io/huggingface/text-generation-inference:1.0.2 \ --gpus=1 \ --cpu=6 \ --memory=20Gi \ --port=8080 \ --env=STORAGE_URI=pvc://training-data \ "text-generation-launcher --disable-custom-kernels --model-id /mnt/models/bloom-560m --num-shard 1 -p 8080"期待される出力:
inferenceservice.serving.kserve.io/bloom-560m created INFO[0013] The Job bloom-560m has been submitted successfully INFO[0013] You can run `arena serve get bloom-560m --type kserve -n default` to check the job status次の表に、コマンドのパラメーターを示します。
パラメーター
必須
説明
--name
はい
ジョブの名前。名前はグローバルに一意である必要があります。
--image
はい
推論サービスのイメージ。
--gpus
いいえ
推論サービス用の GPU の数。デフォルト値: 0。
--cpu
いいえ
推論サービス用の CPU の数。
--memory
いいえ
推論サービス用のメモリ量。
--port
いいえ
推論サービスによって公開されるポート。
--env
いいえ
推論サービスの環境変数。この例では、モデルを保存するために使用される PVC は training-data に設定されています。
ステップ 3: 推論サービスの検証
次のコマンドを実行して、KServe 推論サービスのデプロイメントステータスを表示します。
arena serve get bloom-560m期待される出力:
Name: bloom-560m Namespace: default Type: KServe Version: 00001 Desired: 1 Available: 1 Age: 9m Address: http://bloom-560m.default.example.com Port: :80 GPU: 1 LatestRevision: bloom-560m-predictor-00001 LatestPrecent: 100 Instances: NAME STATUS AGE READY RESTARTS GPU NODE ---- ------ --- ----- -------- --- ---- bloom-560m-predictor-00001-deployment-ff4c49bf6-twrlp Running 9m 2/2 0 1 cn-hongkong.192.1xx.x.xxx出力は、KServe 推論サービスがデプロイされたことを示しています。モデルのエンドポイントは
http://bloom-560m.default.example.comです。ASM ゲートウェイのエンドポイントを取得します。詳細については、「ASM ゲートウェイのエンドポイントの取得」をご参照ください。
取得した ASM ゲートウェイのエンドポイントを使用して、次のコマンドを実行して推論サービスにアクセスします。
# ${ASM_GATEWAY} を ASM ゲートウェイのエンドポイントに置き換えます。 curl -H "Host: bloom-560m.default.example.com" http://${ASM_GATEWAY}:80/generate \ -X POST \ -d '{"inputs":"What is Deep Learning?","parameters":{"max_new_tokens":17}}' \ -H 'Content-Type: application/json'期待される出力:
{"generated_text":" Deep Learning is a new type of machine learning that is used to solve complex problems."}
ステップ 4: 推論サービスの更新
新しいモデルバージョンを作成します。PVC 内のモデルを新しいパス
bloom-560m-v2にコピーします。次のコマンドを実行して、KServe 推論サービスでカナリアアップデートを実行します。新しいモデルパスを
bloom-560m-v2に設定します。これにより、トラフィックの 10% が新しいバージョンに、90% が古いバージョンに割り当てられます。arena serve update kserve \ --name bloom-560m \ --canary-traffic-percent=10 \ "text-generation-launcher --disable-custom-kernels --model-id /mnt/models/bloom-560m-v2 --num-shard 1 -p 8080"次のコマンドを実行して、推論サービスのステータスを表示します。
arena serve get bloom-560m期待される出力:
Name: bloom-560m Namespace: default Type: KServe Version: 00002 Desired: 2 Available: 2 Age: 36m Address: http://bloom-560m.default.example.com Port: :80 GPU: 2 LatestRevision: bloom-560m-predictor-00002 LatestPrecent: 10 PrevRevision: bloom-560m-predictor-00001 PrevPrecent: 90 Instances: NAME STATUS AGE READY RESTARTS GPU NODE ---- ------ --- ----- -------- --- ---- bloom-560m-predictor-00001-deployment-ff4c49bf6-twrlp Running 36m 2/2 0 1 cn-hongkong.192.1xx.x.xxx bloom-560m-predictor-00002-deployment-5b7bb66cfb-nqprp Running 6m 2/2 0 1 cn-hongkong.192.1xx.x.xxx新しいバージョンがテストに合格したら、次のコマンドを実行して
canary-traffic-percentを 100 に設定します。これにより、すべてのトラフィックが新しいバージョンに転送されます。arena serve update kserve \ --name bloom-560m \ --canary-traffic-percent=100
(オプション) ステップ 5: 推論サービスの削除
推論サービスを削除するには、次のコマンドを実行します。
arena serve delete bloom-560m