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

Cuando creas un trabajo por lotes, tienes la opción de agregar una o más GPU a las VM que lo ejecutan. Los casos prácticos comunes para los trabajos que usan GPU incluyen cargas de trabajo de procesamiento intensivo de datos y aprendizaje automático (AA).

Antes de comenzar

Crea un trabajo que use GPU

Para crear un trabajo que use GPU, haz lo siguiente:

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

Requisitos para que un trabajo use GPU

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

Una vez que hayas determinado cómo cumplir con estos requisitos para tu trabajo, también deberás definir las GPU y la ubicación del trabajo. Cada VM de un trabajo puede usar una o más GPU del tipo que especifiques. Las ubicaciones permitidas para las VMs del trabajo (o, si no están definidas, la ubicación del trabajo) deben tener el tipo de GPU especificado. Si deseas obtener más información sobre cómo definir el tipo de GPU, el número de GPU y una ubicación válida para un trabajo, consulta los ejemplos.

Instalar los controladores de GPU.

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

Define recursos de VM compatibles

Si tu trabajo define cualquiera de los recursos de VM (cualquiera de los subcampos instances[]) que no sean GPU, debes definir esos recursos de VM de una manera compatible.

Para definir los recursos de las VMs de un trabajo, incluidas las GPU, solo puedes usar los siguientes métodos:

  • Definir recursos directamente (recomendado): Como se muestra en los ejemplos, a fin de definir los recursos para las VM de un trabajo directamente, usa el campo policy.
  • Definir recursos en una plantilla: Define los recursos para las VM de un trabajo mediante la especificación de una plantilla de instancias de Compute Engine.

Además, todos los recursos que definas deben ser compatibles con el tipo y la cantidad de GPU para el trabajo. Para obtener más información sobre los recursos de VM que puedes usar con GPU, consulta Plataformas de GPU en la documentación de Compute Engine.

Crea un trabajo de ejemplo que use GPU

Puedes crear un trabajo que use GPU con gcloud CLI o la API de Batch.

gcloud

  1. Crea un archivo JSON que especifique los detalles de configuración del trabajo, los subcampos type y count del campo accelerators[] y una ubicación que tenga esos tipos de GPU.

    Por ejemplo, para crear un trabajo de secuencia de comandos básico que use GPU, instale automáticamente los controladores de GPU necesarios y especifique las ubicaciones permitidas para las VMs del trabajo, crea un archivo 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": {
                        "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 desde una ubicación de terceros, y Batch los instala por ti. Si configuras este campo como false (predeterminado), debes instalar los controladores de GPU de forma manual a fin de usar cualquier GPU para este trabajo.

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

    • GPU_COUNT: Es la cantidad de GPU del tipo especificado.

    • ALLOWED_LOCATIONS: Opcional Las ubicaciones en las que se permiten las instancias de VM para tu trabajo, 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 los tipos de GPU que deseas para este trabajo. De lo contrario, si omites este campo, la ubicación del trabajo debe tener los tipos de GPU. Para obtener más información, consulta el campo allowedLocations[].

  2. Para crear y ejecutar el trabajo, usa el comando gcloud batch jobs submit:

    gcloud batch jobs submit JOB_NAME \
        --location LOCATION \
        --config JSON_CONFIGURATION_FILE
    

    Reemplaza lo siguiente:

    • JOB_NAME: Es el nombre del trabajo.

    • LOCATION: Es la ubicación del trabajo.

    • JSON_CONFIGURATION_FILE: Es la ruta de acceso de un archivo JSON con los detalles de configuración del trabajo.

API

Realiza una solicitud POST al método jobs.create que especifica los detalles de configuración del trabajo, los subcampos type y count del campo accelerators[], y una ubicación que tenga esos tipos de GPU.

Por ejemplo, para crear un trabajo de secuencia de comandos básico que use GPU, instale automáticamente los controladores de GPU necesarios y especifique las ubicaciones permitidas para las VMs del trabajo, crea un archivo JSON con el siguiente contenido:

POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME

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

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto.

  • LOCATION: Es la ubicación del trabajo.

  • JOB_NAME: Es el nombre del trabajo.

  • 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 desde una ubicación de terceros, y Batch los instala por ti. Si configuras este campo como false (predeterminado), debes instalar los controladores de GPU de forma manual a fin de usar cualquier GPU para este trabajo.

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

  • GPU_COUNT: Es la cantidad de GPU del tipo especificado.

  • ALLOWED_LOCATIONS: Opcional Las ubicaciones en las que se permiten las instancias de VM para tu trabajo, 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 los tipos de GPU que deseas para este trabajo. De lo contrario, si omites este campo, la ubicación del trabajo debe tener los tipos de GPU. Para obtener más información, consulta el campo allowedLocations[].

¿Qué sigue?