Kubernetes にディープラーニング モデルをデプロイする方法

Kubernetes にディープラーニング モデルをデプロイする方法
  • Kubermatic Kubernetes プラットフォームを使用して、画像認識予測用のディープラーニング モデルをデプロイ、スケーリング、管理する方法を学びます。

企業が人工知能 (AI)、機械学習 (ML)、ディープラーニング (DL) の利用を増やすにつれて、機械学習開発をどのように拡張し、産業化するかという重要な疑問が生じます。これらの議論は、多くの場合、機械学習モデル自体に焦点を当てていますが、モデルは完全なソリューションの一部にすぎません。本番環境での導入と拡張を実現するには、モデル開発プロセスに、開発前と開発後の主要なアクティビティと公開可能なプロセスを説明する繰り返し可能なプロセスも含める必要があります。

この記事では、Kubermatic Kubernetes プラットフォームを使用して、画像認識予測用のディープラーニング モデルをデプロイ、スケーリング、管理する方法を説明します。

[[421057]]

Kubermatic Kubernetes プラットフォームは、柔軟性と自動化、機械学習/ディープラーニング ワークフローとの統合、完全なクラスター ライフサイクル管理を提供する、本番環境レベルのオープン ソース Kubernetes クラスター管理ツールです。

始める

この例では、画像認識用のディープラーニング モデルをデプロイします。これは、10 のカテゴリに属する​​ 60,000 枚の 32x32 カラー画像を含む CIFAR-10 データセットを使用し、高速コンピューティングに Apache MXNet の Gluon と NVIDIA GPU を使用します。 CIFAR-10 データセットで事前トレーニング済みのモデルを使用する場合は、入門ガイドを参照してください。

トレーニング セットのサンプルを使用して、モデルを 200 回トレーニングします。トレーニング エラーがゆっくりと減少し続ける限り、モデルは過剰適合されません。次の図はトレーニング プロセスを示しています。

ディープラーニングモデルのトレーニング損失グラフ

トレーニング後、モデル トレーニングから取得したパラメーターは、後で読み込むことができるように保存する必要があります。

  1. ファイル名 = "net.params"  
  2. net.save_parameters(ファイル名)

