Crea y ejecuta un trabajo que use GPU

En este documento, se explica cómo crear y ejecutar un trabajo que usa una unidad de procesamiento de gráficos (GPU).

De manera opcional, puedes crear un trabajo por lotes que agregue una o más GPU a las VM que se ejecutan en tu trabajo. Los casos de uso comunes para los trabajos que usan GPU incluyen cargas de trabajo de procesamiento de datos y aprendizaje automático (AA) intensivo.

Antes de comenzar

Crea un trabajo que use una GPU

De forma opcional, puedes crear un trabajo que agregue una o más unidades de procesamiento de gráficos (GPU) a cada una de las VM que ejecutan el trabajo. Para crear un trabajo que use GPU, haz lo siguiente:

  1. Revisa la sección Requisitos de un trabajo para usar GPU a fin de determinar los métodos que puedes usar a fin de crear tu trabajo.
  2. Crea un trabajo con los métodos que seleccionaste. Para obtener ejemplos sobre cómo crear un trabajo mediante los métodos recomendados, consulta Crea un trabajo que use una GPU.

Requisitos para que un trabajo use GPU

Para usar cualquier GPU, un trabajo debe hacer todo lo siguiente:

Instalar los controladores de GPU.

Para instalar los controladores de GPU necesarios, selecciona uno de los siguientes métodos:

Define los recursos de VM

A fin de usar GPU, un trabajo debe especificar el tipo y la cantidad de GPU y un tipo de máquina compatible para las VM del trabajo. Para definir los recursos de las VM de un trabajo, selecciona uno de los siguientes métodos:

  • Definir recursos directamente (recomendado): como se muestra en los ejemplos, para definir directamente los recursos de las VM de un trabajo, usa el campo policy.
  • Definir recursos en una plantilla: Define una plantilla de instancias de Compute Engine para definir los recursos de las VM de un trabajo. Si incluyes una plantilla de instancias en la definición de tu trabajo, debes usar este método.

Activa las GPU en cualquier contenedor

Si un trabajo incluye cualquier objeto de ejecución del contenedor que desees usar GPU, también debes activar las GPU en cada contenedor ejecutable según la imagen de VM del trabajo:

  • Si un trabajo usa la imagen de VM predeterminada y solo tiene ejecutables de contenedores o usa una imagen personalizada de Container-Optimized OS, haz lo siguiente:
  • De lo contrario, si un trabajo usa la imagen de VM predeterminada y tiene ejecutables de contenedor y secuencia de comandos, o si un trabajo usa una imagen de VM personalizada que no sea Container-Optimized OS, haz lo siguiente:

Crea un trabajo que use una GPU

En esta sección, se proporcionan ejemplos sobre cómo crear un trabajo que use una GPU con los métodos recomendados: el trabajo instala de forma automática los controladores necesarios y define los recursos que usa directamente. Los trabajos de ejemplo con ejecutables de contenedores también activan las GPU en los contenedores. Puedes crear un trabajo que use una GPU con la CLI de gcloud o la API de Batch.

gcloud

Para agregar una GPU a un trabajo, consulta uno de los siguientes ejemplos según los tipos de objetos ejecutables que desees usar:

Agregar una GPU a un trabajo de contenedor

Para crear un trabajo de contenedor con una GPU que use la imagen predeterminada con la CLI de gcloud, usa el comando gcloud batch jobs submit.

