TensorFlow Serving adalah mesin inferensi untuk model pembelajaran mendalam. Layanan ini memungkinkan Anda menerapkan model dalam format standar TensorFlow SavedModel sebagai layanan online dan mendukung fitur seperti pembaruan bergulir (rolling updates) serta manajemen versi model. Topik ini menjelaskan cara menerapkan layanan model TensorFlow Serving menggunakan metode penerapan berbasis gambar.
Prasyarat
File model
Untuk menggunakan penerapan berbasis gambar dengan TensorFlow Serving, simpan file model Anda di Object Storage Service (OSS) dengan struktur direktori yang memenuhi persyaratan berikut:
-
Direktori versi model: Setiap model harus memiliki setidaknya satu direktori versi dengan nama berupa bilangan bulat. Angka tersebut berfungsi sebagai pengenal versi—semakin besar nilainya, semakin baru versinya.
-
File model: Direktori versi menyimpan file model yang diekspor dalam format SavedModel. Layanan secara otomatis memuat file model dari direktori dengan nomor versi tertinggi.
Ikuti langkah-langkah berikut:
-
Buat direktori penyimpanan model di bucket OSS. Contohnya:
oss://examplebucket/models/tf_serving/. Untuk informasi lebih lanjut, lihat Mengelola direktori. -
Unggah file model ke direktori yang telah dibuat pada langkah sebelumnya. Anda dapat mengunduh dan menggunakan file model contoh TensorFlow Serving untuk contoh ini. Struktur direktori penyimpanan model adalah sebagai berikut:
tf_serving ├── modelA │ └── 1 │ ├── saved_model.pb │ └── variables │ ├── variables.data-00000-of-00001 │ └── variables.index │ ├── modelB │ ├── 1 │ │ └── ... │ └── 2 │ └── ... │ └── modelC ├── 1 │ └── ... ├── 2 │ └── ... └── 3 └── ...
File konfigurasi model
Gunakan file konfigurasi untuk menjalankan beberapa model dalam satu layanan. Jika Anda hanya perlu menerapkan layanan satu model, Anda dapat melewati bagian ini.
Buat file konfigurasi dan unggah ke OSS. File contoh yang disediakan di bagian Persiapan file model mencakup file konfigurasi model bernama model_config.pbtxt, yang dapat Anda gunakan langsung atau modifikasi sesuai kebutuhan. Dalam contoh ini, file konfigurasi model diunggah ke direktori oss://examplebucket/models/tf_serving/.
Berikut adalah contoh file konfigurasi model_config.pbtxt:
model_config_list {
config {
name: 'modelA'
base_path: '/models/modelA/'
model_platform: 'tensorflow'
model_version_policy{
all: {}
}
}
config {
name: 'modelB'
base_path: '/models/modelB/'
model_platform: 'tensorflow'
model_version_policy{
specific {
versions: 1
versions: 2
}
}
version_labels {
key: 'stable'
value: 1
}
version_labels {
key: 'canary'
value: 2
}
}
config {
name: 'modelC'
base_path: '/models/modelC/'
model_platform: 'tensorflow'
model_version_policy{
latest {
num_versions: 2
}
}
}
}
Tabel berikut menjelaskan parameter utama.
|
Parameter |
Wajib |
Deskripsi |
|
name |
Tidak |
Nama kustom untuk model. Parameter ini direkomendasikan. Jika tidak ditentukan, layanan tidak dapat dipanggil karena nama model kosong. |
|
base_path |
Ya |
Jalur penyimpanan model di dalam instans. Layanan membaca file model dari jalur ini selama penerapan. Misalnya, jika jalur mount adalah |
|
model_version_policy |
Tidak |
Kebijakan untuk memuat versi model.
|
|
version_labels |
Tidak |
Menentukan label versi kustom untuk suatu versi model. Jika Anda tidak mengonfigurasi label versi, Anda hanya dapat membedakan versi model berdasarkan nomor versi. Jalur permintaan adalah Jika Anda mengonfigurasi label versi, Anda dapat menggunakan label versi untuk menunjuk ke versi tertentu. Jalur permintaan adalah Catatan
Secara default, Anda hanya dapat memberikan label versi pada versi model yang telah dimuat dan sedang berjalan. Untuk memberikan label pada versi yang belum dimuat, Anda harus menentukan parameter startup |
Penerapan layanan
Terapkan layanan TensorFlow Serving menggunakan salah satu metode penerapan berbasis gambar berikut:
-
Penerapan berbasis skenario: Metode ini ideal untuk skenario dasar dan hanya memerlukan konfigurasi beberapa parameter.
-
Penerapan kustom: Metode ini menawarkan fleksibilitas lebih tinggi untuk mengonfigurasi opsi, seperti mengubah port atau mengatur interval polling untuk file model.
Layanan model TensorFlow Serving mendukung port 8501 dan 8500.
-
8501: mendukung permintaan HTTP. Layanan HTTP atau REST dimulai di port 8501.
-
8500: mendukung permintaan gRPC. Layanan gRPC dimulai di port 8500.
Metode penerapan berbasis skenario menggunakan port 8501 secara default, yang tidak dapat diubah. Jika Anda perlu menggunakan port 8500, pilih penerapan kustom.
Penerapan berbasis skenario
Ikuti langkah-langkah berikut:
-
Masuk ke Konsol PAI. Pilih wilayah di bagian atas halaman. Lalu, pilih ruang kerja yang diinginkan dan klik Elastic Algorithm Service (EAS).
-
Pada halaman Elastic Algorithm Service (EAS), klik Deploy Service. Di bagian Scenario-based Model Deployment, klik Tensorflow Serving Deployment.
-
Pada halaman Tensorflow Serving Deployment, konfigurasikan parameter. Tabel berikut menjelaskan parameter utama. Untuk informasi tentang parameter lainnya, lihat Penerapan Kustom.
Parameter
Deskripsi
Deployment Method
Metode penerapan berikut didukung:
-
Standard Model Deployment: Menerapkan layanan satu model.
-
Configuration File Deployment: Menerapkan layanan multi-model.
Model Settings
Jika Anda memilih Deployment Method untuk Standard Model Deployment, tentukan jalur OSS ke file model Anda.
Jika Anda memilih Deployment Method untuk Configuration File Deployment, konfigurasikan parameter berikut:
-
OSS: Pilih jalur OSS tempat file model berada.
-
Mount Path: Jalur tujuan di instans layanan tempat file model dimount.
-
Configuration File: Pilih jalur OSS tempat file konfigurasi model berada.
Tabel berikut menampilkan contoh konfigurasi.
Parameter
Contoh satu model
Contoh multi-model
Service Name
modela_scene
multi_scene
Deployment Method
Pilih Standard Model Deployment.
Pilih Configuration File Deployment.
Model Settings
OSS:
oss://examplebucket/models/tf_serving/modelA/.-
OSS:
oss://examplebucket/models/tf_serving/. -
Mount Path: /models
-
Configuration File:
oss://examplebucket/models/tf_serving/model_config.pbtxt
-
-
Setelah mengonfigurasi parameter, klik Deploy.
Penerapan kustom
Ikuti langkah-langkah berikut:
-
Masuk ke Konsol PAI. Pilih wilayah di bagian atas halaman. Lalu, pilih ruang kerja yang diinginkan dan klik Elastic Algorithm Service (EAS).
-
Klik Deploy Service. Di bagian Custom Model Deployment, klik Custom Deployment.
-
Pada halaman Custom Deployment, konfigurasikan parameter. Tabel berikut menjelaskan parameter utama. Untuk informasi tentang parameter lainnya, lihat Penerapan Kustom.
Parameter
Deskripsi
Image Configuration
Dalam daftar Alibaba Cloud Image, pilih tensorflow-serving dan versi gambar yang sesuai. Kami merekomendasikan memilih versi terbaru.
CatatanJika layanan memerlukan GPU, versi gambar harus berupa x.xx.x-gpu.
Model Settings
Anda dapat mengonfigurasi file model dengan berbagai cara. Contoh ini menggunakan OSS.
-
Uri: Pilih jalur OSS tempat file model berada.
-
Mount Path: Jalur tujuan di instans layanan tempat file model dimount.
Command to Run
Parameter startup untuk tensorflow-serving. Saat Anda memilih gambar tensorflow-serving, perintah
/usr/bin/tf_serving_entrypoint.shdimuat secara otomatis. Tentukan parameter tambahan berikut.Parameter startup untuk penerapan satu model:
-
--model_name: Nama model, digunakan dalam URL permintaan layanan. Jika tidak ditentukan, nilai default-nya adalahmodel. -
--model_base_path: Jalur penyimpanan model di dalam instans. Jika tidak ditentukan, jalur default-nya adalah/models/model.
Parameter startup untuk penerapan multi-model:
-
--model_config_file: Wajib. Menentukan file konfigurasi model. -
--model_config_file_poll_wait_seconds: Opsional. Untuk memungkinkan modifikasi file konfigurasi setelah layanan dimulai, atur interval polling dalam detik. Layanan kemudian secara berkala membaca ulang file pada interval ini. Misalnya,--model_config_file_poll_wait_seconds=30berarti layanan membaca file konfigurasi model setiap 30 detik.CatatanSaat layanan model membaca file konfigurasi model baru, layanan hanya memproses konten file baru tersebut. Misalnya, jika file konfigurasi lama mencakup model A dan file konfigurasi baru menghapus model A serta menambahkan konfigurasi model B, layanan akan membongkar model A dan memuat model B.
-
--allow_version_labels_for_unavailable_models: Opsional. Nilai default-nya adalah false. Jika Anda ingin menetapkan label terlebih dahulu pada versi model yang belum dimuat, atur parameter ini menjadi true. Misalnya,--allow_version_labels_for_unavailable_models=true.
Tabel berikut menampilkan contoh konfigurasi.
Parameter
Contoh satu model
Contoh multi-model
Deployment Method
Pilih Image-based Deployment.
Image Configuration
Pilih Alibaba Cloud Image: tensorflow-serving > tensorflow-serving:2.14.1.
Model Settings
Atur jenis model ke OSS.
-
Uri:
oss://examplebucket/models/tf_serving/. -
Mount Path: Atur parameter ini menjadi
/models.
Command to Run
/usr/bin/tf_serving_entrypoint.sh --model_name=modelA --model_base_path=/models/modelA/usr/bin/tf_serving_entrypoint.sh --model_config_file=/models/model_config.pbtxt --model_config_file_poll_wait_seconds=30 --allow_version_labels_for_unavailable_models=trueNomor port secara default adalah 8501. Layanan HTTP atau REST dimulai di port 8501 untuk mendukung permintaan HTTP. Untuk mengaktifkan layanan agar mendukung permintaan gRPC, lakukan langkah-langkah berikut:
-
Di bagian Environment Information, ubah Port Number menjadi 8500.
-
Di bagian Environment Information, aktifkan sakelar Enable gRPC.
-
Di bagian Service Configurations, tambahkan konfigurasi berikut:
"networking": { "path": "/" }
-
-
Klik Deploy.
Permintaan layanan
Protokol permintaan (HTTP atau gRPC) bergantung pada port yang dikonfigurasi selama penerapan layanan. Contoh berikut menggunakan modelA.
-
Siapkan data uji
modelA adalah model klasifikasi gambar yang dilatih pada dataset Fashion-MNIST. Setiap sampel adalah gambar grayscale berukuran 28×28. Model menghasilkan probabilitas sampel termasuk dalam masing-masing dari 10 kelas. Untuk pengujian, gunakan
[[[[1.0]] * 28] * 28]sebagai data masukan untuk permintaan layanan modelA. -
Contoh permintaan
Permintaan HTTP
Saat nomor port diatur ke 8501, layanan mendukung permintaan HTTP. Tabel berikut merangkum jalur permintaan HTTP untuk penerapan satu model dan multi-model.
Satu model
Beberapa model
Format jalur:
<service_url>/v1/models/<model_name>:predictDi mana:
-
Penerapan berbasis skenario: <model_name> tidak dapat dikustomisasi dan secara default bernilai
model. -
Penerapan kustom: <model_name> adalah nama model yang dikonfigurasi di bidang Command to Run. Jika nama model tidak ditentukan, nilai default-nya adalah
model.
Anda dapat mengirim permintaan tanpa menentukan versi atau dengan menentukan versi model. Format jalurnya adalah sebagai berikut:
-
Tanpa menentukan versi (versi terbaru dimuat secara default):
<service_url>/v1/models/<model_name>:predict -
Dengan menentukan versi model:
<service_url>/v1/models/<model_name>/versions/<version_num>:predict -
Jika label versi telah ditetapkan:
<service_url>/v1/models/<model_name>/labels/<version label>:predict
Dalam kasus ini, <model_name> adalah nama model yang ditentukan dalam file konfigurasi model.
<service_url> adalah URL layanan yang telah diterapkan. Di halaman Elastic Algorithm Service (EAS), klik Invocation Information di kolom Service Type untuk layanan tersebut guna melihat URL layanan. Saat menggunakan debugging online, konsol secara otomatis mengisi bagian jalur ini.
Untuk penerapan berbasis skenario model tunggal modelA, jalur permintaan HTTP-nya adalah
<service_url>/v1/models/model:predict.Contoh berikut menunjukkan cara mengirim permintaan layanan menggunakan fitur debugging online di konsol dan menggunakan kode Python.
Debugging online
Setelah layanan diterapkan, klik Online Debugging di kolom Actions untuk layanan tersebut. Di bagian Request Parameter Online Tuning, URL layanan telah diisi sebelumnya. Tambahkan jalur
/v1/models/model:predictke URL tersebut dan konfigurasikan data permintaan di bidang Body:{"signature_name": "serving_default", "instances": [[[[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]], [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0......Setelah parameter dikonfigurasi, klik Send Request. Output-nya mirip dengan berikut.
Status Code: 200 Connection: Keep-Alive Content-Length: 158 Content-Type: application/json Date: Fri, 08 Nov 2024 02:28:08 GMT Body: { "predictions": [[-9.40927601, -5.41267443, -15.9157038, -15.7119455, -16.194952, -42.5621414, -7.23207045, -43.1042442, 4.25585461, -31.3991375] ] }Kirim permintaan HTTP dengan Python
Berikut adalah contoh kode Python:
from urllib import request import json # Ganti placeholder berikut dengan URL layanan dan token Anda. # Untuk mendapatkan informasi ini, klik Invocation Information di daftar layanan inferensi dan buka tab Public Endpoint. service_url = '<service_url>' token = '<test-token>' # Untuk penerapan satu model berbasis skenario, atur model_name menjadi "model". # Untuk skenario lain, lihat tabel deskripsi jalur di atas. model_name = "model" url = "{}/v1/models/{}:predict".format(service_url, model_name) # Buat permintaan HTTP. req = request.Request(url, method="POST") req.add_header('authorization', token) data = { 'signature_name': 'serving_default', 'instances': [[[[1.0]] * 28] * 28] } # Kirim permintaan ke layanan. response = request.urlopen(req, data=json.dumps(data).encode('utf-8')).read() # Lihat respons. response = json.loads(response) print(response)Permintaan gRPC
Setelah Anda mengatur nomor port ke 8500 dan menambahkan konfigurasi gRPC, layanan mendukung permintaan gRPC. Kode Python berikut memberikan contohnya:
import grpc import tensorflow as tf from tensorflow_serving.apis import predict_pb2 from tensorflow_serving.apis import prediction_service_pb2_grpc from tensorflow.core.framework import tensor_shape_pb2 # URL layanan. Untuk formatnya, lihat deskripsi parameter host di bawah. host = "tf-serving-multi-grpc-test.166233998075****.cn-hangzhou.pai-eas.aliyuncs.com:80" # Ganti <test-token> dengan token layanan. Anda dapat menemukan token di tab Public Endpoint. token = "<test-token>" # Nama model. Untuk informasi lebih lanjut, lihat deskripsi parameter name di bawah. name = "<model_name>" signature_name = "serving_default" # Nomor versi model. Anda hanya dapat mengirim permintaan ke satu versi model dalam satu waktu. version = "<version_num>" # Buat permintaan gRPC. request = predict_pb2.PredictRequest() request.model_spec.name = name request.model_spec.signature_name = signature_name request.model_spec.version.value = version request.inputs["keras_tensor"].CopyFrom(tf.make_tensor_proto([[[[1.0]] * 28] * 28])) # Kirim permintaan ke layanan. channel = grpc.insecure_channel(host) stub = prediction_service_pb2_grpc.PredictionServiceStub(channel) metadata = (("authorization", token),) response, _ = stub.Predict.with_call(request, metadata=metadata) print(response)Parameter utama dijelaskan sebagai berikut:
Parameter
Deskripsi
host
Atur parameter ini ke URL layanan. Hilangkan
http://dari URL dan tambahkan:80di akhir. Untuk menemukan URL layanan, buka halaman Elastic Algorithm Service (EAS). Lalu, temukan layanan yang ingin Anda panggil dan klik Invocation Information di kolom Service Type.name
-
Untuk mengirim permintaan gRPC untuk satu model:
-
Untuk penerapan berbasis skenario, atur parameter ini menjadi
model. -
Untuk penerapan kustom, atur parameter ini menjadi nama model yang ditentukan di Command to Run. Jika nama model tidak ditentukan dalam perintah, nilai default-nya adalah
model.
-
-
Untuk mengirim permintaan gRPC untuk beberapa model:
Atur parameter ini menjadi nama model yang ditentukan dalam file konfigurasi model.
version
Atur parameter ini ke nomor versi model. Anda hanya dapat mengirim permintaan ke satu versi model dalam satu waktu.
metadata
Atur parameter ini ke token layanan. Anda dapat menemukan token di halaman Invocation Information.
-
Dokumen terkait
-
Untuk menerapkan layanan EAS menggunakan mesin inferensi Triton Server, lihat Penerapan berbasis gambar Triton Inference Server.
-
Anda juga dapat menerapkan layanan EAS menggunakan gambar kustom. Untuk informasi lebih lanjut, lihat Gambar kustom.