TensorFlow Melayani dengan Docker

Salah satu cara termudah untuk mulai menggunakan TensorFlow Serving 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 penyajian tambahan, lihat Client REST API .

Instal Docker

Petunjuk instalasi umum ada di situs Docker , tetapi kami memberikan beberapa tautan cepat di sini:

Melayani dengan Docker

Menarik gambar penyajian

Setelah Docker terinstal, Anda dapat menarik image docker TensorFlow Serving terbaru dengan menjalankan:

docker pull tensorflow/serving

Ini akan menarik gambar Docker minimal dengan TensorFlow Serving terinstal.

Lihat repo tensorflow/serving Docker Hub untuk versi gambar lain yang dapat Anda tarik.

Menjalankan gambar penyajian

Gambar penyajian (CPU dan GPU) memiliki properti berikut:

  • Port 8500 diekspos untuk gRPC
  • Port 8501 diekspos untuk REST API
  • Variabel lingkungan opsional MODEL_NAME (default pada model )
  • Variabel lingkungan opsional MODEL_BASE_PATH (default pada /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 digunakan
  • SavedModel untuk disajikan
  • Nama untuk model Anda yang akan dirujuk oleh klien Anda

Apa yang akan Anda lakukan adalah menjalankan kontainer Docker , menerbitkan port kontainer ke port host Anda, dan memasang jalur host Anda ke SavedModel ke tempat model yang diharapkan oleh kontainer.

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 telah memulai kontainer Docker, menerbitkan port REST API 8501 ke port host kami 8501, dan mengambil model yang kami beri nama my_model dan mengikatnya ke jalur dasar model default ( ${MODEL_BASE_PATH}/${MODEL_NAME} = /models/my_model ). Terakhir, kita telah mengisi variabel lingkungan MODEL_NAME dengan my_model , dan membiarkan MODEL_BASE_PATH ke nilai defaultnya.

Ini akan berjalan di dalam wadah:

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

Jika kami ingin memublikasikan port gRPC, kami akan menggunakan -p 8500:8500 . Anda dapat membuka port gRPC dan REST API secara bersamaan, atau memilih untuk hanya membuka salah satu port tersebut.

Memberikan argumen tambahan

tensorflow_model_server mendukung banyak argumen tambahan yang dapat Anda teruskan ke kontainer 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 berfungsi untuk argumen baris perintah lain yang didukung tensorflow_model_server .

Membuat gambar penyajian Anda sendiri

Jika Anda menginginkan gambar penyajian yang modelnya sudah terpasang di dalam wadah, Anda dapat membuat gambar Anda sendiri.

Pertama-tama jalankan gambar yang disajikan sebagai daemon:

docker run -d --name serving_base tensorflow/serving

Selanjutnya, salin SavedModel Anda ke folder model kontainer:

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

Terakhir, komit wadah yang melayani model Anda dengan mengubah MODEL_NAME agar sesuai dengan nama model Anda ` ':

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

Anda sekarang dapat berhenti serving_base

docker kill serving_base

Ini akan memberi Anda gambar Docker bernama <my container> yang dapat Anda terapkan dan akan memuat model Anda untuk disajikan saat startup.

Memberikan contoh

Mari kita lihat contoh lengkap di mana kita memuat SavedModel dan memanggilnya menggunakan REST API. Pertama tarik gambar yang disajikan:

docker pull tensorflow/serving

Ini akan menarik gambar TensorFlow Serving terbaru dengan ModelServer terinstal.

Selanjutnya, kita akan menggunakan model mainan bernama Half Plus Two , yang menghasilkan 0.5 * x + 2 untuk nilai x yang kita berikan untuk prediksi.

Untuk mendapatkan model ini, clone dulu repo TensorFlow Serving.

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

Selanjutnya, jalankan container TensorFlow Serving dengan 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 container buruh pelabuhan dan meluncurkan Server Model Penyajian TensorFlow, mengikat port REST API 8501, dan memetakan model yang diinginkan dari host ke tempat model diharapkan ada dalam container. Kami juga meneruskan nama model sebagai variabel lingkungan, yang penting saat kami menanyakan model.

Untuk mengkueri model menggunakan API prediksi, Anda dapat menjalankannya

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

Ini harus mengembalikan serangkaian nilai:

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

Informasi lebih lanjut tentang penggunaan RESTful API dapat ditemukan di sini .

Melayani dengan Docker menggunakan GPU Anda

Instal nvidia-buruh pelabuhan

Sebelum melayani dengan GPU, selain menginstal Docker , Anda memerlukan:

Menjalankan gambar penyajian GPU

Menjalankan image penyajian GPU identik dengan menjalankan image CPU. Untuk detail selengkapnya, lihat menjalankan gambar penyajian .

Contoh Penyajian GPU

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

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

docker pull tensorflow/serving:latest-gpu

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

Selanjutnya, kita akan menggunakan model mainan bernama Half Plus Two , yang menghasilkan 0.5 * x + 2 untuk nilai x yang kita berikan untuk prediksi. Model ini akan memiliki operasi yang terikat pada perangkat GPU, dan tidak akan berjalan pada CPU.

Untuk mendapatkan model ini, clone dulu repo TensorFlow Serving.

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

Selanjutnya, jalankan container TensorFlow Serving dengan 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 container buruh pelabuhan, meluncurkan Server Model Penyajian TensorFlow, mengikat port REST API 8501, dan memetakan model yang diinginkan dari host ke tempat model diharapkan ada dalam container. Kami juga meneruskan nama model sebagai variabel lingkungan, yang 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 mengkueri model menggunakan API prediksi, Anda dapat menjalankannya

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

Ini harus mengembalikan serangkaian nilai:

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

TIPS: Mencoba menjalankan model GPU pada mesin tanpa GPU atau tanpa build GPU TensorFlow Model Server yang berfungsi akan menghasilkan error seperti ini:

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

Informasi lebih lanjut tentang penggunaan RESTful API dapat ditemukan di sini .

Berkembang dengan Docker

Untuk petunjuk tentang cara membuat dan mengembangkan Tensorflow Serving, lihat panduan Mengembangkan dengan Docker .