Descripción general de la creación y ejecución de trabajos

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 enGoogle 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 funciona la creación y ejecución de trabajos

Para usar Batch, debes crear un trabajo que especifique tu carga de trabajo y sus requisitos, y, luego, Batch lo ejecutará automáticamente.

En las siguientes secciones, se describen los detalles de cómo funciona la creación y la ejecución de trabajos:

Ciclo de vida del 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 desees ejecutar en Batch, debes seguir el siguiente proceso básico:

  1. Crea un trabajo: Defines la carga de trabajo que deseas ejecutar especificando 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.
  2. Supervisa el trabajo y soluciona los problemas: Cuando terminas de crear un trabajo, este se pone automáticamente en cola, se programa y se ejecuta en los recursos especificados. Puedes ver los detalles de un trabajo creado o de cualquiera de sus tareas para conocer el estado actual. Si es necesario, puedes cancelar un trabajo para detenerlo o evitar que se ejecute. Después de que un trabajo se ejecuta o finaliza, también puedes supervisarlo y analizarlo con 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.
  3. Borra o exporta el trabajo: La información de un trabajo en Batch permanece disponible hasta que tú o Google Cloud lo borran. Google Cloud borra automáticamente un trabajo 60 días después de que finaliza. Antes de eso, puedes borrar el trabajo por tu cuenta o, si necesitas conservar la información, puedes exportarla en Batch antes de que se borre el trabajo. La información sobre un trabajo almacenada 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 un trabajo 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:

  1. En cola (QUEUED): Se admitió la solicitud de trabajo y está en espera en la cola. El trabajo permanece en la cola de tu proyecto hasta que se puede programar, lo que sucede cuando los recursos requeridos están disponibles y se evaluaron los trabajos que están antes en la cola. Sin embargo, para evitar que tus trabajos se vuelvan obsoletos, si un trabajo supera el tiempo de espera máximo en la cola, Batch lo anula automáticamente en lugar de programarlo.
  2. Programado (SCHEDULED): Se seleccionó el trabajo de la cola para que comience a ejecutarse y se están asignando los recursos.
  3. En ejecución (RUNNING): Los recursos para el trabajo se crearon correctamente y sus tareas pueden comenzar a ejecutarse.

    Cuando se ejecuta un trabajo, cada una de sus tareas avanza por los siguientes estados:

    1. Pendiente (PENDING): La tarea está esperando una VM para ejecutarse.
    2. Asignada (ASSIGNED): Se asignó una VM para ejecutar la tarea.
    3. En ejecución (RUNNING): La tarea se está ejecutando en una VM.
    4. Una tarea finaliza en uno de los siguientes estados:

      • Succeeded (SUCCEEDED): La tarea se completó correctamente porque cada uno de sus ejecutables cumplió con una de las siguientes condiciones:

        • El ejecutable se completó correctamente (mostró un código de salida de cero).
        • El ejecutable falló (devolvió un código de salida distinto de cero), pero fue un ejecutable no crítico (habilitaste el campo ignoreExitStatus del ejecutable).
        • El objeto Runnable no finalizó, pero era un objeto Runnable en segundo plano (habilitaste el campo background del objeto Runnable).
      • Con errores (FAILED): La tarea falló y dejó de ejecutarse porque al menos un ejecutable no cumplió con las condiciones anteriores.

    Los recursos del trabajo se borran antes de que finalice el trabajo.

  4. Un trabajo finaliza en uno de los siguientes estados:

    • Finalizado de manera correcta (SUCCEEDED): El trabajo se completó correctamente porque todas sus tareas se completaron correctamente.
    • Con errores (FAILED): El trabajo falló y dejó de ejecutarse porque falló al menos una de sus tareas.
    • Cancelado (CANCELLED): Un usuario canceló el trabajo antes de que se completara o fallara.

Para obtener más información, consulta los estados de los trabajos y los estados de las tareas en la documentación de referencia.

Programación y cola de trabajos

