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

En este documento, se explican el proceso de ejecución y las opciones de creación de los trabajos. Los trabajos por lotes te permiten ejecutar cargas de trabajo de procesamiento por lotes en Google Cloud. Si quieres obtener información sobre los componentes de un trabajo y los requisitos para usar Batch, consulta Comienza a usar Batch.

Cómo funcionan la creación y ejecución de trabajos

Para usar Batch, debes crear un trabajo que especifique tu carga de trabajo y sus requisitos. Luego, Batch lo ejecuta de forma automática.

Los detalles de cómo funcionan la creación y ejecución de trabajos se describen en las siguientes secciones:

Ciclo de vida del trabajo

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 desees ejecutar en Batch, debes realizar el siguiente proceso básico:

  1. Crea un trabajo: Para definir la carga de trabajo que deseas ejecutar, especifica los 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 y soluciona problemas del trabajo: cuando terminas de crear un trabajo, este se pone en cola, se programa y se ejecuta de forma automática en los recursos especificados. Puedes ver los detalles de un trabajo creado o cualquiera de sus tareas para ver el estado actual. Después de que un trabajo se ejecuta o finaliza, puedes supervisar y analizar el trabajo mediante registros. Si un trabajo falla, puedes solucionarlo mediante mensajes de error, eventos de estado o registros para diagnosticar el problema antes de volver a crear el trabajo.
  3. Borra o exporta el trabajo: los registros de un trabajo se retienen y borran de forma automática de acuerdo con la política de retención de Cloud Logging. La otra información de un trabajo permanece disponible en Batch hasta que tú o Google Cloud la borren. Google Cloud borra de forma automática un trabajo 60 días después de que finaliza. Antes de que esto suceda, tienes la opción de borrar el trabajo por tu cuenta o, si necesitas conservar la información, puedes exportar el trabajo antes de que se borre.

Después de crear un trabajo, pasa por los siguientes estados:

  1. En cola (QUEUED): Se admitió la solicitud de trabajo y está esperando en la cola. El trabajo permanece en cola hasta que los recursos necesarios estén disponibles y se evalúen los trabajos anteriores.
  2. Programado (SCHEDULED): El trabajo se seleccionó de la cola para comenzar a ejecutarse y se están asignando los recursos.
  3. En ejecución (RUNNING): Los recursos para el trabajo se crearon de forma correcta y sus tareas pueden comenzar a ejecutarse.

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

    1. Pendiente (PENDING): La tarea está esperando que se ejecute una VM.
    2. Asignada (ASSIGNED): se asignó una VM a la tarea en la que se debe ejecutar.
    3. En ejecución (RUNNING): La tarea se ejecuta en una VM.
    4. Una tarea finaliza en uno de los siguientes estados:
      • Sin errores (SUCCEEDED): La tarea se realizó correctamente porque cada uno de sus ejecutables se realizó correctamente (arrojó un código de salida igual a cero) o se marcó como no crítico mediante el campo de omisión de estado de salida (ignoreExitStatus).
      • Con errores (FAILED): La tarea falló porque al menos uno de sus ejecutables críticos falló (se mostró un código de salida distinto de cero).
  4. Un trabajo finaliza en uno de los siguientes estados:

    • Sin errores (SUCCEEDED): Se realizaron correctamente todas las tareas del trabajo.
    • Con errores (FAILED): Falló al menos una tarea del trabajo.

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

Poner en cola y programar trabajos

En general, es más probable que los trabajos se ejecuten y finalicen antes si son más pequeños y requieren solo unos pocos recursos comunes. Para los trabajos de ejemplo en la documentación de Batch, que suelen ser muy pequeños y usan recursos mínimos, es posible que termines de ejecutarse en tan solo unos minutos.

