TensorFlow Melayani dengan Docker

Salah satu cara termudah untuk memulai menggunakan TensorFlow Melayani adalah dengan 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] }

Untuk titik akhir melayani tambahan, lihat API Klien ISTIRAHAT .

Instal Docker

Petunjuk instalasi umum adalah di situs Docker , tapi kami memberikan beberapa link cepat di sini:

Melayani dengan Docker

Menarik gambar sajian

Setelah Anda menginstal Docker, Anda dapat menarik image buruh pelabuhan TensorFlow Serving terbaru dengan menjalankan:

docker pull tensorflow/serving

Ini akan menarik gambar Docker minimal dengan TensorFlow Serving diinstal.

Lihat Docker Hub tensorflow / melayani repo untuk versi lain dari gambar Anda dapat menarik.

Menjalankan gambar penyajian

Gambar penyajian (baik CPU dan GPU) memiliki properti berikut:

  • Port 8500 terbuka untuk gRPC
  • Port 8501 terbuka untuk REST API
  • Lingkungan opsional variabel MODEL_NAME (defaultnya model )
  • Lingkungan opsional variabel MODEL_BASE_PATH (default untuk /models )

Saat gambar penyajian menjalankan ModelServer, ia menjalankannya sebagai berikut:

tensorflow_model_server --port=8500 --rest_api_port=8501 \
  --model_name=${MODEL_NAME} --model_base_path=${MODEL_BASE_PATH}/${MODEL_NAME}

Untuk melayani dengan Docker, Anda memerlukan:

  • Port terbuka di host Anda untuk melayani
  • Model Tersimpan untuk dilayani
  • Nama untuk model Anda yang akan dirujuk oleh klien Anda

Apa yang akan anda lakukan adalah menjalankan Docker kontainer, mempublikasikan pelabuhan wadah untuk port host anda, dan pemasangan jalur host Anda ke SavedModel ke tempat wadah mengharapkan model.

Mari kita lihat sebuah contoh:

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

Dalam hal ini, kami sudah mulai wadah Docker, diterbitkan port SISA API 8501 ke port tuan rumah kami 8501, dan mengambil model yang kita bernama my_model dan terikat ke jalur model base default ( ${MODEL_BASE_PATH}/${MODEL_NAME} = /models/my_model ). Akhirnya, kami telah diisi variabel lingkungan MODEL_NAME dengan my_model , dan meninggalkan MODEL_BASE_PATH ke nilai default.

Ini akan berjalan dalam wadah:

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

Jika kita ingin mempublikasikan port gRPC, kita akan menggunakan -p 8500:8500 . Anda dapat membuka port API gRPC dan REST secara bersamaan, atau memilih untuk hanya membuka satu atau yang lain.

Melewati argumen tambahan

tensorflow_model_server mendukung banyak argumen tambahan yang bisa lolos ke wadah buruh pelabuhan yang melayani. Misalnya, jika kita ingin meneruskan file konfigurasi model alih-alih menentukan nama model, kita dapat melakukan hal berikut:

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

Pendekatan ini bekerja untuk salah satu argumen baris perintah lain yang tensorflow_model_server mendukung.

Membuat gambar penyajian Anda sendiri

Jika Anda menginginkan gambar penyajian yang memiliki model yang dibangun ke dalam wadah, Anda dapat membuat gambar Anda sendiri.

Pertama jalankan gambar penyajian sebagai daemon:

docker run -d --name serving_base tensorflow/serving

Selanjutnya, salin SavedModel Anda ke folder model container:

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

