全部产品
Search
文档中心

Container Service for Kubernetes:Kirim tugas inferensi yang menggunakan sumber daya GPU bersama

更新时间:Dec 26, 2025

Dalam beberapa skenario, Anda mungkin ingin membagi satu GPU di antara beberapa tugas inferensi untuk meningkatkan pemanfaatan GPU. Topik ini menjelaskan cara menggunakan Arena untuk mengirim tugas inferensi guna menggunakan sumber daya GPU bersama.

Prasyarat

Prosedur

  1. Jalankan perintah berikut untuk menanyakan sumber daya GPU yang tersedia di kluster:

    arena top node

    Output yang Diharapkan:

    NAME                      IPADDRESS       ROLE    STATUS    GPU(Total)  GPU(Allocated)
    cn-beijing.192.168.1.108  192.168.20.255  <none>  Ready     0           0
    cn-beijing.192.168.8.10   192.168.8.10    <none>  Ready     0           0
    cn-beijing.192.168.1.101  192.168.1.101   <none>  Ready     1           0
    cn-beijing.192.168.1.112  192.168.1.112   <none>  Ready     1           0
    cn-beijing.192.168.8.252  192.168.8.252   <none>  Ready     1           0
    ---------------------------------------------------------------------------------------------------
    Allocated/Total GPUs In Cluster:
    0/3 (0.0%)

    Output sebelumnya menunjukkan bahwa kluster memiliki tiga GPU, dan pemanfaatan setiap GPU adalah 0,0%.

  2. Gunakan Arena untuk mengirim tugas inferensi.

    Penting
    • Contoh ini mengirim tugas inferensi TensorFlow. Model pelatihan telah ditambahkan ke dalam citra Docker saat pembuatan citra.

    • Jika Anda belum menambahkan file model ke gambar, Anda perlu mengonfigurasi volume NAS bersama. Untuk informasi lebih lanjut, lihat Konfigurasikan Volume NAS Bersama.

    Jalankan perintah berikut untuk mengirim tugas inferensi:

    arena serve tensorflow \
        --name=mymnist2 \
        --model-name=mnist \
        --gpumemory=3 \ 
        --gpucore=10 \
        --image=registry.cn-beijing.aliyuncs.com/ai-samples/tensorflow:latest-gpu-mnist \
        --model-path=/tfmodel/mnist \
        --version-policy=specific:2 \
        --data=mydata=/mnt/data

    Tabel berikut menjelaskan parameter-parameter tersebut.

    Parameter

    Deskripsi

    --name

    Nama tugas.

    --model-name

    Nama model.

    --gpumemory

    Jumlah memori GPU yang diminta dalam satuan GiB. Misalnya, sebuah GPU memiliki memori 8 GiB. Jika tugas pertama meminta 3 GiB (--gpumemory=3), tersisa 5 GiB memori. Jika tugas kedua meminta 4 GiB (--gpumemory=4), kedua tugas tersebut dapat berjalan pada GPU yang sama.

    --gpucore

    Persentase daya komputasi yang diminta. Secara default, sebuah GPU memiliki 100 unit daya komputasi. Misalnya, jika tugas pertama meminta 10% daya komputasi (--gpucore=10), tersisa 90% daya komputasi. Jika tugas kedua meminta 50% daya komputasi (--gpucore=50), kedua tugas tersebut dapat berjalan pada GPU yang sama.

    --image

    Gambar yang digunakan untuk menjalankan tugas.

    --model-path

    Path model di dalam kontainer.

    --version-policy

    Versi model. Misalnya, --version-policy=specific:2 menentukan bahwa versi 2 dari model digunakan. Folder bernama 2 harus ada di jalur yang ditentukan oleh --model-path.

    --data=mydata

    Direktori tempat volume dipasang. Contoh ini menggunakan /mnt/data.

  3. Jalankan perintah berikut untuk menanyakan semua tugas:

    arena serve list

    Berikut adalah contoh output:

    NAME      TYPE        VERSION       DESIRED  AVAILABLE  ADDRESS       PORTS
    mymnist1  Tensorflow  202101162119  1        0          172.16.3.123  GRPC:8500,RESTFUL:8501
    mymnist2  Tensorflow  202101191447  1        1          172.16.1.147  GRPC:8500,RESTFUL:8501
  4. Jalankan perintah berikut untuk menanyakan detail tugas yang telah dikirim:

    arena serve get mymnist2

    Output yang Diharapkan:

    Name:           mymnist2
    Namespace:      default
    Type:           Tensorflow
    Version:        202101191447
    Desired:        1
    Available:      1
    Age:            20m
    Address:        172.16.1.147
    Port:           GRPC:8500,RESTFUL:8501
    GPUMemory(GiB): 3
    
    Instances:
      NAME                                                       STATUS   AGE  READY  RESTARTS  GPU(Memory/GiB)  NODE
      ----                                                       ------   ---  -----  --------  ---------------  ----
      mymnist2-202101191447-tensorflow-serving-7f64bf9749-mtnpc  Running  20m  1/1    0         3                cn-beijing.192.168.1.112
    Catatan

    Jika nilai Desired sama dengan nilai Available, tugas siap.

  5. Opsional: Jalankan perintah berikut untuk mencetak log tugas:

    arena serve logs mymnist2 -t 10
    Catatan

    -t 10 menampilkan 10 baris terakhir dari log.

    Sistem mengembalikan output yang mirip dengan berikut:

    2021-01-18 13:21:58.482985: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:206] Restoring SavedModel bundle.
    2021-01-18 13:21:58.483673: I external/org_tensorflow/tensorflow/core/platform/profile_utils/cpu_utils.cc:112] CPU Frequency: 2500005000 Hz
    2021-01-18 13:21:58.508734: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:190] Running initialization op on SavedModel bundle at path: /tfmodel/mnist/2
    2021-01-18 13:21:58.513041: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:277] SavedModel load for tags { serve }; Status: success: OK. Took 798017 microseconds.
    2021-01-18 13:21:58.513263: I tensorflow_serving/servables/tensorflow/saved_model_warmup_util.cc:59] No warmup data file found at /tfmodel/mnist/2/assets.extra/tf_serving_warmup_requests
    2021-01-18 13:21:58.513467: I tensorflow_serving/core/loader_harness.cc:87] Successfully loaded servable version {name: mnist2 version: 2}
    2021-01-18 13:21:58.516620: I tensorflow_serving/model_servers/server.cc:371] Running gRPC ModelServer at 0.0.0.0:8500 ...
    [warn] getaddrinfo: address family for nodename not supported
    2021-01-18 13:21:58.521317: I tensorflow_serving/model_servers/server.cc:391] Exporting HTTP/REST API at:localhost:8501 ...
    [evhttp_server.cc : 238] NET_LOG: Entering the event loop ...
  6. Terapkan dan verifikasi layanan inferensi TensorFlow.

    1. Buat file bernama tfserving-test-client.yaml yang berisi konten berikut.

      cat <<EOF | kubectl create -f -
      kind: Pod
      apiVersion: v1
      metadata:
        name: tfserving-test-client
      spec:
        containers:
        - name: test-client
          image: registry.cn-beijing.aliyuncs.com/ai-samples/tensorflow-serving-test-client:curl
          command: ["sleep","infinity"]
          imagePullPolicy: IfNotPresent
      EOF
    2. Jalankan perintah berikut untuk menerapkan pod:

      kubectl apply -f tfserving-test-client.yaml
    3. Jalankan perintah berikut untuk menanyakan alamat IP dan port layanan:

      arena serve list

      Outputnya mirip dengan berikut. Alamat IP mymnist2 adalah 172.16.1.147, dan port-nya adalah 8501.

      NAME      TYPE        VERSION       DESIRED  AVAILABLE  ADDRESS       PORTS
      mymnist1  Tensorflow  202101162119  1        0          172.16.3.123  GRPC:8500,RESTFUL:8501
      mymnist2  Tensorflow  202101191447  1        1          172.16.1.147  GRPC:8500,RESTFUL:8501
    4. Jalankan perintah berikut untuk memverifikasi bahwa layanan inferensi TensorFlow tersedia.

      kubectl exec -ti tfserving-test-client bash validate.sh 172.16.1.147 8501

      Output yang Diharapkan:

      {
          "predictions": [
              [2.04608277e-05, 1.72721537e-09, 7.74099826e-05, 0.00364777911, 1.25222937e-06, 2.27521796e-05, 1.14668763e-08, 0.99597472, 3.68833389e-05, 0.000218785644]
          ]
      }

      Output tersebut menunjukkan informasi berikut:

      • Data yang diminta dalam skrip validate.sh adalah daftar nilai piksel dari citra dalam mnist set data uji.

      • Model memprediksi bahwa data masukan adalah angka 7 di antara semua angka tunggal dari 0 hingga 9, dengan probabilitas tertinggi sebesar 0,99597472.