ヘルプKaggleにTensorFlowグレートバリアリーフを保護チャレンジに参加

Dockerで提供するTensorFlow

サービングTensorFlowの使用を開始する最も簡単な方法の一つは、であるドッカー

# Download the TensorFlow Serving Docker image and repo
docker pull tensorflow/serving
git clone https://github.com/tensorflow/serving # Location of demo models TESTDATA="$(pwd)/serving/tensorflow_serving/servables/tensorflow/testdata" # Start TensorFlow Serving container and open the REST API port docker run -t --rm -p 8501:8501 \ -v "$TESTDATA/saved_model_half_plus_two_cpu:/models/half_plus_two" \ -e MODEL_NAME=half_plus_two \ tensorflow/serving & # Query the model using the predict API curl -d '{"instances": [1.0, 2.0, 5.0]}' \ -X POST http://localhost:8501/v1/models/half_plus_two:predict
# Returns => { "predictions": [2.5, 3.0, 4.5] }

追加のサービス提供のエンドポイントについては、クライアントのREST APIを

Dockerをインストールする

一般的なインストール手順は、ドッカーサイト上で、私たちはここにいくつかのクイックリンクを与えます:

Dockerでのサービス

サービングイメージをプルする

Dockerをインストールしたら、次のコマンドを実行して、最新のTensorFlowServingドッカーイメージをプルできます。

docker pull tensorflow/serving

これにより、TensorFlowServingがインストールされた最小限のDockerイメージがプルダウンされます。

ドッカーハブを参照してくださいtensorflow /サービス提供レポあなたが引くことができ、画像の他のバージョンのために。

サービングイメージの実行

