View a markdown version of this page

Almacenamiento efímero para HealthOmics tareas de flujo de trabajo - AWS HealthOmics

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.

Almacenamiento efímero para HealthOmics tareas de flujo de trabajo

HealthOmics proporciona almacenamiento efímero para las tareas de flujo de trabajo mediante el directorio. /tmp Este almacenamiento es temporal y exclusivo para cada tarea de un flujo de trabajo. HealthOmics asigna 16 GiB de almacenamiento efímero a cada instancia de tarea de forma predeterminada. Puedes aumentar la cantidad de almacenamiento efímero asignada a las tareas individuales en tu definición de flujo de trabajo, hasta un máximo de 3072 GiB por tarea. Todos los datos almacenados se cifran en reposo/tmp.

Ventajas principales

  • Ejecución de tareas más rápida: el almacenamiento efímero puede mejorar el rendimiento de la ejecución al reducir el sistema de archivos compartido. I/O

  • Rendimiento predecible: las tareas no compiten por el ancho de I/O banda con otras tareas que se ejecutan simultáneamente, lo que reduce la variabilidad y la limitación asociadas a un sistema de archivos de red compartido.

  • Menores costos: la ejecución más rápida de las tareas reduce directamente el tiempo de procesamiento y el costo de las tareas I/O vinculadas que se utilizan. /tmp En el caso de las ejecuciones que utilizan el almacenamiento de ejecución estático, esto puede reducir la cantidad de almacenamiento de ejecución aprovisionado que necesita. Las ejecuciones dinámicas no requieren cambios.

Cómo funciona el almacenamiento efímero

Al habilitar el almacenamiento efímero, HealthOmics monta un volumen de almacenamiento local dedicado /tmp para cada instancia de tarea de flujo de trabajo. El almacenamiento efímero está destinado a los archivos temporales generados durante la ejecución de la tarea. Los volúmenes de almacenamiento efímero siempre se eliminan cuando finaliza la tarea. Los datos en los que /tmp se escribe no se conservan, no se exportan ni son accesibles para otras tareas o ejecuciones posteriores.

Donde los flujos de trabajo escriben archivos temporales

Los flujos de trabajo se benefician del almacenamiento efímero cuando los procesos de tareas se dirigen directamente desde cero. I/O /tmp Los lenguajes de flujo de trabajo bioinformáticos utilizan el /tmp directorio (y las $TMP variables de $TMPDIR entorno) para archivos intermedios temporales y de corta duración durante la ejecución de las tareas. Asegúrese de que los comandos de las tareas no se hayan asignado a otra ubicación$TMPDIR.

Los procesos de tareas de flujo de trabajo que escriben para usar /tmp automáticamente el almacenamiento efímero cuando están habilitados, no requieren cambios en el flujo de trabajo. Los flujos de trabajo que no dirijan explícitamente los procesos desde cero /tmp escribirán los datos desde cero en el directorio de trabajo del sistema de archivos compartido utilizado para el almacenamiento de la ejecución, aunque las herramientas utilizadas pueden aprovechar las ventajas del /tmp almacenamiento efímero.

Cifrado en reposo

Todo el almacenamiento efímero se cifra en reposo mediante una clave gestionada por el servicio. AWS KMS Las instancias de computación acelerada se cifran por hardware con una clave única por volumen que se destruye cuando la instancia termina.

Permisos

HealthOmics administra la conexión y el ciclo de vida de los volúmenes de almacenamiento efímeros en su nombre. No se requieren permisos de IAM adicionales para su función de ejecución de tareas.

Habilitar el almacenamiento efímero

Puedes redirigir Scratch I/O al almacenamiento local configurándolo scratchStorageMode en la StartRun API. La scratchStorageMode configuración se aplica únicamente a las instancias de CPU y a todas las tareas de esa ejecución.

scratchStorageModedetermina dónde escribe el flujo de trabajo los datos desde cero. Valores posibles:

  • LOCAL— El almacenamiento efímero se coloca en el disco local. Scratch I/O cuenta con IOPS y rendimiento dedicados.

  • SHARED— Se usa el sistema de archivos compartido (predeterminado). Scratch I/O compite con el directorio de trabajo.

Para obtener más información, consulte Empieza una carrera en HealthOmics.

nota

Las tareas de la GPU siempre utilizan el almacenamiento efímero local de NVMe para los datos desde cero, y scratchStorageMode siempre LOCAL para las tareas de la GPU.

Opte por el almacenamiento efímero

Para habilitar el almacenamiento efímero para una ejecución, configúralo scratchStorageMode LOCAL al iniciar la ejecución.

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

