

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 高级资源配置
<a name="advanced-resource-configuration"></a>

使用该**omicsResourceFallbackOrder**指令，您可以为工作流程中的任务声明有序的资源（例如，加速器和 CPU）配置文件列表。您可以在任务级别指定此指令。 HealthOmics 按照您指定的顺序搜索每个配置文件以确定是否可以预订。如果在等待超时内容量不可用，则 HealthOmics 移至列表中的下一个资源配置文件。

当您的首选加速器容量（例如，带有 G6e`nvidia-l40s`）不可用，并且您宁愿使用其他加速器类型或 CPU 而不是运行失败时，这很有用。

## 工作原理
<a name="advanced-resource-configuration-how-it-works"></a>

1. 您在**omicsResourceFallbackOrder**指令中定义资源配置文件的有序列表。

1. 运行时， HealthOmics 尝试为列表中的第一个配置文件预留容量。

1. 如果在等待超时期间容量不可用，则 HealthOmics 移至下一个配置文件。

1. 该任务将在首先成功的配置文件上运行。

1. 如果列表中的所有配置文件都失败，则任务会失败`ALL_PROFILES_INSTANCE_RESERVATION_FAILED`。当所有配置文件都不可用时，不会应用引擎重试。

**注意**  
**omicsResourceFallbackOrder**替换任务的常用字段**acceleratorType****acceleratorCount****cpu**、**memory**、和**omicsResourceWaitTimeoutInMin**字段。当指令存在时，不得将其设置在顶层。

## 使用案例
<a name="advanced-resource-configuration-use-cases"></a>


| 场景 | 说明 | 
| --- | --- | 
| GPU 到 GPU 的后备模式  | 按优先级顺序列出加速器（或 GPU）类型。例如，nvidia-l40s先尝试，然后回退到nvidia-l4。如果加速器类型的工作负载相同，则无需更改命令。 | 
| GPU 到 CPU 的回退  | 添加一个省略 CPU-only 后备acceleratorType用的最终配置文件。使用AWS\_HEALTHOMICS\_RESOURCE\_TYPE环境变量按资源类型对命令进行分支。 | 

## Task-level 运行时字段
<a name="advanced-resource-configuration-runtime-fields"></a>

使用时**omicsResourceFallbackOrder**，任务级运行时字段分为两组：
+ **Per-profile 字段 ** (**acceleratorType****acceleratorCount**、、**cpu**、**memory**、**omicsResourceWaitTimeoutInMin**) — 可为列表中的每个配置文件单独配置。
+ **共享字段**（所有其他运行时字段，例如**docker**，**maxRetries**）— 在顶层设置一次，以相同的方式应用于每个配置文件。

## WDL 示例
<a name="advanced-resource-configuration-wdl-example"></a>

以下 WDL 任务`nvidia-l40s`首先搜索（等待容量长达 45 分钟），然后`nvidia-l4`（默认等待窗口），然后在两种加速器类型都不可用时回退到 CPU-only 配置文件（32 个 vCPU，128 GiB）。

```
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"}
    ]
  }
}
```

在此示例中，**AWS\_HEALTHOMICS\_RESOURCE\_TYPE**告诉命令选择了哪个资源路径（例如，`"nvidia-l40s"`或`"cpu"`）。

**注意**  
如果您的备用订单包含 CPU 配置文件，则 Docker 镜像必须同时支持加速器和 CPU 代码路径。确保您的容器包含列表中所有资源配置文件所需的工具。

## Per-profile 字段参考
<a name="advanced-resource-configuration-field-reference"></a>

**omicsResourceFallbackOrder**列表中的每个条目都是一张描述一个资源配置文件的地图。所有字段均为可选字段；配置文件可以是部分规范。每个配置文件都必须使用带引号（字符串）的密钥。


