Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Submit an inference task that uses shared GPU resources

Última actualización: Sep 04, 2026

La programación compartida de GPU permite ejecutar varias tareas de inference en una sola GPU de forma simultánea, lo que mejora la utilización de la GPU. Esta guía le muestra cómo enviar una tarea de inference de TensorFlow mediante Arena con recursos compartidos de GPU.

Requisitos previos

Antes de empezar, asegúrese de contar con lo siguiente:

Funcionamiento de la programación compartida de GPU

Al enviar una tarea de inference con --gpumemory y --gpucore, Arena programa la tarea en una GPU que tenga suficiente memoria libre y potencia de cómputo para atender la solicitud, sin necesidad de asignar una GPU completa.

La siguiente tabla muestra cómo dos tareas pueden compartir una GPU de 8 GiB con 100 unidades de potencia de cómputo:

Dimensión del recurso

Solicitud de la tarea A

Solicitud de la tarea B

¿Cabe en una GPU?

Memoria (--gpumemory)

3 GiB

4 GiB

Sí (3 + 4 = 7 GiB, dentro de los 8 GiB)

Potencia de cómputo (--gpucore)

10%

50%

Sí (10 + 50 = 60%, dentro del 100%)

Nota

--gpucore especifica el porcentaje de potencia de cómputo que se solicita.

Envío de una tarea de inference

Paso 1: Comprobar los recursos de GPU disponibles

Ejecute el siguiente comando para consultar cuántas GPU hay disponibles en el clúster:

arena top node

Salida esperada:

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

El clúster cuenta con 3 GPU, todas sin asignar.

Paso 2: Enviar la tarea de inference

Ejecute el siguiente comando para enviar una tarea de inference de TensorFlow:

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
Importante

Este ejemplo utiliza un modelo de TensorFlow incluido en la imagen de Docker durante su compilación. Si el archivo del modelo se almacena por separado, móntelo mediante un volumen NAS compartido antes de enviar la tarea. Consulte Configure a shared NAS volume.

La siguiente tabla describe los parámetros clave.

Parámetro

Tipo

Descripción

--name

String

Nombre de la tarea de inference.

--model-name

String

Nombre del modelo.

--gpumemory

Integer (GiB)

Memoria de GPU que se solicita.

--gpucore

Integer (0–100)

Porcentaje de potencia de cómputo de la GPU que se solicita.

--image

String

Imagen de contenedor utilizada para ejecutar la tarea.

--model-path

String

Ruta al modelo dentro del contenedor.

--version-policy

String

Versión del modelo que se carga. specific:2 carga la versión 2, la cual debe existir como subcarpeta dentro de --model-path.

--data

String

Montaje de volumen en formato <volume-name>=<mount-path>.

Paso 3: Verificar que la tarea se está ejecutando

Ejecute el siguiente comando para listar todas las tareas de inference:

arena serve list

Salida de ejemplo:

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

Ejecute el siguiente comando para obtener detalles de mymnist2:

arena serve get mymnist2

Salida esperada:

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

Si el valor de Desired es igual al valor de Available, la tarea está lista.

Paso 4: (Opcional) Consultar los registros de la tarea

Ejecute el siguiente comando para mostrar las últimas 10 líneas de los registros:

arena serve logs mymnist2 -t 10

Salida de ejemplo:

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

Verificación del servicio de inference

  1. Cree un pod de cliente de prueba. Guarde el siguiente contenido como 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. Despliegue el pod:

    kubectl apply -f tfserving-test-client.yaml
  3. Obtenga la dirección IP y el puerto del servicio de inference:

    arena serve list

    En la salida, mymnist2 está disponible en 172.16.1.147:8501.

  4. Envíe una solicitud de prueba para verificar el servicio:

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

    Salida esperada:

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

    El script validate.sh envía valores de píxeles de una imagen de prueba MNIST. El modelo predice que los datos de entrada corresponden al dígito 7 entre todos los números de un solo dígito del 0 al 9, con una probabilidad máxima de 0.99597472, lo que confirma que el servicio funciona correctamente.

Pasos siguientes

  • Para enviar más tareas de inference que compartan la misma GPU, repita el paso 2 con diferentes valores de --name y ajuste --gpumemory y --gpucore para que las solicitudes combinadas no excedan los recursos disponibles de la GPU.