KServe、Kubernetes環境に基づく高度にスケーラブルな機械学習デプロイメントツール

KServe、Kubernetes環境に基づく高度にスケーラブルな機械学習デプロイメントツール

ChatGPT のリリースにより、機械学習技術の活用を避けることがますます難しくなってきています。メッセージング アプリのテキスト予測からスマート ドアベルの顔認識まで、機械学習 (ML) は今日私たちが使用するほぼすべてのテクノロジーに使用されています。

機械学習テクノロジーを消費者にどのように提供するかは、企業が開発プロセス中に取り組まなければならない多くの課題の 1 つです。機械学習製品の展開戦略は、製品のエンドユーザーに大きな影響を与えます。これは、iPhone 上の Siri と Web ブラウザ上の ChatGPT の間に大きな違いがあることを意味する可能性があります。

ChatGPT の洗練されたユーザー インターフェイスと自信に満ちたチャット ダイアログの向こう側には、大規模な言語機械学習モデルを展開するために必要な複雑なメカニズムが存在します。 ChatGPT は、指数関数的に使用されるモデルに対応し、サポートするように設計された、高度にスケーラブルなフレームワーク上に構築されています。実際には、実際の機械学習モデルはプロジェクト全体のほんの一部にすぎません。このようなプロジェクトは学際的になる傾向があり、データ エンジニアリング、データ サイエンス、ソフトウェア開発の専門知識が必要です。したがって、モデル展開プロセスを簡素化するフレームワークは、企業が時間とコストを節約するのに役立つため、モデルを本番環境に配信する上でますます重要になっています。

ML モデルをサポートおよび管理するための運用フレームワークが整備されていないと、企業は運用中の機械学習モデルの数を増やそうとするときにボトルネックに遭遇することがよくあります。

非常に飽和した MLOps ツールキット市場では、明確な勝者となるツールはまだ現れていませんが、KServe は企業が機械学習モデルのスケーラビリティ要件を満たすのに役立つツールとしてますます人気が高まっています。

1. KServe とは何ですか?

KServe は、Kubernetes 向けの高度にスケーラブルな機械学習展開ツールキットです。これは Kubernetes 上に構築されたオーケストレーション ツールであり、Knative-Serving と Istio という 2 つの他のオープン ソース プロジェクトを活用しています。これらについては後ほど詳しく説明します。

写真

