En kolay yollardan biri ile TensorFlow Sunum kullanarak başlamak için Docker .
# Download the TensorFlow Serving Docker image and repodocker pull tensorflow/serving
git clone https://github.com/tensorflow/serving
# Location of demo modelsTESTDATA="$(pwd)/serving/tensorflow_serving/servables/tensorflow/testdata"
# Start TensorFlow Serving container and open the REST API portdocker 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 APIcurl -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:
- macOS için Docker
- Windows için Docker sonra Windows 10 Pro veya için
- Docker Araç Kutusu , Windows 10 Pro önce çok daha eski MacOS sürümleri veya Windows sürümleri için
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ılanmodel
) - 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:
- Yukarı güncel NVIDIA sürücüleri sisteminizde
-
nvidia-docker
: Sen takip edebilirsiniz burada yükleme talimatlarını
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 .