Por ejemplo, para crear un trabajo de contenedor con una GPU, sigue estos pasos:

  1. Crea un archivo JSON en el directorio actual llamado hello-world-container-job-gpu.json con el siguiente contenido:

    {
        "taskGroups": [
            {
                "taskSpec": {
                    "runnables": [
                        {
                            "container": {
                                "imageUri": "gcr.io/google_containers/cuda-vector-add:v0.1",
                                "volumes": [
                                    "/var/lib/nvidia/lib64:/usr/local/nvidia/lib64",
                                    "/var/lib/nvidia/bin:/usr/local/nvidia/bin"
                                ],
                                "options": "--privileged"
                            }
                        }
                    ],
                },
                "taskCount": 3,
                "parallelism": 1
            }
        ],
        "allocationPolicy": {
            "instances": [
                {
                    "installGpuDrivers": INSTALL_GPU_DRIVERS,
                    "policy": {
                        "machineType": "MACHINE_TYPE",
                        "accelerators": [
                            {
                                "type": "GPU_TYPE",
                                "count": GPU_COUNT
                            }
                        ]
                    }
                }
            ],
            "location": {
                "allowedLocations": [
                    "ALLOWED_LOCATIONS"
                ]
            }
        }
    }
    

    Reemplaza lo siguiente:

    • INSTALL_GPU_DRIVERS: Opcional Cuando se establece en true, Batch recupera los controladores necesarios para el tipo de GPU que especificas en el campo policy de una ubicación de terceros y Batch los instala en tu nombre. Si configuras este campo como false (predeterminado), debes instalar los controladores de GPU de forma manual para usar cualquier GPU en este trabajo.
    • MACHINE_TYPE: Es el tipo de máquina, que puede ser predefinido o personalizado, de las VM de tu trabajo. El tipo de máquina restringe el tipo de GPU que puedes usar. Para crear un trabajo con una GPU, este campo es obligatorio.
    • GPU_TYPE: Es el tipo de GPU. Puedes ver una lista de los tipos de GPU disponibles con el comando gcloud compute accelerator-types list. Para crear un trabajo con una GPU, este campo es obligatorio.
    • GPU_COUNT: Es la cantidad de GPU del tipo que especificaste en el campo type. Para crear un trabajo con una GPU, este campo es obligatorio.
    • ALLOWED_LOCATIONS: Opcional Las ubicaciones en las que las instancias de VM para tu trabajo pueden ejecutarse (por ejemplo, regions/us-central1, zones/us-central1-a permite la zona us-central1-a). Si especificas una ubicación permitida, debes seleccionar la región y, de forma opcional, una o más zonas. Las ubicaciones que elijas deben tener el tipo de GPU que deseas para este trabajo. Para obtener más información, consulta el campo de array allowedLocations.
  2. Ejecuta el siguiente comando:

    gcloud batch jobs submit example-job-gpu \
      --location us-central1 \
      --config hello-world-container-job-gpu.json
    

Agrega una GPU a un trabajo de secuencia de comandos

Para crear un trabajo de secuencia de comandos con una GPU que use la imagen predeterminada mediante la CLI de gcloud, usa el comando gcloud batch jobs submit.

Por ejemplo, para crear un trabajo de secuencia de comandos con una GPU, sigue estos pasos:

  1. Crea un archivo JSON en el directorio actual llamado hello-world-script-job-gpu.json con el siguiente contenido:

    {
        "taskGroups": [
            {
                "taskSpec": {
                    "runnables": [
                        {
                            "script": {
                                "text": "echo Hello world from task ${BATCH_TASK_INDEX}."
                            }
                        }
                    ]
                },
                "taskCount": 3,
                "parallelism": 1
            }
        ],
        "allocationPolicy": {
            "instances": [
                {
                    "installGpuDrivers": INSTALL_GPU_DRIVERS,
                    "policy": {
                        "machineType": "MACHINE_TYPE",
                        "accelerators":
                            {
                                "type": "GPU_TYPE",
                                "count": GPU_COUNT
                            }
                        ]
                    }
                }
            ],
            "location": {
                "allowedLocations": [
                    "ALLOWED_LOCATIONS"
                ]
            }
        }
    }
    

    Reemplaza lo siguiente:

    • INSTALL_GPU_DRIVERS: Opcional Cuando se establece en true, Batch recupera los controladores necesarios para el tipo de GPU que especificas en el campo policy de una ubicación de terceros y Batch los instala en tu nombre. Si configuras este campo como false (predeterminado), debes instalar los controladores de GPU de forma manual para usar cualquier GPU en este trabajo.
    • MACHINE_TYPE: Es el tipo de máquina, que puede ser predefinido o personalizado, de las VM de tu trabajo. El tipo de máquina restringe el tipo de GPU que puedes usar. Para crear un trabajo con una GPU, este campo es obligatorio.
    • GPU_TYPE: Es el tipo de GPU. Puedes ver una lista de los tipos de GPU disponibles con el comando gcloud compute accelerator-types list. Para crear un trabajo con una GPU, este campo es obligatorio.
    • GPU_COUNT: Es la cantidad de GPU del tipo que especificaste en el campo type. Para crear un trabajo con una GPU, este campo es obligatorio.
    • ALLOWED_LOCATIONS: Opcional Las ubicaciones en las que las instancias de VM para tu trabajo pueden ejecutarse (por ejemplo, regions/us-central1, zones/us-central1-a permite la zona us-central1-a). Si especificas una ubicación permitida, debes seleccionar la región y, de forma opcional, una o más zonas. Las ubicaciones que elijas deben tener el tipo de GPU que deseas para este trabajo. Para obtener más información, consulta el campo de array allowedLocations.
  2. Ejecuta el siguiente comando:

    gcloud batch jobs submit example-job-gpu \
      --location us-central1 \
      --config hello-world-script-job-gpu.json
    

