全部产品
Search
文档中心

Container Service for Kubernetes:Analisis dan optimalisasi model

更新时间:Jul 02, 2025

Untuk memastikan bahwa sebuah model memenuhi standar penerapan sebelum digunakan dalam lingkungan produksi, Anda dapat menggunakan perintah analisis dan optimalisasi model yang didukung oleh suite AI cloud-native. Perintah ini membantu Anda membandingkan, menganalisis, dan mengoptimalkan model. Dalam topik ini, model ResNet18 dari PyTorch digunakan sebagai contoh dengan GPU V100 untuk mempercepat proses.

Prasyarat

  • Kluster Container Service for Kubernetes (ACK) Pro telah dibuat dengan versi Kubernetes 1.20 atau lebih baru. Kluster tersebut harus memiliki setidaknya satu node dengan akselerasi GPU. Untuk informasi lebih lanjut tentang cara memperbarui kluster ACK, lihat Perbarui kluster ACK.

  • Bucket Object Storage Service (OSS) telah dibuat. Volume persisten (PV) dan klaim volume persisten (PVC) juga telah dikonfigurasi. Untuk informasi lebih lanjut, lihat Pasang volume ossfs 1.0 yang diatur secara statis.

  • Versi terbaru klien Arena telah diinstal. Untuk informasi lebih lanjut, lihat Konfigurasikan klien Arena.

Informasi latar belakang

Ilmuwan data fokus pada presisi model, sedangkan insinyur R&D lebih peduli terhadap performa model. Ketika kedua belah pihak kurang memahami domain masing-masing, kesalahpahaman mudah terjadi. Akibatnya, sebuah model mungkin tidak memenuhi persyaratan performa setelah dirilis sebagai layanan online. Untuk mencegah masalah ini, Anda dapat membandingkan model sebelum merilisnya. Jika model tidak memenuhi persyaratan performa, Anda dapat mengidentifikasi hambatan performa dan mengoptimalkannya.

Pengenalan perintah analisis dan optimalisasi model

Suite AI cloud-native mendukung berbagai perintah analisis dan optimalisasi model. Anda dapat menjalankan perintah-perintah ini untuk membandingkan model, menganalisis struktur jaringan, memeriksa durasi setiap operator, dan melihat pemanfaatan GPU. Kemudian, Anda dapat mengidentifikasi hambatan performa suatu model dan menggunakan TensorRT untuk mengoptimalkannya. Ini membantu Anda merilis model yang memenuhi persyaratan performa lingkungan produksi. Gambar berikut menunjukkan siklus hidup model yang dibantu oleh perintah analisis dan optimalisasi model.Lifecycle

  1. Pelatihan Model: Model dilatih berdasarkan dataset tertentu.

  2. Pembandingan Model: Pembandingan dilakukan untuk memeriksa apakah latensi, throughput, dan pemanfaatan GPU model memenuhi persyaratan.

  3. Profil Model: Model dianalisis untuk mengidentifikasi hambatan performa.

  4. Optimalkan Model: Kemampuan inferensi GPU model dioptimalkan menggunakan alat seperti TensorRT.

  5. Pelayanan Model: Model diterapkan sebagai layanan online.

Catatan

Jika model masih tidak memenuhi persyaratan performa setelah dioptimalkan, Anda dapat mengulangi fase-fase sebelumnya.

Cara menjalankan perintah

Anda dapat menggunakan Arena untuk mengirim pekerjaan analisis, optimalisasi, pembandingan, dan evaluasi model ke kluster ACK Pro. Jalankan perintah arena model analyze --help untuk melihat informasi bantuan.

$ arena model analyze --help
submit a model analyze job.

Available Commands:
  profile          Submit a model profile job.
  evaluate         Submit a model evaluate job.
  optimize         Submit a model optimize job.
  benchmark        Submit a model benchmark job

Usage:
  arena model analyze [flags]
  arena model analyze [command]

