

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 進階資源組態
<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**、**memory**、 **cpu**和 **omicsResourceWaitTimeoutInMin** 欄位。當指令存在時，這些不得在頂層設定。

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


| 案例 | 說明 | 
| --- | --- | 
| GPU 對 GPU 備用 | 依優先順序列出加速器 （或 GPU) 類型。例如，nvidia-l40s請先嘗試，然後返回 nvidia-l4。如果跨加速器類型的工作負載相同，則不需要變更命令。 | 
| GPU 到 CPU 備用 | 新增只acceleratorType省略 CPU 後端的最終設定檔。使用 AWS\_HEALTHOMICS\_RESOURCE\_TYPE環境變數，依資源類型分支命令。 | 

## 任務層級執行時間欄位
<a name="advanced-resource-configuration-runtime-fields"></a>

使用 時**omicsResourceFallbackOrder**，任務層級執行期欄位分為兩組：
+ **每個設定檔欄位** (**acceleratorType**、**acceleratorCount**、**cpu**、**memory**、**omicsResourceWaitTimeoutInMin**) — 可針對清單中的每個設定檔獨立設定。
+ **共用欄位** （所有其他執行時間欄位，例如 **docker**、**maxRetries**) — 在頂層設定一次，並對每個設定檔套用相同的方式。

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

下列 WDL 任務會`nvidia-l40s`先搜尋 （等待容量最多 45 分鐘），然後 `nvidia-l4`（預設等待時段），如果沒有可用的加速器類型，則會回到僅限 CPU 設定檔 (32 vCPUs，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 程式碼路徑。確保您的容器包含清單中所有資源設定檔的必要工具。

## 每個設定檔欄位參考
<a name="advanced-resource-configuration-field-reference"></a>

**omicsResourceFallbackOrder** 清單中的每個項目都是描述一個資源設定檔的映射。所有欄位都是選用的；設定檔可以是部分規格。每個設定檔都必須使用引號 （字串） 金鑰。


| 欄位 | Type | 省略時的預設值 | 備註 | 
| --- | --- | --- | --- | 
| acceleratorType | String | 未指定時，設定檔會被視為 CPU | 必須是 7 種支援的加速器類型之一。請參閱 [HealthOmics 工作流程定義中的任務加速器](task-accelerators.md)。省略此欄位以指定僅限 CPU 的設定檔。對於 CPU 設定檔，請勿將其設定為 ""。 | 
| acceleratorCount | Integer | 當 也不存在 acceleratorType 時， 欄位不存在 | 必須與 一起指定acceleratorType。一個描述檔不能有一個沒有另一個描述檔的描述檔。 | 
| cpu | 整數或浮點數 | 1 個 vCPU，如果 GPU 設定檔省略，則預設為 GPU 執行個體類型 | 四捨五入至最接近的整個 vCPU （最少 1)。與最上層runtime.cpu指令相同的分數支援。 | 
| memory | 字串 （例如，"32 GiB") | 1 GiB，如果 GPU 設定檔省略，則為 GPU 執行個體類型預設值 | 與最上層runtime.memory指令相同的格式。 | 
| omicsResourceWaitTimeoutInMin | Integer | 單一 GPU 加速器套件 20 分鐘，多 GPU 加速器套件 30 分鐘。這些也是建議的最小值。 | 沒有上限。控制 HealthOmics 在移至下一個設定檔之前搜尋一個設定檔的時間長度。請參閱 [逾時行為](#advanced-resource-configuration-timeout-behavior)。 | 

**注意**  
省略的欄位會採用預設值，而不是從清單中先前描述檔繼承的值。離開設定檔的欄位會採用其記錄的預設值 （如上表所示），而不是從清單中先前設定檔複製的值。

## 逾時行為
<a name="advanced-resource-configuration-timeout-behavior"></a>

**omicsResourceWaitTimeoutInMin** 控制 HealthOmics 在進入下一個設定檔之前，在指定設定檔上等待加速器容量的時間長度。
+ **每個設定檔，而非全域。**每個加速器設定檔都可以指定自己的逾時。設定較長的偏好高階加速器等待時間，以及較短的備用類型等待時間。
+ **建議最短 20 分鐘。**接受低於 20 分鐘的值 （多 GPU 套件為 30)，但會產生驗證警告。
+ **逾時會提前，不會失敗。**當逾時過後，HealthOmics 會移至下一個設定檔 — 任務不會失敗。只有在所有設定檔都用盡之後，才會發生失敗。
+ **不適用於僅限 CPU 的設定檔。**CPU 設定檔沒有容量限制。省略最終 CPU 設定檔**omicsResourceWaitTimeoutInMin**上的 。
+ **重試會收到新的逾時時段。**每個 OOM 或服務錯誤重試都會在相同的設定檔上開始自己的完整**omicsResourceWaitTimeoutInMin**時段，而不是繼承先前嘗試已花費的時間。

## 環境變數
<a name="advanced-resource-configuration-environment-variables"></a>

HealthOmics 會在任務容器中設定下列環境變數，讓您的命令可以根據配置的資源設定檔進行分支：


| 變數 | Value | 範例值 | 
| --- | --- | --- | 
| AWS\_HEALTHOMICS\_RESOURCE\_TYPE | 作用中設定檔acceleratorType的 ，或僅限 CPU 設定檔"cpu"的 。 | "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}`。Bareword 金鑰驗證失敗。

1. **非空白設定檔。**不允許空白設定檔 (`{}`)。

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 的備用，它必須是最後一個項目，以便在可用時偏好加速器。
+ **使用多架構容器映像。**使用 GPU 進行 CPU 備用時，請確定您的 Docker 映像同時支援 GPU 加速和僅限 CPU 的程式碼路徑。

## 限制
<a name="advanced-resource-configuration-limitations"></a>
+ **omicsResourceFallbackOrder** **scatter**區塊中不支援 。它只能在任務層級使用。
+ 自 GA 啟動日期起，僅支援 WDL。已規劃 Nextflow 和 CWL 支援。
+ 執行個體類型名稱 （例如 `omics.g6e.4xlarge`) 不接受做為資源值。您必須使用此頁面所述的每個設定檔欄位語法。