Docker を使用した開発
開発イメージの取得
TensorFlow Serving を構築できる開発環境については、以下を試すことができます。
docker pull tensorflow/serving:latest-devel
GPU サポートを備えた TensorFlow Serving を構築できる開発環境の場合は、以下を使用します。
docker pull tensorflow/serving:latest-devel-gpu
プルできる他のバージョンのイメージについては、Docker Hub tensorflow/serving リポジトリを参照してください。
開発例
開発 Docker イメージの 1 つをプルした後、gRPC ポート (8500) を開いてそれを実行できます。
docker run -it -p 8500:8500 --gpus all tensorflow/serving:latest-devel
開発環境のテスト
モデルをテストするには、コンテナー内から次を試してください。
# train the mnist model
python tensorflow_serving/example/mnist_saved_model.py /tmp/mnist_model
# serve the model
tensorflow_model_server --port=8500 --model_name=mnist --model_base_path=/tmp/mnist_model/ &
# test the client
python tensorflow_serving/example/mnist_client.py --num_tests=1000 --server=localhost:8500
Dockerfile
現在、次の Dockerfile を保守しています。
Dockerfile
: TensorFlow Serving がインストールされた最小限の VM です。Dockerfile.gpu
、nvidia-docker
で使用される GPU サポートを備えた TensorFlow Serving を備えた最小限の VM です。Dockerfile.devel
: TensorFlow Serving を構築するために必要なすべての依存関係を備えた最小限の VM です。Dockerfile.devel-gpu
。これは、GPU サポートを備えた TensorFlow Serving を構築するために必要なすべての依存関係を備えた最小限の VM です。
Dockerfile からコンテナを構築する
Dockerfile から独自の Docker イメージを構築したい場合は、Docker build コマンドを実行して実行できます。
Dockerfile
:
docker build --pull -t $USER/tensorflow-serving .
Dockerfile.gpu
:
docker build --pull -t $USER/tensorflow-serving-gpu -f Dockerfile.gpu .
Dockerfile.devel
:
docker build --pull -t $USER/tensorflow-serving-devel -f Dockerfile.devel .
Dockerfile.devel-gpu
:
docker build --pull -t $USER/tensorflow-serving-devel-gpu -f Dockerfile.devel-gpu .
ヒント: イメージを構築する前に、Docker Hub tensorflow/serving リポジトリをチェックして、ニーズを満たすイメージがまだ存在していないことを確認してください。
ソースからビルドすると、大量の RAM が消費されます。システム上で RAM が問題になる場合は、Bazel の起動時に--local_ram_resources=2048
を指定することで RAM の使用量を制限できます。詳細については、 Bazel のドキュメントを参照してください。これと同じメカニズムを使用して、TensorFlow Serving を構築している最適化を微調整することができます。例えば:
docker build --pull --build-arg TF_SERVING_BUILD_OPTIONS="--copt=-mavx \
--cxxopt=-D_GLIBCXX_USE_CXX11_ABI=0 --local_ram_resources=2048" -t \
$USER/tensorflow-serving-devel -f Dockerfile.devel .
コンテナの実行
これは、 Dockerfile.devel
コンテナーが構築されていることを前提としています。
gRPC ポート (8500) を開いてコンテナを実行するには:
docker run -it -p 8500:8500 $USER/tensorflow-serving-devel
ヒント: GPU イメージを実行している場合は、必ず NVIDIA ランタイム--runtime=nvidia
を使用して実行してください。
ここから、開発環境をテストするための手順に従うことができます。
最適化されたサービングバイナリの構築
TensorFlow Serving の ModelServer を実行すると、次のようなログ メッセージが表示される場合があります。
I external/org_tensorflow/tensorflow/core/platform/cpu_feature_guard.cc:141]
Your CPU supports instructions that this TensorFlow binary was not compiled to
use: AVX2 FMA
これは、ModelServer バイナリが、実行されている CPU に対して完全には最適化されていないことを示しています。提供しているモデルによっては、さらに最適化する必要がない場合があります。ただし、最適化されたバイナリの構築は簡単です。
提供されたDockerfile.devel
またはDockerfile.devel-gpu
ファイルから Docker イメージをビルドする場合、ModelServer バイナリはフラグ-march=native
を使用してビルドされます。これにより、Bazel は、Docker イメージを構築しているホストがサポートするすべての CPU 最適化を使用して ModelServer バイナリを構築します。
ホスト向けに完全に最適化された提供イメージを作成するには、次の手順を実行します。
TensorFlow Serving プロジェクトのクローンを作成する
git clone https://github.com/tensorflow/serving cd serving
最適化された ModelServer を使用してイメージを構築する
CPUの場合:
docker build --pull -t $USER/tensorflow-serving-devel \ -f tensorflow_serving/tools/docker/Dockerfile.devel .
GPU の場合: `
docker build --pull -t $USER/tensorflow-serving-devel-gpu \ -f tensorflow_serving/tools/docker/Dockerfile.devel-gpu .
開発イメージをベースとして提供イメージを構築する
CPUの場合:
docker build -t $USER/tensorflow-serving \ --build-arg TF_SERVING_BUILD_IMAGE=$USER/tensorflow-serving-devel \ -f tensorflow_serving/tools/docker/Dockerfile .
新しい最適化された Docker イメージは
$USER/tensorflow-serving
になり、標準のtensorflow/serving:latest
イメージと同じように使用できます。GPUの場合:
docker build -t $USER/tensorflow-serving-gpu \ --build-arg TF_SERVING_BUILD_IMAGE=$USER/tensorflow-serving-devel-gpu \ -f tensorflow_serving/tools/docker/Dockerfile.gpu .
新しい最適化された Docker イメージは
$USER/tensorflow-serving-gpu
になり、標準のtensorflow/serving:latest-gpu
イメージと同じように使用できます。