Setelah melatih model, Anda biasanya menerapkannya sebagai layanan inferensi. Beban kerja inferensi memiliki pola lalu lintas yang bervariasi—kumpulan tetap node ECS tidak dapat menangani lonjakan mendadak secara efisien tanpa over-provisioning. Dengan menjadwalkan Pod inferensi pada Elastic Container Instance (ECI), Container Service for Kubernetes (ACK) memperluas kapasitas sesuai permintaan tanpa mengharuskan Anda mengelola node.
Topik ini memandu Anda dalam menerapkan model BERT sebagai layanan inferensi TensorFlow Serving pada ECI, mengonfigurasi Horizontal Pod Autoscaler (HPA) untuk melakukan skalabilitas berdasarkan permintaan per detik (QPS), serta mengekspos layanan tersebut ke Internet.
Cara kerja
Komponen-komponen berikut bekerja sama untuk menyediakan inferensi elastis:
Klien → Ingress (menghadap Internet) → Pod TF Serving (pada ECI)
↑
HPA (skala keluar/masuk)
↑
Metrics Adapter ← SLS (QPS nginx-ingress)
-
Unggah model yang telah dilatih ke bucket Object Storage Service (OSS).
-
Pasang bucket OSS ke kluster menggunakan volume persisten (PV) dan klaim volume persisten (PVC).
-
Terapkan layanan inferensi menggunakan
arena, dengan anotasi yang mengarahkan Pod baru ke ECI. -
Konfigurasikan HPA dengan metrik eksternal yang bersumber dari Simple Log Service (SLS) untuk memicu skala keluar saat QPS melebihi ambang batas.
-
Buat Ingress yang menghadap Internet agar klien eksternal dapat mengakses layanan tersebut.
-
Jalankan uji stres untuk memverifikasi bahwa HPA melakukan skala keluar dan masuk Pod berdasarkan QPS.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
-
Model yang telah dilatih dan siap diterapkan. Topik ini menggunakan model BERT yang dilatih dengan TensorFlow 1.15.
-
Komponen berikut terpasang di kluster ACK Anda: ack-virtual-node, ack-alibaba-cloud-metrics-adapter, dan arena. Untuk petunjuk instalasi, lihat Mengelola komponen. Untuk informasi tentang ack-virtual-node, lihat Ikhtisar koneksi.
Langkah 1: Unggah model ke OSS
Unggah file model yang telah dilatih ke bucket OSS. Untuk petunjuknya, lihat Mengunggah objek.
Langkah 2: Pasang model menggunakan PV dan PVC
Buat PV yang memetakan ke bucket OSS Anda dan PVC yang akan dipasang oleh Pod inferensi.
-
Buat file bernama
pvc.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-name>" 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 volumeName: model-csi-pv storageClassName: "" resources: requests: storage: 5GiGanti placeholder berikut:
Placeholder Deskripsi <your-bucket-name>Nama bucket OSS. Nama bucket bersifat unik secara global. Lihat Konvensi penamaan bucket. <your-oss-url>URL yang digunakan untuk mengakses objek dalam bucket. Lihat Mendapatkan URL satu objek atau beberapa objek. <your-access-key-id>ID AccessKey untuk akses OSS. Gunakan pengguna Resource Access Management (RAM) dengan izin least-privilege. Lihat Membuat pasangan AccessKey. <your-access-key-secret>Rahasia AccessKey yang sesuai dengan ID AccessKey di atas. Bidang
otherOptsmenerima opsi pemasangan kustom untuk ossfs:-
-o max_stat_cache_size=0— menonaktifkan cache metadata sehingga Pod selalu membaca metadata objek terbaru dari OSS. -
-o allow_other— memungkinkan proses yang berjalan sebagai pengguna lain dalam Pod mengakses bucket yang dipasang.
Untuk opsi pemasangan tambahan, lihat Parameter kustom yang didukung oleh ossfs.
-
-
Terapkan manifes:
kubectl apply -f pvc.yaml
Langkah 3: Terapkan layanan inferensi
Gunakan arena untuk menerapkan layanan inferensi TensorFlow Serving. Bendera --annotation mengontrol apakah Pod ditempatkan pada node ECS atau ECI.
-
Jalankan perintah berikut:
arena serve tensorflow \ --namespace=default \ --name=bert-tfserving \ --model-name=chnsenticorp \ --gpus=1 \ --image=tensorflow/serving:1.15.0-gpu \ --data=model-pvc:/data \ --model-path=/data/models/tensorflow/chnsenticorp \ --version-policy=specific:1623831335 \ --annotation=alibabacloud.com/burst-resource=eci_only \ --annotation=k8s.aliyun.com/eci-use-specs=ecs.gn6i-c4g1.xlargeDua anotasi tersebut mengontrol penjadwalan ECI:
Anotasi Deskripsi alibabacloud.com/burst-resourceMengontrol tempat penjadwalan Pod. Biarkan kosong untuk hanya menggunakan ECS (default). Atur ke eciuntuk menggunakan ECI ketika kapasitas ECS tidak mencukupi. Atur keeci_onlyuntuk hanya menggunakan ECI.k8s.aliyun.com/eci-use-specsMenentukan tipe instans ECI yang dipercepat GPU. Wajib ditentukan saat menggunakan sumber daya GPU ECI. -
Verifikasi layanan sedang berjalan:
arena serve listOutput yang diharapkan:
NAME TYPE VERSION DESIRED AVAILABLE ADDRESS PORTS GPU bert-tfserving Tensorflow 202207181536 1 1 172.16.52.170 GRPC:8500,RESTFUL:8501 1 -
Konfirmasi Pod berjalan pada ECI:
kubectl get pods -o wideOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES bert-tfserving-202207181536-tensorflow-serving-547797c546-djh58 1/1 Running 0 114s 192.168.0.246 virtual-kubelet-cn-beijing-h <none> <none>Nilai
NODEvirtual-kubelet-cn-beijing-hmengonfirmasi bahwa Pod berjalan pada instans ECI, bukan node ECS.
Langkah 4: Konfigurasikan HPA untuk skalabilitas berbasis QPS
HPA secara otomatis menyesuaikan jumlah Pod inferensi berdasarkan metrik sls_ingress_qps dari SLS. Skala keluar dipicu ketika QPS melebihi averageValue; skala masuk ketika QPS turun di bawah nilai tersebut.
-
Periksa nama Deployment dan Service yang dibuat oleh
arena:kubectl get deploymentOutput yang diharapkan:
NAME READY UP-TO-DATE AVAILABLE AGE bert-tfserving-202207181536-tensorflow-serving 1/1 1 1 2m18skubectl get serviceOutput yang diharapkan:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE bert-tfserving-202207181536-tensorflow-serving ClusterIP 172.16.52.170 <none> 8500/TCP,8501/TCP 2m45s -
Buat file bernama
bert-tfserving-eci-hpa.yamldengan konten berikut:Parameter Deskripsi scaleTargetRefDeployment yang akan diskalakan — yaitu Deployment layanan inferensi yang dibuat pada Langkah 3. minReplicasJumlah minimum Pod. maxReplicasJumlah maksimum Pod. sls.projectNama proyek SLS untuk kluster Anda, dalam format k8s-log-{cluster id}. Ganti{cluster id}dengan ID kluster aktual Anda.sls.logstoreNama penyimpanan log SLS. Nilai default adalah nginx-ingress.sls.ingress.routeMengidentifikasi entri rute Ingress yang akan dipantau, dalam format {namespace}-{nama layanan}-{port layanan}.averageValueAmbang batas QPS per Pod yang memicu skala keluar. Diatur ke 10dalam contoh ini.apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: bert-tfserving-eci-hpa namespace: default spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: bert-tfserving-202207181536-tensorflow-serving minReplicas: 1 maxReplicas: 10 metrics: - type: External external: metric: name: sls_ingress_qps selector: matchLabels: sls.project: "k8s-log-{cluster id}" sls.logstore: "nginx-ingress" sls.ingress.route: "default-bert-tfserving-202207181536-tensorflow-serving-8501" target: type: AverageValue averageValue: "10"Parameter utama:
-
Terapkan manifes HPA:
kubectl apply -f bert-tfserving-eci-hpa.yaml -
Verifikasi HPA aktif:
kubectl get hpaOutput yang diharapkan:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE bert-tfserving-eci-hpa Deployment/bert-tfserving-202207181536-tensorflow-serving 0/10 (avg) 1 10 1 116s
Langkah 5: Ekspos layanan ke Internet
Secara default, arena serve tensorflow hanya menetapkan alamat IP kluster untuk layanan tersebut. Untuk menerima lalu lintas eksternal, buat Ingress yang menghadap Internet.
-
Masuk ke Konsol ACK dan klik Clusters di panel navigasi sebelah kiri.
-
Klik nama kluster target. Di panel navigasi kiri, pilih Network > Ingresses.
-
Pilih namespace tempat layanan inferensi berada dari daftar drop-down Namespace, lalu klik Create Ingress. Konfigurasikan parameter berikut. Untuk detailnya, lihat Membuat Ingress NGINX.
Parameter Nilai contoh Name bert-tfservingDomain name test.example.com(gunakan domain Anda sendiri)Path /Rule ImplementationSpecific(default)Service name bert-tfserving-202207181536-tensorflow-servingPort 8501 -
Di halaman Ingresses, temukan Ingress yang telah Anda buat dan catat alamatnya di kolom Rules.
Langkah 6: Verifikasi skalabilitas elastis dengan uji stres
Gunakan alamat Ingress dari Langkah 5 untuk mengirimkan beban ke layanan inferensi.
-
Saat QPS melebihi
averageValue(10 dalam contoh ini), HPA memicu skala keluar dan Pod baru dijadwalkan pada ECI. Jumlah total Pod tetap dalam batasmaxReplicas(10). -
Saat QPS turun di bawah
averageValue, HPA memicu skala masuk.