En particular, el tiempo que tarda un trabajo en agregarse a la cola y programarlo varía según los trabajos y momentos según los siguientes factores:

  • Disponibilidad del recurso de trabajo: La disponibilidad de los recursos necesarios del trabajo dentro de las ubicaciones permitidas.

    En primer lugar, un trabajo no se puede ejecutar si especificas algún recurso que no se ofrece 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 los recursos necesarios tiene poca capacidad 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 necesites menos recursos más comunes y no restrinjas la ejecución del trabajo en ninguna zona de una región.

    Si quieres obtener más información sobre los recursos para un trabajo, consulta Ejecución del trabajo en este documento. Si quieres obtener más información sobre las ubicaciones que puedes especificar para un trabajo por lotes y sus recursos, consulta la página Ubicaciones.

  • Prioridad de los trabajos: La prioridad para un trabajo en relación con las prioridades de otros trabajos en tu proyecto.

    De forma opcional, puedes especificar la prioridad de un trabajo si incluyes la marca --priority para la CLI de gcloud o el campo JSON priority. 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 prioridad más baja en tu proyecto.

    Si no configuras la prioridad de un trabajo, la configuración predeterminada usa la prioridad más baja, 0. Si dos trabajos en cola tienen la misma prioridad, el trabajo que se creó primero tendrá la prioridad más alta.

  • Cuotas y límites: Son los umbrales que tu proyecto tiene para los recursos y las solicitudes de Google Cloud.

    No se puede ejecutar un trabajo 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 fallar y mostrar un error relacionado.

    Puedes ayudar a evitar retrasos y errores en tu trabajo si creas trabajos que cumplan con todos los límites relevantes y te aseguras de que tu proyecto tenga suficiente cuota relevante. Para obtener más información, consulta Cuotas y límites por 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 la 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 se pueden ejecutar 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 que se explican en Recursos de trabajos en este documento.
  • En orden (IN_ORDER): Las tareas se ejecutan de a una, 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 y ubicadas en una de las zonas incluidas. Cada VM tiene hardware dedicado para los núcleos de CPU (específicamente, CPU virtuales) y 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 el trabajo.

Durante el tiempo de ejecución de un trabajo, Batch crea y borra de forma automática los recursos que cumplen con tus especificaciones. Cuando creas un trabajo, debes especificar lo siguiente para configurar sus recursos:

  • Debes especificar los recursos de procesamiento (CPU virtuales, memoria y, si es necesario) almacenamiento adicional en el disco de arranque, que se requieren para que se ejecute cada tarea, a menos que los valores predeterminados sean suficientes. Para obtener más información, consulta el campo de recursos de procesamiento por tarea (computeResource) y los subcampos.

  • De manera opcional, también puedes especificar los tipos de VM que se usarán y recursos adicionales para cada VM, como las GPU y los volúmenes de almacenamiento. Si no especificas estas opciones, Batch selecciona tipos de VM compatibles y no agrega recursos adicionales. Para obtener más información, consulta el campo de recursos de la instancia de VM (instances[]) y los subcampos.

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

    Este valor se determina según los siguientes criterios:

    • 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 máx. de tareas paralelas por trabajo (parallelism).

    • Si se define el campo máximo de tareas paralelas 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 necesaria para cada tarea:

      \[{paraleleTasksPerVm}=\frac{vcpusPerVm}{vcpusPerTask}\]

      Esta fórmula tiene los siguientes valores:

      • \({vcpusPerVm}\): la cantidad total de CPU virtuales por VM, que se determina por el tipo de máquina de las VM de tu trabajo.

      • \({vcpusPerTask}\): la cantidad de CPU virtuales por tarea, que se determina mediante la conversión de las unidades del campo de 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, incluido cómo definir un 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 de 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:

  • Configura opciones adicionales para un trabajo:

    • En Configura la comunicación de tareas con una biblioteca de la MPI, se explica cómo configurar un trabajo con tareas interdependientes que se comunican entre sí en diferentes VM mediante una biblioteca de interfaz de envío de mensajes (MPI). Un caso de uso común para la 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 Define recursos de trabajo mediante 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.

      • En Usa GPU para un trabajo, se explica cómo definir un trabajo que usa una o más unidades de procesamiento gráfico (GPU). Los casos de uso comunes para trabajos que usan GPU incluyen cargas de trabajo de procesamiento de datos intensivo o aprendizaje automático (AA).

      • En Usa 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 archivo compartido de Filestore.

      • En la descripción general del entorno del SO de 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, incluidos los discos de arranque y la imagen de SO de la VM del trabajo.

    • Optimiza varios aspectos de un trabajo:

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

      • En Automatizar reintentos de tareas, se explica cómo reintentar automáticamente las tareas de un trabajo después de todas las fallas o de las especificadas. Los reintentos automatizados pueden ayudar a reducir la fricción de 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 Colocar VM para reducir la latencia, se explica cómo reducir la latencia de red entre las VM de un trabajo mediante el requisito de que las VM estén ubicadas físicamente cerca unas de las otras. Este beneficio de rendimiento puede ser especialmente útil para los trabajos que tienen comunicaciones de red frecuentes entre las VM, como las tareas que se comunican mediante bibliotecas MPI.

      • En Garantiza la disponibilidad de recursos mediante reservas de VM, se explica cómo configurar un trabajo que se pueda ejecutar en VM reservadas. El uso de VM reservadas puede ayudarte a minimizar el tiempo de programación de un trabajo, evitar errores de disponibilidad de recursos y optimizar los costos.

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

  • Usa servicios adicionales para crear y ejecutar trabajos:

¿Qué sigue?