TensorFlow hadir dengan perpustakaan operasi yang luas dan kernel operasi (implementasi) yang disesuaikan untuk berbagai jenis perangkat keras (CPU, GPU, dll.). Operasi ini secara otomatis ditautkan ke biner TensorFlow Serving ModelServer tanpa memerlukan pekerjaan tambahan oleh pengguna. Namun, ada dua kasus penggunaan yang mengharuskan pengguna untuk menautkan operasi ke ModelServer secara eksplisit:
- Anda telah menulis operasi kustom Anda sendiri (mis. menggunakan panduan ini )
- Anda menggunakan operasi yang sudah diterapkan dan tidak dikirimkan bersama TensorFlow
Terlepas dari apakah Anda mengimplementasikan operasi tersebut atau tidak, untuk menyajikan model dengan operasi khusus, Anda memerlukan akses ke sumber operasi. Panduan ini memandu Anda melalui langkah-langkah menggunakan sumber agar operasi kustom tersedia untuk ditayangkan. Untuk panduan penerapan operasi khusus, lihat repo tensorflow/operasi khusus .
Prasyarat: Dengan Docker terinstal, Anda telah mengkloning repositori TensorFlow Serving dan direktori kerja Anda saat ini adalah root dari repo.
Salin sumber op ke proyek Penyajian
Untuk membuat TensorFlow Serving dengan operasi kustom, pertama-tama Anda harus menyalin sumber operasi ke dalam proyek penayangan Anda. Untuk contoh ini, Anda akan menggunakan tensorflow_zero_out dari repositori operasi khusus yang disebutkan di atas.
Dalam repo penyajian, buat direktori custom_ops
, yang akan menampung semua operasi kustom Anda. Untuk contoh ini, Anda hanya akan memiliki kode tensorflow_zero_out .
mkdir tensorflow_serving/custom_ops
cp -r <custom_ops_repo_root>/tensorflow_zero_out tensorflow_serving/custom_ops
Bangun perpustakaan statis untuk operasi
Dalam file BUILD tensorflow_zero_out, Anda melihat target menghasilkan file objek bersama ( .so
), yang akan Anda muat ke python untuk membuat dan melatih model Anda. Namun, TensorFlow Serving menghubungkan operasi secara statis pada waktu build, dan memerlukan file .a
. Jadi, Anda akan menambahkan aturan build yang menghasilkan file ini ke tensorflow_serving/custom_ops/tensorflow_zero_out/BUILD
:
cc_library(
name = 'zero_out_ops',
srcs = [
"cc/kernels/zero_out_kernels.cc",
"cc/ops/zero_out_ops.cc",
],
alwayslink = 1,
deps = [
"@org_tensorflow//tensorflow/core:framework",
]
)
Bangun ModelServer dengan operasi yang ditautkan
Untuk melayani model yang menggunakan operasi khusus, Anda harus membuat biner ModelServer dengan operasi tersebut ditautkan. Secara khusus, Anda menambahkan target pembangunan zero_out_ops
yang dibuat di atas ke file BUILD
ModelServer.
Edit tensorflow_serving/model_servers/BUILD
untuk menambahkan target pembuatan operasi khusus Anda ke SUPPORTED_TENSORFLOW_OPS
yang termasuk dalam target server_lib
:
SUPPORTED_TENSORFLOW_OPS = [
...
"//tensorflow_serving/custom_ops/tensorflow_zero_out:zero_out_ops"
]
Kemudian gunakan lingkungan Docker untuk membangun ModelServer:
tools/run_in_docker.sh bazel build tensorflow_serving/model_servers:tensorflow_model_server
Sajikan model yang berisi operasi khusus Anda
Anda sekarang dapat menjalankan biner ModelServer dan mulai menyajikan model yang berisi operasi khusus ini:
tools/run_in_docker.sh -o "-p 8501:8501" \
bazel-bin/tensorflow_serving/model_servers/tensorflow_model_server \
--rest_api_port=8501 --model_name=<model_name> --model_base_path=<model_base_path>
Kirim permintaan inferensi untuk menguji operasi secara manual
Anda sekarang dapat mengirim permintaan inferensi ke server model untuk menguji operasi kustom Anda:
curl http://localhost:8501/v1/models/<model_name>:predict -X POST \
-d '{"inputs": [[1,2], [3,4]]}'
Halaman ini berisi API yang lebih lengkap untuk mengirimkan permintaan REST ke server model.