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新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

...

機械学習における再現率、精度、正確さの指標は何ですか?

以前の記事では、Naive Bayes、KNN、KMeans、EM、線形回帰、ロジスティック回帰など...

...

GPT-4 はチューリングテストに合格しませんでした。 60年前、古いAIはChatGPTに勝利しましたが、人間の勝率はわずか63%でした。

長い間、「チューリングテスト」は、コンピュータが「知性」を持っているかどうかを判断するための中心的な...

Diffie-Hellman 鍵交換は、一般的な暗号化アルゴリズムです。

公開されたばかりの Logjam 脆弱性 (FREAK 脆弱性のバリエーション) に関する情報はブラ...

誰かが匿名ソフトウェアで私の学校を爆破したいと言っていたので、私はすぐに先生と警察に通報しました。xdm、私は正しいことをしたのでしょうか?

ビッグデータダイジェスト制作著者: カレブ空には太陽が輝き、花々は私に微笑みかけ、鳥たちは「おはよう...

Python で分類と回帰を組み合わせたニューラル ネットワーク モデル

[[406559]] Python 中国語コミュニティ (ID: python-china)一部の予...

ロボットシェフはトマト入りスクランブルエッグ9品を試食した後、味覚マップを描いた。

5月7日のZhidongxiによると、英国ケンブリッジ大学の研究者らは最近、シェフの調理過程を模倣...

[NCTS サミット レビュー] Ele.me Qiu Huafeng: バグの検出における人工知能の応用

2019年10月26日、Testinが主催する第2回NCTS中国クラウドテスト業界サミットが北京で開...

データマイニングの分野でトップ 10 の古典的なアルゴリズムの 1 つ - K-Means アルゴリズム (コード付きで非常に詳細)

k-means アルゴリズムは比較的単純です。 k-means アルゴリズムでは、クラスターはクラ...

GoはPythonよりはるかに進んでおり、機械学習の人材は非常に不足しています。世界中の16,655人のプログラマーが真実を語ります

Go は開発者の間でますます人気が高まっています。数年前、Didiのエンジニアから、DidiではGo...

ベイジアンネットワークを使用して病院の患者数を予測する

翻訳者|朱 仙中レビュー | Chonglou複雑さを乗り越える: 医療における患者数の予測医療にお...

...

ハーバード大学の研究者がAIを活用して世界中の密猟を阻止

ハーバード大学ジョン・A・ポールソン工学応用科学大学院のリリー・シューさんは、幼いころから環境と保護...