サービングイメージ(CPUとGPUの両方)には、次のプロパティがあります。

  • gRPC用に公開されたポート8500
  • RESTAPI用に公開されたポート8501
  • オプションの環境変数のMODEL_NAME (デフォルトmodel
  • オプションの環境変数MODEL_BASE_PATH (デフォルトは/models

サービングイメージがModelServerを実行すると、次のように実行されます。

tensorflow_model_server --port=8500 --rest_api_port=8501 \
  --model_name=${MODEL_NAME} --model_base_path=${MODEL_BASE_PATH}/${MODEL_NAME}

Dockerでサービスを提供するには、次のものが必要です。

  • 提供するホストの開いているポート
  • 提供するSavedModel
  • クライアントが参照するモデルの名前

あなたがやることはされドッカーを実行し、コンテナを公開し、あなたのホストのポートへのコンテナのポートを、そしてコンテナがモデルを期待するところにSavedModelへのホストのパスを取り付けます。

例を見てみましょう:

docker run -p 8501:8501 \
  --mount type=bind,source=/path/to/my_model/,target=/models/my_model \
  -e MODEL_NAME=my_model -t tensorflow/serving

この場合、当社は、ドッカーコンテナを始めました私たちのホストのポート8501へのREST APIポート8501を発表し、我々はという名前のモデル取らmy_model 、デフォルトのモデルベース・パス(にそれをバインド${MODEL_BASE_PATH}/${MODEL_NAME} = /models/my_model )。最後に、私たちは、環境変数の中に埋めてきたMODEL_NAMEmy_model 、左MODEL_BASE_PATHデフォルト値に。

これはコンテナで実行されます:

tensorflow_model_server --port=8500 --rest_api_port=8501 \
  --model_name=my_model --model_base_path=/models/my_model

我々はgRPCポートを公開したい場合は、我々は、使用します-p 8500:8500 。 gRPCポートとRESTAPIポートの両方を同時に開くことも、どちらか一方のみを開くことを選択することもできます。

追加の引数を渡す

tensorflow_model_serverあなたが提供するドッキングウィンドウコンテナに渡すことができると、多くの追加の引数をサポートしています。たとえば、モデル名を指定する代わりにモデル構成ファイルを渡したい場合は、次のようにすることができます。

docker run -p 8500:8500 -p 8501:8501 \
  --mount type=bind,source=/path/to/my_model/,target=/models/my_model \
  --mount type=bind,source=/path/to/my/models.config,target=/models/models.config \
  -t tensorflow/serving --model_config_file=/models/models.config

このアプローチは、他のコマンドライン引数のいずれかのために働くtensorflow_model_serverサポート。

独自のサービングイメージを作成する

モデルがコンテナに組み込まれているサービングイメージが必要な場合は、独自のイメージを作成できます。

まず、サービングイメージをデーモンとして実行します。

docker run -d --name serving_base tensorflow/serving

次に、SavedModelをコンテナのモデルフォルダにコピーします。

docker cp models/<my model> serving_base:/models/<my model>

最後に、変更することによって、あなたのモデルを提供していますコンテナコミットMODEL_NAME `モデルの名前を一致させます':

docker commit --change "ENV MODEL_NAME <my model>" serving_base <my container>

あなたは今停止することができserving_base

docker kill serving_base

これは呼ばれるドッカーイメージであなたを残して<my container>デプロイすることができますし、起動時にサービス提供のためにあなたのモデルをロードすること。

サービングの例

SavedModelをロードし、RESTAPIを使用して呼び出す完全な例を実行してみましょう。最初にサービングイメージをプルします。

docker pull tensorflow/serving

これにより、ModelServerがインストールされた最新のTensorFlowサービングイメージがプルされます。

次に、我々はと呼ばれるおもちゃのモデルに使用するHalf Plus Two生成し、 0.5 * x + 2の値についてx 、我々は予測を提供します。

このモデルを取得するには、最初にTensorFlowServingリポジトリのクローンを作成します。

mkdir -p /tmp/tfserving
cd /tmp/tfserving
git clone https://github.com/tensorflow/serving

次に、TensorFlow Servingコンテナーを実行して、このモデルをポイントし、REST APIポート(8501)を開きます。

docker run -p 8501:8501 \
  --mount type=bind,\
source=/tmp/tfserving/serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_cpu,\
target=/models/half_plus_two \
  -e MODEL_NAME=half_plus_two -t tensorflow/serving &

これにより、Dockerコンテナーが実行され、TensorFlowサービングモデルサーバーが起動され、REST APIポート8501がバインドされ、目的のモデルがホストからコンテナー内でモデルが期待される場所にマッピングされます。また、モデルの名前を環境変数として渡します。これは、モデルをクエリするときに重要になります。

予測APIを使用してモデルをクエリするには、次のコマンドを実行できます

curl -d '{"instances": [1.0, 2.0, 5.0]}' \
  -X POST http://localhost:8501/v1/models/half_plus_two:predict

これにより、一連の値が返されます。

{ "predictions": [2.5, 3.0, 4.5] }

RESTfulなAPIを使用しての詳細な情報を見つけることができるここに

GPUを使用してDockerでサービスを提供

nvidia-dockerをインストールします

加えて、GPUに提供する前にドッカーをインストールし、次のものが必要です。

GPUサービングイメージの実行

GPUサービングイメージの実行は、CPUイメージの実行と同じです。詳細については、サービス提供イメージを実行しています

GPUサービングの例

GPUにバインドされたopsを使用してモデルをロードし、RESTAPIを使用してモデルを呼び出す完全な例を実行してみましょう。

まず、インストールnvidia-docker 。次に、以下を実行して、最新のTensorFlow ServingGPUドッカーイメージをプルできます。

docker pull tensorflow/serving:latest-gpu

これにより、インストールされているGPUで実行するために構築されたModelServerを使用して最小限のDockerイメージがプルダウンされます。

次に、我々はと呼ばれるおもちゃのモデルに使用するHalf Plus Two生成し、 0.5 * x + 2の値についてx 、我々は予測を提供します。このモデルには、GPUデバイスにバインドされたopsがあり、CPUでは実行されません。

このモデルを取得するには、最初にTensorFlowServingリポジトリのクローンを作成します。

mkdir -p /tmp/tfserving
cd /tmp/tfserving
git clone https://github.com/tensorflow/serving

次に、TensorFlow Servingコンテナーを実行して、このモデルをポイントし、REST APIポート(8501)を開きます。

docker run --gpus all -p 8501:8501 \
--mount type=bind,\
source=/tmp/tfserving/serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_gpu,\
target=/models/half_plus_two \
  -e MODEL_NAME=half_plus_two -t tensorflow/serving:latest-gpu &

これにより、Dockerコンテナーが実行され、TensorFlowサービングモデルサーバーが起動され、REST APIポート8501がバインドされ、目的のモデルがホストからコンテナー内でモデルが期待される場所にマッピングされます。また、モデルの名前を環境変数として渡します。これは、モデルをクエリするときに重要になります。

ヒント:モデルをクエリする前に、サーバーがリクエストを受信する準備ができていることを示す次のようなメッセージが表示されるまで待ってください。

2018-07-27 00:07:20.773693: I tensorflow_serving/model_servers/main.cc:333]
Exporting HTTP/REST API at:localhost:8501 ...

予測APIを使用してモデルをクエリするには、次のコマンドを実行できます

curl -d '{"instances": [1.0, 2.0, 5.0]}' \
  -X POST http://localhost:8501/v1/models/half_plus_two:predict

これにより、一連の値が返されます。

{ "predictions": [2.5, 3.0, 4.5] }

ヒント:GPUがない、またはTensorFlow Model ServerのGPUビルドが機能していないマシンでGPUモデルを実行しようとすると、次のようなエラーが発生します。

Cannot assign a device for operation 'a': Operation was explicitly assigned to /device:GPU:0

RESTfulなAPIを使用しての詳細な情報を見つけることができるここに

Dockerを使用した開発

サービングTensorflowを構築し、開発する方法については、を参照してくださいドッカーガイドを使用した開発