En este documento, se explica el proceso de ejecución y las opciones de creación de trabajos. Los trabajos por lotes te permiten ejecutar cargas de trabajo de procesamiento por lotes en Google Cloud. Para obtener información sobre los componentes de un trabajo y los requisitos previos para usar Batch, consulta Cómo comenzar a usar Batch.
Cómo funcionan la creación y ejecución de trabajos
Para usar Batch, creas un trabajo que especifique tu carga de trabajo y sus requisitos, y, luego, Batch lo ejecuta automáticamente.
En las siguientes secciones, se describen los detalles de cómo funcionan la creación y la ejecución de trabajos:
- Ciclo de vida del trabajo: Comprende los estados por los que pasa un trabajo desde su creación hasta su eliminación.
- Alineación y programación de trabajos: Comprende los factores que afectan el tiempo que tarda un trabajo en comenzar a ejecutarse.
- Ejecución de trabajos: Comprende cómo se ejecutan las tareas de un trabajo en sus recursos durante la ejecución.
Ciclo de vida de los trabajos
En esta sección, se describe el ciclo de vida de un trabajo y sus tareas, desde su creación hasta su eliminación.
Para cada carga de trabajo que deseas ejecutar en Batch, debes seguir el siguiente proceso básico:
- Crea un trabajo: Para definir la carga de trabajo que deseas ejecutar, especifica los elementos ejecutables, las tareas y cualquier otro requisito de un trabajo. Los detalles para crear un trabajo se presentan en la sección Opciones de creación de trabajos de este documento.
- Supervisa y soluciona problemas del trabajo: Cuando terminas de crear un trabajo, este se pone en cola, se programa y se ejecuta automáticamente en los recursos especificados. Puedes ver los detalles de un trabajo creado o cualquiera de sus tareas para ver el estado actual. Si es necesario, puedes cancelar un trabajo (Vista previa) para detenerlo o evitar que se ejecute. Después de que se ejecuta o finaliza un trabajo, también puedes supervisarlo y analizarlo con los registros. Si un trabajo falla, puedes solucionar el problema con mensajes de error, eventos de estado o registros para diagnosticar el problema antes de volver a crearlo.
- Borrar o exportar el trabajo: La información de un trabajo en Batch permanece disponible hasta que tú o Google Cloud lo borras.Google Cloud borra automáticamente un trabajo 60 días después de que finaliza. Antes de ese momento, puedes borrar el trabajo por tu cuenta (opcional) o, si necesitas retener la información, puedes exportarla en Batch antes de que se borre. La información sobre un trabajo que se almacena en otros servicios de Google Cloud no se ve afectada cuando se borra un trabajo y tiene políticas de retención independientes. Por ejemplo, los registros de una tarea se retienen y borran automáticamente según la política de retención de Cloud Logging.
Después de crear un trabajo, este pasa por los siguientes estados:
- En cola (
QUEUED
): La solicitud de trabajo se admitió y está esperando en la cola. La tarea permanece en la cola hasta que los recursos necesarios están disponibles y se evaluaron las tareas que la preceden. - Programado (
SCHEDULED
): Se seleccionó la tarea de la cola para que comience a ejecutarse y se están asignando los recursos. Running (
RUNNING
): Los recursos del trabajo se crearon correctamente y sus tareas pueden comenzar a ejecutarse.Cuando se ejecuta un trabajo, cada una de sus tareas pasa por los siguientes estados:
- Pendiente (
PENDING
): La tarea está esperando que se ejecute en una VM. - Asignada (
ASSIGNED
): Se asignó una VM a la tarea para que se ejecute. - Running (
RUNNING
): La tarea se ejecuta en una VM. Una tarea finaliza en uno de los siguientes estados:
Se realizó correctamente (
SUCCEEDED
): La tarea se realizó correctamente porque cada uno de sus elementos ejecutables cumplió una de las siguientes condiciones:- El elemento ejecutable se ejecutó correctamente (mostró un código de salida de cero).
- El elemento ejecutable falló (mostró un código de salida distinto de cero), pero era un elemento ejecutable no crítico (habilitaste el campo
ignoreExitStatus
del elemento ejecutable). - La actividad ejecutable no finalizó, pero era una actividad ejecutable en segundo plano (habilitaste el campo
background
de la actividad ejecutable).
Falló (
FAILED
): La tarea falló y dejó de ejecutarse porque al menos un elemento ejecutable no cumplió con las condiciones anteriores.
Los recursos del trabajo se borran antes de que finalice.
- Pendiente (
Un trabajo finaliza en uno de los siguientes estados:
- Succeeded (
SUCCEEDED
): El trabajo se realizó correctamente porque todas sus tareas se completaron de forma correcta. - Falló (
FAILED
): El trabajo falló y dejó de ejecutarse porque al menos una de sus tareas falló. - Cancelada (
CANCELLED
): Un usuario canceló la tarea (Versión preliminar) antes de que se completara o fallara.
- Succeeded (
Para obtener más información, consulta los estados de trabajo y los estados de tarea en la documentación de referencia.
Encola y programa trabajos
Por lo general, es más probable que las tareas se ejecuten y finalicen antes si son más pequeñas y requieren solo algunos recursos comunes. En el caso de los trabajos de ejemplo de la documentación de Batch, que suelen ser muy pequeños y usan recursos mínimos, es posible que veas que terminan de ejecutarse en solo unos minutos.
Específicamente, el tiempo que tarda un trabajo en terminar de colocarse en cola y programarse varía para diferentes trabajos y en diferentes momentos en función de los siguientes factores:
Requisitos previos de trabajo especificados por el usuario: Son los requisitos previos que debes cumplir antes de programar el trabajo.
De forma predeterminada, un trabajo no tiene requisitos previos. De manera opcional, puedes especificar que un trabajo no se puede programar hasta que uno o más trabajos existentes se hayan ejecutado correctamente o hayan fallado. Para obtener más información, consulta Cómo programar trabajos dependientes (Versión preliminar).
Prioridad de la tarea: Es la prioridad de una tarea en relación con las prioridades de otras tareas de tu proyecto.
De manera opcional, puedes especificar la prioridad de un trabajo si incluyes la marca
--priority
para la CLI de gcloud o el campo JSONpriority
. Puedes definir la prioridad de una tarea como un número entre0
(prioridad más baja) y99
(prioridad más alta). Establecer una prioridad más alta puede ayudar a que una tarea se ejecute antes que las tareas de menor prioridad en tu proyecto.Si no configuras la prioridad de un trabajo, se usará la prioridad más baja,
0
, de forma predeterminada. Si dos trabajos en cola tienen la misma prioridad, el trabajo que se creó primero tiene la prioridad más alta.Disponibilidad de recursos de trabajo: Es la disponibilidad de los recursos necesarios del trabajo dentro de las ubicaciones permitidas.
En primer lugar, un trabajo no se puede ejecutar si especificas recursos que no se ofrecen en esa ubicación. Cuando esto sucede, el trabajo falla con un error de disponibilidad de zona.
En segundo lugar, es más probable que una tarea se retrase o falle si alguno de sus recursos necesarios tiene una capacidad baja en relación con la demanda actual debido a errores de disponibilidad de recursos. Como resultado, tu trabajo podría ejecutarse antes cuando necesites menos recursos más comunes y no restrinjas que se ejecute en ninguna zona de una región.
Para obtener más información sobre los recursos de un trabajo, consulta Ejecución de trabajos en este documento. Para obtener más información sobre las ubicaciones que puedes especificar para un trabajo de Batch y sus recursos, consulta la página Ubicaciones.
Cuotas y límites: Son los umbrales que tiene tu proyecto para los Google Cloud recursos y las solicitudes.
Una tarea no se puede ejecutar si supera un límite o la cuota de tu proyecto para alguno de los recursos o solicitudes requeridos. Cuando esto sucede, Batch puede retrasar un trabajo y volver a intentarlo más tarde, o bien fallar y mostrar un error relacionado.
Puedes ayudar a evitar demoras y errores en tu trabajo creando trabajos que cumplan con todos los límites relevantes y asegurándote de que tu proyecto tenga suficiente cuota relevante. Para obtener más información, consulta Cuotas y límites de lotes.
Ejecución del trabajo
El tiempo que tarda en ejecutarse una tarea puede variar según la programación de tareas y los recursos de la tarea.
Programación de tareas
Cuando se ejecuta un trabajo, sus tareas se programan según el campo de política de programación (schedulingPolicy
), que te permite especificar una de las siguientes opciones:
- Lo antes posible (
AS_SOON_AS_POSSIBLE
) (predeterminado): Las tareas se ejecutan en cuanto los recursos están disponibles y pueden ejecutarse en paralelo. La cantidad de tareas que se ejecutan a la vez depende de las tareas en paralelo por VM que permiten los recursos de la tarea y otras opciones de configuración, como se explica en Recursos de trabajo en este documento. - En orden (
IN_ORDER
): Las tareas se ejecutan de a una a la vez en orden de índice creciente.
Recursos de trabajo
Cada trabajo por lotes se ejecuta en un grupo de instancias administrado regional (MIG), que es un grupo de una o más instancias de máquina virtual (VM) de Compute Engine coincidentes que se encuentran en una de las zonas incluidas. Cada VM tiene hardware dedicado para los núcleos de CPU (específicamente, CPU virtuales (vCPU)) y la memoria, que afectan el rendimiento de tu trabajo, y un disco de arranque, que almacena una imagen del sistema operativo (SO) y las instrucciones para ejecutar tu trabajo.
Durante el tiempo de ejecución de un trabajo, Batch crea y borra automáticamente los recursos que cumplen con tus especificaciones. Cuando creas un trabajo, debes especificar lo siguiente para configurar sus recursos:
Recursos de procesamiento por tarea: A menos que los valores predeterminados sean suficientes, debes especificar los recursos de procesamiento (CPU virtuales, memoria y, si es necesario, almacenamiento adicional en el disco de inicio) que se requieren para que se ejecute cada tarea. Para obtener más información, consulta los campos de recursos de procesamiento por tarea (
computeResource
).Recursos de VM: De manera opcional, también puedes especificar las VM del trabajo, como el tipo de máquina y el SO, y los recursos adicionales, como las GPUs y los volúmenes de almacenamiento, con los campos de la política de recursos de VM (
instances[].policy
) o el campo alternativoinstances[].instanceTemplate
. Si dejas estos campos sin definir (lo que no es posible cuando se crea un trabajo con la consola de Google Cloud), el procesamiento por lotes intenta seleccionar automáticamente VMs compatibles y no agrega recursos adicionales.
La cantidad de VMs y la cantidad de tareas que se pueden ejecutar de forma simultánea en cada VM varían según las tareas en función de la programación de tareas y los requisitos de hardware especificados. Si especificas que las tareas de un trabajo se ejecuten como IN_ORDER
, el trabajo tendrá una VM y solo ejecutará una tarea a la vez. De lo contrario, si las tareas de un trabajo ejecutan AS_SOON_AS_POSSIBLE
, puedes estimar la cantidad de VMs y la cantidad de tareas simultáneas con la siguiente fórmula:
\[{vmsPerJob}=\frac{taskCount}{parallelTasksPerVm}\]
Esta fórmula tiene los siguientes valores:
- \({vmsPerJob}\): Es la cantidad máxima de VMs para un trabajo. La cantidad real de VMs que se crean para una tarea puede ser menor que esta, por ejemplo, si Batch espera que sea más rápido ejecutar una tarea en menos recursos que esperar más recursos. Este valor también está limitado por los límites de VMs simultáneas por trabajo.
- \({taskCount}\): Es la cantidad total de tareas de la tarea, que defines con el campo de recuento de tareas (
taskCount
). \({parallelTasksPerVM}\): Es la cantidad máxima de tareas que se pueden ejecutar en una VM simultáneamente.
Este valor se determina según todos los criterios siguientes:
El valor mínimo es 1 tarea.
El valor máximo es el menor de 20 tareas y, si se define, el valor del campo de tareas en paralelo máximas por trabajo (
parallelism
).Si se define el campo de tareas en paralelo máximas por VM (
taskCountPerNode
), se usa ese valor.De lo contrario, si
taskCountPerNode
no está definido, Batch decide un valor dividiendo la cantidad total de recursos de procesamiento (específicamente, CPU virtuales) por VM en la cantidad requerida para cada tarea:\[{parallelTasksPerVm}=\frac{vcpusPerVm}{vcpusPerTask}\]
Esta fórmula tiene los siguientes valores:
\({vcpusPerVm}\): Es la cantidad total de CPU virtuales por VM, que se determina según el tipo de máquina de las VMs de tu trabajo.
\({vcpusPerTask}\): Es la cantidad de CPU virtuales por tarea, que se determina convirtiendo las unidades del campo CPU virtuales por tarea (
cpuMilli
).
Opciones de creación de trabajos
En Cómo crear y ejecutar un trabajo básico, se explican los aspectos básicos, como cómo definir un elemento ejecutable con una secuencia de comandos o una imagen de contenedor, y cómo configurar variables de entorno predefinidas y personalizadas.
Después de comprender los aspectos básicos para la creación de trabajos, considera crear un trabajo que use una o más de las siguientes opciones de configuración adicionales:
Controla el acceso a un trabajo:
En Cómo controlar el acceso de un trabajo con una cuenta de servicio personalizada, se explica cómo especificar la cuenta de servicio de un trabajo, lo que influye en los recursos y las aplicaciones a los que pueden acceder las VMs de un trabajo. Si no especificas una cuenta de servicio personalizada, los trabajos usarán de forma predeterminada la cuenta de servicio predeterminada de Compute Engine.
En la descripción general de las redes, se proporciona una descripción general de cuándo y cómo puedes personalizar la configuración de red de un trabajo, lo que incluye especificar la red del trabajo, bloquear conexiones externas y proteger datos y recursos con los Controles del servicio de VPC.
En Protege datos sensibles con Secret Manager, se explica cómo definir de forma segura datos sensibles, como variables de entorno personalizadas y credenciales de acceso, con secretos de Secret Manager para especificar información encriptada cuando creas un trabajo.
Configura opciones adicionales para un trabajo:
En Cómo configurar la comunicación de tareas con una biblioteca MPI, se explica cómo configurar un trabajo con tareas interdependientes que se comunican entre sí en diferentes VMs con una biblioteca de interfaz de transmisión de mensajes (MPI). Un caso de uso común para MPI son las cargas de trabajo de computación de alto rendimiento (HPC) estrechamente vinculadas.
Personaliza los recursos en los que se ejecuta una tarea:
En Define los recursos de trabajo con una plantilla de instancia de VM, se explica cómo especificar una plantilla de VM de Compute Engine para definir los recursos de un trabajo cuando lo creas. Esta es una alternativa para especificar los recursos de un trabajo directamente con el campo
instances[].policy
.En Cómo usar GPUs para una tarea, se explica cómo definir una tarea que usa una o más unidades de procesamiento de gráficos (GPU). Los casos de uso comunes para las tareas que usan GPUs incluyen el procesamiento intensivo de datos o las cargas de trabajo de aprendizaje automático (AA).
En Cómo usar volúmenes de almacenamiento para un trabajo, se explica cómo definir un trabajo que pueda acceder a uno o más volúmenes de almacenamiento externo. Las opciones de almacenamiento incluyen discos persistentes nuevos o existentes, SSD locales nuevos, buckets de Cloud Storage existentes y un sistema de archivos de red (NFS) existente, como un recurso compartido de archivos de Filestore.
La descripción general del entorno del SO de la VM proporciona una descripción general de cuándo y cómo puedes personalizar el entorno del sistema operativo (SO) de la VM para una tarea, incluida la imagen del SO de la VM y los discos de arranque de la tarea.
Optimiza varios aspectos de un trabajo:
Mejora la supervisión y el análisis:
En Cómo escribir registros de tareas, se explica cómo configurar los elementos ejecutables de un trabajo para escribir registros de tareas. Escribir registros de tareas te permite mostrar información personalizada en Cloud Logging, lo que puede ayudar a que las tareas sean más fáciles de analizar y solucionar.
En Cómo configurar eventos de estado personalizados, se explica cómo configurar eventos de estado personalizados para los elementos ejecutables de un trabajo. Los eventos de estado personalizados te permiten describir eventos importantes que ocurren para los elementos ejecutables y que aparecen cuando consultas el historial de eventos de estado de un trabajo, lo que puede ayudar a que los trabajos sean más fáciles de analizar y solucionar problemas.
En Cómo habilitar notificaciones de estado, se explica cómo puedes configurar un trabajo para que envíe notificaciones de Pub/Sub sobre su estado, que puedes almacenar y consultar de forma opcional en una tabla de BigQuery. Antes de leer este documento, configura tu proyecto para supervisar el estado de las tareas con notificaciones de Pub/Sub y BigQuery primero.
En Habilita las métricas del Agente de operaciones, se explica cómo configurar una tarea para instalar automáticamente el Agente de operaciones. El Agente de operaciones recopila métricas adicionales sobre el rendimiento y el uso de los recursos de una tarea. Para obtener más información sobre cómo ver y usar las métricas de recursos, consulta Cómo supervisar y optimizar los recursos de trabajo mediante las métricas.
En Programa trabajos dependientes (Versión preliminar), se explica cómo especificar un trabajo que no se ejecuta hasta que uno o más trabajos de dependencia existentes se hayan ejecutado correctamente o hayan fallado. Si tienes una carga de trabajo con requisitos de recursos variables, puedes reducir los costos y el uso de la cuota si separas los tipos de VMs que se usan para operaciones de baja demanda (como la preparación de datos) y operaciones intensivas en procesamiento (como el procesamiento de datos).
En Cómo automatizar los reintentos de tareas, se explica cómo volver a intentar automáticamente las tareas de un trabajo después de todas las fallas o de las fallas especificadas. Los reintentos automatizados pueden ayudar a reducir la fricción de solución de problemas y el tiempo de ejecución general necesario para las tareas que experimentan errores temporales. Por ejemplo, usa reintentos automáticos para una tarea que se ejecuta en VMs Spot, que proporcionan descuentos significativos, pero que pueden no estar siempre disponibles y se pueden interrumpir en cualquier momento.
En Cómo limitar los tiempos de ejecución con tiempos de espera, se explica cómo limitar la cantidad de tiempo que se permite que se ejecute una tarea o un elemento ejecutable. Si evitas los tiempos de ejecución excesivos, puedes reducir los costos y las demoras inesperados.
En Cómo garantizar la disponibilidad de recursos con reservas de VM, se explica cómo configurar un trabajo que se puede ejecutar en VMs reservadas. El uso de VMs reservadas puede ayudarte a minimizar el tiempo de programación de una tarea, evitar errores de disponibilidad de recursos y optimizar los costos.
Reduce la latencia:
En Cómo ubicar VMs en la misma ubicación para reducir la latencia, se explica cómo reducir la latencia de red entre las VMs de un trabajo, ya que requiere que las VMs se encuentren físicamente cerca una de la otra. Este beneficio de rendimiento puede ser especialmente útil para las tareas que tienen comunicaciones de red frecuentes entre VMs, como las tareas que se comunican con bibliotecas MPI.
En Usa la transmisión de imágenes, se explica cómo mejorar el tiempo de inicio de la tarea mediante la transmisión de imágenes de contenedor desde Artifact Registry.
Usa servicios adicionales para crear y ejecutar trabajos:
En Organiza trabajos con Workflows, se explica cómo usar Workflows para ejecutar las tareas de un trabajo en un orden que definas con la sintaxis de Workflows.
En Organiza trabajos con Nextflow, se explica cómo ejecutar un trabajo de Batch a través de una canalización de Nextflow, que puedes usar para organizar flujos de trabajo de bioinformática.
En Organiza trabajos con dsub, se explica cómo ejecutar un trabajo de Batch a través de una canalización de
dsub
, que puedes usar para organizar flujos de trabajo de procesamiento por lotes en servicios de Google Cloud .En Cómo crear y ejecutar trabajos por lotes con Terraform y Cloud Scheduler, se explica cómo incorporar trabajos por lotes en Terraform. Terraform te permite aprovisionar y administrar la infraestructura especificando el estado preferido en los archivos de configuración, que se pueden tratar como código y almacenar en sistemas de control de versión como GitHub.
¿Qué sigue?
Aprende los aspectos básicos de la creación de trabajos: