このページは Cloud Translation API によって翻訳されました。
Switch to English

Dockerを使用したTensorFlowの提供

TensorFlow Servingの使用を開始する最も簡単な方法の1つは、 Dockerを使用することです。

# 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を使用する

サービング画像をプルする

Dockerをインストールしたら、次のコマンドを実行して最新のTensorFlow Serving Dockerイメージを取得できます。

docker pull tensorflow/serving

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

プルできるイメージの他のバージョンについては、Docker Hub tensorflow / servingリポジトリをご覧ください。

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

提供するイメージ(CPUとGPUの両方)には、次のプロパティがあります。

  • gRPC用に公開されたポート8500
  • REST API用に公開されたポート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
  • クライアントが参照するモデルの名前

Dockerコンテナーを実行 、コンテナーのポートをホストのポートに公開し 、コンテナーがモデルを予期する場所に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

この場合、Dockerコンテナーを開始し、REST APIポート8501をホストのポート8501にmy_modelmy_modelという名前のモデルをmy_modelして、デフォルトのモデルベースパス( ${MODEL_BASE_PATH}/${MODEL_NAME} = /models/my_model )。最後に、環境変数MODEL_NAMEmy_modelMODEL_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とREST APIの両方のポートを同時に開くか、どちらか一方のみを開くように選択できます。

追加の引数を渡す

tensorflow_model_serverは、 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サポートする他のコマンドライン引数のいずれでも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>というDockerイメージが残り、起動時に提供するモデルをロードします。

サービングの例

SavedModelをロードしてREST APIを使用して呼び出す完全な例を実行してみましょう。まず、配信イメージをプルします。

docker pull tensorflow/serving

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

次に、予測のために提供するxの値に対して0.5 * x + 2を生成するHalf Plus Twoというおもちゃモデルを使用します。

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

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 Serving Model Serverが起動され、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を使用する前に、 Dockerのインストールに加えて、次のものが必要です。

GPUサービスイメージの実行

GPUサービスイメージの実行は、CPUイメージの実行と同じです。詳しくは、 配信イメージの実行をご覧ください。

GPUサービスの例

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

最初にnvidia-dockerインストールします。次に、次のコマンドを実行して、最新のTensorFlow Serving GPU Dockerイメージを取得できます。

docker pull tensorflow/serving:latest-gpu

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

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

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

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

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

docker run --runtime=nvidia -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 &

これにより、 nvidia-docker dockerランタイムでDockerコンテナーが実行され、TensorFlow Serving Model Serverが起動され、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 Servingを構築および開発する方法については、Dockerを使用した開発ガイドをご覧ください。