日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

提交GPU共享模型推理任務

在某些場景下,您可能需要多個模型推理任務共享同一塊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,已使用0塊,使用率為0.0%。

  2. 使用Arena提交推理任務。

    重要
    • 本示例提交一個TensorFlow類型的推理任務。訓練模型已在制作Docker鏡像時添加到鏡像中。

    • 如果您沒有將模型文件放入鏡像中,需要配置共享存儲。具體操作,請參見配置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有8 GiB顯存,第一個任務使用--gpumemory=3申請3 GiB顯存,那么這張卡還剩5 GiB顯存。第二個任務使用--gpumemory=4申請4 GiB顯存,此時這兩個任務都在這塊GPU上運行。

    --gpucore

    按百分比指定申請算力的大小。例如:一塊GPU默認有100個算力,第一個任務使用--gpucore=10申請10%的算力,那么這張卡還剩90%的算力。第二個任務使用--gpucore=50申請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)的數據中以最高概率(0.99597472)將輸入數據預測為“7”。