Available Commands:
  benchmark   Submit a model benchmark job
  delete      Delete a model job
  evaluate    Submit a model evaluate job
  get         Get a model job
  list        List all the model jobs
  optimize    Submit a model optimize job, this is a experimental feature
  profile     Submit a model profile job

Langkah 1: Persiapkan model

Disarankan untuk menggunakan TorchScript untuk menerapkan model PyTorch. Dalam topik ini, model ResNet18 dari PyTorch digunakan sebagai contoh.

  1. Konversikan model. Konversikan model ResNet18 menjadi model TorchScript dan simpan model tersebut.

    import torch
    import torchvision
    
    model = torchvision.models.resnet18(pretrained=True)
    
    # Alihkan model ke mode eval
    model.eval()
    
    # Contoh input yang biasanya Anda berikan ke metode forward() model Anda.
    dummy_input = torch.rand(1, 3, 224, 224)
    
    # Gunakan torch.jit.trace untuk menghasilkan torch.jit.ScriptModule melalui pelacakan.
    traced_script_module = torch.jit.trace(model, dummy_input)
    
    # Simpan model TorchScript
    traced_script_module.save("resnet18.pt")
    

    Parameter

    Deskripsi

    model_name

    Nama model.

    model_platform

    Platform atau framework yang digunakan oleh model, seperti TorchScript dan ONNX.

    model_path

    Path tempat model disimpan.

    inputs

    Parameter input.

    outputs

    Parameter output.

  2. Setelah model dikonversi, unggah file konfigurasi model resnet18.pt ke OSS. Path OSS file konfigurasi adalah oss://bucketname/models/resnet18/resnet18.pt. Untuk informasi lebih lanjut, lihat Unggah objek.

Langkah 2: Lakukan pembandingan

Sebelum menerapkan model dalam lingkungan produksi, Anda dapat melakukan pembandingan untuk mengevaluasi performa model. Dalam langkah ini, pekerjaan pembandingan dikirim di Arena dan PVC bernama oss-pvc di namespace default kluster digunakan sebagai contoh. Untuk informasi lebih lanjut, lihat Pasang volume ossfs 1.0 yang diatur secara statis.

  1. Persiapkan dan unggah file konfigurasi model.

    1. Buat file konfigurasi untuk model. Dalam contoh ini, file konfigurasi bernama config.json.

      {
        "model_name": "resnet18",
        "model_platform": "torchscript",
        "model_path": "/data/models/resnet18/resnet18.pt",
        "inputs": [
          {
            "name": "input",
            "data_type": "float32",
            "shape": [1, 3, 224, 224]
          }
        ],
        "outputs": [
          {
              "name": "output",
              "data_type": "float32",
              "shape": [ 1000 ]
          }
        ]
      }
    2. Unggah file konfigurasi ke OSS. Path OSS file konfigurasi adalah oss://bucketname/models/resnet18/config.json.

  2. Jalankan perintah berikut untuk mengirim pekerjaan pembandingan ke kluster ACK Pro:

    arena model analyze benchmark \
      --name=resnet18-benchmark \
      --namespace=default \
      --image=registry.cn-beijing.aliyuncs.com/kube-ai/easy-inference:1.0.2 \
      --gpus=1 \
      --data=oss-pvc:/data \
      --model-config-file=/data/models/resnet18/config.json \
      --report-path=/data/models/resnet18 \
      --concurrency=5 \
      --duration=60

    Parameter

    Deskripsi

    --gpus

    Jumlah GPU yang digunakan.

    --data

    PVC untuk kluster dan path tempat PVC dipasang.

    --model-config-file

    Path file konfigurasi.

    --report-path

    Path tempat laporan pembandingan disimpan.

    --concurrency

    Jumlah permintaan konkuren.

    --duration

    Durasi pekerjaan pembandingan. Unit: detik.

    Penting
    • Anda tidak dapat menentukan parameter --requests dan parameter --duration pada saat bersamaan. Tentukan hanya salah satu dari mereka ketika Anda mengirim pekerjaan pembandingan. Jika Anda menentukan keduanya, sistem akan menggunakan parameter --duration secara default.

    • Untuk menentukan jumlah total permintaan yang dikirim oleh pekerjaan pembandingan, tentukan parameter --requests.

  3. Jalankan perintah berikut untuk memeriksa status pekerjaan:

    arena model analyze list -A

    Output yang diharapkan:

    NAMESPACE      NAME                        STATUS    TYPE       DURATION  AGE  GPU(Requested)
    default        resnet18-benchmark          COMPLETE  Benchmark  0s        2d   1
  4. Lihat laporan pembandingan. Jika parameter STATUS menampilkan COMPLETE, pekerjaan pembandingan selesai. Kemudian, Anda dapat menemukan laporan pembandingan bernama benchmark_result.txt di path yang ditentukan oleh parameter --report-path.

    Output yang diharapkan:

    {
        "p90_latency":7.511,
        "p95_latency":7.86,
        "p99_latency":9.34,
        "min_latency":7.019,
        "max_latency":12.269,
        "mean_latency":7.312,
        "median_latency":7.206,
        "throughput":136,
        "gpu_mem_used":1.47,
        "gpu_utilization":21.280
    }

    Tabel berikut menjelaskan metrik yang termasuk dalam laporan pembandingan.

    Metrik

    Deskripsi

    Unit

    p90_latency

    Waktu respons persentil ke-90

    Milidetik

    p95_latency

    Waktu respons persentil ke-95

    Milidetik

    p99_latency

    Waktu respons persentil ke-99

    Milidetik

    min_latency

    Waktu respons tercepat

    Milidetik

    max_latency

    Waktu respons terlama

    Milidetik

    mean_latency

    Rata-rata waktu respons

    Milidetik

    median_latency

    Waktu respons tengah

    Milidetik

    throughput

    Throughput

    Kali

    gpu_mem_used

    Penggunaan memori GPU

    GB

    gpu_utilization

    Pemanfaatan GPU

    Persentase

