View a markdown version of this page

工作流程任务的临时存储 HealthOmics - AWS HealthOmics

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

工作流程任务的临时存储 HealthOmics

HealthOmics 使用该目录为工作流任务提供临时存储。/tmp这种存储是临时的,对于工作流程中的每项任务来说都是独一无二的。 HealthOmics 默认情况下,为每个任务实例分配 16 GiB 的临时存储空间。您可以增加工作流程定义中分配给单个任务的临时存储量,每个任务最多可达 3,072 GiB。存储在中的/tmp所有数据都经过静态加密。

主要优势

  • 更快的任务执行:临时存储可以通过减少共享文件系统来提高运行性能。 I/O

  • 可预测的性能:任务不会与其他并行运行的任务争夺 I/O 带宽,从而减少了与共享网络文件系统相关的可变性和限制。

  • 降低成本:更快的任务执行可以直接减少计算时间和所使用的 I/O 绑定任务的成本/tmp。对于使用静态运行存储的运行,这可以减少所需的预置运行存储量。动态运行无需更改。

临时存储的工作原理

当您启用临时存储时,会在每个/tmp工作流程任务 HealthOmics 实例上安装一个专用的本地存储卷。临时存储适用于任务执行期间生成的临时文件。任务终止时,临时存储卷总是会被删除。写入/tmp的数据无法保存、导出,也无法供其他任务或后续运行访问。

工作流程在哪里写入临时文件

当任务进程直接进入时,工作流将受益于临时存储。 I/O /tmp在任务执行期间,生物信息学工作流语言使用/tmp目录(和$TMPDIR环境变量)存储临时的、短暂的中间文件。$TMP确保您的任务命令未映射$TMPDIR到其他位置。

写入的工作流任务进程在启用后/tmp会自动使用临时存储,无需更改工作流程。尽管所使用的工具可能会利用临时存储,但未明确/tmp将暂存进程定向到的工作流程会将暂存数据写入用于运行存储的共享文件系统/tmp上的工作目录。

静态加密

所有临时存储均使用服务管理的密钥进行静态加密。 AWS KMS 加速计算实例使用唯一的每卷密钥进行硬件加密,该密钥将在实例终止时销毁。

Permissions

HealthOmics 代表您管理临时存储卷的附件和生命周期。您的任务执行角色不需要额外的 IAM 权限。

启用临时存储

您可以通过在 StartRun API scratchStorageMode 中 I/O 进行设置将临时重定向到本地存储。该scratchStorageMode设置仅适用于 CPU 实例,适用于该运行中的所有任务。

scratchStorageMode确定您的工作流程写入临时数据的位置。可能的值:

  • LOCAL— 临时存储器放置在本地磁盘上。Scratch I/O 具有专用 IOPS 和吞吐量。

  • SHARED— 使用共享文件系统(默认)。Scrat I/O ch 与工作目录竞争。

有关更多信息,请参阅 开始跑步 HealthOmics。

注意

GPU 任务始终使用本地 NVMe 临时存储来存储临时数据,并且scratchStorageMode始终LOCAL用于 GPU 任务。

选择使用临时存储

要为运行启用临时存储,请将开始运行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"} } ] }'

选择退出临时存储

要禁用特定运行的临时存储(例如,隔离故障),请设置为。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 临时存储,不能选择退出。

检查有效模式

临时存储在默认情况下处于关闭状态。当scratchStorageModeStartRun请求中省略时,设置scratchStorageMode为SHARED(默认)。

scratchStorageMode只有在StartRun请求中明确传递时,才会在GetRun响应中返回。SHARED如果省略,则为默认值。调用GetRun以确认运行的有效存储模式。

aws omics get-run --id run-id

默认存储分配

所有标准、计算和实例类型的默认临时存储分配为每个任务 16 GiB。 Memory-optimized您无需指定指disk令即可接收此默认值。要配置更多存储,请使用该disk指令。您可以增加工作流程定义中分配给单个任务的临时存储量,每个任务最多可达 3,072 GiB。您需要为高于默认 16 GiB 的存储空间付费。