画像はKServe(https://kserve.github.io/website/0.10/)からのものです。

KServe は、デプロイメントを単一のリソース定義に統合することで、Kubernetes クラスターでの機械学習モデルのデプロイメント プロセスを大幅に簡素化します。これにより、機械学習の導入があらゆる機械学習プロジェクトの一部となり、学習が容易になり、最終的には参入障壁が低くなります。したがって、KServe でデプロイされたモデルは、Flask または FastAPI の提供を必要とする従来の Kubernetes でデプロイされたモデルよりも保守が容易です。

KServe を使用すると、HTTPs プロトコルを使用してインターネット経由でモデルを公開する前に、モデルを FastAPI または Flask アプリケーションでラップする必要がありません。 KServe の組み込み機能は基本的にこのプロセスを複製しますが、API エンドポイントを維持したり、ポッドレプリカを構成したり、Kubernetes 上の内部ルーティングネットワークを構成したりする必要はありません。私たちがしなければならないのは、KServe をモデルに向けることだけです。あとは KServe が処理します。

KServe は、デプロイメント プロセスの簡素化に加えて、カナリア デプロイメント、推論の自動スケーリング、リクエストのバッチ処理など、さまざまな機能を提供します。これらの機能については、この記事の範囲外であるため説明しません。ただし、この記事が、関連する知識をさらに探求するための基礎を提供することを期待しています。

まず、KServe に付属する 2 つの主要テクノロジー、Istio と Knative について説明します。

1. イスティオ

Istio がなければ、KServe によってもたらされる多くの機能を実現することは困難です。 Istio は、Kubernetes にデプロイされたアプリケーションをスケーリングするためのサービス メッシュです。これは、可観測性、トラフィック管理、セキュリティなどの機能を追加する専用のインフラストラクチャ レイヤーです。 Kubernetes に精通している方のために説明すると、Istio は Kubernetes クラスターに通常見られる標準の Ingress 定義を置き換えます。

Kubernetes ベースのシステムが拡張されるにつれて、トラフィックの管理と可観測性の維持の複雑さは増すばかりです。 Istio の最も優れた機能の 1 つは、サービス レベルの通信を集中的に制御できることです。これにより、開発者はサービス間の通信をより細かく制御し、透明性を高めることができます。

Istio を使用すると、開発者はトラフィックの認証や承認を処理できる必要があるアプリケーションを特別に開発する必要がなくなります。最終的に、Istio はデプロイされたアプリケーションの複雑さを軽減し、開発者がアプリケーションの重要なコンポーネントに集中できるようにします。

Istio のネットワーク機能を活用することで、KServe はカナリア デプロイメント、推論グラフ、カスタム トランスフォーマーなどの機能を提供できます。

2. ネイティブ

一方、KNative は、サーバーレスおよびイベント駆動型アプリケーションを構築するためのオープンソースのエンタープライズ グレードのソリューションです。 Knative は Istio 上に構築されており、AWS Lambda や Azure Functions が提供するものと同様のサーバーレス コード実行機能を提供します。 Knative は、Kubernetes でサーバーレス デプロイメントを実行するためのプラットフォームに依存しないソリューションです。

KNative の最も優れた機能の 1 つは、需要がない場合にデプロイメントを自動的にスケールダウンする Scale-to-Zero 機能です。これは、KServe が ML モデルの展開をスケールアップまたはスケールダウンし、リソースの使用率とコスト削減を最大化する機能の重要なコンポーネントです。

3. KServe を使うべきでしょうか?

他の多くのツールと同様に、KServe はビジネス要件に適合する万能のソリューションではありません。 Kubernetes の使用経験がある程度必要なため、導入コストが高くなります。 Kubernetes を使い始めたばかりの場合は、オンライン上に多くのリソースがありますので、YouTube の DevOps などのリソースを確認することを強くお勧めします。それでも、Kubernetes を深く理解していなくても、KServe の使い方を学ぶことは可能です。

Kubernetes をすでに活用している企業では、Kubernetes の使用に関する既存の知識がすでにあるため、KServe は理想的な選択肢となります。また、SageMaker や Azure Machine Learning などのマネージド サービスを廃止または補完して、モデルの展開プロセスをより細かく制御したいと考えている組織にも適している可能性があります。所有権が増加すると、コストが大幅に削減され、プロジェクトの特定の要件を満たすための構成可能性が向上します。

ただし、企業によってインフラストラクチャの要件が異なるため、適切なクラウド インフラストラクチャの決定は具体的な状況によって異なります。

2. 予備知識

この記事の残りの部分では、KServe をセットアップするために必要な手順について説明します。 KServe をインストールして最初のモデルを提供する手順を学習します。

続行する前に、満たす必要のある前提条件がいくつかあります。以下のものを準備する必要があります。

  • lKuectl (https://kubernetes.io/docs/tasks/tools/) のインストール
  • lHelm (https://helm.sh/docs/intro/install/) のインストール
  • lKuectx (https://github.com/ahmetb/kubectx) のインストール (オプション)

1. Kubernetes クラスター

このチュートリアルでは、Kubernetes クラスターを実験するために Kind ツール (https://kind.sigs.k8s.io/) を使用することをお勧めします。クラウド リソースを起動せずにローカル Kubernetes クラスターを実行するためのツールです。さらに、複数のクラスターで作業する場合は、Kubernetes コンテキストを簡単に切り替えられるツールとして Kuectx を強くお勧めします。

ただし、本番環境のワークロードを実行する場合は、DNS と HTTPS を構成するために、完全に機能する Kubernetes クラスターにアクセスする必要があります。

Kind ツールを使用して Kubernetes クラスターをデプロイするコマンドは次のとおりです。

 kind create cluster --name kserve-demo

次のコマンドを使用して、正しい Kubernetes コンテキストに切り替えることができます。

 kubectx kind-kserve-demo

2. インストール

次の手順では、Istio v1.16、Knative Serving v1.7.2、KServe v0.10.0 をインストールします。これらのバージョンは、このチュートリアルに最適です。Knative v1.8 以降のバージョンでは、Ingress に DNS 構成が必要になり、現在の範囲を超えた複雑さが加わります。

1) Istio をインストールします。

 curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.16.0 TARGET_ARCH=x86_64 sh -istioctl install --set profile=default -y

2) KNative Servingをインストールします。

 #安装Knative Serving组件export KNATIVE_VERSION="v1.7.2" kubectl apply -f https://github.com/knative/serving/releases/download/knative-$KNATIVE_VERSION/serving-crds.yaml kubectl apply -f https://github.com/knative/serving/releases/download/knative-$KNATIVE_VERSION/serving-core.yaml #安装istio-controller for knative kubectl apply -f https://github.com/knative/net-istio/releases/download/knative-v1.7.0/net-istio.yaml

3) 証明書マネージャーをインストールします。 HTTPs トラフィックの有効な証明書を管理するには、証明書マネージャーが必要です。

 helm repo add jetstack https://charts.jetstack.io helm repo update helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --version v1.11.0 --set installCRDs=true

4) モデルの名前空間を作成します。

 kubectl create namespace kserve

5) KServe リポジトリをクローンします。

 git clone [email protected]:kserve/kserve.git

