DockerとFlaskをベースにしたディープラーニングモデルのデプロイメント!

DockerとFlaskをベースにしたディープラーニングモデルのデプロイメント!

モデルの展開は、ディープラーニング アルゴリズムの実装において常に重要な部分です。ディープラーニング実装の需要がますます高まる中、一定のエンジニアリング展開能力を持つことは、アルゴリズムエンジニアに不可欠な能力の 1 つです。

ディープラーニング モデルの重要な前提条件は、環境の設定に多くの時間がかかることです。最初に仮想環境を構築し、ディープラーニング フレームワークといくつかのサードパーティ ライブラリを設定する必要がある場合があります。即時性と移植性は比較的低く、全体的な使いやすさはそれほど高くありません。
では、ワンクリックで展開する方法はあるのでしょうか?ディープラーニング モデルを 10 分で新しいマシンにデプロイできますか?答えはイエスです。この記事では、古典的なコンテナ化ツールである Docker に基づく REST API モデル デプロイメント方法をアップグレードし、モデル デプロイメントの可用性を高めます。
Docker入門
まず、Dockerについて簡単に説明したいと思います。 Docker は、Go 言語に基づいて開発されたオープンソースのコンテナ化テクノロジーです。環境によってコードのパフォーマンスが異なることを防ぐために、Docker はコードとそのすべての依存関係をコンテナーにパッケージ化する環境分離テクノロジを提供します。これにより、一度ビルドすればどこでも実行できます。 Docker のより詳しい紹介については、読者が情報を検索して独自に学習することができますが、それはこの記事の焦点では​​ありません。

実際、下の図に示すように、Docker には習得すべき重要な概念と操作がいくつかあります。

dockerfile は、makefile スタイルと同様に、イメージ (ミラー) を生成するために使用されるファイルです。これは自分で記述する必要があります。dockerfile を記述した後、docker build コマンドによってイメージが生成されます。このイメージは実行可能プログラムとして理解できます。最後に、実行可能プログラム イメージは docker run によって実行されます。実行されるイメージがコンテナーです。

Ubuntu Docker のインストールについては、 https://docs.docker.com/engine/install/ubuntu/を参照してください。
Falsk に基づく REST API 実装

本文に入り、Docker と Flask をベースにしたディープラーニング モデルをすばやくデプロイする方法を見てみましょう。このモデルは、MobileNetV2 をベースにした画像分類器です。 REST API を起動するために使用される app.py ファイル コードは次のように記述されます。

 インポートOS
インポートシステム
#フラスコ
Flask からFlaskredirecturl_forrequestrender_templateResponsejsonifyredirectをインポートします
werkzeug.utils からsecure_filename をインポートします
gevent.pywsgi からWSGIServer をインポートします
TensorFlow と tf.keras
テンソルフローtf としてインポートする
テンソルフローからkeras をインポート
tensorflow.keras.applications.imagenet_utils からpreprocess_input decode_predictions インポートます
tensorflow.keras.models からload_model インポートする
tensorflow.keras.preprocessing から画像インポート
# いくつかのユーティリティ
numpyをnp としてインポートする
util からbase64_to_pil をインポートします
# Flaskアプリを宣言する
アプリ= Flask ( __name__ )
# Kerasの事前学習済みモデルを使用できます
# https://keras.io/applications/ を確認してください
# または https://www.tensorflow.org/api_docs/python/tf/keras/applications
tensorflow.keras.applications.mobilenet_v2 からMobileNetV2 インポートます
モデル= MobileNetV2 ( 重み= 'imagenet' )
print ( 'モデルがロードされました。http://127.0.0.1:5000/ を確認してください' )
# Keras model.save() でモデルを保存しました
MODEL_PATH = 'models/your_model.h5'
# 独自のトレーニング済みモデルをロードする
# モデル = load_model(MODEL_PATH)
# model._make_predict_function() # 必須
# print('モデルが読み込まれました。提供を開始します...')
モデル予測を定義します( 画像モデル):
img = img . resize (( 224 , 224 ))
# 画像の前処理
x = 画像.img_to_array ( 画像)
# x = np.true_divide(x, 255)
x = np . expand_dims ( x= 0 )
# 訓練したモデルが入力をどのように扱うかに注意してください
# そうしないと、正しい予測ができなくなります。
x = preprocess_input ( xモード= 'tf' )
preds = モデル. 予測( x )
リターンプレッド


@ app .route ( '/' , methods = [ 'GET' ] )
定義インデックス():
# メインページ
render_template ( 'index.html' ) を返す
@ app .route ( '/predict'methods = [ 'GET''POST' ] )
デフ予測():
リクエスト. メソッド== 'POST' の場合:
# 投稿リクエストから画像を取得する
img = base64_to_pil ( リクエスト.json )
# 画像を./uploadsに保存する
# img.save("./uploads/image.png")
# 予測する
preds = model_predict ( 画像モデル)
# 結果を人間向けに処理する
pred_proba = "{:.3f}" . format ( np . amax ( preds )) # 最大確率
pred_class = decode_predictions ( preds , top = 1 ) # ImageNet デコード
result = str ( pred_class [ 0 ][ 0 ][ 1 ]) # 文字列に変換
結果= 結果. replace ( '_' , ' ' ). capitalize ()
# 結果をシリアル化し、追加のフィールドを追加できます
jsonify を返します( 結果= result確率= pred_proba )
なしを返す

__name__ == '__main__' の場合:
# app.run(ポート=5002、スレッド=False)
# geventでアプリを提供する
http_server = WSGIServer (( '0.0.0.0' , 5000 ), アプリ)
http_server.serve_forever ( )は、