Langkah 3: Analisis model

Setelah melakukan pembandingan, Anda dapat menjalankan perintah arena model analyze profile untuk menganalisis model dan mengidentifikasi hambatan performa.

  1. Jalankan perintah berikut untuk mengirim pekerjaan analisis model ke kluster ACK Pro.

    arena model analyze profile \
      --name=resnet18-profile \
      --namespace=default \
      --image=registry.cn-beijing.aliyuncs.com/kube-ai/easy-inference:1.0.2 \
      --gpus=1 \
      --data=oss-pvc:/data \
      --model-config-file=/data/models/resnet18/config.json \
      --report-path=/data/models/resnet18/log/ \
      --tensorboard \
      --tensorboard-image=registry.cn-beijing.aliyuncs.com/kube-ai/easy-inference:1.0.2

    Parameter

    Deskripsi

    --gpus

    Jumlah GPU yang digunakan.

    --data

    PVC untuk kluster dan path tempat PVC dipasang.

    --model-config-file

    Path file konfigurasi.

    --report-path

    Path tempat laporan analisis disimpan.

    --tensorboard

    Menentukan apakah akan melihat laporan analisis di TensorBoard.

    --tensorboard-image

    URL gambar yang digunakan untuk menyebarkan Tensorboard.

  2. Jalankan perintah berikut untuk memeriksa status pekerjaan:

    arena model analyze list -A

    Output yang diharapkan:

    NAMESPACE      NAME                        STATUS    TYPE       DURATION  AGE  GPU(Requested)
    default        resnet18-profile            COMPLETE  Profile    13s       2d   1
  3. Jalankan perintah berikut untuk memeriksa status TensorBoard:

    kubectl get service -n default

    Output yang diharapkan:

    NAME                           TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
    resnet18-profile-tensorboard   NodePort   172.16.158.170   <none>        6006:30582/TCP   2d20h
  4. Jalankan perintah berikut untuk mengaktifkan pengalihan port dan mengakses TensorBoard:

    kubectl port-forward svc/resnet18-profile-tensorboard -n default 6006:6006

    Output yang diharapkan:

    Forwarding from 127.0.X.X:6006 -> 6006
    Forwarding from [::1]:6006 -> 6006
  5. Masukkan http://localhost:6006 ke bilah alamat browser Anda untuk melihat hasil analisis. Di panel navigasi kiri, klik Views untuk melihat hasil analisis berdasarkan beberapa dimensi dan mengidentifikasi hambatan performa. Anda dapat mengoptimalkan model berdasarkan hasil analisis.View Analysis Results