En general, es más probable que los trabajos se ejecuten y finalicen antes si son más pequeños 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 usar recursos mínimos, es posible que veas que terminan de ejecutarse en tan 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 según los siguientes factores:

  • Requisitos previos del trabajo especificados por el usuario: Son los requisitos previos que necesitas que se cumplan antes de que se programe 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 completado correctamente o hayan fallado. Para obtener más información, consulta Cómo programar trabajos dependientes (versión preliminar).

  • Prioridad del trabajo: Es la prioridad de un trabajo en relación con las prioridades de otros trabajos de tu proyecto.

    De manera opcional, puedes especificar la prioridad de un trabajo si incluyes la marca --priority para la gcloud CLI o el campo priority JSON. Puedes definir la prioridad de un trabajo como un número entre 0 (prioridad más baja) y 99 (prioridad más alta). Establecer una prioridad más alta puede ayudar a que un trabajo se ejecute antes que los trabajos 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 del trabajo: Es la disponibilidad de los recursos requeridos del trabajo en 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 un trabajo se retrase o falle si alguno de sus recursos requeridos tiene una capacidad baja en relación con la demanda actual debido a errores de disponibilidad de recursos. Como resultado, es posible que tu trabajo se ejecute antes cuando requieras menos recursos más comunes y no restrinjas la ejecución del trabajo 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 por lotes y sus recursos, consulta la página Ubicaciones.

  • Cuotas y límites: Son 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 requeridos. Cuando esto sucede, Batch puede retrasar un trabajo y volver a intentarlo más tarde, o bien puede fallar el trabajo y mostrar un error relacionado.

    Para evitar demoras y errores en tu trabajo, puedes crear trabajos que cumplan con todos los límites pertinentes y asegurarte de que tu proyecto tenga la cuota pertinente suficiente. Para obtener más información, consulta Cuotas y límites de lotes.

Ejecución del trabajo

El tiempo que tarda en ejecutarse un trabajo puede variar según la programación de tareas y los recursos del trabajo.

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 hay recursos disponibles y pueden ejecutarse en paralelo. La cantidad de tareas que se ejecutan a la vez depende de las tareas paralelas por VM que permiten los recursos del trabajo y otras opciones de configuración, como se explica en Recursos del trabajo en este documento.
  • En orden (IN_ORDER): Las tareas se ejecutan de a una por vez en orden creciente de índice.

Recursos de trabajo

Cada trabajo por lotes se ejecuta en un grupo de instancias administrado (MIG) regional, que es un grupo de una o más instancias de máquina virtual (VM) de Compute Engine coincidentes, cada una ubicada 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, configuras sus recursos especificando lo siguiente:

  • 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 arranque) que requiere cada tarea para ejecutarse. 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 VMs del trabajo, como el tipo de máquina y el SO, y recursos adicionales, como GPU y volúmenes de almacenamiento, principalmente con los campos de la política de recursos de VM (instances[].policy) o el campo alternativo instances[].instanceTemplate. (De manera opcional, también puedes usar los campos instanceFlexibilityPolicy si deseas permitir varios tipos de máquinas para un trabajo).

    Si dejas estos campos sin definir (lo que no es posible cuando creas un trabajo con la consola deGoogle Cloud ), Batch intentará seleccionar automáticamente VMs compatibles y no agregará recursos adicionales.

