All Products
Search
Document Center

Container Service for Kubernetes:Elastic Inference pada ECI

Last Updated:Mar 27, 2026

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)
  1. Unggah model yang telah dilatih ke bucket Object Storage Service (OSS).

  2. Pasang bucket OSS ke kluster menggunakan volume persisten (PV) dan klaim volume persisten (PVC).

  3. Terapkan layanan inferensi menggunakan arena, dengan anotasi yang mengarahkan Pod baru ke ECI.

  4. Konfigurasikan HPA dengan metrik eksternal yang bersumber dari Simple Log Service (SLS) untuk memicu skala keluar saat QPS melebihi ambang batas.

  5. Buat Ingress yang menghadap Internet agar klien eksternal dapat mengakses layanan tersebut.

  6. 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.

  1. Buat file bernama pvc.yaml dengan 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: 5Gi

    Ganti 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 otherOpts menerima 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.

  2. 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.

  1. 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.xlarge

    Dua anotasi tersebut mengontrol penjadwalan ECI:

    Anotasi Deskripsi
    alibabacloud.com/burst-resource Mengontrol tempat penjadwalan Pod. Biarkan kosong untuk hanya menggunakan ECS (default). Atur ke eci untuk menggunakan ECI ketika kapasitas ECS tidak mencukupi. Atur ke eci_only untuk hanya menggunakan ECI.
    k8s.aliyun.com/eci-use-specs Menentukan tipe instans ECI yang dipercepat GPU. Wajib ditentukan saat menggunakan sumber daya GPU ECI.
  2. Verifikasi layanan sedang berjalan:

    arena serve list

    Output 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
  3. Konfirmasi Pod berjalan pada ECI:

    kubectl get pods -o wide

    Output 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 NODE virtual-kubelet-cn-beijing-h mengonfirmasi 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.

  1. Periksa nama Deployment dan Service yang dibuat oleh arena:

    kubectl get deployment

    Output yang diharapkan:

    NAME                                             READY   UP-TO-DATE   AVAILABLE   AGE
    bert-tfserving-202207181536-tensorflow-serving   1/1     1            1           2m18s
    kubectl get service

    Output 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
  2. Buat file bernama bert-tfserving-eci-hpa.yaml dengan konten berikut:

    Parameter Deskripsi
    scaleTargetRef Deployment yang akan diskalakan — yaitu Deployment layanan inferensi yang dibuat pada Langkah 3.
    minReplicas Jumlah minimum Pod.
    maxReplicas Jumlah maksimum Pod.
    sls.project Nama proyek SLS untuk kluster Anda, dalam format k8s-log-{cluster id}. Ganti {cluster id} dengan ID kluster aktual Anda.
    sls.logstore Nama penyimpanan log SLS. Nilai default adalah nginx-ingress.
    sls.ingress.route Mengidentifikasi entri rute Ingress yang akan dipantau, dalam format {namespace}-{nama layanan}-{port layanan}.
    averageValue Ambang batas QPS per Pod yang memicu skala keluar. Diatur ke 10 dalam 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:

  3. Terapkan manifes HPA:

    kubectl apply -f bert-tfserving-eci-hpa.yaml
  4. Verifikasi HPA aktif:

    kubectl get hpa

    Output 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.

  1. Masuk ke Konsol ACK dan klik Clusters di panel navigasi sebelah kiri.

  2. Klik nama kluster target. Di panel navigasi kiri, pilih Network > Ingresses.

  3. 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-tfserving
    Domain name test.example.com (gunakan domain Anda sendiri)
    Path /
    Rule ImplementationSpecific (default)
    Service name bert-tfserving-202207181536-tensorflow-serving
    Port 8501
  4. 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 batas maxReplicas (10).

  • Saat QPS turun di bawah averageValue, HPA memicu skala masuk.