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.
Escribir definiciones de flujos de trabajo para HealthOmics flujos de trabajo
HealthOmics admite definiciones de flujos de trabajo escritas en WDL, Nextflow o CWL. Para obtener más información sobre estos lenguajes de flujo de trabajo, consulte las especificaciones de WDL, Nextflow
HealthOmics admite la administración de versiones para los tres lenguajes de definición de flujos de trabajo. Para obtener más información, consulte Soporte de versiones para lenguajes de definición HealthOmics de flujos de trabajo .
Temas
Escribir flujos de trabajo en WDL
En las tablas siguientes se muestra cómo las entradas de la WDL se asignan al tipo primitivo o al tipo JSON complejo coincidente. La coerción de tipos es limitada y, siempre que sea posible, los tipos deben ser explícitos.
Tipo WDL | Tipo JSON | Ejemplo de WDL | Ejemplo de clave y valor de JSON | Notas |
---|---|---|---|---|
Boolean |
boolean |
Boolean b |
"b": true |
El valor debe estar en minúsculas y sin comillas. |
Int |
integer |
Int i |
"i": 7 |
No debe estar entre comillas. |
Float |
number |
Float f |
"f": 42.2 |
No debe estar entre comillas. |
String |
string |
String s |
"s": "characters" |
Las cadenas JSON que son un URI deben asignarse a un archivo WDL para importarlas. |
File |
string |
File f |
"f": "s3://amzn-s3-demo-bucket1/path/to/file" |
Amazon S3 y el HealthOmics almacenamiento URIs se importan siempre que la función de IAM proporcionada para el flujo de trabajo tenga acceso de lectura a estos objetos. No se admite ningún otro esquema de URI (como file:// https:// , yftp:// ). El URI debe especificar un objeto. No puede ser un directorio, lo que significa que no puede terminar con un/ . |
Directory |
string |
Directory d |
"d": "s3://bucket/path/" |
El Directory tipo no está incluido en WDL 1.0 ni 1.1, por lo que tendrá que añadirlo version development al encabezado del archivo WDL. El URI debe ser un URI de Amazon S3 y tener un prefijo que termine en «/». Todo el contenido del directorio se copiará de forma recursiva en el flujo de trabajo como una sola descarga. Solo Directory debe contener archivos relacionados con el flujo de trabajo. |
Los tipos complejos de la WDL son estructuras de datos compuestas por tipos primitivos. Las estructuras de datos, como las listas, se convertirán en matrices.
Tipo WDL | Tipo JSON | Ejemplo de WDL | Ejemplo de clave y valor de JSON | Notas |
---|---|---|---|---|
Array |
array |
Array[Int] nums |
“nums": [1, 2, 3] |
Los miembros de la matriz deben seguir el formato del tipo de matriz WDL. |
Pair |
object |
Pair[String, Int] str_to_i |
“str_to_i": {"left": "0", "right": 1} |
Cada valor del par debe usar el formato JSON del tipo de WDL correspondiente. |
Map |
object |
Map[Int, String] int_to_string |
"int_to_string": { 2: "hello", 1: "goodbye" } |
Cada entrada del mapa debe usar el formato JSON del tipo de WDL correspondiente. |
Struct |
object |
|
|
Los nombres de los miembros de la estructura deben coincidir exactamente con los nombres de las claves de los objetos JSON. Cada valor debe usar el formato JSON del tipo WDL correspondiente. |
Object |
N/A | N/A | N/A | El Object tipo WDL está desactualizado y debe sustituirse por él Struct en todos los casos. |
El motor HealthOmics de flujo de trabajo no admite parámetros de entrada cualificados o espaciados por nombres. El lenguaje de la WDL no especifica el manejo de los parámetros calificados y su asignación a los parámetros de la WDL y puede resultar ambigua. Por estos motivos, la mejor práctica consiste en declarar todos los parámetros de entrada en el archivo de definición del flujo de trabajo de nivel superior (principal) y pasarlos a las llamadas de los subflujos de trabajo mediante los mecanismos de WDL estándar.
Escribir flujos de trabajo en Nextflow
HealthOmics es compatible con Nextflow y. DSL1 DSL2 Para obtener más información, consulte Compatibilidad con la versión de Nextflow.
Nextflow DSL2 se basa en el lenguaje de programación Groovy, por lo que los parámetros son dinámicos y la coerción de tipos es posible utilizando las mismas reglas que Groovy. Los parámetros y valores proporcionados por el JSON de entrada están disponibles en el mapa de parámetros () params
del flujo de trabajo.
Temas
Uso de los complementos nf-schema y nf-validation
nota
Resumen del soporte para complementos HealthOmics :
v22.04: no hay soporte para complementos
v23.10: admite y
nf-schema
nf-validation
v24.10 — admite
nf-schema
HealthOmics proporciona el siguiente soporte para los complementos de Nextflow:
-
Para la versión 23.10 de Nextflow, HealthOmics preinstala el complemento nf-validation @1 .1.1.
-
Para Nextflow v23.10 y versiones posteriores, preinstala el complemento nf-schema @2 .3.0. HealthOmics
-
No puede recuperar complementos adicionales durante la ejecución de un flujo de trabajo. HealthOmics ignora cualquier otra versión del complemento que especifique en el
nextflow.config
archivo. -
Para Nextflow v24 y versiones posteriores,
nf-schema
es la nueva versión del complemento obsoleto.nf-validation
Para obtener más información, consulte nf-schema en el repositorio de Nextflow. GitHub
Especificar el almacenamiento URIs
Cuando se utiliza un Amazon S3 o un HealthOmics URI para crear un archivo o un objeto de ruta de Nextflow, el objeto coincidente está disponible para el flujo de trabajo, siempre y cuando se conceda el acceso de lectura. Se permite el uso de prefijos o directorios en Amazon S3 URIs. Para ver ejemplos, consulta Formatos de parámetros de entrada de Amazon S3.
HealthOmics admite el uso de patrones globales en Amazon S3 URIs o HealthOmics Storage URIs. Utilice patrones globales en la definición del flujo de trabajo para la creación de nuestros canalespath
. file
Establecer la duración máxima de la tarea mediante directivas de tiempo
HealthOmics proporciona una cuota ajustable (consulteHealthOmics cuotas de servicio) para especificar la duración máxima de una ejecución. Para los flujos de trabajo de las versiones 23 y 24 de Nextflow, también puede especificar la duración máxima de las tareas mediante las directivas horarias de Nextflow.
Durante el desarrollo de un nuevo flujo de trabajo, establecer la duración máxima de las tareas te ayuda a atrapar las tareas fuera de control y las tareas de larga duración.
Para obtener más información sobre la directiva horaria de Nextflow, consulta la directiva horaria en la referencia
HealthOmics proporciona el siguiente soporte para las directivas horarias de Nextflow:
-
HealthOmics admite una granularidad de 1 minuto para la directiva horaria. Puede especificar un valor entre 60 segundos y el valor de duración máxima de la ejecución.
-
Si introduce un valor inferior a 60, lo HealthOmics redondea a 60 segundos. Para valores superiores a 60, HealthOmics redondea al minuto más cercano.
-
Si el flujo de trabajo admite reintentos para una tarea, HealthOmics reintenta la tarea si se agota el tiempo de espera.
-
Si se agota el tiempo de espera de una tarea (o se agota el tiempo de espera del último reintento), HealthOmics cancela la tarea. Esta operación puede tener una duración de uno a dos minutos.
-
Cuando se agota el tiempo de espera de la tarea, HealthOmics establece el estado de ejecución y tarea como fallido y cancela las demás tareas en ejecución (para las tareas en estado Iniciativo, Pendiente o En ejecución). HealthOmics exporta los resultados de las tareas que completó antes de que se agotara el tiempo de espera a la ubicación de salida de S3 que haya designado.
-
El tiempo que una tarea pasa en estado pendiente no se tiene en cuenta para la duración de la tarea.
-
Si la ejecución forma parte de un grupo de ejecución y se agota el tiempo de espera antes que el temporizador de la tarea, la ejecución y la tarea pasan al estado fallido.
Especifique la duración del tiempo de espera mediante una o más de las siguientes unidades:ms
,s
, m
h
, od
. Puede especificar las directivas de tiempo en el archivo de configuración de Nextflow y en la definición del flujo de trabajo. La siguiente lista muestra el orden de prioridad, de menor a mayor prioridad:
-
Configuración global en el archivo de configuración.
-
Sección de tareas de la definición del flujo de trabajo.
-
Selectores específicos de la tarea en el archivo de configuración.
El siguiente ejemplo muestra cómo especificar la configuración global en el archivo de configuración de Nextflow. Establece un tiempo de espera global de 1 hora y 30 minutos:
process { time = '1h30m' }
El siguiente ejemplo muestra cómo especificar una directiva horaria en la sección de tareas de la definición del flujo de trabajo. En este ejemplo se establece un tiempo de espera de 3 días, 5 horas y 4 minutos. Este valor tiene prioridad sobre el valor global en el archivo de configuración, pero no tiene prioridad sobre una directiva de tiempo específica de la tarea en el archivo de my_label
configuración:
process myTask { label 'my_label' time '3d5h4m' script: """ your-command-here """ }
El siguiente ejemplo muestra cómo especificar las directivas horarias específicas de la tarea en el archivo de configuración de Nextflow, en función de los selectores de nombres o etiquetas. En este ejemplo, se establece un valor de tiempo de espera global de la tarea de 30 minutos. Establece un valor de 2 horas para la tarea myTask
y establece un valor de 3 horas para las tareas con etiquetamy_label
. Para las tareas que coinciden con el selector, estos valores tienen prioridad sobre el valor global y el valor de la definición del flujo de trabajo:
process { time = '30m' withLabel: 'my_label' { time = '3h' } withName: 'myTask' { time = '2h' } }
Exportación del contenido de la tarea
Para los flujos de trabajo escritos en Nextflow, defina una directiva PublishDir para exportar el contenido de las tareas a su bucket de salida de Amazon S3. Como se muestra en el siguiente ejemplo, defina el valor PublishDir en. /mnt/workflow/pubdir
Para exportar archivos a Amazon S3, los archivos deben estar en este directorio.
nextflow.enable.dsl=2 workflow { CramToBamTask(params.ref_fasta, params.ref_fasta_index, params.ref_dict, params.input_cram, params.sample_name) ValidateSamFile(CramToBamTask.out.outputBam) } process CramToBamTask { container "<account>.dkr.ecr.us-west-2.amazonaws.com/genomes-in-the-cloud" publishDir "/mnt/workflow/pubdir" input: path ref_fasta path ref_fasta_index path ref_dict path input_cram val sample_name output: path "${sample_name}.bam", emit: outputBam path "${sample_name}.bai", emit: outputBai script: """ set -eo pipefail samtools view -h -T $ref_fasta $input_cram | samtools view -b -o ${sample_name}.bam - samtools index -b ${sample_name}.bam mv ${sample_name}.bam.bai ${sample_name}.bai """ } process ValidateSamFile { container "<account>.dkr.ecr.us-west-2.amazonaws.com/genomes-in-the-cloud" publishDir "/mnt/workflow/pubdir" input: file input_bam output: path "validation_report" script: """ java -Xmx3G -jar /usr/gitc/picard.jar \ ValidateSamFile \ INPUT=${input_bam} \ OUTPUT=validation_report \ MODE=SUMMARY \ IS_BISULFITE_SEQUENCED=false """ }
Flujos de trabajo de escritura en CWL
Los flujos de trabajo escritos en Common Workflow Language, o CWL, ofrecen una funcionalidad similar a los flujos de trabajo escritos en WDL y Nextflow. Puede utilizar Amazon S3 o el HealthOmics almacenamiento URIs como parámetros de entrada.
Si define la entrada en un archivo secundario de un subflujo de trabajo, añada la misma definición en el flujo de trabajo principal.
HealthOmics los flujos de trabajo no admiten los procesos de operación. Para obtener más información sobre los procesos operativos en los flujos de trabajo de CWL, consulte la documentación de CWL
Para convertir un archivo de definición de flujo de trabajo de CWL existente y utilizarlo HealthOmics, realice los siguientes cambios:
-
Sustituya todos los contenedores URIs de Docker por Amazon URIs ECR.
-
Asegúrese de que todos los archivos del flujo de trabajo estén declarados en el flujo de trabajo principal como entrada y de que todas las variables estén definidas de forma explícita.
-
Asegúrese de que todo el JavaScript código cumpla con el modo estricto.
Los flujos de trabajo de CWL deben definirse para cada contenedor utilizado. No se recomienda codificar de forma rígida la entrada de DockerPull con una URI de Amazon ECR fija.
El siguiente es un ejemplo de un flujo de trabajo escrito en CWL.
cwlVersion: v1.2 class: Workflow inputs: in_file: type: File secondaryFiles: [.fai] out_filename: string docker_image: string outputs: copied_file: type: File outputSource: copy_step/copied_file steps: copy_step: in: in_file: in_file out_filename: out_filename docker_image: docker_image out: [copied_file] run: copy.cwl
El siguiente archivo define la copy.cwl
tarea.
cwlVersion: v1.2 class: CommandLineTool baseCommand: cp inputs: in_file: type: File secondaryFiles: [.fai] inputBinding: position: 1 out_filename: type: string inputBinding: position: 2 docker_image: type: string outputs: copied_file: type: File outputBinding: glob: $(inputs.out_filename) requirements: InlineJavascriptRequirement: {} DockerRequirement: dockerPull: "$(inputs.docker_image)"
El siguiente es un ejemplo de un flujo de trabajo escrito en CWL con un requisito de GPU.
cwlVersion: v1.2 class: CommandLineTool baseCommand: ["/bin/bash", "docm_haplotypeCaller.sh"] $namespaces: cwltool: http://commonwl.org/cwltool# requirements: cwltool:CUDARequirement: cudaDeviceCountMin: 1 cudaComputeCapability: "nvidia-tesla-t4" cudaVersionMin: "1.0" InlineJavascriptRequirement: {} InitialWorkDirRequirement: listing: - entryname: 'docm_haplotypeCaller.sh' entry: | nvidia-smi --query-gpu=gpu_name,gpu_bus_id,vbios_version --format=csv inputs: [] outputs: []
Ejemplo de definición de flujo de trabajo
El siguiente ejemplo muestra la misma definición de flujo de trabajo en WDL, Nextflow y CWL.
Ejemplo de definición de flujo de trabajo de WDL
Los siguientes ejemplos muestran las definiciones de flujos de trabajo privados para convertir de CRAM
a BAM
en WDL. El BAM
flujo de trabajo CRAM
to define dos tareas y utiliza herramientas del genomes-in-the-cloud
contenedor, como se muestra en el ejemplo y está disponible públicamente.
El siguiente ejemplo muestra cómo incluir el contenedor Amazon ECR como parámetro. Esto permite HealthOmics verificar los permisos de acceso a su contenedor antes de que comience la ejecución.
{ ... "gotc_docker":"<account_id>.dkr.ecr.<region>.amazonaws.com/genomes-in-the-cloud:2.4.7-1603303710" }
En el siguiente ejemplo, se muestra cómo especificar los archivos que se van a utilizar en la ejecución cuando los archivos se encuentran en un bucket de Amazon S3.
{ "input_cram": "s3://amzn-s3-demo-bucket1/inputs/NA12878.cram", "ref_dict": "s3://amzn-s3-demo-bucket1/inputs/Homo_sapiens_assembly38.dict", "ref_fasta": "s3://amzn-s3-demo-bucket1/inputs/Homo_sapiens_assembly38.fasta", "ref_fasta_index": "s3://amzn-s3-demo-bucket1/inputs/Homo_sapiens_assembly38.fasta.fai", "sample_name": "NA12878" }
Si desea especificar archivos de un almacén de secuencias, indíquelo como se muestra en el siguiente ejemplo, utilizando el URI del almacén de secuencias.
{ "input_cram": "omics://429915189008.storage.us-west-2.amazonaws.com/111122223333/readSet/4500843795/source1", "ref_dict": "s3://amzn-s3-demo-bucket1/inputs/Homo_sapiens_assembly38.dict", "ref_fasta": "s3://amzn-s3-demo-bucket1/inputs/Homo_sapiens_assembly38.fasta", "ref_fasta_index": "s3://amzn-s3-demo-bucket1/inputs/Homo_sapiens_assembly38.fasta.fai", "sample_name": "NA12878" }
A continuación, puede definir su flujo de trabajo en WDL, tal y como se muestra a continuación.
version 1.0 workflow CramToBamFlow { input { File ref_fasta File ref_fasta_index File ref_dict File input_cram String sample_name String gotc_docker = "<account>.dkr.ecr.us-west-2.amazonaws.com/genomes-in-the- cloud:latest" } #Converts CRAM to SAM to BAM and makes BAI. call CramToBamTask{ input: ref_fasta = ref_fasta, ref_fasta_index = ref_fasta_index, ref_dict = ref_dict, input_cram = input_cram, sample_name = sample_name, docker_image = gotc_docker, } #Validates Bam. call ValidateSamFile{ input: input_bam = CramToBamTask.outputBam, docker_image = gotc_docker, } #Outputs Bam, Bai, and validation report to the FireCloud data model. output { File outputBam = CramToBamTask.outputBam File outputBai = CramToBamTask.outputBai File validation_report = ValidateSamFile.report } } #Task definitions. task CramToBamTask { input { # Command parameters File ref_fasta File ref_fasta_index File ref_dict File input_cram String sample_name # Runtime parameters String docker_image } #Calls samtools view to do the conversion. command { set -eo pipefail samtools view -h -T ~{ref_fasta} ~{input_cram} | samtools view -b -o ~{sample_name}.bam - samtools index -b ~{sample_name}.bam mv ~{sample_name}.bam.bai ~{sample_name}.bai } #Runtime attributes: runtime { docker: docker_image } #Outputs a BAM and BAI with the same sample name output { File outputBam = "~{sample_name}.bam" File outputBai = "~{sample_name}.bai" } } #Validates BAM output to ensure it wasn't corrupted during the file conversion. task ValidateSamFile { input { File input_bam Int machine_mem_size = 4 String docker_image } String output_name = basename(input_bam, ".bam") + ".validation_report" Int command_mem_size = machine_mem_size - 1 command { java -Xmx~{command_mem_size}G -jar /usr/gitc/picard.jar \ ValidateSamFile \ INPUT=~{input_bam} \ OUTPUT=~{output_name} \ MODE=SUMMARY \ IS_BISULFITE_SEQUENCED=false } runtime { docker: docker_image } #A text file is generated that lists errors or warnings that apply. output { File report = "~{output_name}" } }