全部产品
Search
文档中心

Container Service for Kubernetes:Inferensi elastis berbasis ECS

更新时间:Jul 06, 2025

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

Prosedur

  1. Buat kolam node elastis.

    1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

    2. Di halaman Clusters, temukan cluster yang ingin Anda kelola dan klik nama cluster atau pilih Details di kolom Actions. Halaman detail cluster akan muncul.

    3. Di panel navigasi kiri halaman detail, pilih Nodes > Node Pools.

    4. Di pojok kanan atas halaman Node Pools, klik Create Node Pool.

    5. 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 inferensi dan Value menjadi tensorflow.

      Kebijakan Penskalaan

      Pilih Cost Optimization, dan atur Percentage of Pay-as-you-go Instances menjadi 30%.

  2. Unggah model yang telah dilatih ke bucket Object Storage Service (OSS). Untuk informasi lebih lanjut, lihat Unggah Objek.

  3. Buat volume persisten (PV) dan klaim volume persisten (PVC).

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

      Parameter

      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=0 untuk menonaktifkan caching metadata. Jika fitur ini dinonaktifkan, sistem mengambil metadata terbaru dari OSS setiap kali mencoba mengakses objek di OSS.

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

      Untuk informasi lebih lanjut tentang parameter lainnya, lihat Parameter kustom yang didukung oleh ossfs.

    2. Jalankan perintah berikut untuk membuat PV dan PVC:

      kubectl apply -f pvc.yaml
  4. 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=1 

    Parameter

    Deskripsi

    selector

    Parameter selector digunakan untuk memilih pod untuk pekerjaan pelatihan TensorFlow berdasarkan label. Dalam contoh ini, nilainya diatur ke inferensi: tensorflow.

    limits: nvidia.com/gpu

    Jumlah maksimum GPU yang dapat digunakan oleh layanan.

    requests: nvidia.com/gpu

    Jumlah minimum GPU yang dibutuhkan oleh layanan.

    model-name

    Nama model.

    model-path

    Path model.

  5. Konfigurasikan Horizontal Pod Autoscaler (HPA). HPA dapat secara otomatis menyesuaikan jumlah pod replika di kluster Kubernetes berdasarkan beban kerja.

    1. Buat file bernama hpa.yaml dan 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: 10

      Parameter

      Deskripsi

      scaleTargetRef

      Objek yang diikat oleh HPA. Dalam contoh ini, nilainya diatur ke nama Deployment layanan inferensi.

      minReplicas

      Jumlah minimum pod replika.

      maxReplicas

      Jumlah maksimum pod replika.

      sls.project

      Nama proyek Layanan Log Sederhana yang digunakan oleh kluster. Nilai parameter ini harus dalam format k8s-log-{cluster id}.

      sls.logstore

      Nama Layanan Log Sederhana Logstore. Nilai default adalah nginx-ingress.

      sls.ingress.route

      Ingress yang digunakan untuk mengekspos layanan. Dalam contoh ini, nilainya diatur ke {namespace}-{service name}-{service port}.

      metricname

      Nama metrik. Dalam contoh ini, nilainya diatur ke sls_ingress_qps.

      targetaverageValue

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

    2. Jalankan perintah berikut untuk menyebarkan HPA:

      kubectl apply -f hpa.yaml
  6. Konfigurasikan Ingress yang menghadap Internet.

    Secara default, layanan inferensi yang disebarkan dengan menjalankan perintah arena serve tensorflow menggunakan ClusterIP Service, yang tidak dapat diakses melalui Internet. Oleh karena itu, Anda harus membuat Ingress yang menghadap Internet untuk layanan inferensi.

    1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

    2. Di halaman Clusters, temukan cluster yang Anda inginkan dan klik namanya. Di panel kiri, pilih Network > Ingresses.

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

  7. Setelah Anda membuat Ingress, buka halaman Ingresses dan temukan Ingress. Nilai di kolom Rules berisi titik akhir Ingress. 12

  8. Gunakan alamat Ingress yang diperoleh untuk melakukan uji stres pada layanan inferensi.

  9. Masuk ke AI Dashboard. Untuk informasi lebih lanjut, lihat Akses AI Dashboard.

    Penting

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

  10. Di panel navigasi kiri AI Dashboard, pilih Elastic Job > Job List. 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.ESS