Agrega una GPU a un trabajo de contenedor y secuencia de comandos

Para crear un trabajo de contenedor y secuencia de comandos con una GPU que use la imagen predeterminada con la CLI de gcloud, usa el comando gcloud batch jobs submit.

Por ejemplo, para crear un trabajo de contenedor y una secuencia de comandos con una GPU, sigue estos pasos:

  1. Crea un archivo JSON en el directorio actual llamado hello-world-container-script-job-gpu.json con el siguiente contenido:

    {
        "taskGroups": [
            {
                "taskSpec": {
                    "runnables": [
                        {
                            "container": {
                                "imageUri": "gcr.io/google_containers/cuda-vector-add:v0.1",
                                "options": "--gpus all"
                            }
                        },
                        {
                            "script": {
                                "text": "echo Hello world from script task ${BATCH_TASK_INDEX}."
                            }
                        }
                    ]
                },
                "taskCount": 3,
                "parallelism": 1
            }
        ],
        "allocationPolicy": {
            "instances": [
                {
                    "installGpuDrivers": INSTALL_GPU_DRIVERS,
                    "policy": {
                        "machineType": "MACHINE_TYPE",
                        "accelerators": [
                            {
                                "type": "GPU_TYPE",
                                "count": GPU_COUNT
                            }
                        ]
                    }
                }
            ],
            "location": {
                "allowedLocations": [
                    "ALLOWED_LOCATIONS"
                ]
            }
        }
    }
    

    Reemplaza lo siguiente:

    • INSTALL_GPU_DRIVERS: Opcional Cuando se establece en true, Batch recupera los controladores necesarios para el tipo de GPU que especificas en el campo policy de una ubicación de terceros y Batch los instala en tu nombre. Si configuras este campo como false (predeterminado), debes instalar los controladores de GPU de forma manual para usar cualquier GPU en este trabajo.
    • MACHINE_TYPE: Es el tipo de máquina, que puede ser predefinido o personalizado, de las VM de tu trabajo. El tipo de máquina restringe el tipo de GPU que puedes usar. Para crear un trabajo con una GPU, este campo es obligatorio.
    • GPU_TYPE: Es el tipo de GPU. Puedes ver una lista de los tipos de GPU disponibles con el comando gcloud compute accelerator-types list. Para crear un trabajo con una GPU, este campo es obligatorio.
    • GPU_COUNT: Es la cantidad de GPU del tipo que especificaste en el campo type. Para crear un trabajo con una GPU, este campo es obligatorio.
    • ALLOWED_LOCATIONS: Opcional Las ubicaciones en las que las instancias de VM para tu trabajo pueden ejecutarse (por ejemplo, regions/us-central1, zones/us-central1-a permite la zona us-central1-a). Si especificas una ubicación permitida, debes seleccionar la región y, de forma opcional, una o más zonas. Las ubicaciones que elijas deben tener el tipo de GPU que deseas para este trabajo. Para obtener más información, consulta el campo de array allowedLocations.
  2. Ejecuta el siguiente comando:

    gcloud batch jobs submit example-job-gpu \
      --location us-central1 \
      --config hello-world-container-script-job-gpu.json
    

API

Para agregar una GPU a un trabajo, consulta uno de los siguientes ejemplos según los tipos de objetos ejecutables que desees usar:

