TensorFlow Serving'i kullanmaya başlamanın en kolay yollarından biri Docker'dır .
# 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 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:
- MacOS için Docker
- Windows 10 Pro veya üzeri için Windows için Docker
- MacOS'un çok daha eski sürümleri veya Windows 10 Pro'dan önceki Windows sürümleri için Docker Araç Kutusu
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 görüntülerin diğer 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 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
- 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:
- Sisteminiz için güncel NVIDIA sürücüleri
-
nvidia-docker
: Kurulum talimatlarını buradan takip edebilirsiniz
GPU sunan bir görüntüyü çalıştırma
GPU sunan bir görüntüyü ç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 model 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 ...
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 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.