Langkah 4: Optimalkan model

Anda dapat menggunakan Arena untuk mengoptimalkan model.

  1. Jalankan perintah berikut untuk mengirim pekerjaan optimalisasi model ke kluster ACK Pro:

    arena model analyze optimize \
      --name=resnet18-optimize \
      --namespace=default \
      --image=registry.cn-beijing.aliyuncs.com/kube-ai/easy-inference:1.0.2 \
      --gpus=1 \
      --data=oss-pvc:/data \
      --optimizer=tensorrt \
      --model-config-file=/data/models/resnet18/config.json \
      --export-path=/data/models/resnet18

    Parameter

    Deskripsi

    --gpus

    Jumlah GPU yang digunakan.

    --data

    PVC untuk kluster dan path tempat PVC dipasang.

    --optimizer

    Metode optimalisasi. Nilai valid:

    • tensorrt (default)

    • aiacc-torch.

    --model-config-file

    Path file konfigurasi.

    --export-path

    Path tempat model yang dioptimalkan disimpan.

  2. Jalankan perintah berikut untuk memeriksa status pekerjaan:

    arena model analyze list -A

    Output yang diharapkan:

    NAMESPACE      NAME                        STATUS    TYPE       DURATION  AGE  GPU(Requested)
    default        resnet18-optimize           COMPLETE  Optimize   16s       2d   1
  3. Lihat file konfigurasi model yang dioptimalkan. Jika parameter STATUS menampilkan COMPLETE, pekerjaan optimalisasi selesai. Kemudian, Anda dapat menemukan file konfigurasi bernama opt_resnet18.pt di path yang ditentukan oleh parameter --export-path.

  4. Ubah nilai parameter --model_path dalam pekerjaan pembandingan menjadi path file konfigurasi yang Anda peroleh pada langkah sebelumnya, dan lakukan pembandingan lagi. Untuk informasi lebih lanjut tentang cara melakukan pembandingan, lihat Langkah 2: Lakukan Pembandingan.

    Tabel berikut menjelaskan nilai metrik sebelum dan sesudah model dioptimalkan.

    Metrik

    Sebelum optimalisasi

    Setelah optimalisasi

    p90_latency

    7.511 milidetik

    5.162 milidetik

    p95_latency

    7.86 milidetik

    5.428 milidetik

    p99_latency

    9.34 milidetik

    6.64 milidetik

    min_latency

    7.019 milidetik

    4.827 milidetik

    max_latency

    12.269 milidetik

    8.426 milidetik

    mean_latency

    7.312 milidetik

    5.046 milidetik

    median_latency

    7.206 milidetik

    4.972 milidetik

    throughput

    136 kali

    198 kali

    gpu_mem_used

    1.47 GB

    1.6 GB

    gpu_utilization

    21.280%

    10.912%

    Statistik menunjukkan bahwa performa dan pemanfaatan GPU model meningkat pesat setelah optimalisasi. Jika model masih tidak memenuhi persyaratan performa, Anda dapat mengulangi langkah-langkah sebelumnya untuk menganalisis dan mengoptimalkan model.

Langkah 5: Terapkan model