| 字段 | Type | 省略时默认 | 注意 | 
| --- | --- | --- | --- | 
| acceleratorType | 字符串 | 如果未指定，则将配置文件视为 CPU | 必须是支持的 7 种加速器类型之一。请参阅[工作 HealthOmics 流程定义中的任务加速器](task-accelerators.md)。省略此字段以指定 CPU-only 配置文件。对于 CPU 配置文件，请勿将其设置为""。 | 
| acceleratorCount | 整数 | 也缺席时acceleratorType字段不存在 | 必须与一起指定acceleratorType。一个配置文件不能没有另一个。 | 
| cpu | 整数或浮点数 | 1 个 vCPU，如果 GPU 配置文件省略了它，则默认为 GPU 实例类型 | 向上舍入到最接近的整数 vCPU（最少 1）。与顶级runtime.cpu指令相同的分数支持。 | 
| memory | 字符串（例如，"32 GiB"） | 1 GiB，或者 GPU 实例类型的默认值（如果 GPU 配置文件省略了该值） | 与顶级runtime.memory指令的格式相同。 | 
| omicsResourceWaitTimeoutInMin | 整数 | 单 GPU 加速器套装需要 20 分钟，多 GPU 加速器套装需要 30 分钟。这些也是推荐的最小值。 | 无上限。控制在移动到下一个配置文件之前 HealthOmics 搜索一个配置文件多长时间。请参阅[超时行为](#advanced-resource-configuration-timeout-behavior)。 | 

**注意**  
省略的字段采用默认值，而不是从列表中较早的配置文件继承的值。配置文件中遗漏的字段采用其记录的默认值（如上表所示），而不是从列表中较早的配置文件中复制的值。

## 超时行为
<a name="advanced-resource-configuration-timeout-behavior"></a>

**omicsResourceWaitTimeoutInMin**控制在进入下一个配置文件之前 HealthOmics 等待给定配置文件上的加速器容量多长时间。
+ **Per-profile，不是全球性的。**每个加速器配置文件都可以指定自己的超时时间。为首选的高端加速器配置更长的等待时间，缩短备用加速器的等待时间。
+ **建议至少 20 分钟。**低于 20 分钟（多 GPU 套装为 30 分钟）的值被接受，但会生成验证警告。
+ **超时是前进的，不是失败的。**超时过后， HealthOmics 移至下一个配置文件——任务不会失败。只有在所有配置文件都用尽后才会出现故障。
+ **不适用于 CPU-only 个人资料。**CPU 配置文件没有容量限制。在最终**omicsResourceWaitTimeoutInMin**的 CPU 配置文件中省略。
+ **重试会收到一个新的超时窗口。**每次 OOM 或服务错误重试都会在同一个配置文件上启动自己的完整**omicsResourceWaitTimeoutInMin**窗口，而不是继承前一次尝试已经花费的时间。

## 环境变量
<a name="advanced-resource-configuration-environment-variables"></a>

HealthOmics 在任务容器中设置以下环境变量，以便您的命令可以根据分配的资源配置文件进行分支：


| 变量 | 值 | 示例值 | 
| --- | --- | --- | 
| AWS\_HEALTHOMICS\_RESOURCE\_TYPE | 活动配置文件的，或 CPU-only 配置文件"cpu"的。acceleratorType | "nvidia-l40s", "nvidia-l4", "cpu" | 

## 验证标准
<a name="advanced-resource-configuration-validation"></a>

HealthOmics 在工作流程创建时验证以下内容，并在任务运行时重新检查。除非另有说明，否则所有规则都拒绝该工作流程或任务。

1. **不能与单个资源指令混用。**如果**omicsResourceFallbackOrder**已指定，则**omicsResourceWaitTimeoutInMin**不得在同一任务中指定顶层**acceleratorType****memory**、、、和。**acceleratorCount** **cpu**

1. **必须是清单。****omicsResourceFallbackOrder**必须以配置文件数组的形式编写。

1. **不能为空。**该列表必须包含至少一个配置文件。

1. **需要带引号的密钥。**例如，每个字段名称必须是带引号的字符串`{"acceleratorType": "nvidia-l4", "acceleratorCount": 1}`。裸字密钥验证失败。

1. **Non-empty 配置文件。**不允许使用空的个人资料 (`{}`)。

1. ****acceleratorType**然后一起**acceleratorCount**去。**设置一个的配置文件必须设置另一个。CPU 配置文件必须省略这两者。

1. **仅支持的加速器类型。****acceleratorType**必须是支持的加速器类型或省略（CPU 配置文件）。不接受`""`空字符串。

1. **最小等待超时时间。****omicsResourceWaitTimeoutInMin**建议值为 ≥ 20 分钟（多 GPU 套装的建议值为 ≥ 30 分钟）。

1. **重复的个人资料（仅限警告）。**允许重复配置文件，但会产生警告。可以考虑改**omicsResourceWaitTimeoutInMin**为增加之前的配置文件。

1. **无法识别的字段被拒绝。**只允许使用上面列出的每个配置文件中的五个字段。

1. **正确的类型。**例如，**cpu**必须是数字，而不是字符串。

1. **最多一个 CPU 配置文件。**只允许一个省略的**acceleratorType**配置文件。

1. **每项任务最多 10 个配置文件。**

## 与重试的交互
<a name="advanced-resource-configuration-retries"></a>

对于 Out-of-Memory （OOM）和服务错误（不包括 5xx`ALL_PROFILES_INSTANCE_RESERVATION_FAILED`），按 HealthOmics 如下方式重试任务：
+ 在先前成功保留的当前活动配置文件中进行重试。
+ 重试永远不会进入后备顺序中的下一个配置文件。
+ 用尽的重试会使任务**maxRetries**失败。

有关中的任务重试的更多信息 HealthOmics，请参阅[任务重试次数](monitoring-runs.md#run-status-task-retries)。

**注意**  
如果在没有实例预留的情况下首次尝试引擎时所有配置文件都已用尽，则引擎将失败任务，然后以状态运行`ALL_PROFILES_INSTANCE_RESERVATION_FAILED`。即使您已配置重试，也 HealthOmics 不会针对此错误代码重试。我们建议您进行**omicsResourceWaitTimeoutInMin**适当的调整。

## 最佳实践
<a name="advanced-resource-configuration-best-practices"></a>
+ **避免按备用顺序使用多 GPU 捆绑包类型。**内部不建议使用跨多个实例系列（例如`nvidia-t4-a10g-l4`）的加速器类型**omicsResourceFallbackOrder**。改用单户型。有关可用加速器类型的详细信息，请参阅[工作 HealthOmics 流程定义中的任务加速器](task-accelerators.md)。
+ **设置适当的等待超时时间。**对于高优先级加速器配置文件，请增加**omicsResourceWaitTimeoutInMin**以留出 HealthOmics 更多时间来寻找容量。
+ **将 CPU 配置文件放在最后。**如果您包含 CPU-only 备用项，则它必须是最后一个条目，因此加速器在可用时是首选。
+ **使用多架构容器镜像。**使用 GPU 到 CPU 的备用模式时，请确保您的 Docker 镜像同时支持 GPU-accelerated 和 CPU-only 代码路径。

## 限制
<a name="advanced-resource-configuration-limitations"></a>
+ **omicsResourceFallbackOrder****scatter**区块内不支持。它仅在任务级别上可用。
+ 截至正式发布之日，仅支持 WDL。计划支持 Nextflow 和 CWL。
+ Instance-type 名称（例如`omics.g6e.4xlarge`）不被接受为资源值。您必须使用本页上描述的每配置文件字段语法。