AI の力: Docker による機械学習アプリケーションの導入とスケーラビリティの簡素化

AI の力: Docker による機械学習アプリケーションの導入とスケーラビリティの簡素化

翻訳者 |李睿

レビュー | Chonglou

近年、機械学習の応用が爆発的に増加しており、堅牢でスケーラブルかつ効率的な導入方法に対する需要が急速に高まっています。従来のアプローチでは、トレーニング環境とサービス環境の違いやスケールアップの難しさなどの要因により、機械学習モデルの操作に支援が必要になることがよくあります。

この記事では Docker を使用した手法を提案します Docker は、アプリケーションの展開、スケーリング、管理を自動化することでこれらの課題に対処するように設計されたオープンソース プラットフォームです。提案されたアプローチは、機械学習の種類とその環境を標準化された Docker コンテナ ユニットにカプセル化します。 Docker コンテナには、開発環境と本番環境間の一貫性、容易なスケーラビリティ、展開のシンプルさなど、多くの利点があります。

この記事では、Docker と機械学習モデルのデプロイメントにおけるその役割について詳しく説明します。また、Dockerfile の作成から Docker Swarm を使用したモデルのスケーリングまで、関連するコード スニペットを例として挙げながら、Docker を使用して機械学習モデルをデプロイする実践的な手順も説明します。さらに、継続的インテグレーション (CI)/継続的デリバリー (CD) パイプラインへの Docker の統合を紹介し、最後に Docker を使用した効率的な機械学習モデルの展開に関する結論とベスト プラクティスを導き出します。

Dockerとは何ですか?

プラットフォームとして、Docker は軽量でポータブルなコンテナー内でソフトウェア アプリケーションの展開、スケーリング、および操作を自動化します。 Docker の基盤は「コンテナ化」という概念を中心に展開されています。この仮想化アプローチにより、ソフトウェアとそのランタイム環境全体をソフトウェア開発用の標準化されたユニットにパッケージ化できます。

Docker コンテナは、アプリケーションの実行に必要なすべてのもの (ライブラリ、システム ツール、コード、ランタイムなど) をカプセル化し、さまざまなコンピューティング環境間で一貫した動作を保証します。これにより、アプリケーションを迅速かつ確実に構築、テスト、デプロイできるため、Docker はソフトウェア開発と運用 (DevOps) の重要なツールになります。

Docker は、機械学習アプリケーションに関していくつかの利点をもたらします。 Docker のコンテナ化機能により、機械学習モデルのトレーニング環境とサービス環境間の一貫性が確保され、環境の違いによる不一致が発生するリスクが軽減されます。 Docker はスケーリング プロセスも簡素化し、機械学習モデルの複数のインスタンスを複数のサーバーに簡単にデプロイできるようにします。これらの機能により、機械学習モデルの導入が大幅に簡素化され、関連する運用の複雑さが軽減される可能性があります。

機械学習アプリケーションを Docker 化する理由

機械学習アプリケーションのコンテキストでは、Docker は多くの利点を提供し、それぞれが運用効率とモデルのパフォーマンスに大きく貢献します。

まず、Docker コンテナによって提供される一貫した環境により、開発、テスト、および本番段階間の違いが最小限に抑えられます。この一貫性により、「自分のマシンでは動作する」という問題が解消され、動作環境の変化に特に敏感な機械学習モデルを展開するための最適な選択肢となります。

2 番目に、Docker はスケーラビリティの促進に優れています。機械学習アプリケーションでは、大量のデータや高いリクエストレートを処理するために、同じモデルの複数のインスタンスを実行する必要があることがよくあります。 Docker は、複数のコンテナ インスタンスを迅速かつ効率的にデプロイできるようにすることで水平スケーリングを可能にし、機械学習モデルのスケーリングに効果的なソリューションになります。