La cantidad de VMs y la cantidad de tareas que se pueden ejecutar de forma simultánea en cada VM varían para los diferentes trabajos según la programación de tareas y los requisitos de hardware que especificaste. Si especificas que las tareas de un trabajo se ejecuten con IN_ORDER, el trabajo tendrá una VM y solo ejecutará una tarea a la vez. De lo contrario, si las tareas de un trabajo se ejecutan en 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 creadas para un trabajo puede ser menor que esta, por ejemplo, si Batch espera que sea más rápido ejecutar un trabajo con 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 del trabajo, que se define con el campo de recuento de tareas (taskCount).
  • \({parallelTasksPerVM}\): Es la cantidad máxima de tareas que se pueden ejecutar en una VM de forma simultánea.

    Este valor se determina según todos los siguientes criterios:

    • El valor mínimo es 1 tarea.

    • El valor máximo es el menor entre 20 tareas y, si se define, el valor del campo de tareas paralelas máximas por trabajo (parallelism).

    • Si se define el campo de tareas paralelas 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 Crea y ejecuta un trabajo básico, se explican los conceptos básicos, incluido 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 conceptos básicos para crear trabajos, considera crear uno que use una o más de las siguientes opciones de configuración adicionales:

  • Controla el acceso a un trabajo:

  • Configura opciones adicionales para un trabajo:

    • En Cómo configurar la comunicación de tareas con una biblioteca de 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 de MPI son las cargas de trabajo de computación de alto rendimiento (HPC) con acoplamiento alto.

    • Personaliza los recursos en los que se ejecuta un trabajo:

      • En Cómo definir recursos de trabajo con una plantilla de instancias 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 Usa GPUs para un trabajo, se explica cómo definir un trabajo que usa una o más unidades de procesamiento de gráficos (GPU). Los casos de uso comunes para los trabajos que usan GPUs incluyen cargas de trabajo de aprendizaje automático (AA) o procesamiento de datos intensivo.

      • En Usa volúmenes de almacenamiento para un trabajo, se explica cómo definir un trabajo que puede acceder a uno o más volúmenes de almacenamiento externos. Las opciones de almacenamiento incluyen discos persistentes nuevos o existentes, SSD locales nuevas, buckets de Cloud Storage existentes y un sistema de archivos de red (NFS) existente, como un recurso compartido de archivos de Filestore.

      • En Descripción general del entorno del SO de la VM, se proporciona una descripción general de cuándo y cómo puedes personalizar el entorno del sistema operativo (SO) de la VM para un trabajo, incluida la imagen de SO de la VM y los discos de arranque del trabajo.

    • Optimiza varios aspectos de un trabajo:

      • Mejora la supervisión y el análisis:

      • En Cómo programar trabajos dependientes (versión preliminar), se explica cómo especificar un trabajo que no se ejecuta hasta que se completan correctamente o fallan uno o más trabajos de dependencia existentes. Si tienes una carga de trabajo con requisitos de recursos variables, puedes reducir los costos y el uso de la cuota separando los tipos de VMs que se usan para las operaciones de baja demanda (como la preparación de datos) y las operaciones que requieren mucha capacidad de procesamiento (como el procesamiento de datos).

      • En Cómo automatizar los reintentos de tareas, se explica cómo reintentar automáticamente las tareas de un trabajo después de todas las fallas o las fallas especificadas. Los reintentos automatizados pueden ayudar a reducir la fricción en la solución de problemas y el tiempo de ejecución general requerido para los trabajos que experimentan errores temporales. Por ejemplo, usa reintentos automáticos para un trabajo que se ejecuta en VMs Spot, que proporcionan descuentos significativos, pero es posible que no siempre estén disponibles y se puedan interrumpir en cualquier momento.

      • En Cómo limitar los tiempos de ejecución con tiempos de espera, se explica cómo limitar el tiempo que se permite que se ejecute una tarea o un elemento ejecutable. Si evitas tiempos de ejecución excesivos, es posible que reduzcas los costos y las demoras inesperados.

      • Mejora la obtención de recursos:

        • Mejora la capacidad de obtención de recursos explica qué es la capacidad de obtención de recursos y proporciona recomendaciones para mejorarla cuando creas y ejecutas trabajos.

        • En Cómo garantizar la disponibilidad de recursos con VM VMs, 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 un trabajo, evitar errores de disponibilidad de recursos y optimizar los costos.

        • En Mejora la disponibilidad con la flexibilidad de instancias, se explica cómo permitir que un trabajo se ejecute en varios tipos de máquinas que especifiques y puedas clasificar. Usar la flexibilidad de instancias puede ayudar a aumentar el paralelismo, retrasar la interrupción de las VMs Spot y evitar errores de disponibilidad de recursos.

      • Reducción de 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 exigiendo que las VMs se ubiquen cerca físicamente entre sí. Este beneficio de rendimiento puede ser especialmente útil para los trabajos que tienen comunicaciones de red frecuentes entre VMs, como las tareas que se comunican con bibliotecas de MPI.

        • En Usa la transmisión de imágenes, se explica cómo mejorar el tiempo de inicio del trabajo transmitiendo imágenes de contenedor desde Artifact Registry.

  • Usar servicios adicionales para crear y ejecutar trabajos:

¿Qué sigue?