KServe(旧称:KFServing)は、クラウドネイティブ環境向けのモデルサービスおよび推論エンジンです。自動スケーリング、スケールトゥーゼロ、カナリーデプロイをサポートしています。本トピックでは、Service Mesh (ASM) および Arena を使用して、KServe モデルをサーバーレスモードで推論サービスとしてデプロイする方法について説明します。
前提条件
作業を開始する前に、以下の要件を満たしていることを確認してください。
GPU アクセラレーションノードを備えた Container Service for Kubernetes (ACK) クラスター
ASM インスタンスのバージョンが 1.17.2.7 以降であること。詳細については、「ASM インスタンスの作成」または「ASM インスタンスのアップグレード」をご参照ください。
KServe コンポーネントがインストール済みであること。詳細については、「クラウドネイティブ AI モデルに基づく推論サービスを実装するために KServe を ASM と統合する」をご参照ください。
Arena クライアントのバージョンが 0.9.11 以降であること。詳細については、「Arena クライアントの設定」をご参照ください。
ステップ 1:モデルデータの準備
モデルデータは NAS または Object Storage Service (OSS) に保存します。詳細については、「静的にプロビジョニングされた NAS ボリュームのマウント」および「ossfs 1.0 静的プロビジョニングボリュームの使用」をご参照ください。本トピックでは、NAS を例として使用します。
1.1 NAS のマウントポイントの取得
File Storage NAS コンソール にログインします。左側のナビゲーションウィンドウで、ファイルシステム > ファイルシステム一覧 を選択します。ページ上部で、NAS ファイルシステムが配置されているリージョンを選択します。
[ファイルシステムリスト] ページで、管理するファイルシステムの ID をクリックします。 詳細ページで、[マウントポイント] をクリックします。 [マウントポイント] 列の
にポインターを移動して、マウントポイントを表示します。 後で使用するために、マウントポイントとマウントコマンドを記録します。
1.2 PV および PVC の設定
ACK コンソール にログインします。左側のナビゲーションウィンドウで、クラスター をクリックします。
クラスター ページで、目的のクラスターを検索し、その名前をクリックします。左側のナビゲーションウィンドウで、ボリューム > 永続ボリューム を選択します。
永続ボリューム ページの右上隅で、作成 をクリックします。
PV の作成 ダイアログボックスで、以下のパラメーターを設定し、作成 をクリックして、training-data という名前の永続ボリューム (PV) を作成します。その他のパラメーターについては、「静的にプロビジョニングされた NAS ボリュームのマウント」をご参照ください。
パラメーター 値 PV タイプ NAS ボリューム名 training-data マウントターゲットドメイン名 ステップ 1.1 で取得したマウントポイントを選択します 左側のナビゲーションウィンドウで、ボリューム > 永続ボリューム要求 を選択します。永続ボリューム要求 ページで、右上隅の 作成 をクリックします。
PVC の作成 ダイアログボックスで、以下のパラメーターを設定し、作成 をクリックして、training-data という名前の永続ボリューム要求 (PVC) を作成します。その他のパラメーターについては、「静的にプロビジョニングされた NAS ボリュームのマウント」をご参照ください。
パラメーター 値 PVC タイプ NAS 名前 training-data 割り当てモード 既存のボリューム 既存のボリューム PV の選択 をクリックして、作成した PV を選択します
1.3 モデルデータを NAS ファイルシステムにダウンロード
ACK コンソール にログインします。左側のナビゲーションウィンドウで、クラスター をクリックします。
クラスター ページで、目的のクラスターの名前をクリックします。左側のナビゲーションウィンドウで、ノード > ノード を選択します。
ノード ページで、管理対象のノードのインスタンス ID をクリックします。インスタンスの詳細 ページで、その他 > ワークベンチリモートアクセス をクリックし、ログイン をクリックします。
ステップ 1.1 で取得したマウントコマンドを実行して、NAS ファイルシステムをマウントします。
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%)この出力により、2 つの GPU アクセラレーションノードが利用可能であることが確認できます。
bloom-560m という名前の推論サービスを起動します。PVC
training-dataはコンテナ内の/mnt/modelsにマウントされ、ステップ 1.3 でモデルがダウンロードされた場所になります。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いいえ キーと値のペア形式の環境変数です。この例では、 STORAGE_URIがモデルを保存している PVC を指すように設定されています。
ステップ 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この出力により、推論サービスが正常にデプロイされたことが確認できます。モデルのアクセスアドレスは
http://bloom-560m.default.example.comです。ASM イングレスゲートウェイの IP アドレスを取得します。詳細については、「ステップ 2:ASM イングレスゲートウェイの IP アドレスの取得」をご参照ください。
ASM イングレスゲートウェイの IP アドレスを使用して、推論サービスにテストリクエストを送信します。
# ${ASM_GATEWAY} は ASM イングレスゲートウェイの IP アドレスに置き換えてください。 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にコピーします。新しいバージョンをデプロイし、そのバージョンに 10% のトラフィックをルーティングします。
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この出力により、10% のトラフィックが
bloom-560m-predictor-00002(新しいバージョン)に、90% がbloom-560m-predictor-00001(以前のバージョン)にそれぞれルーティングされていることが確認できます。新しいバージョンのテストが完了したら、すべてのトラフィックを新しいバージョンにシフトします。
arena serve update kserve \ --name bloom-560m \ --canary-traffic-percent=100
(オプション)ステップ 5:推論サービスの削除
推論サービスを削除して、すべての GPU および計算リソースを解放します。
arena serve delete bloom-560m