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
- Si nunca antes usaste Batch, revisa Comienza a usar Batch y completa los requisitos previos para proyectos y usuarios.
-
Si quieres obtener los permisos que necesitas para crear un trabajo, solicita al administrador que te otorgue los siguientes roles de IAM:
-
Editor de trabajos por lotes (
roles/batch.jobsEditor
) en el proyecto -
Usuario de cuenta de servicio (
roles/iam.serviceAccountUser
) en la cuenta de servicio del trabajo, que es la cuenta de servicio predeterminada de Compute Engine de forma predeterminada
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso.
También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
-
Editor de trabajos por lotes (
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:
- 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.
- 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:
- Instala los controladores de GPU necesarios.
- Define los recursos de la VM
- Activa GPU en cualquier contenedor
Instalar los controladores de GPU.
Para instalar los controladores de GPU necesarios, selecciona uno de los siguientes métodos:
Instalar controladores de forma automática (recomendado): como se muestra en los ejemplos, para permitir que Batch recupere los controladores de GPU necesarios desde una ubicación de terceros y los instale en tu nombre, configura el campo
installGpuDrivers
del trabajo comotrue
.Instala controladores de forma manual: Este método es obligatorio si se cumple alguna de las siguientes condiciones:
- Un trabajo usa secuencias de comandos y contenedores que se pueden ejecutar y no tiene acceso a Internet. Para obtener más información sobre el acceso de un trabajo, consulta la Descripción general de las herramientas de redes por lotes.
- Un trabajo usa una imagen de VM personalizada.
Para instalar de forma manual los controladores de GPU necesarios, se recomienda el siguiente método:
Crea una imagen de VM personalizada que incluya los controladores de GPU.
Para instalar controladores de GPU, ejecuta una secuencia de comandos de instalación basada en el SO que deseas usar:
Si tu trabajo tiene algún contenedor que se pueda ejecutar y no usa Container-Optimized OS, también debes instalar el contenedor de NVIDIA.
Crea y envía un trabajo con la imagen de VM personalizada mediante una plantilla de instancias de Compute Engine. Establece el campo
installGpuDrivers
del trabajo enfalse
(predeterminado).
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:
- Para el campo
options
, especifica la marca--privileged
. - Para el campo
volumes
, especifica las rutas de acceso/var/lib/nvidia/lib64:/usr/local/nvidia/lib64
y/var/lib/n
vidia/bin:/usr/local/nvidia/bin
.
- Para el campo
- 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:
- Para el campo
options
, especifica la marca--gpus all
.
- Para el campo
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:
- Agrega una GPU a un trabajo de contenedor.
- Agrega una GPU a un trabajo de secuencia de comandos.
- Agrega una GPU a un trabajo de contenedor y secuencia de comandos
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:
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 entrue
, Batch recupera los controladores necesarios para el tipo de GPU que especificas en el campopolicy
de una ubicación de terceros y Batch los instala en tu nombre. Si configuras este campo comofalse
(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 comandogcloud 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 campotype
. 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 zonaus-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 arrayallowedLocations
.
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:
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 entrue
, Batch recupera los controladores necesarios para el tipo de GPU que especificas en el campopolicy
de una ubicación de terceros y Batch los instala en tu nombre. Si configuras este campo comofalse
(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 comandogcloud 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 campotype
. 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 zonaus-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 arrayallowedLocations
.
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:
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 entrue
, Batch recupera los controladores necesarios para el tipo de GPU que especificas en el campopolicy
de una ubicación de terceros y Batch los instala en tu nombre. Si configuras este campo comofalse
(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 comandogcloud 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 campotype
. 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 zonaus-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 arrayallowedLocations
.
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:
- Agrega una GPU a un trabajo de contenedor.
- Agrega una GPU a un trabajo de secuencia de comandos.
- Agrega una GPU a un trabajo de contenedor y secuencia de comandos
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 entrue
, Batch recupera los controladores necesarios para el tipo de GPU que especificas en el campopolicy
de una ubicación de terceros y Batch los instala en tu nombre. Si configuras este campo comofalse
(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 comandogcloud 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 campotype
. 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 zonaus-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 arrayallowedLocations
.
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 entrue
, Batch recupera los controladores necesarios para el tipo de GPU que especificas en el campopolicy
de una ubicación de terceros y Batch los instala en tu nombre. Si configuras este campo comofalse
(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 comandogcloud 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 campotype
. 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 zonaus-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 arrayallowedLocations
.
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 entrue
, Batch recupera los controladores necesarios para el tipo de GPU que especificas en el campopolicy
de una ubicación de terceros y Batch los instala en tu nombre. Si configuras este campo comofalse
(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 comandogcloud 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 campotype
. 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 zonaus-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 arrayallowedLocations
.
¿Qué sigue?
- Si tienes problemas para crear o ejecutar un trabajo, consulta Solución de problemas.
- Consulta trabajos y tareas.
- Obtenga más información sobre las opciones de creación de trabajos.