ここでは主に、Flask Web フレームワークに基づく REST API サービスを実装し、HTML テンプレートを追加し、指定された IP アドレスでサービスを実行します。

指定された Web ページで効果を実現するには、HTML テンプレートを適用するだけでなく、CSS スタイルと JS コードもいくつか記述する必要がありますが、ここでは省略します。完全なコードを表示するには、記事の最後にあるリンクを参照してください。

Dockerfile の作成
次に、Docker ワンクリック デプロイメントを実装するための出発点であり鍵となる Dockerfile を作成する必要があります。簡単に言えば、Python 環境、プロジェクトに必要なサードパーティ ライブラリ、スクリプト実行などを一連の dockerfile 命令でつなぎ合わせて、ワンクリック操作を実現することです。したがって、この例では、dockfile を次のように記述できます。

 # Python環境を指定する
Python から: 3.6 - スリム- ストレッチ
#Python依存ライブラリ要件ファイルを現在のディレクトリにコピーします
要件の追加.txt /
# 依存ライブラリをインストールする
pip install -r / requirements.txt を実行します
# すべてのファイルをアプリディレクトリにコピーします
./app ​を追加します
# 作業ディレクトリとしてアプリを指定する
WORKDIR / アプリ
# ポートを宣言する
エクスポーズ5000
#Dockerコンテナを起動する
コマンド[ "python""app.py" ]

requirements.txt に含まれるサードパーティの依存ライブラリは次のとおりです。

 フラスコ== 1.1.1
gevent == 1.4.0
h5py == 2.10.0
numpy == 1.17.0
== 6.1.0
テンソルフロー== 2.3.1
武器== 0.16.0

Docker ベースのモデル展開
Dockerfile ファイルを作成したら、Docker を使用してディープラーニング分類器をオンラインでデプロイできます。 docker build コマンドは新しいプロジェクト イメージを作成します。

 keras_flask_app 実行します。

Dockerfile の 7 つの指示に従って、Docker ビルドもイメージを生成する手順を実行します。

イメージが生成されたら、それを実行してディープラーニング プロジェクト サービスを開始できます。

 docker run -it --rm -p 5000 :5000 keras_flask_app

サービスが起動したら、ディープラーニング サービスを使用するために http://localhost:5000/ を開きます。


テスト用にローカルマシンからイメージをアップロードします。

このように、Flask ベースの REST API サービスと Docker ベースのワンクリックデプロイ機能を組み合わせることで、短期間でオンラインディープラーニングサービス一式を迅速に構築できます。完全なプロジェクトコードは、https://github.com/mtobeiyf/keras-flask-deploy-webapp でご覧いただけます。

<<:  世界の自動運転「M&A」を4大勢力が攻勢

>>:  人工知能について - AIに関するあまり知られていない事実

推薦する

AIのデジタルシールド:インフラのサイバーセキュリティを向上させる戦略

技術革新の時代において、人工知能 (AI) は変革の力として際立っています。パーソナライズされた推奨...

MAEよりも強力なFAIRの新しいメソッドMaskFeatはHOGを使用して複数のSOTAを更新します

マスク・アンド・予測法は、コンピュータービジョンの分野における新しい流派となるかもしれません。自己教...

人間の顔の価値はどれくらいでしょうか?顔認識グレー産業チェーン

[[335658]]現在、数十のスタートアップ企業や大手テクノロジー企業が、ホテル、小売店、さらには...

「ロボット交通警察」が登場!最先端技術が輸送業界に力を与える

現在、科学技術の継続的な進歩により、ロボットは徐々にさまざまな産業の変革のための重要なツールとなり、...

「中国版ダヴィンチ」ロボットが人気!ブドウの皮を縫うだけでなく、このような創造的な作業もあります

ブドウを縫うことができる DIY ロボットアームを作りますか? [[428703]]最近、有名な「ハ...

いくつかの負荷分散アルゴリズムの原理とコード実装

ポーリング アルゴリズム: 受信したリクエストをバックエンド サーバーに順番に転送します。現在のサー...

マシンビジョンにはどのようなハードウェアが含まれていますか?

画像およびマシンビジョン技術を使用した産業オートメーションとインテリジェンスの需要があらゆる分野で広...

GenAIは主流になるが、CIOの行動は遅い

過去2週間、OpenAIの創設者サム・アルトマン氏は取締役会により解雇され、関連メンバーはマイクロソ...

顔認識はどのようにして国民の個人情報を侵害するのでしょうか?犯罪者がアリペイを騙し取るために3D顔モデルを作成

[[360029]]記者 | 趙孟近年、顔認識技術の普及に伴い、国民の個人情報のセキュリティに関する...

2022年に注目すべき5つのAI活用法

AI インフラストラクチャの継続的な革新と開発により、今日の仕事のやり方は変化しました。人工知能は...

人工知能は、マルチドメイン畳み込みニューラルネットワークを通じて、JPEG二重圧縮画像内の偽造領域を特定します。

人工知能がマルチドメイン畳み込みニューラル ネットワークを介して JPEG 二重圧縮画像の偽造領域を...

大型モデル全般において中国と米国の差を縮めるにはどうすればいいでしょうか? 全国人民代表大会でその答えが分かった

「一般的な大きなモデルは国家の運命をめぐる闘争に関連している」... 「人工知能+」が政府活動報告に...

「深く」「鮮明に」見る - 画像の超高精細化におけるディープラーニングの応用

[[426283]]毎日肖像画を模写する練習を続けた結果、この芸術家はいくつかの重要な特徴だけを描い...

人工知能を活用して室内装飾デザインを最適化する方法

インテリアデザインや装飾に AI を応用することで、エンジニアやインテリアデザイナーは、機械学習によ...