En este documento, se explica cómo crear trabajos que se ejecutan en recursos reservados.
Las reservas son una característica de Compute Engine. Una reserva proporciona un nivel de garantía muy alto en cuanto a la obtención de capacidad para una o más VM con la configuración de hardware especificada. Una reserva para una VM genera los costos de esa VM desde el momento en que se crea y hasta que la borras. Sin embargo, mientras consumes esa VM, el costo total equivale a una VM sin reserva.
Por lo general, las reservas son útiles cuando la disponibilidad de la capacidad es de importancia crítica o para evitar errores en la obtención de recursos. En el caso específico de Batch, considera usar reservas dedicadas para minimizar el tiempo de programación de trabajos o intenta usar las reservas existentes mientras no se usan. Si tienes reservas con poco uso, como reservas requeridas para descuentos por compromiso de uso, puedes configurar trabajos a fin de que intenten consumirlos mientras no se usan para optimizar los costos generados.
Si quieres obtener más información sobre las reservas, consulta la documentación de Compute Engine para las reservas.
Antes de comenzar
- Si no has usado Batch antes, revisa Comienza a usar Batch y completa los requisitos previos para los proyectos y usuarios a fin de habilitar Batch.
- Asegúrate de tener los permisos para crear una reserva o ver una reserva existente que desees que las VM de un trabajo consuman según sea necesario.
-
Si quieres obtener los permisos que necesitas para crear un trabajo, pídele a tu 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 de forma predeterminada es la cuenta de servicio predeterminada de Compute Engine
Si quieres obtener más información para otorgar roles, consulta Administra el acceso.
Es posible que también puedas obtener los permisos necesarios a través de los roles personalizados o de otros roles predefinidos.
-
Editor de trabajos por lotes (
Restricciones
Además de las restricciones generales para las reservas, Batch también tiene las siguientes restricciones:
- Las VMs de un trabajo no pueden consumir reservas compartidas.
- Las VM de un trabajo no pueden consumir reservas si se especifica una política de posición compacta.
Requisitos
En esta sección, se resumen los requisitos para que las VM de un trabajo consuman una reserva. Si deseas obtener más información sobre todos los requisitos, consulta los requisitos generales para las reservas en la documentación de Compute Engine y el procedimiento para planificar la configuración que aparece más adelante en este documento.
Para que las VM de un trabajo sean generalmente capaces de consumir una reserva, se deben cumplir todas las condiciones siguientes:
El trabajo y la reserva deben especificar las propiedades de VM que coinciden con exactitud.
Debes cumplir con todas las restricciones de este documento y todos los demás requisitos generales de las reservas.
Para que cada una de las VM de un trabajo consuma una reserva de manera correcta, la reserva debe tener capacidad sin usar disponible durante el tiempo de ejecución de la VM.
La capacidad sin usar de una reserva es la diferencia entre su recuento de VM y la cantidad de VM que la consumen. Las VMs intentan consumir reservas cuando tienes capacidad de reserva sin usar. Por lo tanto, una VM puede comenzar a consumir una reserva cuando se crea o más adelante en el tiempo de ejecución. Una VM no deja de consumir una reserva hasta que la VM deja de ejecutarse o la reserva se borra.
Según la capacidad de reserva total sin usar, ninguna, parte o la totalidad de las VM de un trabajo pueden consumir reservas, y la cantidad de VM reservadas puede variar durante el tiempo de ejecución del trabajo.
Crea y ejecuta un trabajo que pueda consumir VMs reservadas
Planifica la configuración. Para asegurarte de que tu trabajo y tu reserva sean compatibles, completa los siguientes pasos.
Si deseas consumir una reserva que ya existe, debes crear un trabajo con una configuración correspondiente. De lo contrario, si planeas crear una reserva nueva, selecciona las opciones de configuración que prefieras.
Determina las propiedades de la reserva. Debido a las restricciones, el tipo de uso compartido debe ser de single-project, que es la opción predeterminada para una reserva. Determina los valores que quieres usar para las siguientes propiedades de reserva:
- Tipo de consumo*
- VM VMs†
* El tipo de consumo de la reserva (orientado específicamente o consumido de forma automática) determina qué VM pueden consumir la reserva.
†El recuento de VM representa la capacidad total de una reserva. Cuando decidas este valor, considera la cantidad de VM del trabajo.
Determina las propiedades de la VM para el trabajo y la reserva. Debido a las restricciones, ni el trabajo ni la reserva pueden especificar una política de posición compacta, que es la opción predeterminada para las reservas y los trabajos. Determina los valores que quieres usar para las siguientes propiedades de VM, que deben coincidir exactamente con la reserva y el trabajo:
- Proyecto
- Zona*
- Tipo de máquina†
- Plataforma de CPU mínima† (si corresponde‡)
- Tipo y cantidad de GPU† (si corresponde‡)
- Tipo y cantidad de SSD locales† (si corresponde‡)
- Afinidad de reserva†#
* Las VM del trabajo deben estar ubicadas en la misma zona que las VM reservadas. Debes incluir esta zona en el campo
allowedLocations[]
del trabajo o, si omites el campoallowedLocations[]
, establecer la ubicación del trabajo en la región que contiene esta zona.†El trabajo debe definir todas estas propiedades mediante los subcampos
policy
o una plantilla de instancias de VM. Un trabajo no puede especificar una combinación de subcampospolicy
y una plantilla.‡ Un campo opcional no se puede definir para un recurso y omitirse del otro. Omite o define el campo opcional para la reserva y el trabajo. Si el trabajo especifica una plantilla de instancias de VM, esto también se aplica a los campos de la plantilla especificada.
#El tipo de consumo de la reserva determina la afinidad de reserva necesaria para las VM del trabajo, que debes especificar en el trabajo de la siguiente manera:
- Si el trabajo usa una plantilla de instancias de VM, esta debe configurar la afinidad de reserva como se explica en la documentación de reservas.
- Si el trabajo no usa una plantilla y la reserva tiene un objetivo específico, especifica el nombre de la reserva en el campo
reservation
del trabajo. - De lo contrario, si el trabajo no usa una plantilla y la reserva se consume de forma automática, omite el campo
reservation
del trabajo.
Prepara la reserva. Si aún no lo hiciste, crea la reserva que deseas que consuman las VM del trabajo. Asegúrate de que la reserva tenga las propiedades que planeaste.
Crea y ejecuta el trabajo. Puedes crear y ejecutar un trabajo que consuma VM de la reserva preparada con gcloud CLI o la API de Batch:
gcloud
Crea un archivo JSON que especifique los detalles de configuración del trabajo que establezca los subcampos de recurso de instancia de VM (
instances[]
) para que coincidan de manera exacta con las propiedades de VM de una reserva.Por ejemplo, para crear un trabajo de secuencia de comandos básico que consuma VM de una reserva, crea un archivo JSON con el siguiente contenido:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}" } } ] }, "taskCount": 3 } ], "allocationPolicy": { "instances": [ { VM_RESOURCES } ], }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }
Reemplaza
VM_RESOURCES
por los recursos de VM que coinciden con la reserva que deseas que consuma el trabajo. Para ello, especifica los subcamposinstances[]
que planificaste en los pasos anteriores.Por ejemplo, comienza con el siguiente valor de
VM_RESOURCES
:"installGpuDrivers": INSTALL_GPU_DRIVERS, "policy": { "machineType": "MACHINE_TYPE", "minCpuPlatform": "MIN_CPU_PLATFORM", "accelerators": [ { "type": "GPU_TYPE", "count": GPU_COUNT } ], "disks": [ { "newDisk": { "sizeGb": LOCAL_SSD_SIZE, "type": "local-ssd" }, "deviceName": "LOCAL_SSD_NAME" } ], "reservation": "SPECIFIC_RESERVATION_NAME" }
Para usar este valor, realiza los siguientes cambios:
¿Quieres usar una plantilla de instancias?
Sí: Reemplaza el campo
policy
por el campoinstanceTemplate
y especifica una plantilla de instancias de VM existente que coincida con la reserva. Por ejemplo, consulta la muestra de código para usar una plantilla de instancias de VM. Si la reserva usa GPU o SSD locales, también debes configurar los camposinstallGpuDrivers
yvolumes[]
del trabajo, respectivamente. De lo contrario, omite los cambios restantes.No: Reemplaza
MACHINE_TYPE
por el mismo tipo de máquina que la reserva.
¿La reserva incluye una plataforma de CPU mínima?
Sí: Reemplaza
MIN_CPU_PLATFORM
por la misma plataforma de CPU mínima.No: Quita el campo
minCpuPlatform
.
¿La reserva incluye GPU?
Sí: Reemplaza
INSTALL_GPU_DRIVERS
,GPU_TYPE
yGPU_COUNT
para que coincidan con la reserva. Por ejemplo, consulta la muestra de código para usar GPU.No: Quita los campos
installGpuDrivers
yaccelerators[]
.
¿La reserva incluye SSD locales?
Sí: Reemplaza
LOCAL_SSD_SIZE
yLOCAL_SSD_NAME
para que coincidan con la reserva y activa los SSD locales. Para ello, agrega el campovolumes[]
al trabajo. Por ejemplo, consulta la muestra de código para usar SSD locales.No: Quita el campo
disks[]
.
¿La reserva usa el tipo de consumo segmentado de forma específica?
Sí: Reemplaza
SPECIFIC_RESERVATION_NAME
por el nombre de la reserva.No: Quita el campo
reservation
.
Por ejemplo, supongamos que usas una reserva consumida automáticamente para las VM
n2-standard-32
que no especifica ninguna plataforma de CPU mínima, GPU ni SSD locales. Además, no es recomendable especificar una plantilla de instancias de VM. En ese caso, debes reemplazarVM_RESOURCES
por el siguiente valor:"policy": { "machineType": "n2-standard-32" }
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. A menos que el trabajo especifique el campoallowedLocations[]
, esta debe ser la región que contiene la zona de la reserva.JSON_CONFIGURATION_FILE
: Es la ruta de acceso a un archivo JSON con los detalles de configuración del trabajo.
API
Realiza una solicitud
POST
al métodojobs.create
que configura los subcampos de recursos de instancia de VM (instances[]
) para que coincidan de manera exacta con las propiedades de VM de una reserva.Por ejemplo, para crear un trabajo de secuencia de comandos básico que consuma VM de una reserva, realiza la siguiente solicitud:
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 } ], "allocationPolicy": { "instances": [ { VM_RESOURCES } ], }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }
Reemplaza lo siguiente:
PROJECT_ID
: Es el ID del proyecto.LOCATION
: Es la ubicación del trabajo. A menos que el trabajo especifique el campoallowedLocations[]
, esta debe ser la región que contiene la zona de la reserva.JOB_NAME
: Es el nombre del trabajo.VM_RESOURCES
: Los recursos de VM que coinciden con la reserva que deseas que consuma el trabajo mediante la especificación de los subcamposinstances[]
que planificaste en los pasos anteriores.Por ejemplo, comienza con el siguiente valor de
VM_RESOURCES
:"installGpuDrivers": INSTALL_GPU_DRIVERS, "policy": { "machineType": "MACHINE_TYPE", "minCpuPlatform": "MIN_CPU_PLATFORM", "accelerators": [ { "type": "GPU_TYPE", "count": GPU_COUNT } ], "disks": [ { "newDisk": { "sizeGb": LOCAL_SSD_SIZE, "type": "local-ssd" }, "deviceName": "LOCAL_SSD_NAME" } ], "reservation": "SPECIFIC_RESERVATION_NAME" }
Para usar este valor, realiza los siguientes cambios:
¿Quieres usar una plantilla de instancias?
Sí: Reemplaza el campo
policy
por el campoinstanceTemplate
y especifica una plantilla de instancias de VM existente que coincida con la reserva. Por ejemplo, consulta la muestra de código para usar una plantilla de instancias de VM. Si la reserva usa GPU o SSD locales, también debes configurar los camposinstallGpuDrivers
yvolumes[]
del trabajo, respectivamente. De lo contrario, omite los cambios restantes.No: Reemplaza
MACHINE_TYPE
por el mismo tipo de máquina que la reserva.
¿La reserva incluye una plataforma de CPU mínima?
Sí: Reemplaza
MIN_CPU_PLATFORM
por la misma plataforma de CPU mínima.No: Quita el campo
minCpuPlatform
.
¿La reserva incluye GPU?
Sí: Reemplaza
INSTALL_GPU_DRIVERS
,GPU_TYPE
yGPU_COUNT
para que coincidan con la reserva. Por ejemplo, consulta la muestra de código para usar GPU.No: Quita los campos
installGpuDrivers
yaccelerators[]
.
¿La reserva incluye SSD locales?
Sí: Reemplaza
LOCAL_SSD_SIZE
yLOCAL_SSD_NAME
para que coincidan con la reserva y activa los SSD locales. Para ello, agrega el campovolumes[]
al trabajo. Por ejemplo, consulta la muestra de código para usar SSD locales.No: Quita el campo
disks[]
.
¿La reserva usa el tipo de consumo segmentado de forma específica?
Sí: Reemplaza
SPECIFIC_RESERVATION_NAME
por el nombre de la reserva.No: Quita el campo
reservation
.
Por ejemplo, supongamos que usas una reserva consumida automáticamente para las VM
n2-standard-32
que no especifica ninguna plataforma de CPU mínima, GPU ni SSD locales. Además, no es recomendable especificar una plantilla de instancias de VM. En ese caso, debes reemplazarVM_RESOURCES
por el siguiente valor:"policy": { "machineType": "n2-standard-32" }
¿Qué sigue?
- Si tienes problemas para crear o ejecutar un trabajo, consulta Solución de problemas.
- Visualiza trabajos y tareas.
- Obtén más información sobre las opciones de creación de trabajos.