Docker ile TensorFlow Sunumu

TensorFlow Serving'i kullanmaya başlamanın en kolay yollarından biri Docker'dır .

# 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] }

Ek hizmet uç noktaları için Client REST API'ye bakın.

Docker'ı yükleyin

Genel kurulum talimatları Docker sitesinde bulunmaktadır, ancak burada bazı hızlı bağlantılar veriyoruz:

Docker ile hizmet verme

Sunum görselini çekme

Docker'ı yükledikten sonra, aşağıdakileri çalıştırarak en son TensorFlow Serving docker görüntüsünü çekebilirsiniz:

docker pull tensorflow/serving

Bu, TensorFlow Serving'in kurulu olduğu minimum Docker görüntüsünü aşağı çekecektir.

Çekebileceğiniz diğer görüntü sürümleri için Docker Hub tensor akışı/sunum deposuna bakın.

Sunum görüntüsünü çalıştırma

Sunulan görüntüler (hem CPU hem de GPU) aşağıdaki özelliklere sahiptir:

  • Bağlantı noktası 8500, gRPC için kullanıma sunuldu
  • REST API için 8501 numaralı bağlantı noktası kullanıma sunuldu
  • İsteğe bağlı ortam değişkeni MODEL_NAME (varsayılanı model )
  • İsteğe bağlı ortam değişkeni MODEL_BASE_PATH (varsayılanı /models )

Sunum görüntüsü ModelServer'ı çalıştırdığında aşağıdaki şekilde çalıştırır:

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

Docker ile hizmet vermek için şunlara ihtiyacınız olacak:

  • Sunucunuzda hizmet verebileceğiniz açık bir bağlantı noktası
  • Sunulacak bir SavedModel
  • Modeliniz için müşterinizin başvuracağı bir ad

Yapacağınız şey, Docker konteynerini çalıştırmak , konteynerin bağlantı noktalarını ana makinenizin bağlantı noktalarına yayınlamak ve ana makinenizin yolunu, konteynerin modelleri beklediği yere SavedModel'e monte etmektir.

Bir örneğe bakalım:

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

Bu durumda, bir Docker konteyneri başlattık, REST API bağlantı noktası 8501'i ana makinemizin bağlantı noktası 8501'e yayınladık ve my_model adını verdiğimiz bir modeli alıp onu varsayılan model temel yoluna ( ${MODEL_BASE_PATH}/${MODEL_NAME} bağladık. = /models/my_model ). Son olarak MODEL_NAME ortam değişkenini my_model ile doldurduk ve MODEL_BASE_PATH değerini varsayılan değerine bıraktık.

Bu konteynerde çalışacaktır:

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

GRPC bağlantı noktasını yayınlamak isteseydik -p 8500:8500 kullanırdık. Hem gRPC hem de REST API bağlantı noktalarını aynı anda açık tutabilir veya yalnızca birini veya diğerini açmayı seçebilirsiniz.

Ek argümanların iletilmesi

tensorflow_model_server hizmet veren liman işçisi konteynerlerine iletebileceğiniz birçok ek argümanı destekler. Örneğin, model adını belirtmek yerine bir model yapılandırma dosyasını iletmek istiyorsak aşağıdakileri yapabiliriz:

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

Bu yaklaşım, tensorflow_model_server desteklediği diğer komut satırı bağımsız değişkenlerinden herhangi biri için işe yarar.

Kendi sunum görselinizi oluşturma

Modelinizin kapsayıcıya yerleştirildiği bir sunum görseli istiyorsanız kendi görselinizi oluşturabilirsiniz.

İlk önce hizmet veren bir görüntüyü arka plan programı olarak çalıştırın:

docker run -d --name serving_base tensorflow/serving

Ardından SavedModel'inizi kabın model klasörüne kopyalayın:

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

