Setelah sebuah model dilatih, model tersebut biasanya diterapkan sebagai layanan inferensi. Jumlah panggilan ke layanan inferensi berubah secara dinamis sesuai dengan kebutuhan bisnis. Skalabilitas elastis diperlukan untuk menangani beban yang bervariasi dan mengurangi biaya. Solusi penyebaran konvensional tidak dapat memenuhi persyaratan elastisitas sistem berskala besar dan sangat konkuren. Container Service for Kubernetes (ACK) memungkinkan Anda menyebarkan beban kerja di kolam node elastis untuk mendukung skalabilitas elastis layanan inferensi. Topik ini menjelaskan cara menjalankan beban kerja inferensi elastis pada instance Elastic Compute Service (ECS).
Prasyarat
Sebuah model telah dilatih. Dalam topik ini, model BERT yang dilatih menggunakan TensorFlow 1.15 digunakan.
Komponen ack-alibaba-cloud-metrics-adapter telah diinstal. Untuk informasi lebih lanjut, lihat Kelola Komponen.
AI Dashboard telah diinstal. Untuk informasi lebih lanjut, lihat Sebarkan Suite AI Cloud-Native.
Prosedur
Buat kolam node elastis.
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan cluster yang ingin Anda kelola dan klik nama cluster atau pilih Details di kolom Actions. Halaman detail cluster akan muncul.
Di panel navigasi kiri halaman detail, pilih .
Di pojok kanan atas halaman Node Pools, klik Create Node Pool.
Di kotak dialog Create Node Pool, atur parameter yang diperlukan dan klik Confirm Order. Tabel berikut menjelaskan parameter utama. Untuk informasi lebih lanjut tentang parameter lainnya, lihat Buat dan Kelola Kolam Node.
Parameter
Deskripsi
Auto Scaling
Pilih Auto, dan konfigurasikan Min. Instances dan Max. Instances.
Metode Penagihan
Pilih Preemptible Instance.
Label Node
Atur Key menjadi
inferensidan Value menjaditensorflow.Kebijakan Penskalaan
Pilih Cost Optimization, dan atur Percentage of Pay-as-you-go Instances menjadi 30%.
Unggah model yang telah dilatih ke bucket Object Storage Service (OSS). Untuk informasi lebih lanjut, lihat Unggah Objek.
Buat volume persisten (PV) dan klaim volume persisten (PVC).
Buat file bernama
pvc.yamldan salin konten berikut ke dalam file: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 // Nilai ini harus sama dengan nama PV. volumeAttributes: bucket: "<Bucket Anda>" url: "<URL OSS Anda>" akId: "<ID Access Key Anda>" akSecret: "<Rahasia Access Key Anda>" 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, yang unik secara global di OSS. Untuk informasi lebih lanjut, lihat Konvensi penamaan bucket.
url
URL yang digunakan untuk mengakses objek di bucket. Untuk informasi lebih lanjut, lihat Dapatkan URL satu objek atau beberapa objek.
akId
ID AccessKey dan Rahasia AccessKey yang digunakan untuk mengakses bucket OSS. Kami merekomendasikan Anda mengakses bucket OSS sebagai Pengguna Resource Access Management (RAM). Untuk informasi lebih lanjut, lihat Buat pasangan AccessKey.
akSecret
otherOpts
Parameter kustom untuk memasang bucket OSS.
Atur
-o max_stat_cache_size=0untuk menonaktifkan caching metadata. Jika fitur ini dinonaktifkan, sistem mengambil metadata terbaru dari OSS setiap kali mencoba mengakses objek di OSS.Atur
-o allow_otheruntuk mengizinkan pengguna lain mengakses bucket OSS yang Anda pasang.
Untuk informasi lebih lanjut tentang parameter lainnya, lihat Parameter kustom yang didukung oleh ossfs.
Jalankan perintah berikut untuk membuat PV dan PVC:
kubectl apply -f pvc.yaml
Jalankan perintah berikut untuk menyebarkan layanan inferensi:
arena serve tensorflow \ --name=bert-tfserving \ --model-name=chnsenticorp \ --selector=inference:tensorflow \ --gpus=1 \ --image=tensorflow/serving:1.15.0-gpu \ --data=model-pvc:/models \ --model-path=/models/tensorflow \ --version-policy=specific:1623831335 \ --limits=nvidia.com/gpu=1 \ --requests=nvidia.com/gpu=1Parameter
Deskripsi
selectorParameter
selectordigunakan untuk memilih pod untuk pekerjaan pelatihan TensorFlow berdasarkan label. Dalam contoh ini, nilainya diatur keinferensi: tensorflow.limits: nvidia.com/gpuJumlah maksimum GPU yang dapat digunakan oleh layanan.
requests: nvidia.com/gpuJumlah minimum GPU yang dibutuhkan oleh layanan.
model-nameNama model.
model-pathPath model.
Konfigurasikan Horizontal Pod Autoscaler (HPA). HPA dapat secara otomatis menyesuaikan jumlah pod replika di kluster Kubernetes berdasarkan beban kerja.
Buat file bernama
hpa.yamldan salin konten berikut ke dalam file:apiVersion: autoscaling/v2beta1 kind: HorizontalPodAutoscaler metadata: name: bert-tfserving-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: bert-tfserving-202107141745-tensorflow-serving minReplicas: 1 maxReplicas: 10 metrics: - type: External external: metricName: sls_ingress_qps metricSelector: matchLabels: sls.project: "k8s-log-c210fbedb96674b9eaf15f2dc47d169a8" sls.logstore: "nginx-ingress" sls.ingress.route: "default-bert-tfserving-202107141745-tensorflow-serving-8501" targetAverageValue: 10Parameter
Deskripsi
scaleTargetRefObjek yang diikat oleh HPA. Dalam contoh ini, nilainya diatur ke nama Deployment layanan inferensi.
minReplicasJumlah minimum pod replika.
maxReplicasJumlah maksimum pod replika.
sls.projectNama proyek Layanan Log Sederhana yang digunakan oleh kluster. Nilai parameter ini harus dalam format
k8s-log-{cluster id}.sls.logstoreNama Layanan Log Sederhana Logstore. Nilai default adalah
nginx-ingress.sls.ingress.routeIngress yang digunakan untuk mengekspos layanan. Dalam contoh ini, nilainya diatur ke
{namespace}-{service name}-{service port}.metricnameNama metrik. Dalam contoh ini, nilainya diatur ke
sls_ingress_qps.targetaverageValueNilai permintaan per detik (QPS) yang memicu aktivitas penskalaan keluar. Dalam contoh ini, nilai parameter ini diatur ke
10. Aktivitas penskalaan keluar dipicu ketika nilai QPS lebih besar dari 10.Jalankan perintah berikut untuk menyebarkan HPA:
kubectl apply -f hpa.yaml
Konfigurasikan Ingress yang menghadap Internet.
Secara default, layanan inferensi yang disebarkan dengan menjalankan perintah
arena serve tensorflowmenggunakan ClusterIP Service, yang tidak dapat diakses melalui Internet. Oleh karena itu, Anda harus membuat Ingress yang menghadap Internet untuk layanan inferensi.Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan cluster yang Anda inginkan dan klik namanya. Di panel kiri, pilih .
Di bagian atas halaman Ingresses, pilih namespace tempat layanan inferensi berada dari daftar drop-down Namespace, dan klik Create Ingress. Atur parameter yang dijelaskan dalam tabel berikut. Untuk informasi lebih lanjut tentang parameter, lihat Buat NGINX Ingress.
Name: Dalam contoh ini, nilainya diatur ke
bert-tfserving.Rule:
Domain Name: Masukkan nama domain kustom, seperti
test.example.com.Mappings
Path: Path root
/digunakan dalam contoh ini.Rule: Aturan default (ImplementationSpecific) digunakan dalam contoh ini.
Service Name: Masukkan nama layanan yang dikembalikan oleh perintah
kubectl get service.Port: Dalam contoh ini, atur parameter ini ke 8501.
Setelah Anda membuat Ingress, buka halaman Ingresses dan temukan Ingress. Nilai di kolom Rules berisi titik akhir Ingress.

Gunakan alamat Ingress yang diperoleh untuk melakukan uji stres pada layanan inferensi.
Masuk ke AI Dashboard. Untuk informasi lebih lanjut, lihat Akses AI Dashboard.
PentingSebelum masuk ke AI Dashboard, Anda harus menginstal suite AI cloud-native dan menentukan metode akses. Untuk informasi lebih lanjut, lihat Sebarkan Suite AI Cloud-Native.
Di panel navigasi kiri AI Dashboard, pilih . Klik tab Inference Job untuk melihat detail tentang layanan inferensi.
Gambar berikut menunjukkan bahwa semua pod yang dibuat dalam aktivitas penskalaan keluar berjalan pada instance ECS. Baik instance ECS pay-as-you-go maupun preemptible disediakan. Rasio instance ECS pay-as-you-go sama dengan nilai persentase yang Anda tentukan saat membuat kolam node.
