En este documento se explica el proceso de ejecución y las opciones de creación de los trabajos. Las tareas por lotes te permiten ejecutar cargas de trabajo de procesamiento por lotes enGoogle Cloud. Para obtener información sobre los componentes de un trabajo y los requisitos previos para usar Batch, consulta el artículo Primeros pasos con Batch.
Cómo funciona la creación y la ejecución de trabajos
Para usar Batch, crea un trabajo que especifique tu carga de trabajo y sus requisitos. A continuación, Batch lo ejecuta automáticamente.
Los detalles sobre cómo se crean y ejecutan los trabajos se describen en las siguientes secciones:
- Ciclo de vida de las tareas: descubre los estados por los que pasa una tarea desde que se crea hasta que se elimina.
- Colas y programación de trabajos: consulta los factores que influyen en el tiempo que tarda en iniciarse un trabajo.
- Ejecución de tareas: descubre cómo se ejecutan las tareas de un trabajo en sus recursos durante la ejecución.
Ciclo de vida de un trabajo
En esta sección se describe el ciclo de vida de un trabajo y sus tareas, desde la creación hasta la eliminación.
Para cada carga de trabajo que quieras ejecutar en Batch, sigue este proceso básico:
- Crea un trabajo: define la carga de trabajo que quieres ejecutar especificando los elementos ejecutables, las tareas y otros requisitos del trabajo. Los detalles para crear un trabajo se explican en la sección Opciones de creación de trabajos de este documento.
- Monitorizar y solucionar problemas del trabajo: cuando termines de crear un trabajo, se pondrá automáticamente en cola, se programará y se ejecutará en los recursos especificados. Puedes ver los detalles de un trabajo creado o de cualquiera de sus tareas para ver el estado actual. Si es necesario, puedes cancelar un trabajo para detenerlo o evitar que se ejecute. Una vez que un trabajo se esté ejecutando o haya finalizado, también puedes monitorizarlo y analizarlo mediante registros. Si un trabajo falla, puedes solucionar el problema con los mensajes de error, los eventos de estado o los registros para diagnosticar el problema antes de volver a crear el trabajo.
- Eliminar o exportar el trabajo: la información de un trabajo en Batch permanece disponible hasta que tú o Google Cloud lo eliminéis. Google Cloud elimina automáticamente un trabajo 60 días después de que finalice. Antes de que llegue esa fecha, puedes eliminar el trabajo tú mismo o, si necesitas conservar la información, puedes exportarla en lote antes de que se elimine. La información sobre un trabajo que se almacena en otros Google Cloud servicios no se ve afectada cuando se elimina un trabajo y tiene políticas de conservación independientes. Por ejemplo, los registros de un trabajo se conservan y se eliminan automáticamente de acuerdo con la política de conservación de Cloud Logging.
Después de crear un trabajo, este pasa por los siguientes estados:
- En cola (
QUEUED
): la solicitud de trabajo se ha admitido y está esperando en la cola. El trabajo permanece en la cola de tu proyecto hasta que se pueda programar, lo que ocurre cuando los recursos necesarios están disponibles y se han evaluado los trabajos que hay antes. Sin embargo, para evitar que tus tareas se queden obsoletas, si una tarea supera el tiempo máximo de espera en la cola, Batch la rechaza automáticamente en lugar de programarla. - Programado (
SCHEDULED
): el trabajo se ha seleccionado de la cola para empezar a ejecutarse y se están asignando los recursos. En ejecución (
RUNNING
): los recursos del trabajo se han creado correctamente y sus tareas pueden empezar a ejecutarse.Cuando se está ejecutando un trabajo, cada una de sus tareas pasa por los siguientes estados:
- Pendiente (
PENDING
): la tarea está esperando que se ejecute una máquina virtual. - Asignada (
ASSIGNED
): la tarea se ha asignado a una VM para que se ejecute en ella. - En ejecución (
RUNNING
): la tarea se está ejecutando en una VM. Una tarea finaliza en uno de los siguientes estados:
Correcta (
SUCCEEDED
): la tarea se ha completado correctamente porque cada uno de sus elementos ejecutables cumplía una de las siguientes condiciones:- El ejecutable se ha completado (ha devuelto un código de salida cero).
- El elemento ejecutable ha fallado (ha devuelto un código de salida distinto de cero), pero era un elemento ejecutable no crítico (has habilitado el campo
ignoreExitStatus
del elemento ejecutable). - El ejecutable no ha finalizado, pero era un ejecutable en segundo plano (has habilitado el campo
background
del ejecutable).
Error (
FAILED
): la tarea ha fallado y ha dejado de ejecutarse porque al menos una de las tareas ejecutables no cumplía las condiciones anteriores.
Los recursos de la tarea se eliminan antes de que finalice.
- Pendiente (
Un trabajo finaliza en uno de los siguientes estados:
- Correcto (
SUCCEEDED
): el trabajo se ha completado correctamente porque todas sus tareas se han completado correctamente. - Fallido (
FAILED
): la tarea ha fallado y se ha detenido porque al menos una de sus subtareas ha fallado. - Cancelada (
CANCELLED
): un usuario canceló el trabajo antes de que se completara o fallara.
- Correcto (
Para obtener más información, consulta los estados de los trabajos y los estados de las tareas en la documentación de referencia.
Colas y programación de trabajos
Por lo general, es más probable que las tareas se ejecuten y finalicen antes si son más pequeñas y solo requieren unos pocos recursos comunes. En el caso de las tareas de ejemplo de la documentación de Batch, que suelen ser muy pequeñas y utilizan recursos mínimos, es posible que se completen en tan solo unos minutos.
En concreto, el tiempo que tarda un trabajo en terminar de ponerse en cola y programarse varía en función del trabajo y del momento, según los siguientes factores:
Requisitos de los trabajos especificados por el usuario: cualquier requisito que debas cumplir antes de programar el trabajo.
De forma predeterminada, los trabajos no tienen ningún requisito previo. También puedes especificar que una tarea no se pueda programar hasta que se hayan completado correctamente o hayan fallado una o varias tareas. Para obtener más información, consulta Programar trabajos dependientes (versión preliminar).
Prioridad del trabajo: la prioridad de un trabajo en relación con las prioridades de otros trabajos de tu proyecto.
También puedes especificar la prioridad de un trabajo incluyendo la marca
--priority
para la CLI de gcloud o el campo JSONpriority
. Puede definir la prioridad de un trabajo como un número entre0
(prioridad más baja) y99
(prioridad más alta). Si asignas una prioridad más alta a un trabajo, este se ejecutará antes que los trabajos con una prioridad más baja de tu proyecto.Si no configuras la prioridad de una tarea, 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 mayor prioridad.Disponibilidad de los recursos de la tarea: la disponibilidad de los recursos necesarios de la tarea en las ubicaciones permitidas.
En primer lugar, un trabajo no se puede ejecutar si especificas recursos que no se ofrecen en esa ubicación. En ese caso, el trabajo falla y se produce un error de disponibilidad de zona.
En segundo lugar, es más probable que un trabajo se retrase o falle si alguno de sus recursos obligatorios tiene poca capacidad en relación con la demanda actual debido a errores de disponibilidad de recursos. Por lo tanto, es posible que tu trabajo se ejecute antes si necesitas menos recursos y más comunes, y si no impides que se ejecute en ninguna zona de una región.
Para obtener más información sobre los recursos de un trabajo, consulta la sección Ejecución de trabajos de 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: los umbrales que tiene tu proyecto para los recursos y las solicitudes de Google Cloud .
Un trabajo no se puede ejecutar si supera un límite o la cuota de tu proyecto para cualquiera de los recursos o solicitudes necesarios. Cuando esto ocurre, Batch puede retrasar un trabajo y volver a intentarlo más tarde o fallar el trabajo y mostrar un error relacionado.
Para evitar retrasos y errores en tus tareas, crea tareas que cumplan todos los límites pertinentes y asegúrate de que tu proyecto tenga suficiente cuota pertinente. Para obtener más información, consulta Cuotas y límites de las solicitudes por lotes.
Ejecución de tareas
El tiempo que tarda en ejecutarse un trabajo puede variar en función de la programación de tareas y de los recursos del trabajo.
Programación de tareas
Cuando se ejecuta un trabajo, sus tareas se programan según el campo 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 hay recursos disponibles y se pueden ejecutar en paralelo. El número de tareas que se ejecutan a la vez depende de las tareas paralelas por VM permitidas por los recursos del trabajo y otras opciones de configuración, tal como se explica en la sección Recursos de trabajo de este documento. - En orden (
IN_ORDER
): las tareas se ejecutan de una en una en orden creciente de índice.
Recursos de tareas
Cada trabajo de Batch se ejecuta en un grupo de instancias gestionado (MIG) regional, que es un grupo de una o más instancias de máquina virtual (VM) de Compute Engine coincidentes, cada una de las cuales se encuentra en una de las zonas incluidas. Cada VM tiene hardware dedicado para los núcleos de CPU (en concreto, CPUs virtuales [vCPUs]) y la memoria, que influyen en el rendimiento de tu trabajo, así como un disco de arranque, que almacena una imagen del sistema operativo (SO) e instrucciones para ejecutar tu trabajo.
Durante el tiempo de ejecución de un trabajo, Batch crea y elimina automáticamente los recursos que cumplen tus especificaciones. Cuando creas un trabajo, configuras sus recursos especificando lo siguiente:
Recursos de computación por tarea: a menos que los valores predeterminados sean suficientes, debe especificar los recursos de computación (vCPUs, memoria y, si es necesario, almacenamiento adicional en el disco de arranque) que necesita cada tarea para ejecutarse. Para obtener más información, consulta los campos de recursos de computación por tarea (
computeResource
).Recursos de la VM: también puedes especificar las VMs del trabajo (como el tipo de máquina y el SO) y recursos adicionales (como GPUs y volúmenes de almacenamiento) mediante los campos de la política de recursos de la VM (
instances[].policy
) o el campoinstances[].instanceTemplate
. Si dejas estos campos sin definir (lo cual no es posible al crear un trabajo con laGoogle Cloud consola), Batch intentará seleccionar automáticamente VMs compatibles y no añadirá ningún recurso adicional.
El número de máquinas virtuales y el número de tareas que se pueden ejecutar simultáneamente en cada máquina virtual varían en función de las diferentes tareas, la programación de tareas y los requisitos de hardware que hayas especificado. Si especificas que las tareas de un trabajo se ejecuten de forma secuencial, el trabajo tendrá una VM y solo ejecutará una tarea a la vez.IN_ORDER
De lo contrario, si las tareas de un trabajo se ejecutan en AS_SOON_AS_POSSIBLE
, puedes estimar el número de VMs y el número de tareas simultáneas con la siguiente fórmula:
\[{vmsPerJob}=\frac{taskCount}{parallelTasksPerVm}\]
Esta fórmula tiene los siguientes valores:
- \({vmsPerJob}\): número máximo de VMs de un trabajo. El número real de máquinas virtuales creadas para un trabajo puede ser inferior a este. Por ejemplo, si Batch considera que es más rápido ejecutar un trabajo con menos recursos que esperar a que haya más. Este valor también está limitado por los límites de VMs simultáneas por tarea.
- \({taskCount}\): el número total de tareas del trabajo, que se define mediante el campo de número de tareas (
taskCount
). \({parallelTasksPerVM}\): número máximo de tareas que se pueden ejecutar en una máquina virtual simultáneamente.
Este valor se determina mediante los siguientes criterios:
El valor mínimo es 1 tarea.
El valor máximo es el menor de 20 tareas y, si se ha definido, el valor del campo Número máximo de tareas paralelas por trabajo (
parallelism
).Si se define el campo Tareas paralelas máximas por VM (
taskCountPerNode
), se usará ese valor.De lo contrario, si
taskCountPerNode
no está definido, Batch decide un valor dividiendo el número total de recursos de computación (específicamente, vCPUs) por VM entre la cantidad necesaria para cada tarea:\[{parallelTasksPerVm}=\frac{vcpusPerVm}{vcpusPerTask}\]
Esta fórmula tiene los siguientes valores:
\({vcpusPerVm}\): número total de vCPUs por VM, que se determina en función del tipo de máquina de las VMs de tu trabajo.
\({vcpusPerTask}\): número de vCPUs por tarea, que se determina convirtiendo las unidades del campo vCPUs por tarea (
cpuMilli
).
Opciones de creación de tareas
En Crear y ejecutar una tarea básica se explican los conceptos básicos, como definir un elemento ejecutable mediante una secuencia de comandos o una imagen de contenedor, y cómo configurar variables de entorno predefinidas y personalizadas.
Una vez que conozcas los conceptos básicos para crear tareas, puedes crear una tarea que utilice una o varias de las siguientes opciones de configuración adicionales:
Controlar el acceso a una tarea:
En Controlar el acceso de un trabajo mediante 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, las tareas usarán de forma predeterminada la cuenta de servicio predeterminada de Compute Engine.
En la descripción general de las redes se explica cuándo y cómo puedes personalizar la configuración de red de un trabajo, lo que incluye especificar la red del trabajo, bloquear las conexiones externas y proteger los datos y los recursos mediante Controles de Servicio de VPC.
En el artículo Protege los datos sensibles con Secret Manager se explica cómo definir de forma segura datos sensibles, como variables de entorno personalizadas y credenciales de inicio de sesión, mediante secretos de Secret Manager para especificar información cifrada al crear un trabajo.
Configurar opciones adicionales de un trabajo:
En Configurar la comunicación entre tareas mediante una biblioteca MPI se explica cómo configurar un trabajo con tareas interdependientes que se comunican entre sí en diferentes máquinas virtuales mediante una biblioteca de interfaz de transferencia de mensajes (MPI). Un caso de uso habitual de MPI son las cargas de trabajo de computación de alto rendimiento (HPC) de alto acoplamiento.
Personaliza los recursos en los que se ejecuta un trabajo:
En Definir recursos de tareas con una plantilla de instancia de VM se explica cómo especificar una plantilla de VM de Compute Engine para definir los recursos de una tarea al crearla. Esta es una alternativa a la especificación directa de los recursos de un trabajo mediante el campo
instances[].policy
.En Usar GPUs en un trabajo se explica cómo definir un trabajo que utilice una o varias unidades de procesamiento gráfico (GPUs). Entre los casos prácticos habituales de las tareas que usan GPUs se incluyen las cargas de trabajo de aprendizaje automático (ML) o de procesamiento de datos intensivo.
En Usar volúmenes de almacenamiento en una tarea se explica cómo definir una tarea que pueda acceder a uno o varios volúmenes de almacenamiento externos. Entre las opciones de almacenamiento se incluyen discos persistentes nuevos o ya creados, SSDs locales nuevos, segmentos de Cloud Storage ya creados y un sistema de archivos de red (NFS) ya creado, como un recurso compartido de archivos de Filestore.
En Descripción general del entorno del SO de la VM se explica cuándo y cómo puedes personalizar el entorno del sistema operativo (SO) de la VM de un trabajo, incluidas la imagen del SO de la VM y los discos de arranque del trabajo.
Optimizar varios aspectos de un trabajo:
Mejorar la monitorización y el análisis:
En Escribir registros de tareas se explica cómo configurar los elementos ejecutables de un trabajo para escribir registros de tareas. Los registros de tareas de escritura te permiten mostrar información personalizada en Cloud Logging, lo que puede facilitar el análisis y la solución de problemas de los trabajos.
En Configurar eventos de estado personalizado se explica cómo configurar eventos de estado personalizado para los elementos ejecutables de un trabajo. Los eventos de estado personalizados te permiten describir eventos importantes que ocurren en los elementos ejecutables y que aparecen cuando consultas el historial de eventos de estado de un trabajo, lo que puede ayudarte a analizar y solucionar problemas de los trabajos más fácilmente.
En Habilitar notificaciones de estado se explica cómo configurar una tarea para que envíe notificaciones de Pub/Sub sobre su estado, que puedes almacenar y consultar en una tabla de BigQuery. Antes de leer este documento, configure su proyecto para monitorizar el estado de las tareas mediante notificaciones de Pub/Sub y BigQuery.
En Habilitar métricas del agente de operaciones se explica cómo configurar un trabajo para instalar automáticamente el agente de operaciones. El agente de Ops recoge métricas adicionales sobre el rendimiento y la utilización de los recursos de un trabajo. Para obtener más información sobre cómo ver y usar las métricas de recursos, consulta el artículo Monitorizar y optimizar los recursos de las tareas viendo las métricas.
En Tareas dependientes de una programación (Vista previa) se explica cómo especificar una tarea que no se ejecuta hasta que se hayan completado correctamente o hayan fallado una o varias tareas de dependencia. Si tienes una carga de trabajo con requisitos de recursos variables, puedes reducir los costes y el uso de cuota separando los tipos de VMs que se usan para operaciones con poca demanda (como la preparación de datos) y las operaciones que requieren mucha computación (como el procesamiento de datos).
En Automatizar reintentos de tareas se explica cómo reintentar automáticamente las tareas de un trabajo después de que se produzcan todos los errores o los errores especificados. Los reintentos automatizados pueden ayudar a reducir los problemas y el tiempo de ejecución general necesario para los trabajos que experimentan errores temporales. Por ejemplo, usa reintentos automáticos para un trabajo que se ejecute en VMs de instancia de aprovisionamiento esporádico, que ofrecen descuentos significativos, pero que no siempre están disponibles y se pueden desalojar en cualquier momento.
En Limitar los tiempos de ejecución con tiempos de espera se explica cómo limitar el tiempo que se permite ejecutar una tarea o un elemento ejecutable. Si evitas que se ejecuten durante demasiado tiempo, podrás reducir los costes y los retrasos inesperados.
En Asegurar la disponibilidad de recursos mediante reservas de VMs se explica cómo configurar una tarea que se pueda ejecutar en VMs reservadas. Usar VMs reservadas puede ayudarte a minimizar el tiempo de programación de un trabajo, evitar errores de disponibilidad de recursos y optimizar los costes.
Reducir la latencia:
En Colocar máquinas virtuales en el mismo sitio para reducir la latencia se explica cómo reducir la latencia de red entre las máquinas virtuales de un trabajo. Para ello, se requiere que las máquinas virtuales estén ubicadas físicamente cerca unas de otras. Esta mejora del rendimiento puede ser especialmente útil para las tareas que tienen comunicaciones de red frecuentes entre máquinas virtuales, como las tareas que se comunican mediante bibliotecas MPI.
En Usar streaming de imágenes se explica cómo mejorar el tiempo de inicio de los trabajos transmitiendo imágenes de contenedor desde Artifact Registry.
Usa servicios adicionales para crear y ejecutar trabajos:
En el artículo Orquestar trabajos con Workflows se explica cómo usar Workflows para ejecutar las tareas de un trabajo en el orden que definas con la sintaxis de Workflows.
En Organizar tareas con Nextflow se explica cómo ejecutar una tarea de Batch a través de un flujo de procesamiento de Nextflow, que puedes usar para organizar flujos de trabajo de bioinformática.
En Organizar tareas con dsub se explica cómo ejecutar una tarea de Batch a través de un flujo de procesamiento de
dsub
, que puedes usar para organizar flujos de trabajo de procesamiento por lotes en servicios de Google Cloud .En el artículo Crear y ejecutar trabajos de Batch con Terraform y Cloud Scheduler se explica cómo incorporar trabajos de Batch en Terraform. Terraform te permite aprovisionar y gestionar la infraestructura especificando el estado preferido en archivos de configuración, que se pueden tratar como código y almacenar en sistemas de control de versiones como GitHub.
Siguientes pasos
Aprende los conceptos básicos de la creación de trabajos: