En este documento, se describe cómo crear y ejecutar un trabajo de Batch que usa la flexibilidad de instancias. La flexibilidad de instancias te permite permitir que un trabajo se ejecute en varios tipos de máquinas que especifiques y que puedes clasificar de forma opcional.
Si permites más tipos de máquinas para un trabajo, puedes usar la flexibilidad de instancias para mejorar la disponibilidad, que es la probabilidad de que los recursos estén disponibles para ejecutar tu trabajo. Para obtener más información sobre cómo elegir qué funciones de disponibilidad usar para tu carga de trabajo, consulta Mejora la disponibilidad de recursos. Por ejemplo, usar la flexibilidad de instancias puede ayudarte a hacer lo siguiente:
- Reducir la probabilidad de errores de disponibilidad de recursos y los retrasos de programación relacionados
- Seleccionar recursos con mayor disponibilidad para ayudar a que los trabajos finalicen antes, por ejemplo:
- Aumentar la probabilidad de obtener más instancias para trabajos que admiten el procesamiento en paralelo.
- Obtener VMs Spot que tengan menos probabilidades de interrumpirse.
Antes de comenzar
- Si nunca usaste Batch, revisa Comienza a usar Batch y habilita Batch completando los requisitos previos para proyectos y usuarios.
-
Para 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
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
- Editor de trabajos por lotes (
Restricciones
Cuando un trabajo usa la flexibilidad de instancias, se aplican todas las siguientes restricciones:
La mejora de la disponibilidad aumenta con la cantidad de tipos de máquinas que permites que use un trabajo.
El trabajo no puede especificar el modelo de aprovisionamiento
FLEX_STARTni el modelo de aprovisionamientoRESERVATION_BOUND.El trabajo no puede consumir una reserva específicamente segmentada. (El
reservationcampo debe estar sin definir o configurado comoNO_RESERVATION).Una reserva específicamente segmentada incluye todas las reservas para el modelo de aprovisionamiento
RESERVATION_BOUNDy algunas reservas para el modelo de aprovisionamientoSTANDARD. Estas funciones son inherentemente incompatibles porque la creación de instancias solo puede tener éxito para el tipo de máquina de la reserva.Cada trabajo puede tener hasta 50 selecciones de instancias.
Cada selección de instancias en un trabajo debe tener un nombre único, una clasificación única y uno o más tipos de máquinas únicos.
Los tipos de máquinas no se pueden repetir. Incluye cada tipo de máquina en una sola selección de instancias por trabajo.
Cada trabajo puede tener hasta 200 tipos de máquinas únicos en sus selecciones de instancias.
Si bien es opcional especificar varios tipos de máquinas en la misma selección de instancias, es obligatorio si deseas recursos con mayor disponibilidad.
- Batch intenta seleccionar uno o más tipos de máquinas con la mayor disponibilidad solo cuando la selección de instancias para una clasificación tiene varios tipos de máquinas. Por ejemplo, esta selección es importante si deseas que tu trabajo tenga VMs Spot que tengan menos probabilidades de interrumpirse o más instancias para un trabajo que pueda ejecutar tareas en paralelo.
- De lo contrario, cuando la selección de instancias para una clasificación solo tiene un tipo de máquina, la flexibilidad de instancias solo ayuda a evitar errores de disponibilidad de recursos.
El trabajo no puede incluir el
machineTypecampo, y se ignora el tipo de máquina para cualquier plantilla de instancias que especifique el trabajo.Debes verificar que cada propiedad que especifiques para el trabajo sea compatible con cada tipo de máquina permitido. De lo contrario, es posible que el trabajo falle después de enviarse porque no puede crear instancias. Por ejemplo, te recomendamos que verifiques que, al menos, las siguientes propiedades de un trabajo sean compatibles con todos los tipos de máquinas:
- ubicación (si se especifica, campo
allowedLocations[]; de lo contrario,location) - recursos de procesamiento por tarea (campo
computeResource) - discos e imágenes (campos
volumes[],disk[]ybootDisk) - red (campo
network) todas las demás propiedades de la instancia (subcampos
instances[]):- plataforma de CPU mínima (campo
minCpuPlatform) - modelo de aprovisionamiento (campo
provisioningModel) - GPUs (campo
accelerators[])
- plataforma de CPU mínima (campo
- ubicación (si se especifica, campo
No puedes anular los discos ni las plataformas de CPU mínimas para los trabajos de Batch. Todos los tipos de máquinas usan los valores especificados (en los subcampos
policyo una plantilla de instancias) o, si no se especifican, usan los valores predeterminados para un tipo de máquina en la selección de instancias de mayor prioridad. Por lo tanto, te recomendamos que hagas lo siguiente:Verifica que el tipo de disco de arranque sea compatible con cada tipo de máquina permitido. En resumen, los tipos de máquinas de cuarta generación y posteriores no admiten discos persistentes, los tipos de máquinas de segunda generación y anteriores no admiten Hyperdisk, y los tipos de máquinas de tercera generación y anteriores usan discos de arranque persistentes de forma predeterminada.
No especifiques una plataforma de CPU mínima ni discos opcionales, a menos que hayas verificado que sean compatibles con cada tipo de máquina permitido.
Crea un trabajo que pueda usar varios tipos de máquinas
Para crear un trabajo que pueda usar varios tipos de máquinas, selecciona uno de los siguientes métodos.
gcloud
Para configurar varios tipos de máquinas mientras usas Google Cloud CLI para crear un trabajo, completa los siguientes pasos:
Incluye el
instanceFlexibilityPolicycampo y los subcampos en el campoallocationPolicyen el archivo JSON que especifica los detalles de configuración de tu trabajo. El campoinstanceFlexibilityPolicyadmite una o más selecciones de instancias, cada una con un nombre único, una clasificación única y una lista de uno o más tipos de máquinas."allocationPolicy":{ "instanceFlexibilityPolicy":{ "instanceSelections":{ "INSTANCE_SELECTION_NAME":{ "rank": RANK, "machineTypes": [MACHINE_TYPES] } } } }Reemplaza lo siguiente:
INSTANCE_SELECTION_NAME: un nombre para la selección de instancias. Si el trabajo tiene varias selecciones de instancias, asegúrate de que cada nombre de este trabajo sea único.RANK: Es un número entero de cero o más que representa la prioridad de esta selección de instancias, en la que el valor más bajo es la prioridad más alta (opcional). Si no se especifica, el valor predeterminado es0(prioridad más alta). Si el trabajo tiene varias selecciones de instancias, asegúrate de que cada clasificación de este trabajo sea única.MACHINE_TYPES: una lista separada por comas de uno o más tipos de máquinas, que se escriben como cadenas, para esta selección de instancias. Puedes incluir cada tipo de máquina en una sola selección de instancias por trabajo. Por ejemplo, una lista de tres tipos de máquinas se puede escribir de la siguiente manera:"MACHINE_TYPE_1", "MACHINE_TYPE_2", "MACHINE_TYPE_3"Reemplaza
MACHINE_TYPE_1,MACHINE_TYPE_2yMACHINE_TYPE_3por un tipo de máquina, por ejemplo,e2-micro,e2-smallyn1-standard-2.
Para obtener más información, consulta también el trabajo de ejemplo.
Mientras esta función esté en versión preliminar, debes usar el
gcloud alpha batch jobs submitcomando para crear y enviar el trabajo.gcloud alpha batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILEReemplaza lo siguiente:
JOB_NAME: el nombre del trabajoLOCATION: la ubicación del trabajo.JSON_CONFIGURATION_FILE: la ruta de acceso a un archivo JSON con los detalles de configuración del trabajo
REST
Para usar la API de Batch y crear un trabajo que use varios
tipos de máquinas, usa el
método v1alpha jobs.create
mientras esta función esté en
versión preliminar.
Para especificar varios tipos de máquinas para un trabajo, incluye el
instanceFlexibilityPolicy campo
y subcampos
en el campo allocationPolicy en el cuerpo principal del archivo JSON.
El campo instanceFlexibilityPolicy admite una o más selecciones de instancias, cada una con un nombre único, una clasificación única y una lista de uno o más tipos de máquinas.
"allocationPolicy":{
"instanceFlexibilityPolicy":{
"instanceSelections":{
"INSTANCE_SELECTION_NAME":{
"rank": RANK,
"machineTypes": [MACHINE_TYPES]
}
}
}
}
Reemplaza lo siguiente:
INSTANCE_SELECTION_NAME: un nombre para la selección de instancias. Si el trabajo tiene varias selecciones de instancias, asegúrate de que cada nombre de este trabajo sea único.RANK: Es un número entero de cero o más que representa la prioridad de esta selección de instancias, en la que el valor más bajo es la prioridad más alta (opcional). Si no se especifica, el valor predeterminado es0(prioridad más alta). Si el trabajo tiene varias selecciones de instancias, asegúrate de que cada clasificación de este trabajo sea única.MACHINE_TYPES: una lista separada por comas de uno o más tipos de máquinas, que se escriben como cadenas, para esta selección de instancias. Puedes incluir cada tipo de máquina en una sola selección de instancias por trabajo. Por ejemplo, una lista de tres tipos de máquinas se puede escribir de la siguiente manera:"MACHINE_TYPE_1", "MACHINE_TYPE_2", "MACHINE_TYPE_3"Reemplaza
MACHINE_TYPE_1,MACHINE_TYPE_2yMACHINE_TYPE_3por un tipo de máquina, por ejemplo,e2-micro,e2-smallyn1-standard-2.
Para obtener más información, consulta también el trabajo de ejemplo.
Ejemplo de archivo de configuración JSON del trabajo
Por ejemplo, cuando usas gcloud CLI o la API de Batch, puedes usar el siguiente archivo de configuración JSON para crear un trabajo de secuencia de comandos básico que tenga dos selecciones de instancias:
- La selección de instancias llamada
first-choicetiene la prioridad más alta ("rank": 0) y tres tipos de máquinas (e2-micro,e2-small, yn1-standard-2). - La selección de instancias llamada
second-choicetiene la segunda prioridad ("rank": 1) y un tipo de máquina (e2-medium).
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello World! This is task $BATCH_TASK_INDEX."
}
}
]
},
"taskCount": 3
}
],
"allocationPolicy":{
"instanceFlexibilityPolicy":{
"instanceSelections":{
"first-choice":{
"rank": 0,
"machineTypes": ["e2-micro", "e2-small", "n1-standard-2"]
},
"second-choice":{
"rank": 1,
"machineTypes": ["e2-medium"]
}
}
}
}
}
¿Qué sigue?
- Si tienes problemas para crear o ejecutar un trabajo, consulta Solución de problemas.
- Consulta trabajos y tareas.
- Obtén más información sobre las opciones de creación de trabajos .