Yerel TensorFlow Everywhere etkinliğiniz için bugün LCV!
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Docker ile TensorFlow Sunumu

TensorFlow Serving'i kullanmaya başlamanın en kolay yollarından biri Docker kullanmaktı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 İstemci REST API'sine bakın .

Docker'ı yükleyin

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

Docker ile hizmet verme

Bir sunum görüntüsünü çekmek

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

docker pull tensorflow/serving

Bu, TensorFlow Sunumu kurulu olarak minimum Docker görüntüsünü aşağı çekecektir.

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

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

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

  • 8500 numaralı bağlantı noktası gRPC için açığa çıktı
  • 8501 numaralı bağlantı noktası, REST API için açığa çıktı
  • İ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 olarak /models )

Sunum görüntüsü ModelServer'ı çalıştırdığında, onu şu ş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:

  • Ana makinenizde hizmet vermek için açık bir bağlantı noktası
  • Sunulacak bir SavedModel
  • Modeliniz için müşterinizin başvuracağı bir isim

Yapacağınız şey, Docker konteynerini çalıştırmak, konteynerin portlarını ana bilgisayarınızın portlarına yayınlamak ve hostunuzun yolunu, konteynerin modelleri beklediği yere SavedModel'e bağlamaktır.

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, 8501 REST API portunu ana makinemizin 8501 portuna my_model ve my_model adını my_model bir modeli alıp varsayılan model temel yoluna ( ${MODEL_BASE_PATH}/${MODEL_NAME} = /models/my_model ). Son olarak, MODEL_NAME ortam değişkenini my_model ile my_model ve MODEL_BASE_PATH varsayılan değerine bıraktık.

Bu, kapsayıcıda çalışacak:

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

GRPC portunu yayınlamak isteseydik, -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 bağımsız değişkenler iletmek

tensorflow_model_server , hizmet veren docker konteynerlerine iletebileceğiniz birçok ek argümanı 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, tensorflow_model_server desteklediği diğer komut satırı argümanlarından herhangi biri için çalışır.

Kendi sunum resminizi oluşturma

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

Önce arka plan programı olarak hizmet veren bir imajı ç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 modelini modelinizin adıyla eşleşecek şekilde değiştirerek modelinize hizmet eden kapsayıcıyı tamamlayın. ':

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

Artık serving_base durdurabilirsiniz_base

docker kill serving_base

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

Sunulan örnek

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

docker pull tensorflow/serving

Bu, ModelServer kurulu en son TensorFlow Sunum 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ı bir oyuncak modeli kullanacağız.

Bu modeli almak için önce TensorFlow Sunum deposunu klonlayın.

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

Ardından, bu modele işaret eden TensorFlow Sunum kabını ç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 Sunum Modeli Sunucusunu başlatacak, REST API portu 8501'i bağlayacak ve istenen modelimizi ana makinemizden konteynerde modellerin beklendiği yere eşleştirecektir. Modelin adını bir ortam değişkeni olarak da iletiyoruz ki bu, modeli sorguladığımızda önemli olacak.

Tahmin API'sini kullanarak modeli sorgulamak için,

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 bilgiyi burada bulabilirsiniz .

GPU'nuzu kullanarak Docker ile hizmet verme

Nvidia-docker'ı kurun

Bir GPU ile hizmet vermeden önce Docker'ı kurmanın yanı sıra şunlara ihtiyacınız olacak:

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

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

GPU Sunumu örneği

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

Önce nvidia-docker kurun. Ardından, aşağıdakileri çalıştırarak en son TensorFlow Sunum GPU docker görüntüsünü alabilirsiniz:

docker pull tensorflow/serving:latest-gpu

Bu, kurulu GPU'larda çalışmak için oluşturulmuş ModelServer ile minimum bir 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ı bir oyuncak modeli kullanacağız. Bu model, GPU cihazına bağlı operasyonlara sahip olacak ve CPU üzerinde çalışmayacaktır.

Bu modeli almak için önce TensorFlow Sunum deposunu klonlayın.

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

Ardından, bu modele işaret eden TensorFlow Sunum kabını çalıştırın ve REST API bağlantı noktasını (8501) açın:

docker run --runtime=nvidia -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 nvidia-docker çalışma zamanı ile çalıştıracak, TensorFlow Sunum Modeli Sunucusunu başlatacak, REST API portu 8501'i bağlayacak ve istenen modelimizi ana makinemizden konteynerde modellerin beklendiği yere eşleştirecektir. Modelin adını da bir ortam değişkeni olarak aktarıyoruz ki bu, modeli sorguladığımızda önemli olacak.

İPUCU: Modeli sorgulamadan önce, sunucunun istekleri almaya hazır olduğunu belirten aşağıdaki gibi bir mesaj görene kadar bekleyin:

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,

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'suz bir makinede veya çalışan bir TensorFlow Model Sunucusu GPU yapısı olmadan çalıştırmayı denemek ş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 bilgiyi burada bulabilirsiniz .

Docker ile Geliştirme

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