Salah satu cara termudah untuk memulai menggunakan TensorFlow Melayani adalah dengan Docker .
# 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] }
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:
- Docker untuk macOS
- Docker untuk Windows untuk Windows 10 Pro atau lambat
- Docker Toolbox untuk versi yang jauh lebih tua dari MacOS, atau versi Windows sebelum Windows 10 Pro
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
(defaultnyamodel
) - 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:
- Up-to-date driver NVIDIA untuk sistem anda
-
nvidia-docker
: Anda dapat mengikuti petunjuk instalasi di sini
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 .