Para las ejecuciones por lotes, scratchStorageMode transfiérelo. defaultRunSetting La configuración se aplica a todas las ejecuciones del lote.

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

Opte por no utilizar el almacenamiento efímero

Para deshabilitar el almacenamiento efímero para una ejecución específica (por ejemplo, para aislar un error), configúrelo en. 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

Cuando scratchStorageMode es asíSHARED, todas las directivas de la definición del flujo de trabajo disk y las equivalentes se ignoran y el /tmp sistema de archivos compartido las respalda. Esta configuración solo se aplica a las instancias de CPU. Las tareas de GPU siempre utilizan almacenamiento efímero local de NVMe y no se pueden desactivar.

Comprueba el modo efectivo

El almacenamiento efímero está desactivado de forma predeterminada. Cuando scratchStorageMode se omite en una StartRun solicitud, scratchStorageMode se establece en SHARED (predeterminado).

scratchStorageModesolo se devuelve en la GetRun respuesta si se pasó explícitamente en la StartRun solicitud. SHAREDes el valor predeterminado si se omite. Llame GetRun para confirmar el modo de almacenamiento efectivo para una ejecución.

aws omics get-run --id run-id

Asignación de almacenamiento predeterminada

La asignación de almacenamiento efímero predeterminada es de 16 GiB por tarea para todos los tipos de instancias, de procesamiento y Memory-optimized estándar. No es necesario especificar una disk directiva para recibir este valor predeterminado. Para configurar el almacenamiento adicional, utilice la disk directiva. Puedes aumentar la cantidad de almacenamiento efímero asignada a tareas individuales en tu definición de flujo de trabajo, hasta un máximo de 3072 GiB por tarea. Se le factura por el almacenamiento que supere los 16 GiB predeterminados.

El almacenamiento efímero se puede configurar en incrementos de 16 GiB. Para obtener más información, consulte Tamaños compatibles.

Almacenamiento efímero para instancias de computación acelerada

La capacidad de almacenamiento de las instancias de la GPU es fija por tipo de instancia y se proporciona sin costo adicional.

Las tareas de GPU siempre utilizan almacenamiento efímero local de NVMe. La scratchStorageMode configuración activada StartRun no se aplica a las tareas de la GPU y establecer este valor en no SHARED tendrá ningún efecto en las instancias de la GPU. La capacidad es fija para cada tipo de instancia y no se puede personalizar mediante la disk directiva. La capacidad de NVMe viene predeterminada por el tipo de instancia seleccionado para la tarea y cpu acceleratorType los memory requisitos.

Tamaño GPU vCPU Memoria (GiB) G4dn NVMe (T4) G5 NVMe (A10G) G6 NVMe (nivel 4) G6e NVMe (L40)
xlarge1416125 GiB250 GiB250 GiB250 GiB
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

Configuración del tamaño de almacenamiento efímero

Si scratchStorageMode está establecido enLOCAL, puedes solicitar un mayor almacenamiento efímero por tarea mediante la disk directiva (o una equivalente) de tu definición de flujo de trabajo. HealthOmics trata la disk directiva como una sugerencia y proporciona un volumen redondeado a los 16 GiB siguientes. El uso de la disk directiva no afecta a la selección del tipo de instancia. El tipo de instancia se selecciona basándose únicamente en cpumemory, yacceleratorType. Para obtener más información, consulte Recursos de tareas en una definición de flujo de trabajo HealthOmics.

Si no hay ninguna disk directiva, la tarea recibe los 16 GiB predeterminados. Las tareas no pueden tener un almacenamiento efímero inferior al predeterminado.

No es necesario ajustar el tamaño de su almacenamiento efímero para las imágenes extraídas del contenedor, que se contabilizan por separado. Para obtener más información, consulte Imágenes de contenedores para flujos de trabajo privados.

¿Cuándo usar la directiva de disco

Usa la disk directiva en la definición de la tarea cuando el almacenamiento efímero predeterminado para el tipo de instancia elegido no sea suficiente para los requisitos de la tarea. Por ejemplo, cuando una tarea escribe grandes volúmenes de datos en. /tmp