临时存储可以以 16 GiB 为增量进行配置。有关更多信息,请参阅 支持的尺寸。

加速计算实例的临时存储

每种实例类型的 GPU 实例存储容量是固定的,不收取额外费用。

GPU 任务始终使用本地 NVMe 临时存储。开scratchStorageMode启的设置StartRun不适用于 GPU 任务,SHARED将此值设置为不会对 GPU 实例产生任何影响。每个实例类型的容量是固定的,不能使用该disk指令进行自定义。NVMe 容量由为任务cpumemory、和acceleratorType要求选择的实例类型预先确定。

Size GPU vCPU 内存(GiB) G4dn NVMe (T4) G5 NVMe (A10G) G6 NVMe (L4) G6e NVMe (L40S)
xlarge1416125 GiB250GiB250GiB250GiB
2xlarge1832225 GiB450 GiB450 GiB450 GiB
4xlarge11664225 GiB600 GiB600 GiB600 GiB
8xlarge132128900 GiB900 GiB900 GiB900 GiB
12xlarge448192900 GiB3,800 GiB3,760 GiB3,800 GiB
16xlarge164256900 GiB1,900 GiB1,880 GiB1,900 GiB
24xlarge496384—3,800 GiB3,760 GiB3,800 GiB

配置临时存储大小

当设置scratchStorageMode为时LOCAL,您可以使用工作流程定义中的disk指令(或等效指令)请求增加每项任务的临时存储空间。 HealthOmics 将该disk指令视为提示,并规定音量四舍五入到接下来的 16 GiB。该disk指令的使用不会影响实例类型的选择。仅基于cpumemory、和选择实例类型acceleratorType。有关更多信息,请参阅 工作 HealthOmics 流定义中的任务资源。

如果不存在disk指令,则任务将收到默认的 16 GiB。任务的临时存储空间不能小于默认的临时存储空间。

您无需为拉取的容器映像调整临时存储空间的大小,这些映像是单独计算的。有关更多信息,请参阅 私有工作流程的容器镜像。

何时使用磁盘指令

当所选实例类型的默认临时存储空间不足以满足任务要求时,请在任务定义中使用该disk指令。例如,当任务向其中写入大量数据时/tmp。

增加短暂存储的常见应用场景

  1. RNA-Seq 融合检测: RNA-seq 工作流程生成大型中间 BAM,任务流程通常需要同时提供原始 FastQs 和对齐后的输出,需要大型暂存盘(例如,每个任务 512 GiB)。

  2. De Novo Genome Assembly: Long-read 装配工作流程需要大量的暂存量来处理原始读取和临时组装工件,这些数据在输出之前会反复重写和重组。这些任务占用大量内存和磁盘,有时需要多个 TiB 的临时存储。

  3. 变体调用/BAM 处理:变体调用工作流程需要大量的临时存储空间来对齐和排序重复读取和重写大型 BAM 或 CRAM 文件的步骤。临时存储需求通常为数百 GiB。

引擎的指令语法

下表显示了每种工作流程语言的等效指令。

Engine 指令 示例
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 工作流程定义细节和Nextflow 工作流程定义细节。

示例:基于表达式的磁盘大小

您可以将disk指令设置为工作流引擎在运行时为每项任务计算的表达式,而不是固定大小。以下 Nextflow 流程使用闭包,根据任务尝试次数扩展请求。如果任务因任何原因失败且 Nextflow 重试,则重试会请求更大的容量。

process sort_bam { disk { 200.GB * task.attempt } errorStrategy 'retry' maxRetries 2 script: """ samtools sort -T /tmp/sort_buffer ${input} -o ${output} """ } // First attempt requests 200 GiB (provisioned at the 208 GiB tier) // Second attempt requests 400 GiB (provisioned at the 400 GiB tier)

