すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:共有 GPU リソースを使用する推論タスクの送信

最終更新日:Dec 26, 2025

一部のシナリオでは、複数の推論タスク間で GPU を共有して GPU 使用率を向上させたい場合があります。このトピックでは、Arena を使用して共有 GPU リソースを使用する推論タスクを送信する方法について説明します。

前提条件

操作手順

  1. 次のコマンドを実行して、クラスターで使用可能な GPU リソースをクエリします。

    arena top node

    想定される出力:

    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%)

    上記の出力は、クラスターに 3 つの GPU があり、各 GPU の使用率が 0.0% であることを示しています。

  2. Arena を使用して推論タスクを送信します。

    重要
    • この例では、TensorFlow 推論タスクを送信します。トレーニングモデルは、イメージの作成時に Docker イメージに追加されています。

    • モデルファイルがイメージに追加されていない場合は、共有 NAS ボリュームを設定する必要があります。詳細については、「共有 NAS ボリュームの設定」をご参照ください。

    次のコマンドを実行して、推論タスクを送信します。

    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

    パラメーターの説明は次のとおりです。

    パラメーター

    説明

    --name

    タスクの名前。

    --model-name

    モデルの名前。

    --gpumemory

    リクエストする GPU メモリの量 (GiB)。たとえば、GPU に 8 GiB のメモリがあるとします。最初のタスクが 3 GiB (--gpumemory=3) をリクエストすると、5 GiB のメモリが残ります。2 番目のタスクが 4 GiB (--gpumemory=4) をリクエストした場合、両方のタスクを同じ GPU で実行できます。

    --gpucore

    リクエストする計算能力の割合。デフォルトでは、GPU には 100 ユニットの計算能力があります。たとえば、最初のタスクが計算能力の 10% (--gpucore=10) をリクエストすると、計算能力の 90% が残ります。2 番目のタスクが計算能力の 50% (--gpucore=50) をリクエストした場合、両方のタスクを同じ GPU で実行できます。

    --image

    タスクの実行に使用されるイメージ。

    --model-path

    コンテナー内のモデルのパス。

    --version-policy

    モデルバージョン。たとえば、--version-policy=specific:2 は、モデルのバージョン 2 が使用されることを指定します。--model-path で指定されたパスに、2 という名前のフォルダが存在する必要があります。

    --data=mydata

    ボリュームがマウントされるディレクトリ。この例では /mnt/data を使用します。

  3. 次のコマンドを実行して、すべてのタスクをクエリします。

    arena serve list

    出力例は次のとおりです。

    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. 次のコマンドを実行して、送信されたタスクの詳細をクエリします。

    arena serve get mymnist2

    想定される出力:

    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
    説明

    Desired の値が Available の値と等しい場合、タスクは準備完了です。

  5. オプション: 次のコマンドを実行してタスクログを出力します。

    arena serve logs mymnist2 -t 10
    説明

    -t 10 は、ログの最後の 10 行を表示します。

    次のような出力が返されます。

    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. TensorFlow 推論サービスをデプロイして検証します。

    1. 次の内容を含む tfserving-test-client.yaml という名前のファイルを作成します。

      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. 次のコマンドを実行して Pod をデプロイします。

      kubectl apply -f tfserving-test-client.yaml
    3. 次のコマンドを実行して、サービスの IP アドレスとポートをクエリします。

      arena serve list

      出力は次のようになります。mymnist2 の IP アドレスは 172.16.1.147 で、ポートは 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. 次のコマンドを実行して、TensorFlow 推論サービスが利用可能であることを確認します。

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

      想定される出力:

      {
          "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]
          ]
      }

      この出力は、次の情報を示しています。

      • validate.sh スクリプトでリクエストされたデータは、mnist テストデータセット内のイメージからの画素値のリストです。

      • モデルは、入力データが 0 から 9 までのすべての一桁の数字の中で 7 であると予測し、その確率は 0.99597472 で最も高くなっています。