Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Penyajian TensorFlow 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 layanan tambahan, lihat REST API Klien .

Instal Docker

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

Melayani dengan Docker

Menarik gambar saji

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

docker pull tensorflow/serving

Ini akan menurunkan gambar Docker minimal dengan TensorFlow Serving terpasang.

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

Menjalankan gambar penyajian

Gambar yang ditayangkan (baik CPU dan GPU) memiliki properti berikut:

  • Port 8500 diekspos untuk gRPC
  • Port 8501 diekspos untuk REST API
  • Variabel lingkungan opsional MODEL_NAME (default ke model )
  • Variabel lingkungan opsional MODEL_BASE_PATH (default ke /models )

Saat gambar penyajian menjalankan ModelServer, gambar tersebut akan 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
  • A SavedModel untuk ditayangkan
  • Nama untuk model Anda yang akan dirujuk oleh klien Anda

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

Mari kita lihat contohnya:

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 container Docker, menerbitkan port REST API 8501 ke port 8501 host kami, 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 meninggalkan MODEL_BASE_PATH ke nilai defaultnya.

Ini akan berjalan di penampung:

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

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

Meneruskan argumen tambahan

tensorflow_model_server mendukung banyak argumen tambahan yang bisa Anda teruskan ke penampung buruh pelabuhan melayani. Misalnya, jika kita ingin meneruskan file konfigurasi model daripada 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 salah satu argumen baris perintah lainnya yang didukung tensorflow_model_server .

Membuat gambar penyajian Anda sendiri

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

Pertama-tama, jalankan gambar penyajian sebagai daemon:

docker run -d --name serving_base tensorflow/serving

Selanjutnya, salin SavedModel Anda ke folder model wadah:

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

Terakhir, komit penampung yang melayani model Anda dengan mengubah MODEL_NAME agar cocok 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 meninggalkan Anda dengan image Docker bernama <my container> yang dapat Anda terapkan dan akan memuat model Anda untuk disajikan saat startup.

Memberikan contoh

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

docker pull tensorflow/serving

Ini akan menarik gambar Penyajian TensorFlow terbaru dengan ModelServer diinstal.

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

Untuk mendapatkan model ini, pertama-tama clone repo Penyajian TensorFlow.

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 buka 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 TensorFlow Serving Model Server, mengikat REST API port 8501, dan memetakan model yang diinginkan dari host ke tempat model yang diharapkan dalam container. Kami juga meneruskan nama model sebagai variabel lingkungan, yang akan menjadi penting saat kami menanyakan model.

Untuk membuat kueri 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 satu set nilai:

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

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

Melayani dengan Docker menggunakan GPU Anda

Pasang nvidia-docker

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

Menjalankan gambar penyajian GPU

Menjalankan gambar penyajian GPU sama dengan menjalankan gambar CPU. Untuk lebih jelasnya, lihat menjalankan gambar penyajian .

Contoh Penyajian GPU

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

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

docker pull tensorflow/serving:latest-gpu

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

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

Untuk mendapatkan model ini, pertama-tama clone repo Penyajian TensorFlow.

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 buka port REST API (8501):

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 &

Ini akan menjalankan container docker dengan runtime nvidia-docker , meluncurkan TensorFlow Serving Model Server, mengikat REST API port 8501, dan memetakan model yang kami inginkan dari host ke tempat model yang diharapkan dalam container. 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 membuat kueri 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 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 error yang terlihat seperti:

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

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

Berkembang dengan Docker

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