Akhirnya, berkomitmen wadah yang melayani model Anda dengan mengubah MODEL_NAME untuk mencocokkan nama model Anda ` ':

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

Sekarang Anda dapat berhenti serving_base

docker kill serving_base

Ini akan meninggalkan Anda dengan gambar Docker disebut <my container> bahwa Anda dapat menyebarkan dan akan memuat model Anda untuk melayani pada startup.

Contoh penyajian

Mari kita lihat contoh lengkap di mana kita memuat SavedModel dan menyebutnya menggunakan REST API. Pertama tarik gambar penyajian:

docker pull tensorflow/serving

Ini akan menarik gambar TensorFlow Serving terbaru dengan ModelServer diinstal.

Berikutnya, kita akan menggunakan model mainan yang disebut Half Plus Two , yang menghasilkan 0.5 * x + 2 untuk nilai-nilai x yang kami sediakan untuk prediksi.

Untuk mendapatkan model ini, pertama-tama klon repo TensorFlow Serving.

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

Selanjutnya, jalankan container TensorFlow Serving yang mengarahkannya ke model ini dan membuka port REST API (8501):

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 &

Ini akan menjalankan wadah buruh pelabuhan dan meluncurkan Server Model Penyajian TensorFlow, mengikat port REST API 8501, dan memetakan model yang kami inginkan dari host kami ke tempat model diharapkan dalam wadah. Kami juga meneruskan nama model sebagai variabel lingkungan, yang akan menjadi penting saat kami menanyakan model.

Untuk menanyakan model menggunakan API prediksi, Anda dapat menjalankan

curl -d '{"instances": [1.0, 2.0, 5.0]}' \
  -X POST http://localhost:8501/v1/models/half_plus_two:predict

Ini harus mengembalikan satu set nilai:

{ "predictions": [2.5, 3.0, 4.5] }

Informasi lebih lanjut tentang menggunakan API tenang dapat ditemukan di sini .

Melayani dengan Docker menggunakan GPU Anda

Instal nvidia-docker

Sebelum melayani dengan GPU, selain memasang Docker , Anda akan perlu:

Menjalankan gambar penyajian GPU

Menjalankan gambar penyajian GPU identik dengan menjalankan gambar CPU. Untuk lebih jelasnya, lihat menjalankan image melayani .

Contoh Penyajian GPU

Mari kita lihat contoh lengkap di mana kita memuat model dengan operasi terikat GPU dan menyebutnya menggunakan REST API.

Pertama install nvidia-docker . Selanjutnya Anda dapat menarik image buruh pelabuhan TensorFlow Serving GPU terbaru dengan menjalankan:

docker pull tensorflow/serving:latest-gpu

Ini akan menurunkan gambar Docker minimal dengan ModelServer yang dibuat untuk berjalan pada GPU yang diinstal.

Berikutnya, kita akan menggunakan model mainan yang disebut Half Plus Two , yang menghasilkan 0.5 * x + 2 untuk nilai-nilai x yang kami sediakan untuk prediksi. Model ini akan memiliki ops yang terikat pada perangkat GPU, dan tidak akan berjalan pada CPU.

Untuk mendapatkan model ini, pertama-tama klon repo TensorFlow Serving.

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

Selanjutnya, jalankan container TensorFlow Serving yang mengarahkannya ke model ini dan membuka port REST API (8501):

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 &

Ini akan menjalankan wadah buruh pelabuhan, meluncurkan Server Model Penyajian TensorFlow, mengikat port REST API 8501, dan memetakan model yang kita inginkan dari host ke tempat model diharapkan dalam wadah. Kami juga meneruskan nama model sebagai variabel lingkungan, yang akan menjadi penting saat kami menanyakan model.

TIPS: Sebelum menanyakan model, pastikan untuk menunggu hingga Anda melihat pesan seperti berikut, yang menunjukkan bahwa server siap menerima permintaan:

2018-07-27 00:07:20.773693: I tensorflow_serving/model_servers/main.cc:333]
Exporting HTTP/REST API at:localhost:8501 ...

Untuk menanyakan model menggunakan API prediksi, Anda dapat menjalankan

curl -d '{"instances": [1.0, 2.0, 5.0]}' \
  -X POST http://localhost:8501/v1/models/half_plus_two:predict

Ini harus mengembalikan satu set nilai:

{ "predictions": [2.5, 3.0, 4.5] }

TIPS: Mencoba menjalankan model GPU pada mesin tanpa GPU atau tanpa build GPU yang berfungsi dari Server Model TensorFlow akan menghasilkan kesalahan yang terlihat seperti:

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

Informasi lebih lanjut tentang menggunakan API tenang dapat ditemukan di sini .

Berkembang dengan Docker

Untuk petunjuk tentang cara untuk membangun dan mengembangkan Tensorflow Melayani, silakan lihat Mengembangkan dengan Docker panduan .