

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Configuración avanzada de recursos
<a name="advanced-resource-configuration"></a>

Con la **omicsResourceFallbackOrder** directiva, puedes declarar una lista ordenada de perfiles de recursos (por ejemplo, de acelerador y de CPU) para una tarea dentro de tu flujo de trabajo. Esta directiva se especifica a nivel de tarea. HealthOmics busca cada perfil en el orden que especifiques para reservar la disponibilidad. Si la capacidad no está disponible durante el tiempo de espera, HealthOmics pasa al siguiente perfil de recursos de la lista.

Esto resulta útil cuando la capacidad de tu acelerador preferida (por ejemplo, el G6e con`nvidia-l40s`) no está disponible y prefieres recurrir a un tipo de acelerador diferente o a una CPU en lugar de fallar en la ejecución.

## Funcionamiento
<a name="advanced-resource-configuration-how-it-works"></a>

1. En la directiva se define una lista ordenada de perfiles de recursos. **omicsResourceFallbackOrder**

1. En tiempo de ejecución, HealthOmics intenta reservar capacidad para el primer perfil de la lista.

1. Si la capacidad no está disponible durante el tiempo de espera, HealthOmics pasa al siguiente perfil.

1. La tarea se ejecuta en el perfil que tenga éxito primero.

1. Si todos los perfiles de la lista fallan, la tarea falla por un motivo. `ALL_PROFILES_INSTANCE_RESERVATION_FAILED` No se realizará ningún reintento del motor cuando todos los perfiles no estén disponibles.

**nota**  
**omicsResourceFallbackOrder**reemplaza los **omicsResourceWaitTimeoutInMin** campos habituales**acceleratorType**, **acceleratorCount** **cpu****memory**, y de la tarea. Estos no deben establecerse al más alto nivel cuando la directiva esté vigente.

## Casos de uso
<a name="advanced-resource-configuration-use-cases"></a>


| Escenario | Description (Descripción) | 
| --- | --- | 
| Alternativa de GPU a GPU  | Enumera los tipos de aceleradores (o GPU) en orden de prioridad. Por ejemplo, inténtelo nvidia-l40s primero y, a continuación, recurra anvidia-l4. No es necesario cambiar los comandos si la carga de trabajo es la misma en todos los tipos de aceleradores. | 
| Alternativa de GPU a CPU  | Agregue un perfil final que omita la opción de respaldoacceleratorType. CPU-only Utilice la variable de AWS\_HEALTHOMICS\_RESOURCE\_TYPE entorno para bifurcar el comando por tipo de recurso. | 

## Task-level campos de tiempo de ejecución
<a name="advanced-resource-configuration-runtime-fields"></a>

Cuando se usan**omicsResourceFallbackOrder**, los campos de ejecución a nivel de tarea se dividen en dos conjuntos:
+ **Per-profile campos ** (**acceleratorType**,, **acceleratorCount** **cpu****memory**,**omicsResourceWaitTimeoutInMin**): se pueden configurar de forma independiente para cada perfil de la lista.
+ **Campos compartidos ** (todos los demás campos de tiempo de ejecución, como**docker**,**maxRetries**): se configuran una vez en el nivel superior y se aplican de la misma manera a todos los perfiles.

## Ejemplo de WDL
<a name="advanced-resource-configuration-wdl-example"></a>

La siguiente tarea de WDL busca `nvidia-l40s` primero (espera hasta 45 minutos para obtener capacidad), luego `nvidia-l4` (ventana de espera predeterminada) y, a continuación, recurre a un CPU-only perfil (32 vCPU, 128 GiB) si no hay ningún tipo de acelerador disponible.

```
task align {
  command <<<
    # Branch based on which resource type was allocated
    if [ "$AWS_HEALTHOMICS_RESOURCE_TYPE" = "cpu" ]; then
      sentieon bwa mem -t 32 ~{reference} ~{fastq}
    else
      pbrun fq2bam --ref ~{reference} --in-fq ~{fastq}
    fi
  >>>

  runtime {
    docker: "my-registry/align-multi-arch:latest"
    maxRetries: 2

    omicsResourceFallbackOrder: [
      {"acceleratorType": "nvidia-l40s", "acceleratorCount": 1,
       "cpu": 8, "memory": "32 GiB",
       "omicsResourceWaitTimeoutInMin": 45},

      {"acceleratorType": "nvidia-l4", "acceleratorCount": 1,
       "cpu": 8, "memory": "32 GiB"},

      {"cpu": 32, "memory": "128 GiB"}
    ]
  }
}
```

En este ejemplo, **AWS\_HEALTHOMICS\_RESOURCE\_TYPE** indica al comando qué ruta de recursos se seleccionó (por ejemplo, `"nvidia-l40s"` o). `"cpu"`