最後に、Docker コンテナは独立して実行されるため、システム ライブラリや構成ファイルなどの独自のランタイム環境を持ちます。この分離により、セキュリティの層が追加され、各機械学習モデルが制御された安全な環境で実行されるようになります。 Docker が提供する一貫性、スケーラビリティ、分離性により、機械学習アプリケーションを展開するための魅力的なプラットフォームになります。

機械学習用 Docker の設定

以下では、機械学習アプリケーションで Docker を使用するために必要な初期設定に焦点を当てます。 Docker のインストール プロセスは、オペレーティング システムによって若干異なります。 Linux ディストリビューションの場合、Docker は通常、コマンドライン インターフェイスを通じてインストールされますが、Windows および MacOS の場合、Docker Desktop バージョンが利用できます。いずれの場合も、Docker Web サイトに詳細でわかりやすいインストール手順が記載されています。開発者がアプリケーションやライブラリを共有できるクラウドベースのレジストリ サービスである Docker Hub から Docker イメージをプルすることで、インストールは成功しました。たとえば、次のコマンドを使用して、機械学習アプリケーションで使用するために最新の Python イメージを抽出できます。

 Shell docker pull python:3.8-slim-buster

その後、抽出したイメージから Docker コンテナを実行するには、Docker run コマンドを使用します。たとえば、対話型の Python シェルが必要な場合は、次のコマンドを使用できます。

 Shell docker run -it python:3.8-slim-buster /bin/bash

このコマンドは、対話型ターミナル (-it) を使用して Docker コンテナを起動し、Python コンテナにシェル (/bin/bash) を提供します。このプロセスに従うことで、Docker は機械学習モデルのデプロイを効果的に支援できます。

シンプルな機械学習モデル用の Dockerfile を作成する

Docker の操作のシンプルさの中心となるのは、Docker イメージを組み立てるために必要なすべてのコマンドを含むテキスト ドキュメントである Dockerfile です。ユーザーは、Docker コマンドラインから Dockerfile を実行することで、イメージを自動的に作成できます。

Dockerfile は、連続した行に配置された一連の命令とパラメータで構成されます。指示は、FROM(ベースイメージを指定)、RUN(コマンドを実行)、COPY(ホストからDockerイメージにファイルをコピー)、CMD(コンテナを実行するためのデフォルト値を提供)などのDockerコマンドです。

例として、Scikit-learn の線形回帰アルゴリズムを使用して構築された単純な機械学習モデルを見てみましょう。このようなアプリケーションの Dockerfile は次のようになります。

 Dockerfile # Use an official Python runtime as a parent image FROM python:3.8-slim-buster # Set the working directory in the container to /app WORKDIR /app # Copy the current directory contents into the container at /app ADD . /app # Install any needed packages specified in requirements.txt RUN pip install --no-cache-dir -r requirements.txt # Make port 80 available to the world outside this container EXPOSE 80 # Run app.py when the container launches CMD ["python", "app.py"]

この Dockerfile に記載されている requirements.txt ファイルには、Scikit-learn、Pandas、Flask など、機械学習モデルの Python 依存関係がすべてリストされています。一方、app.py スクリプトには、トレーニング済みのモデルを読み込んでWebアプリケーションとして使用するためのコードが含まれています。

Dockerfile で構成と依存関係を定義することで、機械学習モデルと実行に必要なランタイム環境を含むイメージを作成し、一貫したデプロイメントを容易にすることができます。

Dockerイメージの構築とテスト

Dockerfile を正常に作成したら、次の段階では Docker イメージを構築します。 Docker ビルド コマンドを実行して Docker イメージをビルドし、Docker ファイルを含むディレクトリを実行します。 -t フラグは、指定された名前でイメージにタグを付けます。このようなコマンドの例は次のとおりです。

 Shell docker build -t ml_model_image:1.0

ここで、ml_model_image:1.0 はイメージに割り当てられた名前とバージョンであり、「.」は Dockerfile が現在のディレクトリにあることを示します。

