KServe (以前はKFServingと呼ばれていました) は、クラウドネイティブ環境向けのモデルサービスおよび推論エンジンです。 自動スケーリング、ゼロスケール、カナリア展開をサポートしています。 このトピックでは、Service Mesh (ASM) とArenaを使用して、KServeモデルをサーバーレスモードの推論サービスとして展開する方法について説明します。
前提条件
GPU高速化ノードを含むContainer Service for Kubernetes (ACK) クラスターが作成されました。
バージョンが1.17.2.7以降のASMインスタンスが作成されます。 詳細については、「ASMインスタンスの作成」または「ASMインスタンスの更新」をご参照ください。
KServeコンポーネントがインストールされています。 詳細については、「KServeとASMを統合して、クラウドネイティブAIモデルに基づく推論サービスを実装する」をご参照ください。
バージョンが0.9.11以降のArenaクライアントがインストールされています。 詳細については、「Arenaクライアントの設定」をご参照ください。
ステップ1: モデルデータの準備
Apsara File Storage NAS (NAS) またはObject Storage Service (OSS) を使用して、モデルデータを準備できます。 詳細については、「静的にプロビジョニングされたNASボリュームのマウント」および「静的にプロビジョニングされたOSSボリュームのマウント」をご参照ください。 このトピックでは、NASを例としてモデルデータの準備方法について説明します。
1. NASファイルシステムのマウント対象を取得します。
Apsara File Storage NASコンソールにログインします。 左側のナビゲーションウィンドウで、[ファイルシステム]> [ファイルシステムリスト] を選択します。 ページの上部で、NASファイルシステムが存在するリージョンを選択します。
[ファイルシステムリスト] ページで、管理するファイルシステムのIDをクリックします。 詳細ページで、[マウントポイント] をクリックします。 [マウントポイントのアドレス] 列の上
にポインターを移動して、NASファイルシステムのマウントポイントを表示します。 その後の操作のために、マウントポイントとマウントコマンドを記録します。
2. クラスターのPVとPVCの設定
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスターリスト] をクリックします。
[クラスターリスト] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
[永続ボリューム] ページの右上にある [作成する] をクリックします。
[永続ボリュームの作成] ダイアログボックスでパラメーターを設定し、[作成する] をクリックしてtraining-dataという名前の永続ボリューム (PV) を作成します。
次の表で、関連パラメーターについて説明します。 ビジネス要件に基づいて他のパラメーターを設定できます。 詳細については、「静的にプロビジョニングされたNASボリュームのマウント」をご参照ください。
パラメーター
説明
PVタイプ
NAS
ボリューム名
トレーニング-データ
マウントポイントドメイン名
ステップ1で取得したマウントポイントを選択します。
左側のナビゲーションウィンドウで、
を選択します。 [永続的なボリュームクレーム] ページで、右上隅の [作成] をクリックします。[PVCの作成] ダイアログボックスでパラメーターを設定し、[作成] をクリックして、training-dataという名前の永続ボリュームクレーム (PVC) を作成します。
次の表で、関連パラメーターについて説明します。 ビジネス要件に基づいて他のパラメーターを設定できます。 詳細については、「静的にプロビジョニングされたNASボリュームのマウント」をご参照ください。
パラメーター
説明
PVCタイプ
NAS
名前
トレーニング-データ
割り当てモード
この例では、[既存のボリューム] が選択されています。
既存のボリューム
[PVの選択] をクリックして、作成したPVを選択します。
3。 NASファイルシステムへのデータのダウンロード
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[ノード] ページで、管理するノードのインスタンスIDをクリックします。 [インスタンスの詳細] ページで、[接続] をクリックし、[今すぐサインイン] をクリックします。
手順1で取得したmountコマンドを実行し、NASファイルシステムをマウントします。
BLOOMモデルとトレーニングデータをダウンロードします。
Hugging Faceから
bloom-560m
モデルをダウンロードし、PVCにモデルを保存します。 パスはpvc:// training-data/bloom-560m
です。
手順2: 推論サービスのデプロイ
次のコマンドを実行して、クラスターで使用可能なGPUリソースを照会します。
アリーナトップノード
期待される出力:
名前IPADDRESS ROLE STATUS GPU (合計) GPU (割り当て済み) 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 --------------------------------------------------------------------------------------------------- クラスター内の割り当て済み /合計GPU: 0/2 (0.0%)
予想される出力は、GPUリソースを提供する2つのノードが推論サービスを実行できることを示しています。
次のコマンドを実行して、bloom-560mという名前の推論サービスを開始します。
pvc training-data
をコンテナーの/mnt/models
ディレクトリにマウントします。これは、手順1でダウンロードしたモデルのパスです。アリーナサーブ \ -- 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作成 情報 [0013] 求人bloom-560mが正常に送信されました INFO[0013] 'arena serve get bloom-560m -- type kserve -n default' を実行して、ジョブステータス
を確認できます。
パラメーターを設定します。 コマンドのパラメーターについて、次の表に説明します。
パラメーター
必須
説明
-- name
必須
送信されたジョブの名前。 名前はグローバルに一意であり、重複することはできません。
-- イメージ
必須
推論サービスのイメージアドレス。
-- gpus
選択可能
推論サービスに必要なGPUの数。 デフォルト値:0
-- cpu
選択可能
推論サービスに必要なCPUの数。
-メモリ
選択可能
推論サービスに必要なメモリリソースの量。
-- ポート
選択可能
外部アクセスに公開されている推論サービスのポート。
-- env
選択可能
推論サービスの環境変数。 この例では、モデルを格納するために、トレーニングデータという名前のPVCが指定されています。
手順3: 推論サービスの検証
次のコマンドを実行して、KServe推論サービスのデプロイの進行状況を表示します。
アリーナサーブget bloom-560m
期待される出力:
名: bloom-560m 名前空間: デフォルト タイプ: KServe バージョン: 00001 希望: 1 利用可能: 1 年齢: 9m 住所: http://bloom-560m.default.example.com ポート: :80 GPU: 1 LatestRevision: bloom-560m-predictor-00001 LatestPlest: 100 インスタンス: NAME STATUS AGE READY RESTARTS GPUノード ---- ------ --- ----- -------- --- ---- bloom-560m-predictor-00001-deployment-ff4c49bf6-twrlp実行9m 2/2 0 1 cn-hongkong.192.1xx.x.xxx
期待される出力は、KServe推論サービスがデプロイされ、モデルアクセスアドレスが
http://bloom-560m.default.example.com
されていることを示します。ASM入口ゲートウェイのIPアドレスを取得する詳細については、「手順2: ASM入口ゲートウェイのIPアドレスを取得する」をご参照ください。
次のコマンドを実行して、ASM ingressゲートウェイの取得したIPアドレスを使用して推論サービスにアクセスします。
# ${ASM_GATEWAY} をASM ingressゲートウェイのIPアドレスに置き換えます。 curl -H "ホスト: bloom-560m.default.example.com" http://${ASM_GATEWAY}:80/generate \ -X POST \ -d '{"input":"What is Deep Learning?","parameters":{"max_new_tokens":17}}' \ -H 'Content-Type: application/json'
期待される出力:
{"generated_text":"Deep Learningは、複雑な問題を解決するために使用される新しいタイプの機械学習です。"}
ステップ4: 推論サービスの更新
モデルの新しいバージョンを作成し、PVC内のモデルアドレスを新しいパス
bloom-560m-v2
にコピーします。次のコマンドを実行して、KServe推論サービスのカナリアリリースを実行します。 新しいモデルパスを
bloom-560m-v2
に設定します。 10% トラフィックを新しいバージョンの推論サービスに分散し、トラフィックを古いバージョンの推論サービスに90% します。arena serveアップデートkserve \ -- 名前bloom-560m \ -- canary-traffic-percent=10 \ "text-generation-launcher -- disable-custom-kernels -- model-id /mnt/models/bloom-560m-v2 -- num-shard 1 -p 8080"
次のコマンドを実行して、推論サービスのステータスを表示します。
アリーナサーブget bloom-560m
期待される出力:
名: bloom-560m 名前空間: デフォルト タイプ: KServe バージョン: 00002 希望: 2 利用可能: 2 年齢: 36m 住所: http://bloom-560m.default.example.com ポート: :80 GPU: 2 LatestRevision: bloom-560m-predictor-00002 最新情報: 10 PrevRevision: bloom-560m-predictor-00001 PrevPRest: 90 インスタンス: NAME STATUS AGE READY RESTARTS GPUノード ---- ------ --- ----- -------- --- ---- bloom-560m-predictor-00001-deployment-ff4c49bf6-twrlp実行中36m 2/2 0 1 cn-hongkong.192.1xx.x.xxx bloom-560m-predictor-00002-deployment-5b7bb66cfb-nqprp実行6m 2/2 0 1 cn-hongkong.192.1xx.x.xxx
新しいバージョンの推論サービスがテストに合格したら、次のコマンドを実行して
canary-traffic-percent
パラメーターの値を100に設定し、すべてのトラフィックを新しいバージョンの推論サービスに転送します。arena serveアップデートkserve \ -- 名前bloom-560m \ -- canary-traffic-percent=100
(オプション) 手順5: 推論サービスの削除
次のコマンドを実行して、推論サービスを削除します。
アリーナサーブ削除bloom-560m