全部产品
Search
文档中心

Container Service for Kubernetes:Inferensi elastis berbasis ECI

更新时间:Dec 27, 2025

Setelah melatih model, Anda biasanya menerapkannya sebagai layanan inferensi. Jumlah panggilan ke layanan tersebut berfluktuasi sesuai permintaan bisnis, sehingga memerlukan server yang dapat diskalakan secara elastis untuk menghemat biaya. Solusi penerapan konvensional tidak mampu memenuhi tuntutan sistem berskala besar dengan konkurensi tinggi. Alibaba Cloud memungkinkan Anda menjalankan beban kerja pada Elastic Container Instance (ECI) guna memenuhi kebutuhan skalabilitas elastis layanan inferensi. Topik ini menjelaskan cara menjalankan layanan inferensi elastis pada ECI.

Prasyarat

  • Sebuah model siap untuk diterapkan. Topik ini menggunakan model Bidirectional Encoder Representations from Transformers (BERT) yang dilatih dengan TensorFlow 1.15.

  • Komponen ack-virtual-node, ack-alibaba-cloud-metrics-adapter, dan arena telah diinstal. Untuk informasi selengkapnya tentang cara mengelola komponen, lihat Manage components. Untuk informasi selengkapnya tentang ack-virtual-node, lihat Connect to ECI.

Prosedur

  1. Unggah model yang telah dilatih ke bucket Object Storage Service (OSS). Untuk informasi selengkapnya, lihat Upload objects.

  2. Buat persistent volume (PV) dan persistent volume claim (PVC).

    1. Buat file bernama pvc.yaml menggunakan 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 # Must be the same as the PV name.
          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
        volumeName: model-csi-pv
        storageClassName: ""
        resources:
          requests:
            storage: 5Gi

      Parameter

      Deskripsi

      bucket

      Nama bucket OSS, yang bersifat unik secara global dalam OSS. Untuk informasi selengkapnya, lihat Bucket naming conventions.

      url

      URL yang digunakan untuk mengakses objek di dalam bucket. Untuk informasi selengkapnya, lihat Mendapatkan URL objek tunggal atau URL beberapa objek.

      akId

      ID AccessKey dan Rahasia AccessKey yang digunakan untuk mengakses bucket OSS. Kami menyarankan agar Anda mengakses bucket OSS sebagai pengguna Resource Access Management (RAM). Untuk informasi selengkapnya, lihat Create an AccessKey pair.

      akSecret

      otherOpts

      Parameter kustom untuk memasang bucket OSS.

      • Tetapkan -o max_stat_cache_size=0 untuk menonaktifkan cache metadata. Jika fitur ini dinonaktifkan, sistem akan mengambil metadata terbaru dari OSS setiap kali mencoba mengakses objek di OSS.

      • Tetapkan -o allow_other untuk mengizinkan pengguna lain mengakses bucket OSS yang telah Anda pasang.

      Untuk informasi selengkapnya tentang parameter lainnya, lihat Custom parameters supported by ossfs.

    2. Jalankan perintah berikut untuk membuat PV dan PVC.

      kubectl apply -f pvc.yaml
  3. Terapkan layanan inferensi.

    1. Jalankan perintah berikut untuk menerapkan layanan inferensi.

      Saat menerapkan layanan inferensi, Anda dapat menggunakan anotasi untuk menentukan jenis resource. Parameter utama dijelaskan di bawah ini.

      Parameter

      Deskripsi

      alibabacloud.com/burst-resource

      Nilai yang valid:

      • Default (tidak dikonfigurasi): Hanya menggunakan resource Elastic Compute Service (ECS) yang tersedia di kluster.

      • eci: Menggunakan resource ECI ketika resource ECS di kluster tidak mencukupi.

      • eci_only: Hanya menggunakan resource ECI. Resource ECS di kluster tidak digunakan.

      k8s.aliyun.com/eci-use-specs

      Untuk menggunakan resource GPU ECI, gunakan anotasi ini untuk menentukan tipe instans GPU-accelerated.

      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
    2. Jalankan perintah berikut untuk melihat status layanan.

      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. Jalankan perintah berikut untuk melihat status pod.

      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>

      Output tersebut menunjukkan bahwa tipe Node adalah virtual-kubelet-cn-beijing-h, yang mengindikasikan bahwa pod diterapkan pada instans ECI.

  4. Buat Horizontal Pod Autoscaler (HPA). HPA secara otomatis menskalakan jumlah replika pod di Kubernetes berdasarkan beban kerja.

    1. Jalankan perintah berikut untuk melihat deployment layanan inferensi.

      kubectl get deployment

      Output yang diharapkan:

      NAME                                             READY   UP-TO-DATE   AVAILABLE   AGE
      bert-tfserving-202207181536-tensorflow-serving   1/1     1            1           2m18s
    2. Jalankan perintah berikut untuk melihat layanan inferensi.

      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
    3. Buat file bernama bert-tfserving-eci-hpa.yaml menggunakan templat berikut.

      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 dijelaskan di bawah ini.

      Parameter

      Deskripsi

      scaleTargetRef

      Objek yang diikat oleh HPA. Dalam topik ini, diatur ke nama deployment layanan inferensi dari Langkah a.

      minReplicas

      Jumlah minimum replika.

      maxReplicas

      Jumlah maksimum replika.

      sls.project

      Nama proyek log kluster. Formatnya adalah k8s-log-{cluster id}. Ganti {cluster id} dengan ID kluster aktual Anda.

      sls.logstore

      Nama penyimpanan log. Nilai default-nya adalah nginx-ingress.

      sls.ingress.route

      Entri rute Ingress. Formatnya adalah {namespace}-{service name}-{service port}.

      metricname

      Nama metrik. Dalam topik ini, diatur ke sls_ingress_qps.

      targetaverageValue

      Nilai permintaan per detik (QPS) yang memicu skala keluar. Dalam topik ini, diatur ke 10. Skala keluar dipicu ketika QPS melebihi 10.

    4. Jalankan perintah berikut untuk melihat status HPA.

      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
  5. Konfigurasikan Ingress publik.

    Secara default, layanan inferensi yang diterapkan oleh perintah arena serve tensorflow diekspos melalui layanan ClusterIP dan tidak dapat diakses dari jaringan publik. Oleh karena itu, Anda harus membuat Ingress publik untuk layanan inferensi tersebut.

    1. Pada halaman Ingresses, pilih Namespace tempat layanan inferensi berada, lalu klik Create Ingress. Konfigurasikan parameter berikut. Untuk informasi selengkapnya tentang parameter tersebut, lihat Create and use an NGINX Ingress to expose a service.

      • Name: Atur ke bert-tfserving.

      • Rules:

        • Domain Name: Nama domain kustom, seperti test.example.com.

        • Path Mapping:

          • Path: Pertahankan path root /.

          • Matching Rule: Default (ImplementationSpecific).

          • Service Name: Atur ke nama layanan yang Anda peroleh di langkah 3.b. Dalam contoh ini, nama layanannya adalah bert-tfserving-202207181536-tensorflow-serving.

          • Port: Atur ke 8501.

    2. Pada halaman Ingresses, lihat alamat Ingress target di kolom Rules.

  6. Gunakan alamat yang diperoleh di langkah 5.d untuk melakukan uji stres pada layanan inferensi. Skala keluar dipicu jika permintaan per detik (QPS) melebihi nilai averageValue yang dikonfigurasi di HPA. Jumlah pod tidak melebihi maxReplicas. Skala masuk dipicu jika QPS turun di bawah nilai averageValue.