Docker イメージをビルドした後、次のタスクではそのイメージから Docker コンテナを起動し、機械学習モデルの機能をテストできるようにします。 Dockerの run コマンドは、このタスクを実行するのに役立ちます。

 Shell docker run -p 4000:80 ml_model_image:1.0

このコマンドでは、-p フラグによって、ホスト マシンのポート 4000 がコンテナーのポート 80 (Dockerfile で定義) にマッピングされます。したがって、機械学習モデルにはホストのポート 4000 を介してアクセスできます。

モデルをテストするには、Docker コンテナ内の Flask アプリケーションによって公開されるエンドポイントにリクエストを送信する必要があります。たとえば、モデルが POST リクエストを介して送信されたデータに基づいて予測を提供する場合、curl コマンドを使用するとこれを容易に実行できます。

 Shell curl -d '{"data":[1, 2, 3, 4]}' -H 'Content-Type: application/json' http://localhost:4000/predict

このアプローチにより、Dockerfile の作成から Docker コンテナでの機械学習モデルのテストまでのシームレスなフローが保証されます。

Dockerを使用して機械学習モデルをデプロイする

機械学習モデルの展開では、多くの場合、モデルをインターネット経由でアクセス可能なサービスとして公開する必要があります。これを実現する標準的な方法は、 Flask などのWebフレームワークを使用してモデルを REST API として提供することです。

機械学習モデルをカプセル化する Flask アプリケーションの例を考えてみましょう。次の Python スクリプトは、モデルを REST API エンドポイントとして公開する方法を示しています。

 Python from flask import Flask, request from sklearn.externals import joblib app = Flask(__name__) model = joblib.load('model.pkl') @app.route('/predict', methods=['POST']) def predict():  data = request.get_json(force=True)  prediction = model.predict([data['features']])  return {'prediction': prediction.tolist()} if __name__ == '__main__': app.run(host='0.0.0.0', port=80)

この例では、Flask アプリケーションは事前トレーニング済みの Scikit-learn モデル (model.pkl として保存) を読み込み、API エンドポイント /predict を定義します。このエンドポイントに、特徴の配列を含む JSON オブジェクトとともに POST リクエストが送信されると、モデルは予測を行い、それを応答として返します。

機械学習モデルが Docker コンテナにデプロイされ実行されると、HTTP リクエストを使用して通信できるようになります。たとえば、curl コマンドを使用すると、特徴配列を含む POST リクエストをモデルに送信することができ、モデルは予測で応答します。

 Shell curl -d '{"features":[1, 2, 3, 4]}' -H 'Content-Type: application/json' http://localhost:4000/predict

このライブ例では、Docker を使用して機械学習モデルをスケーラブルでアクセス可能なサービスとしてデプロイする方法を示します。

Docker Swarm Extender を使用したモデルの学習

機械学習アプリケーションの範囲とユーザーベースが拡大するにつれて、拡張性がますます重要になります。 Docker Swarm は、Docker 用のネイティブ クラスタリングおよびオーケストレーション ソリューションを提供し、複数の Docker ホストを単一の仮想ホストにすることができます。したがって、Docker Swarm を使用すると、複数のマシンに展開された機械学習モデルを管理および拡張できます。

Docker Swarm の起動は簡単なプロセスであり、「Docker Swarm init」コマンドを実行することから始まります。このコマンドは、現在のマシンを Docker Swarm マネージャーとして初期化します。

 Shell docker swarm init --advertise-addr $(hostname -i)

このコマンドでは、--advertise-addr フラグは、ワーカー ノードが Swarm マネージャーに到達できるアドレスを指定します。 hostname -i コマンドは、現在のマシンの IP アドレスを取得します。

Swarm を初期化した後、Docker サービスを使用して機械学習モデルを Swarm 全体にデプロイできます。サービスは docker service create コマンドを使用して作成されます。ここで、 -replicasなどのフラグによって、実行するコンテナ インスタンスの数が決まります。

 Shell docker service create --replicas 3 -p 4000:80 --name ml_service ml_model_image:1.0