Casos de uso habituales para aumentar el almacenamiento efímero

  1. RNA-Seq Detección de fusiones: RNA-seq los flujos de trabajo generan grandes BAM intermedios y los procesos de tareas suelen requerir que tanto los FASTQ sin procesar como las salidas alineadas estén presentes simultáneamente, lo que requiere discos de memoria virtual de gran tamaño (por ejemplo, 512 GiB por tarea).

  2. Ensamblaje del genoma de Novo: los flujos de trabajo de Long-read ensamblaje necesitan grandes volúmenes desde cero para procesar las lecturas sin procesar y los artefactos de ensamblaje temporales que se reescriben y reorganizan repetidamente antes de su salida. Estas tareas requieren un uso intensivo de memoria y disco y, a veces, requieren varios TiB de almacenamiento efímero.

  3. Procesamiento de llamadas variantes/BAM: los flujos de trabajo de llamadas de variantes requieren una cantidad considerable de almacenamiento desde cero para las etapas de alineación y clasificación que leen y reescriben repetidamente archivos BAM o CRAM de gran tamaño. Las necesidades de almacenamiento efímero suelen ser de cientos de GiB.

Sintaxis de directivas por motor

En la siguiente tabla se muestra la directiva equivalente para cada lenguaje de flujo de trabajo.

Motor Directiva Ejemplo
WDL 1.1 disks disks: "/tmp 700 GiB"
Nextflow disk disk '700 GB'
CWL tmpdirMin tmpdirMin: 716800(valor en MiB)

Los siguientes ejemplos muestran cómo configurar una tarea que solicita 700 GiB de almacenamiento efímero. HealthOmics lo redondea hasta el nivel de 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

Para obtener más información sobre la sintaxis de directivas admitida, consulte Características específicas de la definición del flujo de trabajo de W yEspecificaciones de la definición del flujo de trabajo de Next.

Ejemplo: dimensionamiento de disco basado en expresiones

En lugar de un tamaño fijo, puedes establecer la disk directiva en una expresión que el motor de flujo de trabajo evalúe para cada tarea en tiempo de ejecución. El siguiente proceso de Nextflow utiliza un cierre que escala la solicitud según el número de intentos de tarea. Si la tarea falla por cualquier motivo y Nextflow la vuelve a intentar, el reintento solicita un volumen mayor.

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)

El motor de flujo de trabajo evalúa la expresión para cada intento de tarea. HealthOmics a continuación, redondea el tamaño resuelto al siguiente incremento de 16 GiB.

nota

Como el motor resuelve la expresión en tiempo de ejecución, HealthOmics no puede comprobar el tamaño en. CreateWorkflow HealthOmics limita un tamaño evaluado superior a 3072 GiB cuando se inicia la tarea. Para obtener más información, consulte Tamaños compatibles.

Herramientas bioinformáticas comunes y almacenamiento efímero

Muchas herramientas bioinformáticas escriben archivos temporales de gran tamaño durante la ejecución. Cuando scratchStorageMode esté configurado enLOCAL, redirija estas herramientas para usarlas de /tmp forma que Scratch I/O vaya al volumen local rápido en lugar de al sistema de archivos de ejecución compartida. En los siguientes ejemplos se muestran los indicadores correspondientes a las herramientas de uso habitual.

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

Tamaños compatibles

Los tamaños solicitados se redondean al incremento de 16 GiB más cercano, partiendo del valor predeterminado de 16 GiB (16, 32, 48, 64,... hasta 3072 GiB). El tamaño máximo admitido es de 3072 GiB por tarea.

Si el tamaño solicitado supera los 3072 GiB, HealthOmics aprovisiona 3072 GiB y escribe una advertencia en el registro de ejecución. La tarea no falla automáticamente.

nota

En el caso de disk las directivas basadas en expresiones, como las que cierran Nextflow o las expresiones WDL, el valor se evalúa en tiempo de ejecución, no en. disks: ceil(size(input_bam, "GiB") * 2.5) CreateWorkflow Si el tamaño evaluado supera los 3072 GiB, la tarea fallará durante el tiempo de ejecución y se cobrarán los costes informáticos incurridos hasta ese momento. Para ver un ejemplo, consulta Ejemplo: dimensionamiento de disco basado en expresiones.

Formularios de discos WDL compatibles

Para ver la lista completa de los disks formularios WDL aceptados, consulte. Formularios de discos WDL compatibles

Uso de la directiva Scratch de Nextflow

En el caso de los flujos de trabajo de Nextflow, puedes usar la scratch directiva para controlar dónde escriben los procesos los archivos de trabajo temporales. Para obtener información sobre los valores admitidos y el uso recomendado con el almacenamiento efímero, consulte. Cómo usar el almacenamiento desde cero de manera eficiente en Nextflow

Supervisar el almacenamiento efímero

HealthOmics escribe métricas de almacenamiento efímero por tarea en los registros de manifiesto. CloudWatch Las métricas incluyen datos de almacenamiento efímero por tarea sobre el tamaño del volumen (asscratchStorageReservedGiB) y el uso (as) del volumen aprovisionado para cada tarea. scratchStorageUtilizedGiB Revisa el registro del manifiesto para determinar si las tareas se aprovisionaron en exceso o de forma insuficiente sin consultarlas directamente. CloudWatch Para obtener más información sobre los registros de manifiestos, consulte. Supervisión HealthOmics con CloudWatch registros

