Setelah melatih model TensorFlow, Anda perlu menyediakannya sebagai API yang dapat diakses melalui jaringan agar aplikasi dapat memanggilnya. Panduan ini menjelaskan cara menggunakan Arena untuk menerapkan TensorFlow SavedModel sebagai layanan inferensi TensorFlow Serving pada kluster ACK, mencakup pengunggahan model ke OSS, konfigurasi penyimpanan persisten, peluncuran instans serving, dan akses eksternal melalui Ingress.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Panduan ini menggunakan model BERT yang dilatih dengan TensorFlow 1.15 dan diekspor sebagai SavedModel.
Persiapkan penyimpanan model
Langkah 1: Periksa sumber daya GPU yang tersedia
Jalankan perintah berikut untuk memverifikasi ketersediaan GPU di kluster:
arena top nodeOutput tersebut mencantumkan semua node GPU beserta status alokasinya:
NAME IPADDRESS ROLE STATUS GPU(Total) GPU(Allocated)
cn-beijing.192.168.0.100 192.168.0.100 <none> Ready 1 0
cn-beijing.192.168.0.101 192.168.0.101 <none> Ready 1 0
cn-beijing.192.168.0.99 192.168.0.99 <none> Ready 1 0
---------------------------------------------------------------------------------------------------
Allocated/Total GPUs of nodes which own resource nvidia.com/gpu In Cluster:
0/3 (0.0%)Kluster memiliki tiga node GPU, masing-masing dengan satu GPU yang belum dialokasikan.
Langkah 2: Unggah model ke OSS
Langkah-langkah berikut menggunakan ossutil pada Linux. Untuk sistem operasi lainnya, lihat ossutil.
Buat bucket bernama
examplebucket:ossutil64 mb oss://examplebucketOutput berikut mengonfirmasi bahwa bucket telah dibuat:
0.668238(s) elapsedUnggah SavedModel ke bucket:
ossutil64 cp model.savedmodel oss://examplebucket
Langkah 3: Buat volume persisten dan klaim volume persisten
Untuk memasang bucket OSS sebagai volume di dalam kontainer serving, buat persistent volume (PV) dan persistent volume claim (PVC).
Buat file bernama
Tensorflow.yamldengan konten berikut:apiVersion: v1 kind: PersistentVolume metadata: name: model-csi-pv spec: capacity: storage: 5Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: model-csi-pv # Harus sesuai dengan nama PV di atas volumeAttributes: bucket: "Your Bucket" url: "Your oss url" akId: "Your Access Key Id" akSecret: "Your Access Key Secret" otherOpts: "-o max_stat_cache_size=0 -o allow_other" --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: model-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 5GiGanti parameter berikut:
Parameter Deskripsi bucketNama bucket OSS. Untuk aturan penamaan, lihat Konvensi penamaan bucket. urlURL titik akhir untuk bucket tersebut. Untuk petunjuk mendapatkan URL, lihat Dapatkan URL objek tunggal atau URL beberapa objek. akIdID AccessKey yang digunakan untuk mengakses bucket OSS. Gunakan AccessKey milik pengguna Resource Access Management (RAM). Untuk detailnya, lihat Buat pasangan AccessKey. akSecretRahasia AccessKey yang dipasangkan dengan ID AccessKey di atas. otherOptsOpsi pemasangan kustom untuk bucket OSS. -o max_stat_cache_size=0menonaktifkan cache metadata sehingga sistem selalu membaca metadata objek terbaru dari OSS.-o allow_othermemungkinkan pengguna lain di node mengakses bucket yang dipasang. Untuk opsi tambahan, lihat Parameter kustom yang didukung oleh ossfs.Terapkan manifes untuk membuat PV dan PVC:
kubectl apply -f Tensorflow.yaml
Terapkan layanan inferensi
Langkah 4: Luncurkan TensorFlow Serving
Jalankan perintah berikut untuk menerapkan instans TensorFlow Serving bernama bert-tfserving:
arena serve tensorflow \
--name=bert-tfserving \
--model-name=chnsenticorp \
--gpus=1 \
--image=tensorflow/serving:1.15.0-gpu \
--data=model-pvc:/models \
--model-path=/models/tensorflow \
--version-policy=specific:1623831335| Parameter | Deskripsi |
|---|---|
--name | Nama pekerjaan serving. |
--model-name | Nama model yang digunakan TensorFlow Serving untuk mengidentifikasi model dalam permintaan API. |
--gpus | Jumlah GPU yang dialokasikan ke instans serving. |
--image | Gambar kontainer TensorFlow Serving. Harus sesuai dengan versi TensorFlow yang digunakan saat pelatihan. |
--data | Memasang PVC ke dalam kontainer. Format: <pvc-name>:<mount-path>. |
--model-path | Jalur di dalam kontainer tempat model disimpan. |
--version-policy | Versi model yang akan dimuat. specific:<version> mengunci serving ke satu versi tertentu. |
Output berikut mengonfirmasi bahwa pekerjaan telah dikirim:
configmap/bert-tfserving-202106251556-tf-serving created
configmap/bert-tfserving-202106251556-tf-serving labeled
configmap/bert-tfserving-202106251556-tensorflow-serving-cm created
service/bert-tfserving-202106251556-tensorflow-serving created
deployment.apps/bert-tfserving-202106251556-tensorflow-serving created
INFO[0003] The Job bert-tfserving has been submitted successfully
INFO[0003] You can run `arena get bert-tfserving --type tf-serving` to check the job statusLangkah 5: Verifikasi layanan sedang berjalan
Tampilkan daftar semua layanan inferensi yang sedang berjalan:
arena serve listOutput menampilkan layanan bert-tfserving beserta alamat dan port-nya:
NAME TYPE VERSION DESIRED AVAILABLE ADDRESS PORTS
bert-tfserving Tensorflow 202106251556 1 1 172.16.95.171 GRPC:8500,RESTFUL:8501Dapatkan detail lengkap layanan tersebut:
arena serve get bert-tfservingName: bert-tfserving
Namespace: inference
Type: Tensorflow
Version: 202106251556
Desired: 1
Available: 1
Age: 4m
Address: 172.16.95.171
Port: GRPC:8500,RESTFUL:8501
Instances:
NAME STATUS AGE READY RESTARTS NODE
---- ------ --- ----- -------- ----
bert-tfserving-202106251556-tensorflow-serving-8554d58d67-jd2z9 Running 4m 1/1 0 cn-beijing.192.168.0.88Layanan diterapkan di namespace inference. Port 8500 melayani permintaan gRPC dan port 8501 melayani permintaan HTTP/RESTful.
Akses layanan dari luar
arena serve tensorflow secara default menetapkan alamat IP kluster, yang hanya dapat dijangkau dari dalam kluster. Buat Ingress untuk mengekspos layanan agar dapat diakses dari luar.
Langkah 6: Buat Ingress
Di Konsol ACK, buka halaman Clusters, klik kluster target, lalu navigasikan ke Network > Ingresses di panel navigasi sebelah kiri.
Dari daftar drop-down Namespace di bagian atas halaman, pilih namespace
inference(namespace yang sama seperti yang ditampilkan dalam detail layanan di atas).Klik Create Ingress di pojok kanan atas. Untuk deskripsi lengkap parameter Ingress, lihat Buat Ingress NGINX. Gunakan pengaturan berikut:
Name:
TensorflowRules:
Domain name: Masukkan domain kustom, misalnya
test.example.comPath:
/Rule: ImplementationSpecific (default)
Service name: Nama layanan yang dikembalikan oleh
kubectl get servicePort:
8501
Setelah Ingress dibuat, kembali ke halaman Ingresses. Kolom Rules menampilkan alamat Ingress.

Langkah 7: Panggil API inferensi
Jalankan perintah berikut untuk memanggil API layanan inferensi. Untuk informasi lebih lanjut tentang TensorFlow Serving, lihat TensorFlow Serving API.
curl "http://<Ingress address>"Tanggapan sukses terlihat seperti berikut:
{
"model_version_status": [
{
"version": "1623831335",
"state": "AVAILABLE",
"status": {
"error_code": "OK",
"error_message": ""
}
}
]
}Bidang state: AVAILABLE mengonfirmasi bahwa model telah dimuat dan siap melayani permintaan inferensi.