Son olarak, MODEL_NAME modelinizin adıyla eşleşecek şekilde değiştirerek modelinize hizmet veren kapsayıcıyı kaydedin ` ':

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

Artık serving_base durdurabilirsiniz

docker kill serving_base

Bu size dağıtabileceğiniz ve başlangıçta hizmet vermek üzere modelinizi yükleyebileceğiniz <my container> adlı bir Docker görüntüsü bırakacaktır.

Sunum örneği

Bir SavedModel yüklediğimiz ve onu REST API'sini kullanarak çağırdığımız tam bir örneği inceleyelim. İlk önce sunum resmini çekin:

docker pull tensorflow/serving

Bu, ModelServer kuruluyken en son TensorFlow Serving görüntüsünü çekecektir.

Daha sonra tahmin için sağladığımız x değerleri için 0.5 * x + 2 üreten Half Plus Two adlı oyuncak modelini kullanacağız.

Bu modeli elde etmek için önce TensorFlow Serving deposunu klonlayın.

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

Ardından TensorFlow Serving konteynerini bu modele işaret ederek çalıştırın ve REST API bağlantı noktasını (8501) açın:

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 &

Bu, docker konteynerini çalıştıracak ve TensorFlow Hizmet Modeli Sunucusunu başlatacak, REST API bağlantı noktası 8501'i bağlayacak ve istediğimiz modeli ana makinemizden konteynerde modellerin beklendiği yere eşleyecektir. Modelin adını da ortam değişkeni olarak aktarıyoruz, bu da modeli sorgularken önemli olacaktır.

Modeli tahmin API'sini kullanarak sorgulamak için çalıştırabilirsiniz.

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

Bu bir dizi değer döndürmelidir:

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

RESTful API'sinin kullanımına ilişkin daha fazla bilgiyi burada bulabilirsiniz.

GPU'nuzu kullanarak Docker ile hizmet verme

nvidia-docker'ı yükleyin

GPU ile hizmet vermeden önce Docker'ı yüklemenin yanı sıra şunlara da ihtiyacınız olacak:

GPU sunan bir görüntüyü çalıştırma

Bir GPU sunum görüntüsünü çalıştırmak, bir CPU görüntüsünü çalıştırmakla aynıdır. Daha fazla ayrıntı için sunum görseli çalıştırma konusuna bakın.

GPU Sunumu örneği

GPU'ya bağlı operasyonlara sahip bir modeli yüklediğimiz ve onu REST API'yi kullanarak çağırdığımız tam bir örneği inceleyelim.

İlk önce nvidia-docker kurun. Daha sonra aşağıdakileri çalıştırarak en yeni TensorFlow Serving GPU liman işçisi görüntüsünü çekebilirsiniz:

docker pull tensorflow/serving:latest-gpu

Bu, kurulu GPU'larda çalışmak üzere oluşturulmuş ModelServer ile minimum Docker görüntüsünü aşağı çekecektir.

Daha sonra tahmin için sağladığımız x değerleri için 0.5 * x + 2 üreten Half Plus Two adlı oyuncak modelini kullanacağız. Bu model, GPU cihazına bağlı op'lara sahip olacak ve CPU üzerinde çalışmayacaktır.

Bu modeli elde etmek için önce TensorFlow Serving deposunu klonlayın.

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

Ardından TensorFlow Serving konteynerini bu modele işaret ederek çalıştırın ve REST API bağlantı noktasını (8501) açın:

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 &

Bu, docker konteynerini çalıştıracak, TensorFlow Hizmet Modeli Sunucusunu başlatacak, REST API bağlantı noktası 8501'i bağlayacak ve istediğimiz modeli ana makinemizden konteynerde modellerin beklendiği yere eşleyecektir. Modelin adını da ortam değişkeni olarak aktarıyoruz, bu da modeli sorgularken önemli olacaktır.

İPUCU: Modeli sorgulamadan önce, sunucunun istekleri almaya hazır olduğunu belirten aşağıdakine benzer bir mesaj görene kadar beklediğinizden emin olun:

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

Modeli tahmin API'sini kullanarak sorgulamak için çalıştırabilirsiniz.

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

Bu bir dizi değer döndürmelidir:

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

İPUCU: GPU modelini, GPU'su olmayan veya TensorFlow Model Sunucusunun çalışan bir GPU yapısı olmayan bir makinede çalıştırmayı denemek, şuna benzeyen bir hatayla sonuçlanacaktır:

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

RESTful API'sinin kullanımına ilişkin daha fazla bilgiyi burada bulabilirsiniz.

Docker ile Geliştirme

Tensorflow Hizmetinin nasıl oluşturulacağı ve geliştirileceğine ilişkin talimatlar için lütfen Docker ile Geliştirme kılavuzuna bakın.