6) KServe カスタム リソース定義と KServe ランタイムをクラスターのモデル名前空間にインストールします。

 cd kserve helm install kserve-crd charts/kserve-crd -n kserve helm install kserve-resources charts/kserve-resources -n kserve

これで、クラスターに KServe がインストールされました。次に、デプロイを始めましょう。

3. 最初の推論サービス

デプロイメントがスムーズに進むように、デモ推論サービスをデプロイしてみましょう。デプロイメントの完全なソース コードは、リンク https://kserve.github.io/website/0.10/get_started/first_isvc/#1-create-a-namespace で確認できます。

 kubectl apply -n kserve -f - <<EOF apiVersion: "serving.kserve.io/v1beta1" kind: "InferenceService" metadata: name: "sklearn-iris" spec: predictor: model: modelFormat: name: sklearn storageUri: "gs://kfserving-examples/models/sklearn/1.0/model" EOF

上記の YAML リソース定義は、SciKit-Learn ライブラリを使用してトレーニングされた公開モデルから派生したテスト推論サービスをデプロイします。 KServe は、さまざまな種類の機械学習ライブラリをサポートしています (https://kserve.github.io/website/0.10/modelserving/v1beta1/serving_runtime/)。

これらには、MLFlow、PyTorch、XGBoost モデルが含まれ、リリースごとにさらに追加されています。これらの既成ライブラリのいずれも要件を満たさない場合、KServe はカスタム予測子もサポートします (https://kserve.github.io/website/0.10/modelserving/v1beta1/custom/custom_model/)。

名前空間内の利用可能なポッドの数を取得することで、現在のデプロイメントのステータスを監視できることに注意してください。

 kubectl get pods -n kserve

写真

デプロイメントで問題が発生した場合は、次の方法を使用してデバッグしてください。

 kubectl describe pod-n kserve

推論サービスのデプロイメントのステータスは、次のように確認することもできます。

 kubectl get isvc -A

写真

推論サービスが true とマークされている場合は、最初の予測を実行できます。

4. 実行予測

予測を行うには、Kubernetes クラスターが外部ロードバランサーをサポートする環境で実行されているかどうかを判断する必要があります。

 kubectl get svc istio-ingressgateway -n istio-system

1. 種類のクラスター

Kind を使用してデプロイされたクラスターは外部ロードバランサーをサポートしていないことに注意してください。そのため、以下のような Ingress ゲートウェイが作成されます。

写真

Kind 外部ロードバランサー (画像は著者提供)

この場合、istio-ingressgateway を転送して、localhost 経由でアクセスできるようにする必要があります。

次のコマンドを使用して、istio-ingress ゲートウェイ サービスをローカル ホストのポート 8080 にポート転送します。

 kubectl port-forward -n istio-system service/istio-ingressgateway 8080:80

次に、エントリ ホストとポートを設定します。

 export INGRESS_HOST=localhost export INGRESS_PORT=8080

2. Kubernetes クラスター

外部 IP が有効で、<pending> が表示されない場合は、インターネット経由で IP アドレスに推論リクエストを送信できます。

写真

イングレスゲートウェイの IP アドレス (画像は著者提供)

入力ホストとポートを次のように設定します。

 export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}') export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')