工作流引擎会评估每次任务尝试的表达式。 HealthOmics 然后将解析后的容量四舍五入到接下来的 16 GiB 增量。

注意

由于引擎在运行时解析表达式, HealthOmics 因此无法检查大CreateWorkflow小。 HealthOmics 任务开始时,评估的大小上限为 3,072 GiB 以上。有关更多信息,请参阅 支持的尺寸。

常见的生物信息学工具和临时存储

许多生物信息学工具在执行过程中会写入大型临时文件。当设置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

支持的尺寸

请求的大小从默认的 16 GiB(16、32、48、64,... 最多 3,072 GiB)开始,向上舍入到最接近的 16 GiB 增量。每个任务支持的最大大小为 3,072 GiB。

如果请求的大小超过 3,072 GiB, HealthOmics 则预置 3,072 GiB,并在运行日志中写入警告。任务不会自动失败。

注意

对于基于表达式的disk指令(例如 Nextflow 闭包或 WDL 表达式,如 disks: ceil(size(input_bam, "GiB") * 2.5) WDL 表达式),该值是在运行时计算的,而不是在。CreateWorkflow如果评估的大小超过 3,072 GiB,则任务将在运行时失败,并且将收取在此之前产生的任何计算成本。有关示例,请参阅示例:基于表达式的磁盘大小。

支持的 WDL 磁盘表单

有关可接受的 WDL disks 表格的完整列表,请参阅支持的 WDL 磁盘表单。

使用 Nextflow 临时指令

对于 Nextflow 工作流程,您可以使用该scratch指令来控制进程写入临时工作文件的位置。有关临时存储支持的值和推荐用法的信息,请参阅。在 Nextflow 中高效使用临时存储

监控临时存储

HealthOmics 将每个任务的临时存储指标写入清单日志。 CloudWatch 指标包括每个任务的临时存储数据,包括预置的卷大小(如scratchStorageReservedGiB)和每项任务的使用情况(如scratchStorageUtilizedGiB)。查看清单日志,无需直接查询 CloudWatch ,即可确定任务是配置过度还是配置不足。有关清单日志的详细信息,请参阅HealthOmics 使用 CloudWatch 日志进行监控。

临时存储是如何计费的

您只需为预置的超出默认分配的临时存储量付费。超过disk指令中默认值的请求将四舍五入到最接近的支持等级。

GPU 实例的临时存储已计入实例定价。GPU 任务的临时存储不收取额外费用。

注意事项和限制

考虑因素 Detail
临时存储不是永久性的 任务终止时,临时存储卷总是会被删除。中的/tmp数据无法保存、导出,也无法用于后续任务或运行。临时存储中的/tmp数据不能是任务输出或工作流程输出;这将导致运行时失败。
临时存储不在任务间共享 每项任务都有自己的独立临时存储容量。任务无法访问彼此的/tmp目录。必须在任务之间共享的数据必须写入共享运行文件系统。
任务中无法调整存储空间大小 存储大小在任务启动时是固定的。任务正在运行时,您无法增加或减少分配的存储空间。
Working-directory scratch 不会自动重定向 将草稿写入工作目录(例如、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)。
Expression-based 在运行时评估的指令 disk根据表达式计算的值在任务开始时进行验证,而不是在任务开始时验证CreateWorkflow。如果任务在运行时失败,则会收取在此之前的计算成本。
SHARED模式忽略所有磁盘指令(仅限 CPU) scratchStorageMode对于 CPU 任务 SHARED disktmpdirMin,将忽略 When is、、和等效指令。未配置任何本地存储卷。GPU 任务不受影响,它们始终使用本地 NVMe。

对临时存储进行故障排除

由于临时存储空间耗尽,任务失败

当临时存储容量达到容量时,任务将失败。查看 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" }

临时存储空间似乎未被利用

致电GetRun并检查该scratchStorageMode字段。如果值为SHARED,则不为该次运行启用临时存储。在下次start-run通话--scratch-storage-mode LOCAL时设置。

aws omics get-run --id run-id