このコマンドでは、--replica 3 はコンテナの 3 つのインスタンスが Swarm 内で実行されていることを確認し、-p 4000:80 は Swarm のポート 4000 をコンテナのポート 80 にマッピングし、--name ml_service はサービスに名前を割り当てます。

したがって、Docker Swarm を実装することで、デプロイされた機械学習モデルを複数の Docker ホストにわたって効率的にスケーリングできるため、可用性とパフォーマンスが向上します。

Docker を使用した継続的インテグレーション (CI)/継続的デリバリー (CD)

継続的インテグレーション (CI)/継続的デリバリー (CD) は、自動テストとデプロイメントを容易にし、ソフトウェア リリース サイクルの一貫性と速度を確保する、現代のソフトウェア開発の重要な側面です。 Docker の移植性は、継続的インテグレーション (CI)/継続的デリバリー (CD) パイプラインに適合します。これは、Docker イメージをパイプラインのさまざまな段階で構築、テスト、およびデプロイできるためです。

Jenkins パイプラインを使用して、Docker を継続的インテグレーション (CI) / 継続的デリバリー (CD) パイプラインに統合する例を示します。パイプラインは Jenkinsfile で定義され、次のようになります。

 Groovy pipeline { agent any stages { stage('Build') { steps { script { sh 'docker build -t ml_model_image:1.0 .' } } } stage('Test') { steps { script { sh 'docker run -p 4000:80 ml_model_image:1.0' sh 'curl -d '{"features":[1, 2, 3, 4]}' -H 'Content-Type: application/json' http://localhost:4000/predict' } } } stage('Deploy') { steps { script { sh 'docker service create --replicas 3 -p 4000:80 --name ml_service ml_model_image:1.0' } } } } }

この Jenkinsfile では、ビルド ステージで Docker イメージをビルドし、テスト ステージで Docker コンテナを実行して機械学習モデルにリクエストを送信し、その機能を検証し、デプロイ ステージで Docker サービスを作成し、Docker Swarm 全体にスケーリングします。

したがって、Docker の助けを借りて、継続的インテグレーション (CI)/継続的デリバリー (CD) パイプラインは信頼性が高く効率的な機械学習モデルの展開を実現できます。

結論とベストプラクティス

最後に、この記事では、機械学習モデルの展開を簡素化する Docker の有効性について説明しました。 Docker は、モデルとその依存関係を、分離された一貫性のある軽量な環境にカプセル化できるため、機械学習の実践者にとって強力なツールとなります。 Docker は複数のマシンにわたって機械学習モデルを拡張できるため、Docker Swarm と継続的インテグレーション (CI)/継続的デリバリー (CD) パイプラインとのシームレスな統合を通じて、その価値がさらに高まります。

ただし、Docker を最大限に活用するには、次のベスト プラクティスが推奨されます。

  • Docker イメージのサイズを最小限に抑える: イメージが小さいほど、使用するディスク容量が少なくなり、ビルド時間が短縮され、展開が高速化されます。これは、より小さなベースイメージを使用し、不要な依存関係を削除し、Docker のレイヤー キャッシュを効果的に利用することで実現できます。
  • .dokerignore を使用する: Git の .gitignore と同様に、.dokerignore を使用すると、不要なファイルが Docker イメージに含まれないようにして、イメージのサイズを縮小できます。
  • Dockerfile が再現可能であることを確認してください。特定のバージョンのベース イメージと依存関係を使用すると、将来 Docker イメージをビルドするときに誤って変更されることを防ぐことができます。

これらのガイドラインを遵守し、Docker のパワーを活用することで、機械学習モデルの導入の複雑さを乗り越えることが容易になり、開発から本番環境への移行が加速されます。

参考文献

