サービングTensorFlowの使用を開始する最も簡単な方法の一つは、であるドッカー。
# Download the TensorFlow Serving Docker image and repodocker pull tensorflow/serving
git clone https://github.com/tensorflow/serving
# Location of demo modelsTESTDATA="$(pwd)/serving/tensorflow_serving/servables/tensorflow/testdata"
# Start TensorFlow Serving container and open the REST API portdocker 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 APIcurl -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をインストールする
一般的なインストール手順は、ドッカーサイト上で、私たちはここにいくつかのクイックリンクを与えます:
- MacOS用のDocker
- Windows用のドッキングウィンドウのWindows Proの10以降のために
- ドッカーツールボックスずっと年上のMacOSのバージョン、またはWindows 10 Proの前のバージョンのWindows用
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_NAME
でmy_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に提供する前にドッカーをインストールし、次のものが必要です。
- 最新のNVIDIAドライバをお使いのシステムのための
nvidia-docker
:あなたは従うことができ、ここでインストール手順を
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モデルサーバーのGPUビルドが機能していないマシンでGPUモデルを実行しようとすると、次のようなエラーが発生します。
Cannot assign a device for operation 'a': Operation was explicitly assigned to /device:GPU:0
RESTfulなAPIを使用しての詳細な情報を見つけることができるここに。
Dockerを使用した開発
サービングTensorflowを構築し、開発する方法については、を参照してくださいドッカーガイドを使用した開発。