Jika model memenuhi persyaratan performa, Anda dapat menerapkan model sebagai layanan online. Arena memungkinkan Anda menggunakan NVIDIA Triton Inference Server untuk menerapkan model TorchScript. Untuk informasi lebih lanjut, lihat Nvidia Triton Server.

  1. Buat file konfigurasi bernama config.pbtxt.

    Penting

    Jangan ubah nama file tersebut.

    name: "resnet18"
    platform: "pytorch_libtorch"
    max_batch_size: 1
    default_model_filename: "opt_resnet18.pt"
    input [
        {
            name: "input__0"
            format: FORMAT_NCHW
            data_type: TYPE_FP32
            dims: [ 3, 224, 224 ]
        }
    ]
    output [
        {
            name: "output__0",
            data_type: TYPE_FP32,
            dims: [ 1000 ]
        }
    ]
    Catatan

    Untuk informasi lebih lanjut tentang parameter dalam file konfigurasi, lihat Model Repository.

  2. Buat struktur direktori berikut di OSS:

    oss://bucketname/triton/model-repository/
        resnet18/
          config.pbtxt
          1/
            opt_resnet18.pt
    Catatan

    1/ adalah konvensi dari NVIDIA Triton Inference Server. Nilai tersebut menunjukkan nomor versi model. Repositori model dapat menyimpan versi model yang berbeda. Untuk informasi lebih lanjut, lihat Model Repository.

  3. Gunakan Arena untuk menerapkan model. Anda dapat menerapkan model dalam mode berbagi GPU atau mode eksklusif GPU.

    • Mode eksklusif GPU: Gunakan mode ini untuk menerapkan layanan inferensi yang memerlukan stabilitas tinggi. Dalam mode ini, setiap GPU hanya mempercepat satu model. Model tidak bersaing untuk sumber daya GPU. Jalankan perintah berikut untuk menerapkan model dalam mode eksklusif GPU:

      arena serve triton \
        --name=resnet18-serving \
        --gpus=1 \
        --replicas=1 \
        --image=nvcr.io/nvidia/tritonserver:21.05-py3 \
        --data=oss-pvc:/data \
        --model-repository=/data/triton/model-repository \
        --allow-metrics=true
    • Mode berbagi GPU: Gunakan mode ini untuk menerapkan layanan inferensi ekor panjang atau layanan inferensi yang memerlukan efisiensi biaya. Dalam mode ini, sebuah GPU dibagi oleh beberapa model. Setiap model hanya diperbolehkan menggunakan jumlah memori GPU tertentu. Jalankan perintah berikut untuk menerapkan model dalam mode berbagi GPU:

      Jika Anda menerapkan model dalam mode berbagi GPU, Anda harus menyetel parameter --gpumemory. Parameter ini menentukan jumlah memori yang dialokasikan ke setiap pod. Anda dapat menentukan nilai yang tepat berdasarkan metrik gpu_mem_used dalam hasil pembandingan. Misalnya, jika nilai metrik gpu_mem_used adalah 1,6 GB, Anda dapat menyetel parameter --gpumemory menjadi 2 GB. Nilai parameter ini harus berupa bilangan bulat positif.

      arena serve triton \
        --name=resnet18 \
        --gpumemory=2 \
        --replicas=1 \
        --image=nvcr.io/nvidia/tritonserver:21.12-py3 \
        --data=oss-pvc:/data \
        --model-repository=/data/triton/model-repository \
        --allow-metrics=true
  4. Jalankan perintah berikut untuk memeriksa status penerapan:

    arena serve list -A

    Output yang diharapkan:

    NAMESPACE      NAME              TYPE    VERSION       DESIRED  AVAILABLE  ADDRESS         PORTS                   GPU
    default        resnet18-serving  Triton  202202141817  1        1          172.16.147.248  RESTFUL:8000,GRPC:8001  1

    Jika nilai parameter AVAILABLE sama dengan nilai parameter DESIRED, model telah diterapkan.