Topik ini menjelaskan cara menerapkan model TensorFlow sebagai layanan inferensi menggunakan Arena.
Prasyarat
Prosedur
Topik ini menggunakan model BERT yang dilatih dengan TensorFlow 1.15 untuk menerapkan layanan inferensi. Model tersebut diekspor sebagai saved model.
-
Jalankan perintah berikut untuk memeriksa sumber daya GPU yang tersedia di kluster.
arena top nodeOutput yang diharapkan:
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%)Output tersebut menunjukkan bahwa tiga node GPU tersedia untuk penerapan model.
-
Unggah model ke bucket di Object Storage Service (OSS).
PentingLangkah-langkah berikut untuk mengunggah model ke OSS ditujukan untuk sistem Linux. Untuk instruksi unggah pada sistem operasi lainnya, lihat Panduan cepat alat baris perintah ossutil.
-
Buat bucket bernama
examplebucket.-
Jalankan perintah berikut untuk membuat
examplebucket.ossutil64 mb oss://examplebucket -
Output berikut menunjukkan bahwa
examplebucketberhasil dibuat.0.668238(s) elapsed
-
-
Unggah model ke bucket
examplebucket.ossutil64 cp model.savedmodel oss://examplebucket
-
Buat persistent volume (PV) dan persistent volume claim (PVC).
-
Buat file
Tensorflow.yamlberdasarkan templat 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 sama dengan nama PV. volumeAttributes: bucket: "Your Bucket" url: "Your oss url" akId: "Your AccessKey ID" akSecret: "Your AccessKey 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: 5GiParameter
Deskripsi
bucket
Nama bucket OSS. Nama tersebut harus unik secara global dalam OSS. Untuk informasi selengkapnya, lihat Konvensi penamaan bucket.
url
URL yang digunakan untuk mengakses file OSS. Untuk informasi selengkapnya, lihat Mendapatkan URL satu file atau beberapa file.
akId
ID AccessKey dan AccessKey Secret yang digunakan untuk mengakses OSS. Kami menyarankan Anda menggunakan RAM user untuk akses. Untuk informasi selengkapnya, lihat Buat pasangan Kunci Akses.
akSecret
otherOpts
Parameter kustom untuk memasang OSS.
-
Opsi
-o max_stat_cache_size=0menonaktifkan cache atribut. Setiap kali Anda mengakses file, informasi atribut terbaru diambil dari OSS. -
Opsi
-o allow_othermemungkinkan pengguna lain mengakses sistem file yang dipasang.
Untuk informasi selengkapnya tentang pengaturan parameter, lihat Opsi pengaturan yang didukung ossfs.
-
-
Jalankan perintah berikut untuk membuat PV dan PVC.
kubectl apply -f Tensorflow.yaml
-
-
Jalankan perintah berikut untuk memulai instans
tensorflow servingbernamabert-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:1623831335Output yang diharapkan:
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 status -
Jalankan perintah berikut untuk menampilkan daftar layanan yang sedang berjalan.
arena serve listHanya layanan
bert-tfservingyang sedang berjalan:NAME TYPE VERSION DESIRED AVAILABLE ADDRESS PORTS bert-tfserving Tensorflow 202106251556 1 1 172.16.95.171 GRPC:8500,RESTFUL:8501 -
Jalankan perintah berikut untuk melihat detail layanan inferensi
bert-tfserving.arena serve get bert-tfservingOutput yang diharapkan:
Name: 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.88Output tersebut menunjukkan bahwa model berhasil diterapkan menggunakan
tensorflow servingdan mengekspos dua port API: 8500 (gRPC) dan 8501 (HTTP). -
Secara default,
arena serve tensorflowmengekspos layanan inferensi melalui ClusterIP. Anda harus mengonfigurasi Ingress jaringan publik untuk akses langsung.-
Di halaman Clusters, klik nama kluster target. Di panel navigasi sebelah kiri, pilih .
-
Dari daftar drop-down Namespace di bagian atas halaman, pilih namespace
inference, yang berisi layanan inferensi yang dibuat pada Langkah 6. -
Di pojok kanan atas halaman, klik Create Ingress. Untuk informasi selengkapnya tentang parameter, lihat Buat dan gunakan Ingress NGINX untuk mengekspos layanan.
-
Name: Pada contoh ini, atur nama menjadi
Tensorflow. -
Rule:
-
Host: Nama domain kustom, misalnya,
test.example.com. -
Mappings:
-
Path: Biarkan bidang ini kosong untuk menggunakan path root
/. -
Match Rule: Nilai default (ImplementationSpecific).
-
Service: Dapatkan nama dengan menjalankan perintah
kubectl get service. -
Port: Pada contoh ini, atur port menjadi 8501.
-
-
-
-
-
Setelah Ingress dibuat, dapatkan alamat Ingress dari kolom Ingresses pada halaman Rules.
-
Jalankan perintah berikut untuk memanggil API layanan inferensi. Untuk informasi selengkapnya tentang
tensorflow serving, lihat dokumentasi API di Tensorflow Serving API.curl "http://<Ingress address>"Output yang diharapkan:
{ "model_version_status": [ { "version": "1623831335", "state": "AVAILABLE", "status": { "error_code": "OK", "error_message": "" } } ] }