Cómo se factura el almacenamiento efímero

Solo se le factura por el almacenamiento efímero aprovisionado por encima de la asignación predeterminada. Las solicitudes que superen el valor predeterminado de tu disk directiva se redondean al nivel admitido más cercano.

El almacenamiento efímero de las instancias de GPU ya está incluido en el precio de las instancias. No se aplica ningún cargo adicional por el almacenamiento efímero en las tareas de GPU.

Consideraciones y limitaciones

Consideración Detalle
El almacenamiento efímero no es persistente Los volúmenes de almacenamiento efímeros siempre se eliminan cuando finaliza la tarea. Los datos /tmp introducidos no se guardan, exportan ni están disponibles para tareas o ejecuciones posteriores. Los datos del almacenamiento efímero no pueden ser el resultado de una tarea o de un flujo de trabajo; esto provocará un error en el tiempo de ejecución. /tmp
El almacenamiento efímero no se comparte entre las tareas Cada tarea recibe su propio volumen de almacenamiento efímero aislado. Las tareas no pueden acceder a los directorios de las demás. /tmp Los datos que se deben compartir entre las tareas se deben escribir en el sistema de archivos de ejecución compartida.
No se puede cambiar el tamaño del almacenamiento a mitad de la tarea El tamaño de almacenamiento es fijo al inicio de la tarea. No puede aumentar ni disminuir el almacenamiento asignado mientras se ejecuta una tarea.
Working-directory scratch no se redirige automáticamente Los flujos de trabajo que escriben desde cero en el directorio de trabajo (por ejemplo input/./,out/, o) no se benefician automáticamente. Actualice su flujo de trabajo para redirigir Scratch I/O a /tmp o$TMPDIR.
Los datos de Scratch no se escriben /tmp como se esperaba Asegúrese de que sus procesos de tareas escriban explícitamente en otra ubicación /tmp y de que los comandos de las tareas no se hayan asignado $TMPDIR a otra ubicación.
Las instancias de GPU siempre utilizan almacenamiento efímero Las tareas de GPU siempre se montan /tmp en el almacén de instancias de NVMe local. Si se establece scratchStorageMode en, SHARED no se inhabilita el almacenamiento efímero para las tareas de la GPU.
Instancias de GPU: la capacidad de NVMe es fija El tamaño de disco personalizado no se admite en las instancias de GPU. HealthOmics ignora disk las directivas y proporciona la capacidad de NVMe predeterminada para el tipo de instancia.
Máximo 3.072 GiB por tarea (CPU) Las solicitudes que superen los 3072 GiB se aprovisionan a 3072 GiB con una advertencia de registro de ejecución. Las tareas no fallan.
Solo niveles compatibles (CPU) Los tamaños solicitados se redondean al incremento de 16 GiB más cercano (16, 32, 48, 64,... hasta 3072 GiB).
Expression-based directivas evaluadas en tiempo de ejecución disklos valores calculados a partir de expresiones se validan al inicio de la tarea, no alCreateWorkflow. Los costos de procesamiento hasta ese momento se cobran si la tarea falla durante el tiempo de ejecución.
SHAREDel modo ignora todas las directivas del disco (solo la CPU) Las directivas scratchStorageMode SHARED When isdisk,tmpdirMin, y equivalentes se ignoran en las tareas de CPU. No se aprovisiona ningún volumen de almacenamiento local. Las tareas de la GPU no se ven afectadas, ya que siempre utilizan NVMe local.

Solución de problemas de almacenamiento efímero

La tarea falla cuando se agota el almacenamiento efímero

Una tarea falla cuando el almacenamiento efímero alcanza su capacidad máxima. Revisa tus registros de CloudWatch manifiestos para determinar cuánto almacenamiento utilizó realmente tu tarea y, a continuación, agrega o aumenta la disk directiva para solicitar un nivel mayor.

# Before: 4-vCPU task using the 16 GiB default runtime { cpu: 4 } # After: explicitly request 400 GiB runtime { cpu: 4, disks: "400 GiB" }

No parece que se esté utilizando el almacenamiento efímero

Llame GetRun y compruebe el scratchStorageMode campo. Si el valor esSHARED, el almacenamiento efímero no está habilitado para esa ejecución. Prepara --scratch-storage-mode LOCAL tu próxima start-run llamada.

aws omics get-run --id run-id