Docker ile TensorFlow Sunumu

En kolay yollardan biri ile TensorFlow Sunum kullanarak başlamak için 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] }

Ek hizmet veren uç noktaları için bkz Müşteri DİNLENME API .

Docker'ı yükleyin

Genel kurulum talimatları vardır Docker sitesinde , ama biz burada bazı hızlı bağlantılar vermek:

Docker ile hizmet verme

Sunum görseli çekme

Docker'ı kurduktan 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 minimal bir Docker görüntüsünü indirecektir.

Docker Hub Bkz tensorflow / sunma repo Alabileceğiniz görüntülerin diğer sürümleri için.

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

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

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

Sunulan görüntü ModelServer'ı çalıştırdığında, onu aşağıdaki gibi ç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
  • Müşterinizin başvuracağı modeliniz için bir ad

Ne yapacağım edilir Docker çalıştırmak , konteyner yayınlamak Barındırıcınızın limanlara kabın portları ve konteyner modelleri beklediğini yere SavedModel için konağın yolunu montaj.

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, biz, bir Docker kabı başladım bizim ev sahibinin port 8501 için REST API portunu 8501 yayınlandı ve biz adında bir model alınan my_model ve varsayılan modeli baz yoluna (bunu bağlı ${MODEL_BASE_PATH}/${MODEL_NAME} = /models/my_model ). Son olarak, biz çevre değişkeni girdikten MODEL_NAME ile my_model ve sol MODEL_BASE_PATH varsayılan değerine.

Bu kapsayıcıda çalışacaktır:

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

Biz gRPC portunu yayınlamak istiyorsa, biz kullanacağı -p 8500:8500 . Hem gRPC hem de REST API bağlantı noktalarını aynı anda açabilir veya yalnızca birini veya diğerini açmayı seçebilirsiniz.

Ek argümanları iletmek

tensorflow_model_server Eğer hizmet veren liman işçisi kapsayıcılarına geçebileceği birçok ek argümanlar destekler. Örneğin, model adını belirtmek yerine bir model yapılandırma dosyası iletmek istersek 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 diğer komut satırı bağımsız değişkenleri herhangi biri için çalışıyor tensorflow_model_server desteklerin.

Kendi sunum resminizi oluşturma

Modelinizin kapsayıcıda yerleşik olarak bulunduğu bir sunum görüntüsü istiyorsanız, kendi görüntünüzü oluşturabilirsiniz.

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

docker run -d --name serving_base tensorflow/serving

Ardından, SavedModel'inizi kapsayıcının model klasörüne kopyalayın:

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

Son olarak, değiştirerek modelinizi hapis yatıyor kabı taahhüt MODEL_NAME modelinizin adını `eşleşecek şekilde ':

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

Artık durabilirsin serving_base

docker kill serving_base

Bu adında bir Docker görüntü ile bırakacaktır <my container> sen dağıtabilir ve başlangıçta sunum için modelinizi yükleyecektir söyledi.

sunum örneği

Şimdi bir SavedModel yüklediğimiz ve onu REST API kullanarak çağırdığımız tam bir örnek üzerinden geçelim. Önce servis görüntüsünü çekin:

docker pull tensorflow/serving

Bu, ModelServer'ın kurulu olduğu en son TensorFlow Sunma görüntüsünü çekecektir.

Daha sonra, adı verilen bir oyuncak modeli kullanır Half Plus Two oluşturur, 0.5 * x + 2 değerleri için x , biz tahmini için sağlar.

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

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

Ardından, bu modele işaret eden ve REST API bağlantı noktasını (8501) açarak TensorFlow Hizmet kapsayıcısını çalıştırı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 kapsayıcısını çalıştıracak ve TensorFlow Hizmet Model Sunucusunu başlatacak, REST API bağlantı noktası 8501'i bağlayacak ve ana makinemizden istenen modelimizi kapsayıcıda modellerin beklendiği yere eşleyecektir. Modeli sorguladığımızda önemli olacak bir ortam değişkeni olarak modelin adını da geçiyoruz.

Tahmin API'sini kullanarak modeli sorgulamak için aşağıdakileri ç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 kullanımı hakkında daha fazla bilgi bulunabilir burada .

GPU'nuzu kullanarak Docker ile hizmet verme

nvidia-docker'ı yükleyin

Ek olarak, bir GPU ile servis etmeden önce Docker yüklemeden , ihtiyacınız olacak:

GPU sunma görüntüsü çalıştırma

Bir GPU hizmet görüntüsü çalıştırmak, bir CPU görüntüsü çalıştırmakla aynıdır. Daha fazla ayrıntı için bkz bir porsiyon görüntü çalışan .

GPU Sunma örneği

GPU'ya bağlı işlemlere sahip bir model yüklediğimiz ve onu REST API kullanarak çağırdığımız tam bir örnek üzerinden geçelim.

İlk yüklemek nvidia-docker . Ardından, aşağıdakileri çalıştırarak en son TensorFlow Sunum GPU docker görüntüsünü çekebilirsiniz:

docker pull tensorflow/serving:latest-gpu

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

Daha sonra, adı verilen bir oyuncak modeli kullanır Half Plus Two oluşturur, 0.5 * x + 2 değerleri için x , biz tahmini için sağlar. Bu model, GPU cihazına bağlı operasyonlara sahip olacak ve CPU üzerinde çalışmayacak.

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

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

Ardından, bu modele işaret eden ve REST API bağlantı noktasını (8501) açarak TensorFlow Hizmet kapsayıcısını çalıştırı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 kapsayıcısını çalıştıracak, TensorFlow Hizmet Model Sunucusunu başlatacak, REST API bağlantı noktası 8501'i bağlayacak ve ana makinemizden istenen modelimizi kapsayıcıda modellerin beklendiği yere eşleyecektir. Modeli sorguladığımızda önemli olacak bir ortam değişkeni olarak modelin adını da geçiyoruz.

İPUCU: Modeli sorgulamadan önce, sunucunun istekleri almaya hazır olduğunu belirten aşağıdaki gibi 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 ...

Tahmin API'sini kullanarak modeli 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 Server'ın çalışan bir GPU yapısı olmayan bir makinede çalıştırmaya çalışmak, şuna benzer bir hataya neden olur:

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

RESTful API kullanımı hakkında daha fazla bilgi bulunabilir burada .

Docker ile Geliştirme

Tensorflow Sunum inşa etmek ve geliştirmek için nasıl talimatlar için lütfen bkz Docker kılavuzu ile geliştirilmesi .