Agregar una GPU a un trabajo de contenedor

Para crear un trabajo de contenedor con una GPU que use la imagen predeterminada mediante la API de Batch, usa el método jobs.create.

Por ejemplo, para crear un trabajo de contenedor con una GPU, realiza la siguiente solicitud:

POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/jobs?job_id=example-job-gpu

{
    "taskGroups": [
        {
            "taskSpec": {
                "runnables": [
                    {
                        "container": {
                            "imageUri": "gcr.io/google_containers/cuda-vector-add:v0.1",
                            "volumes": [
                                "/var/lib/nvidia/lib64:/usr/local/nvidia/lib64",
                                "/var/lib/nvidia/bin:/usr/local/nvidia/bin"
                            ],
                            "options": "--privileged"
                        }
                    }
                ],
            },
            "taskCount": 3,
            "parallelism": 1
        }
    ],
    "allocationPolicy": {
        "instances": [
            {
                "installGpuDrivers": INSTALL_GPU_DRIVERS,
                "policy": {
                    "machineType": "MACHINE_TYPE",
                    "accelerators": [
                        {
                            "type": "GPU_TYPE",
                            "count": GPU_COUNT
                        }
                    ]
                }
            }
        ],
        "location": {
            "allowedLocations": [
                "ALLOWED_LOCATIONS"
            ]
        }
    }
}

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto.
  • INSTALL_GPU_DRIVERS: Opcional Cuando se establece en true, Batch recupera los controladores necesarios para el tipo de GPU que especificas en el campo policy de una ubicación de terceros y Batch los instala en tu nombre. Si configuras este campo como false (predeterminado), debes instalar los controladores de GPU de forma manual para usar cualquier GPU en este trabajo.
  • MACHINE_TYPE: Es el tipo de máquina, que puede ser predefinido o personalizado, de las VM de tu trabajo. El tipo de máquina restringe el tipo de GPU que puedes usar. Para crear un trabajo con una GPU, este campo es obligatorio.
  • GPU_TYPE: Es el tipo de GPU. Puedes ver una lista de los tipos de GPU disponibles con el comando gcloud compute accelerator-types list. Para crear un trabajo con una GPU, este campo es obligatorio.
  • GPU_COUNT: Es la cantidad de GPU del tipo que especificaste en el campo type. Para crear un trabajo con una GPU, este campo es obligatorio.
  • ALLOWED_LOCATIONS: Opcional Las ubicaciones en las que las instancias de VM para tu trabajo pueden ejecutarse (por ejemplo, regions/us-central1, zones/us-central1-a permite la zona us-central1-a). Si especificas una ubicación permitida, debes seleccionar la región y, de forma opcional, una o más zonas. Las ubicaciones que elijas deben tener el tipo de GPU que deseas para este trabajo. Para obtener más información, consulta el campo de array allowedLocations.

Agrega una GPU a un trabajo de secuencia de comandos

Para crear un trabajo de secuencia de comandos con una GPU que use la imagen predeterminada mediante la API de Batch, usa el método jobs.create.

Por ejemplo, para crear un trabajo de secuencia de comandos con una GPU, realiza la siguiente solicitud:

POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/jobs?job_id=example-job-gpu

