Melayani model TensorFlow dengan operasi khusus

TensorFlow hadir dengan perpustakaan operasi dan kernel operasi (implementasi) yang luas 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, Anda harus menyalin sumber operasi ke dalam proyek penayangan Anda terlebih dahulu. 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.