

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

# HealthOmics 工作流程任務的暫時性儲存
<a name="workflows-ephemeral-storage"></a>

HealthOmics 為使用 `/tmp`目錄的工作流程任務提供暫時性儲存。此儲存體對工作流程中的每個任務而言都是暫時且唯一的。HealthOmics 預設會將 16 GiB 的暫時性儲存分配給每個任務執行個體。您可以增加分配給工作流程定義中個別任務的暫時性儲存量，每個任務最多 3，072 GiB。存放在 中的所有資料`/tmp`都會靜態加密。

**Topics**
+ [主要優點](#ephemeral-storage-key-benefits)
+ [暫時性儲存的運作方式](#ephemeral-storage-how-it-works)
+ [啟用暫時性儲存](#ephemeral-storage-enable)
+ [預設儲存配置](#ephemeral-storage-default-allocation)
+ [設定暫時性儲存大小](#ephemeral-storage-configure-size)
+ [監控暫時性儲存](#ephemeral-storage-monitoring)
+ [暫時性儲存的計費方式](#ephemeral-storage-billing)
+ [考量和限制](#ephemeral-storage-considerations)
+ [暫時性儲存的故障診斷](#ephemeral-storage-troubleshooting)

## 主要優點
<a name="ephemeral-storage-key-benefits"></a>
+ **更快速的任務執行：**暫時性儲存可以透過減少共用檔案系統 I/O 來改善執行效能。
+ **可預測的效能：**任務不會與其他同時執行的 I/O 頻寬任務競爭，從而減少與共用網路檔案系統相關聯的可變性和限流。
+ **降低成本：**更快速的任務執行會直接減少使用 的 I/O 繫結任務的運算時間和成本`/tmp`。對於使用靜態執行儲存體的執行，這可以減少您需要的佈建執行儲存體數量。動態執行不需要變更。

## 暫時性儲存的運作方式
<a name="ephemeral-storage-how-it-works"></a>

當您啟用暫時性儲存時，HealthOmics `/tmp`會為每個工作流程任務執行個體在 掛載專用的本機儲存磁碟區。暫時性儲存適用於任務執行期間產生的暫存檔案。當任務終止時，一律會刪除暫時性儲存磁碟區。寫入 的資料`/tmp`不會保留、匯出或供其他任務或後續執行存取。

### 工作流程寫入暫存檔案的位置
<a name="ephemeral-storage-tmp-writes"></a>

當任務處理將暫存 I/O 導向 時，工作流程會受益於暫時性儲存`/tmp`。Bioinformatics 工作流程語言在任務執行期間，會將 `/tmp`目錄 （以及 `$TMP``$TMPDIR`環境變數） 用於暫時、短期的中繼檔案。確保您的任務命令沒有映射`$TMPDIR`到另一個位置。

工作流程任務程序會在啟用時`/tmp`自動使用暫時性儲存體，無需變更工作流程。未明確指示暫存程序的工作流程`/tmp`會將暫存資料寫入用於執行儲存的共用檔案系統上的工作目錄，但使用的工具可能會利用`/tmp`暫時性儲存。

### 靜態加密
<a name="ephemeral-storage-encryption"></a>

所有暫時性儲存都會使用服務受管 AWS KMS 金鑰進行靜態加密。加速運算執行個體是硬體加密的，具有唯一的每個磁碟區金鑰，會在執行個體終止時銷毀。

### 許可
<a name="ephemeral-storage-permissions"></a>

HealthOmics 會代表您管理暫時性儲存磁碟區的連接和生命週期。您的任務執行角色不需要額外的 IAM 許可。

## 啟用暫時性儲存
<a name="ephemeral-storage-enable"></a>

您可以在 `StartRun` API `scratchStorageMode`中設定 ，將暫存 I/O 重新導向至本機儲存體。此`scratchStorageMode`設定僅適用於 CPU 執行個體，並適用於該執行中的所有任務。

`scratchStorageMode` 決定工作流程寫入暫存資料的位置。可能的值如下：
+ `LOCAL` — 暫時性儲存放置在本機磁碟上。Scratch I/O 具有專用 IOPS 和輸送量。
+ `SHARED` — 使用共用檔案系統 （預設）。抓取 I/O 與工作目錄爭用。

如需詳細資訊，請參閱[在 HealthOmics 中開始執行](starting-a-run.md)。

**注意**  
GPU 任務一律使用本機 NVMe 暫時性儲存進行暫存資料，且一律`LOCAL`用於 GPU `scratchStorageMode` 任務。

### 選擇加入暫時性儲存
<a name="ephemeral-storage-opt-in"></a>

若要為執行啟用暫時性儲存，請在開始執行`LOCAL`時將 `scratchStorageMode`設定為 。

```
aws omics start-run \
    --workflow-id {{workflow-id}} \
    --role-arn {{arn:aws:iam::123456789012:role/OmicsServiceRole}} \
    --output-uri s3://{{amzn-s3-demo-bucket}}/{{output-folder}}/ \
    --parameters file://{{/path/to/parameters.json}} \
    --scratch-storage-mode LOCAL
```

對於批次執行，`scratchStorageMode`請傳入 `defaultRunSetting`。此設定適用於批次中的每個執行。

```
aws omics start-run-batch \
    --batch-name "{{my-batch}}" \
    --default-run-setting '{
      "workflowId": "{{workflow-id}}",
      "roleArn": "arn:aws:iam::{{123456789012}}:role/{{OmicsServiceRole}}",
      "outputUri": "s3://{{amzn-s3-demo-bucket}}/{{output-folder}}/",
      "storageType": "DYNAMIC",
      "parameters": {"{{referenceUri}}": "s3://{{amzn-s3-demo-bucket}}/{{reference.fasta}}"},
      "scratchStorageMode": "LOCAL"
    }' \
    --batch-run-settings '{
      "inlineSettings": [
        {
          "runSettingId": "{{sample-A}}",
          "parameters": {"{{inputUri}}": "s3://{{amzn-s3-demo-bucket}}/{{sampleA.fastq}}"}
        },
        {
          "runSettingId": "{{sample-B}}",
          "parameters": {"{{inputUri}}": "s3://{{amzn-s3-demo-bucket}}/{{sampleB.fastq}}"}
        }
      ]
    }'
```

### 選擇不接收暫時性儲存
<a name="ephemeral-storage-opt-out"></a>

若要針對特定執行停用暫時性儲存 （例如，隔離失敗），請將 `scratchStorageMode`設定為 `SHARED`。

```
aws omics start-run \
     --workflow-id {{workflow-id}} \
     --role-arn {{arn:aws:iam::123456789012:role/OmicsServiceRole}} \
     --output-uri s3://{{amzn-s3-demo-bucket}}/{{output-folder}}/ \
     --scratch-storage-mode SHARED
```

當 `scratchStorageMode`為 時`SHARED`，工作流程定義中的所有 `disk` 和同等指令都會遭到忽略`/tmp`，並由共用檔案系統提供支援。此設定僅適用於 CPU 執行個體。GPU 任務一律使用本機 NVMe 暫時性儲存，且無法選擇退出。

### 檢查有效模式
<a name="ephemeral-storage-check-mode"></a>

暫時性儲存預設為關閉。從`StartRun`請求省略 `scratchStorageMode` 時， `scratchStorageMode` 會設定為 `SHARED`（預設）。

`scratchStorageMode` 只有在`GetRun`請求中明確傳遞回應時，才會傳回`StartRun`回應。如果省略，則 `SHARED` 為預設值。呼叫 `GetRun` 以確認執行的有效儲存模式。

```
aws omics get-run --id {{run-id}}
```

## 預設儲存配置
<a name="ephemeral-storage-default-allocation"></a>

針對所有標準、運算和記憶體最佳化執行個體類型，每個任務的預設暫時性儲存配置為 16 GiB。您不需要指定`disk`指令即可接收此預設值。若要設定其他儲存，請使用 `disk`指令。您可以增加分配給工作流程定義中個別任務的暫時性儲存量，每個任務最多 3，072 GiB。您需要支付超過預設 16 GiB 的儲存體費用。

暫時性儲存可以設定為 16 GiB 的增量。如需詳細資訊，請參閱[支援的大小](#ephemeral-storage-supported-sizes)。

### 加速運算執行個體的暫時性儲存
<a name="ephemeral-storage-gpu-defaults"></a>

GPU 執行個體儲存容量會依執行個體類型固定，無須額外付費。

GPU 任務一律使用本機 NVMe 暫時性儲存。上的 `scratchStorageMode`設定`StartRun`不適用於 GPU 任務，並將此值設定為 `SHARED`不會影響 GPU 執行個體。容量會依執行個體類型固定，且無法使用 `disk`指令自訂。NVMe 容量由針對任務的 `cpu`、 `memory`和 `acceleratorType`需求選取的執行個體類型預先決定。


| 大小 | GPU | vCPU | 記憶體 (GiB) | G4dn NVMe (T4) | G5 NVMe (A10G) | G6 NVMe (L4) | G6e NVMe (L40S) | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| xlarge | 1 | 4 | 16 | 125 GiB | 250 GiB | 250 GiB | 250 GiB | 
| 2xlarge | 1 | 8 | 32 | 225 GiB | 450 GiB | 450 GiB | 450 GiB | 
| 4xlarge | 1 | 16 | 64 | 225 GiB | 600 GiB | 600 GiB | 600 GiB | 
| 8xlarge | 1 | 32 | 128 | 900 GiB | 900 GiB | 900 GiB | 900 GiB | 
| 12xlarge | 4 | 48 | 192 | 900 GiB | 3，800 GiB | 3，760 GiB | 3，800 GiB | 
| 16xlarge | 1 | 64 | 256 | 900 GiB | 1，900 GiB | 1，880 GiB | 1，900 GiB | 
| 24xlarge | 4 | 96 | 384 | — | 3，800 GiB | 3，760 GiB | 3，800 GiB | 

## 設定暫時性儲存大小
<a name="ephemeral-storage-configure-size"></a>

當 `scratchStorageMode` 設為 時`LOCAL`，您可以使用工作流程定義中的 `disk`指令 （或同等指令） 請求增加每個任務的暫時性儲存。HealthOmics 將`disk`指令視為提示，並佈建四捨五入到下一個 16 GiB 的磁碟區。使用 `disk`指令不會影響執行個體類型選擇。僅根據 `cpu`、 `memory`和 來選取執行個體類型`acceleratorType`。如需詳細資訊，請參閱[HealthOmics 工作流程定義中的任務資源](task-resources.md)。

如果沒有`disk`指示詞，任務會收到預設的 16 GiB。任務不能小於預設暫時性儲存。

您不需要為提取的容器映像調整暫時性儲存體的大小，這些映像會分別說明。如需詳細資訊，請參閱[私有工作流程的容器映像](workflows-ecr.md)。

### 何時使用磁碟指令
<a name="ephemeral-storage-when-to-use-disk"></a>

當所選執行個體類型的預設暫時性儲存體不足以滿足您的任務需求時，請在任務定義中使用 `disk`指令。例如，當任務將大量資料寫入 時`/tmp`。

### 增加暫時性儲存的常見使用案例
<a name="ephemeral-storage-use-cases"></a>

1. **模擬融合偵測：**模擬工作流程會產生大型中繼 BAMs而任務程序通常需要同時存在原始 FASTQs和對齊的輸出，需要大型暫存磁碟 （例如，每個任務 512 GiB)。

1. **De Novo Genome 組件：**長讀取組件工作流程需要大型暫存磁碟區來處理原始讀取，以及在輸出之前重複重寫和重組的臨時組件成品。這些任務是記憶體和磁碟密集型任務，有時需要多個 TiB 的暫時性儲存。

1. **變體呼叫 / BAM 處理：**變體呼叫工作流程需要大量的暫存儲存空間來對齊和排序重複讀取和重寫大型 BAM 或 CRAM 檔案的步驟。暫時性儲存需求通常為數百 GiB。

### 依引擎的指令語法
<a name="ephemeral-storage-disk-directive-syntax"></a>

下表顯示每個工作流程語言的同等指令。


| 引擎 | 指令 | 範例 | 
| --- | --- | --- | 
| WDL 1.1 | disks | disks: "/tmp 700 GiB" | 
| 下一個流程 | disk | disk '700 GB' | 
| CWL | tmpdirMin | tmpdirMin: 716800 (MiB 值） | 

下列範例示範如何設定請求 700 GiB 暫時性儲存的任務。HealthOmics 會四捨五入至 704 GiB 層。

------
#### [ WDL ]

```
task sort_bam {
    runtime {
        cpu:  16
        disks: "700 GiB"
    }
    command <<<
        samtools sort -T /tmp/sort_buffer ~{input_bam} -o ~{output_bam}
    >>>
}
```

------
#### [ Nextflow ]

```
process sort_bam {
    disk '700 GB'
    script:
    """
    samtools sort -T /tmp/sort_buffer ${input} -o ${output}
    """
}
```

------
#### [ CWL ]

```
requirements:
  ResourceRequirement:
    tmpdirMin: 716800   # 700 GiB expressed in MiB
```

------

如需支援的指令語法的詳細資訊，請參閱 [WDL 工作流程定義詳細資訊](workflow-languages-wdl.md)和 [Nextflow 工作流程定義詳細資訊](workflow-definition-nextflow.md)。

### 常見的生物資訊學工具和暫時性儲存
<a name="ephemeral-storage-tool-examples"></a>

許多生物資訊學工具會在執行期間寫入大型暫存檔案。當 `scratchStorageMode` 設定為 時`LOCAL`，重新導向這些工具以使用 ，`/tmp`讓暫存 I/O 移至快速本機磁碟區，而不是共用的執行檔案系統。下列範例顯示常用工具的相關旗標。

------
#### [ WDL ]

```
task sort_bam {
    runtime {
        cpu:   16
        disks: "700 GiB"
    }
    command <<<
        # samtools: -T sets the temp-file prefix
        samtools sort -T /tmp/sort_buffer ~{input_bam} -o ~{sorted_bam}

        # GATK / Picard: --TMP_DIR flag (older Picard uses TMP_DIR=/tmp)
        gatk MarkDuplicates -I ~{sorted_bam} -O ~{output_bam} --TMP_DIR /tmp

        # STAR: --outTmpDir (path must not pre-exist; STAR creates it)
        STAR --runThreadN 16 --readFilesIn ~{reads} --outTmpDir /tmp/star_tmp --outFileNamePrefix out_

        # bcftools sort: -T / --temp-dir
        bcftools sort -T /tmp ~{vcf} -o ~{output_vcf}

        # GNU sort: -T / --temporary-directory
        sort -T /tmp ~{big_table} -o ~{sorted_table}
    >>>
}
# HealthOmics rounds 700 GiB up to the 704 GiB tier
```

------
#### [ Nextflow ]

```
process sort_bam {
    disk '700 GB'
    script:
    """
    # samtools: -T sets the temp-file prefix
    samtools sort -T /tmp/sort_buffer input.bam -o sorted.bam

    # GATK / Picard: --TMP_DIR flag (older Picard uses TMP_DIR=/tmp)
    gatk MarkDuplicates -I sorted.bam -O dedup.bam --TMP_DIR /tmp

    # STAR: --outTmpDir (path must not pre-exist; STAR creates it)
    STAR --runThreadN 16 --readFilesIn reads.fastq --outTmpDir /tmp/star_tmp --outFileNamePrefix out_

    # bcftools sort: -T / --temp-dir
    bcftools sort -T /tmp input.vcf -o sorted.vcf

    # GNU sort: -T / --temporary-directory
    sort -T /tmp big_table.tsv -o sorted_table.tsv
    """
}
// HealthOmics rounds 700 GB up to the 704 GiB tier
```

------
#### [ CWL ]

```
class: CommandLineTool
cwlVersion: v1.2
requirements:
  ResourceRequirement:
    coresMin: 16
    tmpdirMin: 716800          # 700 GiB expressed in MiB
baseCommand: [bash, -c]
arguments:
  - |
    set -euo pipefail

    # samtools: -T sets the temp-file prefix
    samtools sort -T /tmp/sort_buffer input.bam -o sorted.bam

    # GATK / Picard: --TMP_DIR flag (older Picard uses TMP_DIR=/tmp)
    gatk MarkDuplicates -I sorted.bam -O dedup.bam --TMP_DIR /tmp

    # STAR: --outTmpDir (path must not pre-exist; STAR creates it)
    STAR --runThreadN 16 --readFilesIn reads.fastq --outTmpDir /tmp/star_tmp --outFileNamePrefix out_

    # bcftools sort: -T / --temp-dir
    bcftools sort -T /tmp input.vcf -o sorted.vcf

    # GNU sort: -T / --temporary-directory
    sort -T /tmp big_table.tsv -o sorted_table.tsv
```

------

### 支援的大小
<a name="ephemeral-storage-supported-sizes"></a>

請求的大小會四捨五入至最接近的 16 GiB 增量，從預設值 16 GiB (16、32、48、64、... 到 3，072 GiB) 開始。每個任務支援的大小上限為 3，072 GiB。

如果請求的大小超過 3，072 GiB，HealthOmics 會佈建 3，072 GiB，並將警告寫入執行日誌。任務不會自動失敗。

**注意**  
對於表達式型`disk`指示詞 - 例如 Nextflow 關閉或 WDL 表達`disks: ceil(size(input_bam, "GiB") * 2.5)`式 - 值會在執行時間評估，而不是在 評估`CreateWorkflow`。如果評估的大小超過 3，072 GiB，任務會在執行時間失敗，並收取到該時間點之前產生的任何運算成本。

### 支援的 WDL `disks`表單
<a name="ephemeral-storage-wdl-disks"></a>

如需已接受 WDL `disks`表單的完整清單，請參閱 [支援的 WDL `disks`表單](workflow-languages-wdl.md#workflow-wdl-disks-forms)。

### 使用 Nextflow 暫存指令
<a name="ephemeral-storage-nextflow-scratch"></a>

對於 Nextflow 工作流程，您可以使用 `scratch`指令來控制程序寫入臨時工作檔案的位置。如需支援的值和暫時性儲存的建議用量資訊，請參閱 [在 Nextflow 中有效率地使用暫存儲存](workflow-definition-nextflow.md#nextflow-scratch-storage)。

## 監控暫時性儲存
<a name="ephemeral-storage-monitoring"></a>

HealthOmics 會將每個任務的暫時性儲存指標寫入 CloudWatch 資訊清單日誌。指標包括每個任務的佈建磁碟區大小 （如 `scratchStorageReservedGiB`) 和用量 （如 `scratchStorageUtilizedGiB`) 的每個任務暫時性儲存資料。檢閱資訊清單日誌，以判斷任務是否過度佈建或佈建不足，而不直接查詢 CloudWatch。如需資訊清單日誌的詳細資訊，請參閱 [使用 CloudWatch Logs 監控 HealthOmics](monitoring-cloudwatch-logs.md)。

## 暫時性儲存的計費方式
<a name="ephemeral-storage-billing"></a>

您只需為佈建超過預設配置的暫時性儲存付費。您`disk`指令中超過預設值的請求會四捨五入至最接近支援的層。

GPU 執行個體在執行個體定價中已考慮暫時性儲存。GPU 任務上的暫時性儲存不收取額外費用。

## 考量和限制
<a name="ephemeral-storage-considerations"></a>


| 考量事項 | 詳細資訊 | 
| --- | --- | 
| 暫時性儲存不是持久性 | 當任務終止時，一律會刪除暫時性儲存磁碟區。中的資料/tmp不會儲存、匯出或供後續任務或執行使用。暫時性儲存/tmp上的 資料不能是任務輸出或工作流程輸出；這會導致執行時間失敗。 | 
| 事件儲存不會跨任務共用 | 每個任務都會收到自己的隔離暫時性儲存磁碟區。任務無法存取彼此的/tmp目錄。必須在任務之間共用的資料必須寫入共用執行檔案系統。 | 
| 無法調整儲存體大小的中任務 | 儲存體大小會在任務開始時修正。您無法在任務執行時增加或減少配置的儲存體。 | 
| 工作目錄暫存不會自動重新導向 | 將暫存寫入工作目錄的工作流程，例如 ./、 input/或 out/ ，不會自動受益。更新您的工作流程，將暫存 I/O 重新導向至 /tmp或 $TMPDIR。 | 
| 擷取資料未/tmp如預期寫入至 | 確保您的任務程序明確寫入 ，/tmp並且您的任務命令尚未映射$TMPDIR到另一個位置。 | 
| GPU 執行個體一律使用暫時性儲存 | GPU 任務一律掛/tmp載在本機 NVMe 執行個體存放區上。scratchStorageMode 將 設定為 SHARED不會停用 GPU 任務的暫時性儲存。 | 
| GPU 執行個體：NVMe 容量已修正 | GPU 執行個體不支援自訂磁碟大小。HealthOmics 會忽略disk指令，並為執行個體類型提供預設 NVMe 容量。 | 
| 每個任務最多 3，072 GiB (CPU) | 超過 3，072 GiB 的請求會佈建為 3，072 GiB，並顯示執行日誌警告。任務不會失敗。 | 
| 僅限支援的層 (CPU) | 請求的大小會四捨五入至最接近的 16 GiB 增量 (16、32、48、64、...最多 3，072 GiB)。 | 
| 執行時間評估的表達式型指令 | disk 從表達式計算的值會在任務開始時驗證，而不是在 驗證CreateWorkflow。如果任務在執行時間失敗，則會收取截至該時間點的運算成本。 | 
| SHARED 模式會忽略所有磁碟指令 （僅限 CPU) | 當 scratchStorageMode為 SHARED時，CPU 任務會忽略 tmpdirMin、、 disk和同等指令。未佈建本機儲存磁碟區。GPU 任務不受影響，一律使用本機 NVMe。 | 

## 暫時性儲存的故障診斷
<a name="ephemeral-storage-troubleshooting"></a>

### 任務因耗盡的暫時性儲存而失敗
<a name="ephemeral-storage-ts-exhausted"></a>

當暫時性儲存達到容量時，任務會失敗。檢閱您的 CloudWatch 資訊清單日誌，以判斷任務實際使用的儲存空間，然後新增或增加`disk`指令以請求更大的層。

```
# Before: 4-vCPU task using the 16 GiB default
runtime { cpu: 4 }

# After: explicitly request 400 GiB
runtime { cpu: 4, disks: "400 GiB" }
```

### 似乎未使用暫時性儲存體
<a name="ephemeral-storage-ts-not-used"></a>

呼叫 `GetRun`並檢查 `scratchStorageMode` 欄位。如果值為 `SHARED`，則不會為該執行啟用暫時性儲存。在下次`start-run`呼叫`--scratch-storage-mode LOCAL`時設定 。

```
aws omics get-run --id {{run-id}}
```