Programowanie z Dockerem
Wyciąganie obrazu rozwojowego
W środowisku programistycznym, w którym można zbudować usługę TensorFlow, możesz spróbować:
docker pull tensorflow/serving:latest-devel
W środowisku programistycznym, w którym można zbudować serwer TensorFlow z obsługą procesora graficznego, użyj:
docker pull tensorflow/serving:latest-devel-gpu
Zobacz repozytorium tensorflow/serving Docker Hub, aby poznać inne wersje obrazów, które możesz pobrać.
Przykład rozwoju
Po pobraniu jednego z deweloperskich obrazów Dockera możesz go uruchomić, otwierając port gRPC (8500):
docker run -it -p 8500:8500 --gpus all tensorflow/serving:latest-devel
Testowanie środowiska programistycznego
Aby przetestować model, z wnętrza kontenera spróbuj:
# 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
Pliki Dockera
Obecnie utrzymujemy następujące pliki Dockerfile:
Dockerfile
, który jest minimalną maszyną wirtualną z zainstalowaną usługą TensorFlow Serving.Dockerfile.gpu
, czyli minimalna maszyna wirtualna z obsługą TensorFlow z obsługą procesora graficznego do użycia znvidia-docker
.Dockerfile.devel
, który jest minimalną maszyną wirtualną ze wszystkimi zależnościami potrzebnymi do zbudowania usługi TensorFlow.Dockerfile.devel-gpu
, czyli minimalna maszyna wirtualna ze wszystkimi zależnościami potrzebnymi do zbudowania usługi TensorFlow Serving z obsługą procesora graficznego.
Budowanie kontenera z pliku Dockerfile
Jeśli chcesz zbudować własny obraz Dockera z pliku Docker, możesz to zrobić, uruchamiając polecenie 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 .
WSKAZÓWKA: Przed próbą zbudowania obrazu sprawdź repozytorium tensorflow/serving Docker Hub, aby upewnić się, że obraz spełniający Twoje potrzeby jeszcze nie istnieje.
Kompilowanie ze źródeł zużywa dużo pamięci RAM. Jeśli w twoim systemie problemem jest pamięć RAM, możesz ograniczyć jej użycie, podając --local_ram_resources=2048
podczas wywoływania Bazela. Więcej informacji znajdziesz w dokumentacji Bazela . Możesz użyć tego samego mechanizmu, aby dostosować optymalizacje, z których korzystasz, korzystając z usługi TensorFlow. Na przykład:
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 .
Uruchamianie kontenera
Zakłada się, że zbudowałeś kontener Dockerfile.devel
.
Aby uruchomić kontener otwierający port gRPC (8500):
docker run -it -p 8500:8500 $USER/tensorflow-serving-devel
WSKAZÓWKA: Jeśli używasz obrazu GPU, pamiętaj, aby uruchomić go przy użyciu środowiska wykonawczego NVIDIA --runtime=nvidia
.
Stąd możesz postępować zgodnie z instrukcjami dotyczącymi testowania środowiska programistycznego .
Tworzenie zoptymalizowanego pliku binarnego obsługującego
Podczas uruchamiania ModelServer TensorFlow Serving możesz zauważyć komunikat dziennika wyglądający następująco:
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
Oznacza to, że plik binarny ModelServer nie jest w pełni zoptymalizowany pod kątem procesora, na którym działa. W zależności od obsługiwanego modelu dalsze optymalizacje mogą nie być konieczne. Jednak zbudowanie zoptymalizowanego pliku binarnego jest proste.
Podczas budowania obrazu platformy Docker z dostarczonych plików Dockerfile.devel
lub Dockerfile.devel-gpu
plik binarny ModelServer zostanie zbudowany z flagą -march=native
. Spowoduje to, że Bazel zbuduje plik binarny ModelServer ze wszystkimi optymalizacjami procesora hosta, na którym budujesz obraz Dockera.
Aby utworzyć obraz do wyświetlania, który będzie w pełni zoptymalizowany pod kątem Twojego hosta, po prostu:
Sklonuj projekt udostępniania TensorFlow
git clone https://github.com/tensorflow/serving cd serving
Zbuduj obraz za pomocą zoptymalizowanego serwera ModelServer
Dla procesora:
docker build --pull -t $USER/tensorflow-serving-devel \ -f tensorflow_serving/tools/docker/Dockerfile.devel .
Dla procesora graficznego: `
docker build --pull -t $USER/tensorflow-serving-devel-gpu \ -f tensorflow_serving/tools/docker/Dockerfile.devel-gpu .
Zbuduj obraz do obsługi, korzystając z obrazu rozwojowego jako podstawy
Dla procesora:
docker build -t $USER/tensorflow-serving \ --build-arg TF_SERVING_BUILD_IMAGE=$USER/tensorflow-serving-devel \ -f tensorflow_serving/tools/docker/Dockerfile .
Twój nowy zoptymalizowany obraz Dockera to teraz
$USER/tensorflow-serving
, którego możesz używać tak samo, jak standardowego obrazutensorflow/serving:latest
.Dla procesora graficznego:
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 .
Twój nowy zoptymalizowany obraz Dockera to teraz
$USER/tensorflow-serving-gpu
, którego możesz używać tak samo, jak standardowego obrazutensorflow/serving:latest-gpu
.