TensorFlow Serving'i kullanmaya başlamanın en kolay yollarından biri Docker kullanmaktı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 İ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:
- MacOS için Docker
- Windows için Docker for Windows 10 Pro veya üstü
- MacOS'un çok daha eski sürümleri veya Windows 10 Pro'dan önceki Windows sürümleri için Docker Toolbox
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ılanmodel
) - İ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:
- Sisteminiz için güncel NVIDIA sürücüleri
-
nvidia-docker
: Kurulum talimatlarını buradan takip edebilirsiniz
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 .