Si tu carga de trabajo requiere un procesamiento distribuido de varios nodos, te recomendamos que uses flex-start con aprovisionamiento en cola. Para obtener más información, consulta Ejecutar una carga de trabajo a gran escala con inicio flexible y aprovisionamiento en cola.
Esta guía está dirigida a ingenieros de aprendizaje automático, administradores y operadores de plataformas, y especialistas en datos e IA que estén interesados en usar las funciones de orquestación de contenedores de Kubernetes para ejecutar cargas de trabajo por lotes. Para obtener más información sobre los roles habituales y las tareas de ejemplo a las que hacemos referencia en el contenido, consulta Roles y tareas habituales de los usuarios de GKE. Google Cloud
Precios de inicio flexible
Se recomienda el inicio flexible si tu carga de trabajo requiere recursos aprovisionados dinámicamente según sea necesario, durante un máximo de siete días con reservas a corto plazo, sin una gestión de cuotas compleja y con un acceso rentable. La función de inicio flexible se basa en Dynamic Workload Scheduler y se factura según los precios de Dynamic Workload Scheduler:
- Descuento (hasta el 53%) en vCPUs, GPUs y TPUs.
- Pagas a medida que avanzas.
Antes de empezar
Antes de empezar, asegúrate de que has realizado las siguientes tareas:
- Habilita la API de Google Kubernetes Engine. Habilitar la API de Google Kubernetes Engine
- Si quieres usar Google Cloud CLI para esta tarea, instálala y, a continuación, inicialízala. Si ya has instalado la gcloud CLI, obtén la versión más reciente ejecutando
gcloud components update
.
- Comprueba que tienes un clúster de Autopilot o un clúster estándar que ejecute la versión 1.33.0-gke.1712000 o una posterior.
- Comprueba que conoces las limitaciones de la hora de inicio flexible.
- Cuando uses un clúster estándar, comprueba que mantienes al menos un grupo de nodos sin la función de inicio flexible habilitada para que el clúster funcione correctamente.
- Comprueba que tengas cuota para GPUs interrumpibles en las ubicaciones de tus nodos.
Si no tienes un clúster o tu clúster no cumple los requisitos, puedes crear un clúster regional estándar con la CLI de gcloud. Añade los siguientes elementos para que puedas obtener información sobre flex-start:
--location=us-central1 \
--node-locations=us-central1-a,us-central1-b \
--machine-type=g2-standard-8
Cuando crees un grupo de nodos de inicio flexible, usa las marcas que hemos mencionado anteriormente y --accelerator type=nvidia-l4,count=1
.
Si tienes un clúster estándar que cumple los requisitos, en las siguientes secciones se explica cómo seleccionar un tipo de acelerador de GPU y un tipo de máquina para tu clúster.
Elegir un tipo de acelerador de GPU
Si usas un clúster en el modo Autopilot, sáltate esta sección y ve a la sección Ejecutar una carga de trabajo por lotes.
La disponibilidad de las GPU es específica de cada zona. Debes buscar un tipo de acelerador de GPU que esté disponible en una zona en la que se encuentre el clúster estándar. Si tienes un clúster estándar regional, la zona en la que está disponible el tipo de acelerador de GPU debe estar en la región en la que se encuentra el clúster. Cuando creas el grupo de nodos, especificas el tipo de acelerador y las zonas de los nodos. Si especificas un tipo de acelerador que no está disponible en la ubicación del clúster, se producirá un error en la creación del grupo de nodos.
Ejecuta los siguientes comandos para obtener la ubicación de tu clúster y un tipo de acelerador de GPU compatible.
Obtén la ubicación del clúster:
gcloud container clusters list
El resultado debería ser similar al siguiente:
NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS STACK_TYPE example-cluster-1 us-west2 1.33.2-gke.1111000 34.102.3.122 e2-medium 1.33.2-gke.1111000 9 RUNNING IPV4
Lista los tipos de aceleradores de GPU disponibles, excluyendo las estaciones de trabajo virtuales de la ubicación:
gcloud compute accelerator-types list | grep LOCATION_NAME | grep -v "Workstation"
Sustituye
LOCATION_NAME
por la ubicación del clúster.Por ejemplo, para obtener una lista de los tipos de aceleradores de GPU de la región
us-west2
, ejecuta el siguiente comando:gcloud compute accelerator-types list | grep us-west2 | grep -v "Workstation"
El resultado debería ser similar al siguiente:
nvidia-b200 us-west2-c NVIDIA B200 180GB nvidia-tesla-p4 us-west2-c NVIDIA Tesla P4 nvidia-tesla-t4 us-west2-c NVIDIA T4 nvidia-tesla-p4 us-west2-b NVIDIA Tesla P4 nvidia-tesla-t4 us-west2-b NVIDIA T4
Elegir un tipo de máquina compatible
Si usas un clúster en el modo Autopilot, sáltate esta sección y ve a la sección Ejecutar una carga de trabajo por lotes.
Una vez que sepas qué GPUs están disponibles en la ubicación del clúster, podrás determinar los tipos de máquina compatibles. Google Cloud Las GPUs solo se pueden usar con series de máquinas específicas. Sigue estos pasos para encontrar un tipo de máquina:
- Consulta la tabla de modelos de GPU disponibles.
- Busca la fila del tipo de acelerador de GPU que hayas elegido.
- Consulta la columna "Serie de la máquina" de esa fila. En esta columna se indica qué serie de máquinas debes usar.
- Para ver los nombres de los tipos de máquinas que puedes especificar, haz clic en el enlace de la serie de máquinas.
La única excepción es la serie de máquinas N1, que ofrece información adicional sobre los tipos de máquinas N1 que puedes usar con el tipo de acelerador que elijas.
Antes de usar una máquina optimizada para aceleradores, comprueba que sea compatible con el modo de aprovisionamiento de inicio flexible, tal como se indica en la sección Disponibilidad de opciones de consumo por tipo de máquina.
Determinar el número de aceleradores
Si usas un clúster en el modo Autopilot, sáltate esta sección y ve a la sección Ejecutar una carga de trabajo por lotes.
Para crear un grupo de nodos, debes determinar el número de aceleradores que se van a asociar a cada nodo del grupo. Los valores válidos dependen del tipo de acelerador y del tipo de máquina. Cada tipo de máquina tiene un límite en el número de GPUs que puede admitir. Para determinar qué valor usar (además del valor predeterminado 1
), sigue estos pasos:
- Consulta los tipos de máquinas con GPU.
- En la tabla, busca el tipo de acelerador de tu tipo de serie de máquina.
- Usa el valor de la columna "Número de GPUs".
Crear un grupo de nodos con inicio flexible
Si usas un clúster en el modo Autopilot, sáltate esta sección y ve a la sección Ejecutar una carga de trabajo por lotes.
Para crear un grupo de nodos con la función de inicio flexible habilitada en un clúster Standard, puedes usar la CLI de gcloud o Terraform.
gcloud
Crea un grupo de nodos con inicio flexible:
gcloud container node-pools create NODE_POOL_NAME \ --cluster CLUSTER_NAME \ --location LOCATION_NAME \ --project PROJECT_ID \ --accelerator type=ACCELERATOR_TYPE,count=COUNT \ --machine-type MACHINE_TYPE \ --max-run-duration MAX_RUN_DURATION \ --flex-start \ --node-locations NODE_ZONES \ --num-nodes 0 \ --enable-autoscaling \ --total-min-nodes 0 \ --total-max-nodes 5 \ --location-policy ANY \ --reservation-affinity none \ --no-enable-autorepair
Haz los cambios siguientes:
NODE_POOL_NAME
: el nombre que elijas para tu grupo de nodos.CLUSTER_NAME
: el nombre del clúster Standard que quieras modificar.LOCATION_NAME
: la región de computación del plano de control del clúster.PROJECT_ID
: tu ID de proyecto.ACCELERATOR_TYPE
: el tipo específico de acelerador (por ejemplo,nvidia-tesla-t4
para NVIDIA T4) que se va a asociar a las instancias.COUNT
: número de aceleradores que se van a asociar a las instancias. El valor predeterminado es1
.MACHINE_TYPE
: el tipo de máquina que se va a usar en los nodos.MAX_RUN_DURATION
: opcional. Tiempo de ejecución máximo de un nodo en segundos, hasta el valor predeterminado de siete días. El número que introduzcas debe terminar ens
. Por ejemplo, para especificar un día, introduce86400s
.NODE_ZONES
: lista separada por comas de una o varias zonas en las que GKE crea el grupo de nodos.
En este comando, la marca
--flex-start
indica agcloud
que cree un grupo de nodos con VMs Flex-start.GKE crea un grupo de nodos con nodos que contienen dos instancias del tipo de acelerador especificado. El grupo de nodos tiene inicialmente cero nodos y el autoescalado está habilitado.
Verifica el estado de inicio flexible en el grupo de nodos:
gcloud container node-pools describe NODE_POOL_NAME \ --cluster CLUSTER_NAME \ --location LOCATION_NAME \ --format="get(config.flexStart)"
Si flex-start está habilitado en el grupo de nodos, el campo
flexStart
se define comoTrue
.
Terraform
Puedes usar flex-start con GPUs mediante un módulo de Terraform.
- Añade el siguiente bloque a tu configuración de Terraform:
resource "google_container_node_pool" " "gpu_dws_pool" {
name = "gpu-dws-pool"
queued_provisioning {
enabled = false
}
}
node_config {
machine_type = "MACHINE_TYPE"
accelerator_type = "ACCELERATOR_TYPE"
accelerator_count = COUNT
node_locations = ["NODE_ZONES"]
flex_start = true
}
Haz los cambios siguientes:
MACHINE_TYPE
: el tipo de máquina que se va a usar en los nodos.ACCELERATOR_TYPE
: el tipo específico de acelerador (por ejemplo,nvidia-tesla-t4
para NVIDIA T4) que se va a asociar a las instancias.COUNT
: número de aceleradores que se van a asociar a las instancias. El valor predeterminado es1
.NODE_ZONES
: lista separada por comas de una o más zonas en las que GKE crea el grupo de nodos.
Terraform llama a las APIs Google Cloud para crear un clúster con un grupo de nodos que usa máquinas virtuales de inicio flexible con GPUs. El grupo de nodos tiene inicialmente cero nodos y el autoescalado está habilitado. Para obtener más información sobre Terraform, consulta la especificación de recursos google_container_node_pool
en terraform.io.
Ejecutar una carga de trabajo por lotes
En esta sección, crearás dos trabajos de Kubernetes que requieren una GPU cada uno. Un controlador de trabajo de Kubernetes crea uno o varios pods y se asegura de que ejecuten correctamente una tarea específica.En la consola deGoogle Cloud , inicia una sesión de Cloud Shell haciendo clic en
Activar Cloud Shell. Se abrirá una sesión en el panel inferior de la consola Google Cloud .
Crea un archivo llamado
dws-flex-start.yaml
:apiVersion: batch/v1 kind: Job metadata: name: job-1 spec: template: spec: nodeSelector: cloud.google.com/gke-flex-start: "true" cloud.google.com/gke-accelerator: ACCELERATOR_TYPE containers: - name: container-1 image: gcr.io/k8s-staging-perf-tests/sleep:latest args: ["10s"] # Sleep for 10 seconds resources: requests: nvidia.com/gpu: 1 limits: nvidia.com/gpu: 1 restartPolicy: OnFailure --- apiVersion: batch/v1 kind: Job metadata: name: job-2 spec: template: spec: nodeSelector: cloud.google.com/gke-flex-start: "true" cloud.google.com/gke-accelerator: ACCELERATOR_TYPE containers: - name: container-2 image: gcr.io/k8s-staging-perf-tests/sleep:latest args: ["10s"] # Sleep for 10 seconds resources: requests: nvidia.com/gpu: 1 limits: nvidia.com/gpu: 1 restartPolicy: OnFailure
Aplica el manifiesto
dws-flex-start.yaml
:kubectl apply -f dws-flex-start.yaml
Verifica que los trabajos se estén ejecutando en el mismo nodo:
kubectl get pods -l "job-name in (job-1,job-2)" -o wide
El resultado debería ser similar al siguiente:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES job-1 0/1 Completed 0 19m 10.(...) gke-flex-zonal-a2 <none> <none> job-2 0/1 Completed 0 19m 10.(...) gke-flex-zonal-a2 <none> <none>
Limpieza
Para evitar que se apliquen cargos en tu cuenta Google Cloud por los recursos que has usado en esta página, elimina el proyecto que contiene los recursos o conserva el proyecto y elimina los recursos.
Eliminar el proyecto
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Eliminar el recurso concreto
Elimina los trabajos:
kubectl delete job -l "job-name in (job-1,job-2)"
Elimina el grupo de nodos:
gcloud container node-pools delete NODE_POOL_NAME \ --location LOCATION_NAME
Elimina el clúster:
gcloud container clusters delete CLUSTER_NAME
Siguientes pasos
- Consulta más información sobre las GPUs en GKE.
- Consulta más información sobre el aprovisionamiento automático de nodos.
- Consulta más información sobre las prácticas recomendadas para ejecutar cargas de trabajo por lotes en GKE.