{
    "taskGroups": [
        {
            "taskSpec": {
                "runnables": [
                    {
                        "script": {
                            "text": "echo Hello world from task ${BATCH_TASK_INDEX}."
                        }
                    }
                ]
            },
            "taskCount": 3,
            "parallelism": 1
        }
    ],
    "allocationPolicy": {
        "instances": [
            {
                "installGpuDrivers": INSTALL_GPU_DRIVERS,
                "policy": {
                    "machineType": "MACHINE_TYPE",
                    "accelerators": [
                        {
                            "type": "GPU_TYPE",
                            "count": GPU_COUNT
                        }
                    ]
                }
            }
        ],
        "location": {
            "allowedLocations": [
                "ALLOWED_LOCATIONS"
            ]
        }
    }
}

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto.
  • INSTALL_GPU_DRIVERS: Opcional Cuando se establece en true, Batch recupera los controladores necesarios para el tipo de GPU que especificas en el campo policy de una ubicación de terceros y Batch los instala en tu nombre. Si configuras este campo como false (predeterminado), debes instalar los controladores de GPU de forma manual para usar cualquier GPU en este trabajo.
  • MACHINE_TYPE: Es el tipo de máquina, que puede ser predefinido o personalizado, de las VM de tu trabajo. El tipo de máquina restringe el tipo de GPU que puedes usar. Para crear un trabajo con una GPU, este campo es obligatorio.
  • GPU_TYPE: Es el tipo de GPU. Puedes ver una lista de los tipos de GPU disponibles con el comando gcloud compute accelerator-types list. Para crear un trabajo con una GPU, este campo es obligatorio.
  • GPU_COUNT: Es la cantidad de GPU del tipo que especificaste en el campo type. Para crear un trabajo con una GPU, este campo es obligatorio.
  • ALLOWED_LOCATIONS: Opcional Las ubicaciones en las que las instancias de VM para tu trabajo pueden ejecutarse (por ejemplo, regions/us-central1, zones/us-central1-a permite la zona us-central1-a). Si especificas una ubicación permitida, debes seleccionar la región y, de forma opcional, una o más zonas. Las ubicaciones que elijas deben tener el tipo de GPU que deseas para este trabajo. Para obtener más información, consulta el campo de array allowedLocations.

Agrega una GPU a un trabajo de contenedor y secuencia de comandos

Para crear un trabajo de contenedor y secuencia de comandos con una GPU que use la imagen predeterminada mediante la API de Batch, usa el método jobs.create.

Por ejemplo, para crear un trabajo de contenedor y secuencia de comandos con una GPU, realiza la siguiente solicitud:

POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/jobs?job_id=example-job-gpu

{
    "taskGroups": [
        {
            "taskSpec": {
                "runnables": [
                    {
                        "container": {
                            "imageUri": "gcr.io/google_containers/cuda-vector-add:v0.1",
                            "options": "--gpus all"
                        }
                    },
                    {
                        "script": {
                            "text": "echo Hello world from script task ${BATCH_TASK_INDEX}."
                        }
                    }
                ]
            },
            "taskCount": 3,
            "parallelism": 1
        }
    ],
    "allocationPolicy": {
        "instances": [
            {
                "installGpuDrivers": INSTALL_GPU_DRIVERS,
                "policy": {
                    "machineType": "MACHINE_TYPE",
                    "accelerators": [
                        {
                            "type": "GPU_TYPE",
                            "count": GPU_COUNT
                        }
                    ]
                }
            }
        ],
        "location": {
            "allowedLocations": [
                "ALLOWED_LOCATIONS"
            ]
        }
    }
}

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto.
  • INSTALL_GPU_DRIVERS: Opcional Cuando se establece en true, Batch recupera los controladores necesarios para el tipo de GPU que especificas en el campo policy de una ubicación de terceros y Batch los instala en tu nombre. Si configuras este campo como false (predeterminado), debes instalar los controladores de GPU de forma manual para usar cualquier GPU en este trabajo.
  • MACHINE_TYPE: Es el tipo de máquina, que puede ser predefinido o personalizado, de las VM de tu trabajo. El tipo de máquina restringe el tipo de GPU que puedes usar. Para crear un trabajo con una GPU, este campo es obligatorio.
  • GPU_TYPE: Es el tipo de GPU. Puedes ver una lista de los tipos de GPU disponibles con el comando gcloud compute accelerator-types list. Para crear un trabajo con una GPU, este campo es obligatorio.
  • GPU_COUNT: Es la cantidad de GPU del tipo que especificaste en el campo type. Para crear un trabajo con una GPU, este campo es obligatorio.
  • ALLOWED_LOCATIONS: Opcional Las ubicaciones en las que las instancias de VM para tu trabajo pueden ejecutarse (por ejemplo, regions/us-central1, zones/us-central1-a permite la zona us-central1-a). Si especificas una ubicación permitida, debes seleccionar la región y, de forma opcional, una o más zonas. Las ubicaciones que elijas deben tener el tipo de GPU que deseas para este trabajo. Para obtener más información, consulta el campo de array allowedLocations.

¿Qué sigue?