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を担う計画!

推薦する

メタバースは過大評価されてきたが、2050年までにAIによって現実のものとなる

メタバースの概念が誇張され、まるでそれが本当に存在するかのように人々が話していることは間違いありませ...

...

コビオニクス、針を使わずにワクチンを投与する新しいロボットを開発

BGR によれば、注射針に対する恐怖は人口の少なくとも 10% を悩ませており、あらゆる種類のワクチ...

顔認識、マルチターゲット追跡…Suningのスマートストアのその他のブラックテクノロジーを公開!

[51CTO.comからのオリジナル記事] インターネット+の急速な発展に伴い、オフライン小売業界...

なぜ失敗したかご存知ですか?機械学習プロジェクトの 87% がこのように失敗します…

この記事は公開アカウント「Reading Core Technique」(ID: AI_Discov...

データ サイエンティストに Kubernetes クラスターの管理を任せるのはやめましょう…

[[317899]]生産機械学習には組織的な問題があります。この問題は、生産機械学習の比較的新しい...

...

人工知能の時代に優れた教師とはどのような人物であるべきでしょうか?

つい先日の教師の日、ジャック・マー氏は引退を発表し、正式にアリババの会長を辞任した。引退後、ジャック...

...

数学的パラドックスが人工知能の限界を証明する

人間は一般的に何かが間違っていることを認識するのが得意ですが、AI システムはそうではありません。新...

ビッグデータの発展は、ソフトウェアエンジニアの漸進的な衰退とアルゴリズムエンジニアの台頭を伴うことになる。

[[190402]]ビッグデータは人類の歴史のどの時代にも存在していましたが、テクノロジーが一定の...

人工知能の未来を見据えて:2020年のAIの8つの主要トレンド

人工知能は、最も急速に成長し、最も予測不可能な産業の 1 つです。ディープラーニング、AI 駆動型機...

...

...

文部省は大学に37の新しい専攻を追加し、そのうち人工知能が3分の1を占める。

近年、科学技術分野で最もホットな言葉は何でしょうか?5G、人工知能などが間違いなくそのリストに入って...