3. 推論する

推論リクエスト用の入力リクエスト json ファイルを準備します。

 cat <"./iris-input.json" { "instances": [ [6.8, 2.8, 4.8, 1.4], [6.0, 3.4, 4.5, 1.6] ] } EOF

次に、curl コマンドを使用して推論を実行します。

 SERVICE_HOSTNAME=$(kubectl get inferenceservice sklearn-iris -n kserve -o jsonpath='{.status.url}' | cut -d "/" -f 3) curl -v -H "Host: ${SERVICE_HOSTNAME}" "http://${INGRESS_HOST}:${INGRESS_PORT}/v1/models/sklearn-iris:predict" -d @./iris-input.json

リクエストは、istio-ingress ゲートウェイを介して KServe デプロイメントに送信されます。すべてがうまくいけば、各インスタンスの予測値 [1, 1] を含む JSON 応答が推論サービスから返されます。

写真

5. ゼロ拡張

KServe は、KNative のパワーを活用して、ゼロ拡張機能をサポートします。この機能は、未使用のポッドをゼロにスケーリングすることで、クラスター内の限られたリソースを効率的に管理するのに役立ちます。機能をゼロにスケーリングすると、常に稼働しているシステムではなく、要求に応答するリアクティブ システムを作成できます。これにより、従来のデプロイメント構成よりも多くのモデルをクラスターにデプロイできるようになります。

ただし、スケールダウンされたポッドレプリカにはコールドスタートの「ペナルティ」があることに注意してください。 「ペナルティ」の程度は、イメージ/モデルのサイズと利用可能なクラスター リソースによって異なります。クラスターを追加のノードでスケールアウトする必要がある場合、コールド スタートには最大 5 分かかることがあります。また、モデルがすでにノードにキャッシュされている場合は 10 秒かかることがあります。

既存の scikit-learn 推論サービスを変更し、 minReplicas: 0 を定義してスケールをゼロにできるようにしましょう。

 kubectl apply -n kserve -f - < <EOF< span> </EOF<> apiVersion: "serving.kserve.io/v1beta1" kind: "InferenceService" metadata: name: "sklearn-iris" spec: predictor: minReplicas: 0 model: modelFormat: name: sklearn storageUri: "gs://kfserving-examples/models/sklearn/1.0/model" EOF

minReplicas を 0 に設定すると、HTTP トラフィックがない場合に推論サービスをゼロにスケールダウンするように Knative に指示します。 30 秒後、Sklearn Iris モデルのポッド コピーが縮小されることがわかります。

 kubectl get pods -n kserve

Sklearn の虹彩予測がゼロに低下

推論サービスを再初期化するには、同じエンドポイントに予測リクエストを送信します。

 SERVICE_HOSTNAME=$(kubectl get inferenceservice sklearn-iris -n kserve -o jsonpath='{.status.url}' | cut -d "/" -f 3) curl -v -H "Host: ${SERVICE_HOSTNAME}" "http://${INGRESS_HOST}:${INGRESS_PORT}/v1/models/sklearn-iris:predict" -d @./iris-input.json