**nota**  
La imagen de Docker debe admitir las rutas de código del acelerador y de la CPU si tu orden alternativa contiene un perfil de CPU. Asegúrate de que tu contenedor incluya las herramientas necesarias para todos los perfiles de recursos de la lista.

## Per-profile referencia de campo
<a name="advanced-resource-configuration-field-reference"></a>

Cada entrada de la **omicsResourceFallbackOrder** lista es un mapa que describe un perfil de recurso. Todos los campos son opcionales; un perfil puede ser una especificación parcial. Cada perfil debe usar claves entre comillas (cadenas).


| Campo | Tipo | Predeterminado cuando se omite | Notas | 
| --- | --- | --- | --- | 
| acceleratorType | Cadena | Si no se especifica, el perfil se considera como CPU | Debe ser uno de los 7 tipos de aceleradores compatibles. Consulte [Aceleradores de tareas en una definición de flujo de trabajo HealthOmics](task-accelerators.md). Omita este campo para especificar un CPU-only perfil. Para el perfil de CPU, no lo defina "" como. | 
| acceleratorCount | Entero | Campo ausente cuando también acceleratorType está ausente | Debe especificarse junto conacceleratorType. Un perfil no puede tener uno sin el otro. | 
| cpu | Entero o flotante | 1 vCPU o tipo de instancia de GPU predeterminado si un perfil de GPU lo omite | Redondeado hacia arriba a la vCPU completa más cercana (mínimo 1). El mismo soporte fraccionario que la directiva de nivel superiorruntime.cpu. | 
| memory | Cadena (por ejemplo,) "32 GiB" | 1 GiB, o un tipo de instancia de GPU predeterminado si un perfil de GPU lo omite | El mismo formato que la directiva de nivel superior. runtime.memory | 
| omicsResourceWaitTimeoutInMin | Entero | 20 minutos para el paquete de acelerador de una sola GPU y 30 minutos para los paquetes de acelerador de varias GPU. Estos también son los valores mínimos recomendados. | No hay límite superior. Controla la duración de las HealthOmics búsquedas de un perfil antes de pasar al siguiente. Consulte [Comportamiento de los tiempos de espera](#advanced-resource-configuration-timeout-behavior). | 

**nota**  
Los campos omitidos toman el valor predeterminado, no los valores heredados de un perfil anterior de la lista. Un campo que no figura en un perfil adopta su valor predeterminado documentado (como se indica en la tabla anterior), no un valor copiado de un perfil anterior de la lista.

## Comportamiento de los tiempos de espera
<a name="advanced-resource-configuration-timeout-behavior"></a>

**omicsResourceWaitTimeoutInMin**controla el tiempo de HealthOmics espera para que se agote la capacidad del acelerador en un perfil determinado antes de pasar al siguiente.
+ **Per-profile, no global. ** Cada perfil de acelerador puede especificar su propio tiempo de espera. Configure una espera más larga para el acelerador de gama alta que prefiera y una espera más corta para un tipo alternativo.
+ **Se recomienda un mínimo de 20 minutos. ** Se aceptan valores inferiores a 20 minutos (30 para paquetes con varias GPU), pero generan una advertencia de validación.
+ **El tiempo de espera avanza, no falla. ** Cuando transcurre el tiempo de espera, HealthOmics pasa al siguiente perfil; la tarea no falla. El error solo se produce cuando se agotan todos los perfiles.
+ **No se aplica a CPU-only los perfiles. ** Un perfil de CPU no tiene limitaciones de capacidad. Omite **omicsResourceWaitTimeoutInMin** en el perfil final de la CPU.
+ **Los reintentos reciben una nueva ventana de tiempo de espera. ** Cada intento de OOM o error de servicio inicia su propia **omicsResourceWaitTimeoutInMin** ventana completa en el mismo perfil, en lugar de heredar el tiempo ya empleado en un intento anterior.

## Variables de entorno
<a name="advanced-resource-configuration-environment-variables"></a>

HealthOmics establece la siguiente variable de entorno en el contenedor de tareas para que el comando pueda ramificarse en función del perfil de recursos que se haya asignado:


| Variable | Valor | Valores de ejemplo | 
| --- | --- | --- | 
| AWS\_HEALTHOMICS\_RESOURCE\_TYPE | El acceleratorType del perfil activo o el "cpu" de un CPU-only perfil. | "nvidia-l40s", "nvidia-l4", "cpu" | 

## Criterios de validación
<a name="advanced-resource-configuration-validation"></a>

HealthOmics valida lo siguiente en el momento de crear el flujo de trabajo y vuelve a comprobarlo durante la ejecución de la tarea. Todas las reglas rechazan el flujo de trabajo o la tarea, a menos que se indique lo contrario.

1. **No se puede combinar con las directivas de recursos individuales. ** Si **omicsResourceFallbackOrder** se especifica, el nivel superior**acceleratorType**,**acceleratorCount**, **cpu****memory**, y no **omicsResourceWaitTimeoutInMin** debe especificarse en la misma tarea.

1. **Debe ser una lista. ****omicsResourceFallbackOrder**debe escribirse como una matriz de perfiles.

1. **No puede estar vacío. ** La lista debe contener al menos un perfil.

1. **Se requieren las claves entre comillas. ** Cada nombre de campo debe ser una cadena entre comillas, por ejemplo`{"acceleratorType": "nvidia-l4", "acceleratorCount": 1}`. Las claves de palabras simples no se validan.

1. **Non-empty perfiles. ** No se permite un perfil vacío (`{}`).

1. ****acceleratorType**y **acceleratorCount** vayan juntos. ** Un perfil que defina uno debe establecer el otro. Un perfil de CPU debe omitir ambos.

1. **Solo los tipos de aceleradores compatibles. ****acceleratorType**debe ser un tipo de acelerador compatible o estar omitido (perfil de CPU). No `""` se acepta una cadena vacía.

1. **Tiempo de espera mínimo. ****omicsResourceWaitTimeoutInMin**el valor recomendado es ≥ 20 minutos (≥ 30 para paquetes con varias GPU).

1. **Perfiles duplicados (solo con advertencia). ** Se permiten perfiles duplicados, pero generan una advertencia. **omicsResourceWaitTimeoutInMin**En su lugar, considere aumentar el perfil anterior.

1. **Se rechazaron los campos no reconocidos. ** Solo se permiten los cinco campos por perfil enumerados anteriormente.

1. **Tipos correctos. ** Por ejemplo, **cpu** debe ser un número, no una cadena.

1. **Como máximo, un perfil de CPU. ** Solo se permite un perfil que **acceleratorType** omita.

1. **Máximo 10 perfiles por tarea. **

## Interacción con reintentos
<a name="advanced-resource-configuration-retries"></a>

En el Out-of-Memory caso de errores (OOM) y de servicio (excepto 5 veces`ALL_PROFILES_INSTANCE_RESERVATION_FAILED`), HealthOmics vuelva a intentar la tarea de la siguiente manera:
+ Los reintentos se producen en el perfil actualmente activo que anteriormente se reservó correctamente.
+ Los reintentos nunca avanzan al siguiente perfil en el orden alternativo.
+ Los reintentos agotados fallan en la tarea. **maxRetries**

Para obtener más información sobre los reintentos de tareas, consulte. HealthOmics [La tarea se reintenta](monitoring-runs.md#run-status-task-retries)

**nota**  
Si todos los perfiles se agotan en el primer intento del motor sin reserva de instancias, el motor no realiza la tarea y, posteriormente, pasa a ejecutar con el estado`ALL_PROFILES_INSTANCE_RESERVATION_FAILED`. Incluso si ha configurado los reintentos, HealthOmics no vuelva a intentarlo para obtener este código de error. Le recomendamos que lo ajuste de forma adecuada. **omicsResourceWaitTimeoutInMin**

## Prácticas recomendadas
<a name="advanced-resource-configuration-best-practices"></a>
+ **Evita usar paquetes con varias GPU en el orden alternativo. ** Los tipos de aceleradores que abarcan varias familias de instancias (por ejemplo,`nvidia-t4-a10g-l4`) no se recomiendan en interiores**omicsResourceFallbackOrder**. En su lugar, usa tipos unifamiliares. Para obtener más información sobre los tipos de aceleradores disponibles, consulte[Aceleradores de tareas en una definición de flujo de trabajo HealthOmics](task-accelerators.md).
+ **Establezca los tiempos de espera adecuados. ** Para los perfiles de aceleradores de alta prioridad, aumente **omicsResourceWaitTimeoutInMin** para HealthOmics tener más tiempo para encontrar capacidad.
+ **Coloque los perfiles de la CPU en último lugar. ** Si incluyes una CPU-only alternativa, debe ser la última entrada, por lo que se prefieren los aceleradores cuando estén disponibles.
+ **Usa imágenes de contenedores con varias arquitecturas. ** Cuando utilices el respaldo de GPU a CPU, asegúrate de que tu imagen de Docker sea compatible con ambas rutas GPU-accelerated de CPU-only código.

## Limitaciones
<a name="advanced-resource-configuration-limitations"></a>
+ **omicsResourceFallbackOrder**no se admite en **scatter** bloques. Solo está disponible a nivel de tarea.
+ A partir de la fecha de lanzamiento en GA, solo se admite la WDL. Está previsto que Nextflow y CWL sean compatibles.
+ Instance-type los nombres (por ejemplo,`omics.g6e.4xlarge`) no se aceptan como valores de recursos. Debe usar la sintaxis de campo por perfil que se describe en esta página.