1. Docker 公式ドキュメント。Docker, Inc.

2.機械学習のための Docker。O'Reilly Media, Inc.

3. Docker を使用した継続的インテグレーション。Jenkins ドキュメント。

4. Scikit-learn: Python での機械学習。Scikit-learn 開発者。

5. Kalade, S.、Crockett, LH、Stewart, R. (2018)。デジタル BPSK および QPSK 復調のためのシーケンス間学習の使用。

6.ブログ — ページ 3 — Liran Tal.

7. Dockerfile の紹介 パート II | Hakim 著 | Medium。

8. Spring Boot 2.2 と Java 13 CRUD REST API チュートリアル: JPA Hibernate と MySQL の使用 | Techiediaries

原題: AI Prowess: Docker を活用した機械学習アプリケーションの効率的な展開とスケーラビリティ、著者: Rudrendu Kumar PaulBidyut Sarkar


<<:  UniPAD: ユニバーサル自動運転事前トレーニングモデル!あらゆる種類の知覚タスクをサポートできます

>>:  Huaweiの推奨システムにおけるマルチタスクとマルチシナリオの応用

ブログ    
ブログ    
ブログ    

推薦する

医学物理学におけるAIの応用に関する簡単な分析

近年、バイオメディカルにおける人工知能 (AI) と機械学習 (ML) アルゴリズムの応用は拡大し続...

デザイナーのための人工知能ガイド: 基本概念

Google が開発した AlphaGo が囲碁の名人に勝利したとき、シンシナティ大学の Psibe...

チューリングテストは死んだ! ChatGPTは人間テストに合格してもカウントされない、スーパーAIが新参者「ロジックパズル」を評価

世界で最も強力な AI - ChatGPT は、さまざまなテストに合格し、真偽を区別するのが難しい回...

人工知能の今後の発展はどうなるのでしょうか?

汎用人工知能の任務は、ユビキタスな視覚と聴覚を制御することです。「認識」を例にとると、汎用人工知能の...

速報です!ヒントンがロボットスタートアップに参入、同社は9000万ドルの新規投資を受ける

チューリング賞受賞者であり、ディープラーニングの父であるジェフリー・ヒントンの次の旅が決まりました。...

機械学習への8つのステップ

先月、Kaggle の共同創設者兼 CTO である Ben Hamner 氏が、Kaggle、機械学...

...

プラスチックチップを1個1セント未満で製造

あなたの周りの物体が知性に満ちていると想像してください。包帯、バナナの皮、ボトルなどはすべて知性を持...

サーマルイメージングによって施設と従業員の安全性がどのように向上するのでしょうか?

監視範囲の死角、互換性のないビデオおよびアクセス制御システム、適切な境界保護の欠如...これらは、施...

機械翻訳から読心術まで、AIは人類のバベルの塔を再建できるのか?

[[183536]]聖書の旧約聖書創世記には、人類が団結して天国に通じるバベルの塔を建てたという話...

ジェネレーティブ AI が画像検索をどのように再定義するか

翻訳者 |李睿レビュー | Chonglou 生成AI は、ユニークなテキスト、サウンド、画像を作成...

人工知能をより人間らしくする 高齢者向けにAIをもっとデジタル化すべき

人工知能は新たなインフラの一つとして、人々の社会生活のあらゆる分野に統合され、あらゆるものがつながり...

エンジニアはETLを書くべきか? - 効率的なアルゴリズム/データサイエンス部門の構築方法を教えます

[[174647]]序文多くのインターネット企業のアルゴリズム関連部門(検索、レコメンデーション、広...

2021年に注目すべき5つのAI関連の仕事スキル

困難な一年であったにもかかわらず、世界中の多くの企業が、ビジネスを最大化するために人工知能(AI)を...

2020 年のグラフ機械学習の新しいトレンド

導入2020 年はまだ始まったばかりですが、最新の研究論文ではグラフ機械学習 (GML) へのトレン...