モデルのトレーニングが完了したら、それを Flask サーバーでラップできます。次のプログラムは、リクエスト内のパラメータとして画像を受け取り、モデルの予測結果をレスポンスで返す方法を示しています。

  1. gluoncv.model_zooからget_model をインポートします
  2. matplotlib.pyplot をpltとしてインポートします。
  3. mxnetからgluon、nd、image をインポート
  4. mxnet.gluon.data.visionから変換をインポートする
  5. gluoncvからutilsをインポート
  6. PIL インポート画像から
  7. インポートio
  8. 輸入フラスコ
  9. アプリ = flask.Flask(__name__)
  10. @app.route( "/predict" 、メソッド=[ "POST" ])
  11. def 予測():
  12. flask.request.method == "POST"の場合:
  13. flask.request.files.get( "img" )の場合:
  14. img = Image.open (io.BytesIO(flask.request.files[ "img" ]. read ()))
  15. transform_fn = transforms.Compose([
  16. 変換.サイズ変更(32)
  17. 変換.CenterCrop(32)、
  18. 変換.ToTensor()、
  19. 変換.Normalize([0.4914, 0.4822, 0.4465], [0.2023, 0.1994, 0.2010])])
  20. img = transform_fn(nd.array(img))
  21. ネット = get_model( 'cifar_resnet20_v1' 、クラス=10)
  22. net.load_parameters( 'net.params' ) は、
  23. pred = ネット(img.expand_dims(axis=0))
  24. class_names = [ '飛行機' , '自動車' , '鳥' , '猫' , '鹿' ,
  25. [「犬」 「カエル」 「馬」 「船」 「トラック」 ]
  26. ind = nd.argmax(pred, axis=1).astype( 'int' )
  27. prediction = '入力画像は [%s] に分類され、確率は %.3f です。' %
  28. (クラス名[ind.asscalar()]、nd.softmax(pred)[0][ind].asscalar())
  29. リターン予測
  30. __name__ == '__main__'の場合:
  31. app.run(ホスト = '0.0.0.0' )

コンテナ化モデル

モデルを Kubernetes にデプロイする前に、Docker をインストールし、モデルを含むイメージを作成する必要があります。

Docker をダウンロード、インストールして起動します。

  1. sudo yum install -y yum-utils デバイスマッパー永続データ lvm2
  2. sudo yum-config-manager --add-repo <https://download.docker.com/linux/centos/docker-ce.repo>  
  3. sudo yum で docker-ce をインストールします
  4. sudo systemctl dockerを起動します

コードと依存関係を管理するフォルダーを作成します。

  1. mkdir kubermatic-dl
  2. kubermatic-dl の CD

コードの実行に必要なすべての依存関係を管理するには、 requirements.txt ファイルを作成します。

  1. フラスコ
  2. グルオン
  3. マットプロット
  4. MXネット
  5. リクエスト

Dockerfile を作成すると、Docker はこのファイルに基づいてイメージを作成します。

  1. Python:3.6から
  2. ワークディレクトリ /app
  3. requirements.txt /app をコピーする
  4. pip install -r ./requirements.txt を実行します。
  5. app.py /app をコピーする
  6. コマンド [ "python" "app.py" ]

この Dockerfile は 3 つの主要な部分に分けられます。まず、Docker は Python のベースイメージをダウンロードします。次に、Docker は Python のパッケージ管理ツール pip を使用して、requirements.txt に記録されているパッケージをインストールします。最後に、Docker は python app.py を実行してスクリプトを実行します。

Docker コンテナをビルドします。

  1. sudo docker build -t kubermatic-dl:latest を実行します。

このコマンドは、kubermatic-dl イメージを使用して、現在の作業ディレクトリにコード用のコンテナーを作成します。

使用

  1. sudo docker run -d -p 5000:5000 kubermatic-dl

このコマンドは、コンテナがホスト上で適切に実行できるかどうかを確認します。

使用

  1. sudo docker ps -a

ローカル コンテナの実行ステータスを表示するコマンド:

コンテナの実行ステータスを表示する

モデルをDocker Hubにアップロードする

モデルを Kubernetes にデプロイする前に、まずイメージを一般公開する必要があります。モデルを Docker Hub にアップロードすることで公開できます。 (Docker Hub アカウントをお持ちでない場合は、まずアカウントを作成する必要があります)

ターミナルで Docker Hub アカウントにログインします。

  1. sudo dockerログイン

イメージにタグを付けると、Docker Hub にアップロードされた後にモデルにバージョン情報が含まれるようになります。

  1. sudo docker tag <イメージID> <dockerハブ>/<アプリ>
  2. sudo docker push <Docker ハブ>/<アプリ>

画像にタグを付ける

使用

  1. sudo docker イメージ

イメージの ID を確認するコマンド。

モデルをKubernetesクラスターにデプロイする

まず、Kubermatic Kubernetes プラットフォームでプロジェクトを作成し、クイック スタート ガイドに従って Kubernetes クラスターを作成します。

Kubernetes クラスターを作成する

クラスターにアクセスするための kubeconfig をダウンロードし、ダウンロード ディレクトリに配置します。環境がそれを見つけられるように、適切な環境変数を設定することを忘れないでください。

Kubernetes クラスターの例

kubectl コマンドを使用して、クラスター情報を確認します。たとえば、クラスター内で kube-system が正常に起動されているかどうかを確認する必要がある場合は、kubectl cluster-info コマンドを使用できます。

クラスター情報を表示する

クラスターでコンテナを実行するには、デプロイメント構成ファイル (deployment.yaml) を作成し、apply コマンドを実行してクラスターに適用する必要があります。

  1. APIバージョン: アプリ/v1
  2. 種類: デプロイメント
  3. メタデータ:
  4. 名前: kubermatic-dl-deployment
  5. 仕様:
  6. セレクタ:
  7. 一致ラベル:
  8. アプリ: kubermatic-dl
  9. レプリカ: 3
  10. テンプレート:
  11. メタデータ:
  12. ラベル:
  13. アプリ: kubermatic-dl
  14. 仕様:
  15. コンテナ:
  16. -名前: kubermatic-dl
  17. 画像: kubermatic00/kubermatic-dl:latest
  18. imagePullPolicy: 常に
  19. ポート:
  20. - コンテナポート: 8080
  1. kubectl apply -f デプロイメント.yaml`

デプロイメントをパブリック インターネットに公開するには、コンテナーに対して外部からアクセス可能な IP アドレスを作成できるサービスが必要です。

  1. kubectl 公開デプロイメント kubermatic-dl-deployment --type=LoadBalancer --port 80 --target-port 5000`  

もうすぐ完了です。まずはデプロイしたサービスのステータスを確認し、IP 経由で画像認識 API をリクエストします。

  1. kubectl サービスを取得する

画像認識APIをリクエストするためのIPアドレスを取得する

最後に、外部 IP に基づいて次の 2 つの画像を使用して画像認識サービスをテストします。

[[421059]]

[[421060]]

APIのテスト

要約する

このチュートリアルでは、ディープラーニング モデルを作成し、Flask を使用して REST API として提供します。アプリケーションを Docker コンテナに配置する方法、このイメージを Docker Hub にアップロードする方法、Kubernetes を使用してサービスをデプロイする方法について説明します。いくつかの簡単なコマンドを実行するだけで、Kubermatic Kubernetes プラットフォームを使用してアプリケーションをデプロイし、他のユーザーがサービスを利用できるようにすることができます。

<<:  PyTorch のデータセット Torchvision と Torchtext

>>:  二度とアルゴリズムの罠に陥らないでください!背後にいる人物を見つけ出す

ブログ    
ブログ    

推薦する

AI 時代において、人工知能は企業のリスク監視をどのように強化するのでしょうか?

最近、P2Pプラットフォームが頻繁に崩壊していることから、インターネット金融プラットフォームの長期的...

AI言語モデルにおける幻覚バイアスのリスク

音声アシスタントからチャットボットまで、人工知能 (AI) はテクノロジーとのやり取りの方法に革命を...

AIは単細胞生物が脳なしで意図した方向に移動する仕組みを説明するのに役立つ

単純な生物はどのようにして特定の場所へ移動できるのか?ウィーン大学で開発された人工知能と物理モデルが...

...

95 年以降の DAMO アカデミーのインターン生がマイクロソフトに勝ち、最も難しい NLP タスクの世界記録を更新

アリババAIは、常識QA分野の権威あるデータセットであるCommonsenseQAで新たな世界記録を...

エンコーダー・デコーダーアーキテクチャを放棄し、エッジ検出に拡散モデルを使用する方が効果的です。国立国防科学技術大学はDiffusionEdgeを提案しました。

既存のディープ エッジ検出ネットワークは通常、マルチレベルの特徴をより適切に抽出するためのアップサン...

顔認識アルゴリズムは人間の認識能力を超えている

コンピューター科学者たちは、人間自身よりも顔を識別できる新しい顔認識アルゴリズムを開発した。誰もが、...

...

幼少期から始める:AIを学ぶのに最適な時期は中学生

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

ケーススタディ | 埋め込みに基づく特徴セキュアな計算

[[331789]]序文従来のデータの公開と共有の方法の多くは、生のデータをプレーンテキストで直接出...

新技術により大規模人工知能モデルの処理性能が効果的に向上

MIT と Nvidia の研究者は、高性能コンピューティング タスクで使用されるデータ構造であるス...

異常検出に機械学習を使用する際に尋ねるべき 7 つの質問

導入異常検出に関するいくつかの入門的な質問。質問することは学習するための最良の方法の一つです。しかし...

ロボットに25分で6つの動作を学習させるトレーニング、バークレーは効率的なロボット操作フレームワークを開発

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

2021年のAIの現状: 言語モデル、ヘルスケア

人工知能は、人間の活動と市場投資の2つの主要分野である健康と言語に拡大しています。 「State o...

高所から物が投げ出される悲劇が多発。AI監視システム「私があなたを守ります」

近年、高所から物が投げられたり落下したりして負傷する事故が多発しています。水のボトル、スイカの皮、缶...