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に関するあまり知られていない事実

推薦する

動的プログラミングアルゴリズムのルーチンをマスターするにはどうすればいいですか?

[[358211]] DP と呼ばれる動的プログラミングは、非常に洗練された複雑なアルゴリズムとい...

...

人工知能を人間化して、その信頼性を確立するにはどうすればよいでしょうか?

人工知能 (AI) はブラックボックスの実践と見なされることが多く、テクノロジー自体の仕組みではなく...

CCTV、春節に初めてバーチャル司会者サ・ベイニン氏を迎える

AIブロックチェーン企業の技術が中国の重要な国家夜会で正式に使用された。 2019年のオンライン春節...

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

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

エラー率が44%減少しました!ニューヨーク大学の最新の「顔生成」は、年齢を自由に変えることが可能で、10代から高齢者まであらゆる人をカバーできる。

現在の「顔認識システム」は老化防止能力が非常に弱く、人の顔が老化すると認識性能が大幅に低下し、一定期...

中国初の真のAI入力方式が発表され、未来の入力方式を革新する

入力がキーボードに別れを告げ、音声、表現、動作が入力方法になると、どのような魔法のような体験になるの...

Java 上級: 5 つの負荷分散アルゴリズムの実装原理を深く理解する

序文負荷分散とは何ですか?複数のサーバーを対称的に構成したサーバーセットを指します。各サーバーは同等...

ガートナー、中国企業向け人工知能トレンド ウェーブ 3.0 を発表

2023 年 6 月 13 日 – 先日開催された 2023 年 Greater China Exe...

人工知能(AI)がサプライチェーンに導入されると

サプライチェーンを理解する簡単に言えば、サプライ チェーンには、製品またはサービスをエンド ユーザー...

トレンドにおける危険とチャンス: 生成 AI の黄金期をどう捉えるか?

ChatGPTは今年9月末に音声チャットと画像認識機能を追加しました。テキスト駆動型と比較して、C...

...

UAI Trainプラットフォームに基づく分散トレーニング

序文大規模なデータセットでトレーニングされた最新のニューラル ネットワーク アーキテクチャは、画像認...

メーデー休暇中の安全確保のため5G警察ロボットが配備される

[[397258]] 2021年5月1日、「労働節連休」初日、浙江省舟山市公安局普陀区支局東港派出所...