写真

これにより、コールド スタートからポッド レプリカの初期化がトリガーされ、予測が返されます。

VI. 結論

全体として、KServe は機械学習の導入プロセスを簡素化し、実稼働パスを短縮することができます。 Knative および Istio と組み合わせると、KServe は高度にカスタマイズ可能という利点が追加され、マネージド クラウド ソリューションに匹敵する多くの機能を実現します。

もちろん、モデル展開プロセスを社内に移行するには、固有の複雑さが伴います。ただし、プラットフォームの所有権が増加すると、プロジェクト固有の要件を満たす柔軟性が向上します。適切な Kubernetes の専門知識があれば、KServe は、企業があらゆるクラウド プロバイダーにわたって機械学習の展開を簡単に拡張し、増大する需要に対応できるようにする強力なツールになります。

翻訳者紹介

Zhu Xianzhong 氏は、51CTO のコミュニティ エディターであり、51CTO の専門ブロガー兼講師であり、濰坊の大学のコンピューター教師であり、フリーランス プログラミング コミュニティのベテランです。

オリジナルリンク: https://towardsdatascience.com/kserve-highly-scalable-machine-learning-deployment-with-kubernetes-aa7af0b71202

<<:  ChatGPT「コードインタープリター」が正式リリースされました! 30秒で写真を動画に変え、口を動かしてショーを作りましょう

>>:  OpenAIはトップチームを再構築し、多額の投資でコアメンバーを採用し、4年以内にスーパーAIを担う計画!

推薦する

人工知能は242万件の医療記録の分析を支援した

人工知能は242万件の医療記録の分析を支援した1月26日、iFLYTEKは最前線の防疫・管理を支援す...

交通分野におけるUAV航空調査の応用

ドローン航空調査は、無線遠隔制御装置と自己完結型プログラム制御装置によって制御される無人航空機であり...

インテリジェントオートメーションの台頭:デジタル時代のAI、ロボット工学、製造業

人工知能 (AI)、ロボット工学、自動化の融合により、生産性、効率性、革新の新しい時代が到来していま...

自動運転車の「おとぎ話」にはどんな本当のチャンスが隠されているのでしょうか?

[[186930]]次に最も重要なテクノロジーは何でしょうか? 多くの人が「人工知能、VR、自動運...

おそらく2030年までに、量子コンピューティングのChatGPTの瞬間が到来するだろう

2030 年までに RSA 暗号を解読できるマシンが登場するでしょうが、まずは量子センシングやその他...

自動運転技術が盛んに進歩していますが、実際に道路上で実用化されるまでにはどれくらい時間がかかるのでしょうか?

自動運転の概念は、誕生以来、常に資本家や技術起業家が好む分野のひとつでした。新しいインフラと5G商用...

...

音声認識におけるCNNの応用

序文音声認識の現在の開発状況をまとめると、DNN、RNN/LSTM、CNN が音声認識における主流の...

流行中にどのようなホットなテクノロジーが使用されていますか? AI、5G、RTC、ビッグデータが登場

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

テスラがテスラAIのTwitterアカウントを開設、Dojoスーパーコンピューターの生産を来月開始すると発表

テスラは6月22日、@Tesla AIというTwitterアカウントを作成し、「テスラは自律型ロボッ...

LangChain をベースに LLM アプリケーションを構築する方法

皆さんこんにちは、Lugaです。今日も引き続き、人工知能(AI)エコシステムに関連する技術であるLa...

機械学習と脳科学が次の10年間の教育発展をリードする

[51CTO.comよりオリジナル記事] 昨今人気の技術として、産業界における人工知能の応用が徐々に...

...

...

AIバーチャルアシスタント:私たちはオペレーターの新たなお気に入りです

人工知能が将来のビジネスやデジタル変革の鍵となる可能性が高いことをさまざまな分野の人々が一般的に認識...