Especificidades da definição do fluxo de trabalho do CWL - AWS HealthOmics

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Especificidades da definição do fluxo de trabalho do CWL

Os fluxos de trabalho escritos em Common Workflow Language, ou CWL, oferecem funcionalidade semelhante aos fluxos de trabalho escritos em WDL e Nextflow. Você pode usar o Amazon S3 ou o HealthOmics armazenamento URIs como parâmetros de entrada.

Se você definir a entrada em um SecondaryFile em um subfluxo de trabalho, adicione a mesma definição no fluxo de trabalho principal.

HealthOmics os fluxos de trabalho não oferecem suporte aos processos operacionais. Para saber mais sobre os processos operacionais nos fluxos de trabalho da CWL, consulte a documentação da CWL.

A melhor prática é definir um fluxo de trabalho CWL separado para cada contêiner que você usa. Recomendamos que você não codifique a entrada DockerPull com um URI fixo do Amazon ECR.

Converta fluxos de trabalho CWL para uso HealthOmics

Para converter uma definição de fluxo de trabalho CWL existente para uso HealthOmics, faça as seguintes alterações:

  • Substitua todo o contêiner URIs Docker pelo Amazon URIs ECR.

  • Certifique-se de que todos os arquivos do fluxo de trabalho sejam declarados no fluxo de trabalho principal como entrada e que todas as variáveis estejam definidas explicitamente.

  • Certifique-se de que todo JavaScript código seja uma reclamação de modo estrito.

Opte por não participar da tarefa novamente usando omicsRetryOn5xx

HealthOmics suporta novas tentativas de tarefas se a tarefa falhar devido a erros de serviço (códigos de status HTTP 5XX). Por padrão, HealthOmics tenta até duas tentativas de uma tarefa com falha. Para obter mais informações sobre a repetição de tarefas HealthOmics, consulteTentativas de tarefas.

Para desativar a repetição da tarefa devido a erros de serviço, configure a omicsRetryOn5xx diretiva na definição do fluxo de trabalho. Você pode definir essa diretiva em requisitos ou dicas. Recomendamos adicionar a diretiva como uma dica de portabilidade.

requirements: ResourceRequirement: omicsRetryOn5xx: false hints: ResourceRequirement: omicsRetryOn5xx: false

Os requisitos substituem as dicas. Se a implementação de uma tarefa fornece um requisito de recurso em dicas que também é fornecido pelos requisitos em um fluxo de trabalho envolvente, os requisitos anexos têm precedência.

Se o mesmo requisito de tarefa aparecer em níveis diferentes do fluxo de trabalho, HealthOmics usa a entrada mais específica de requirements (ouhints, se não houver entradasrequirements). A lista a seguir mostra a ordem de precedência HealthOmics usada para aplicar as definições de configuração, da prioridade mais baixa para a mais alta:

  • Nível do fluxo de trabalho

  • Nível de etapa

  • Seção de tarefas da definição do fluxo de trabalho

O exemplo a seguir mostra como configurar a omicsRetryOn5xx diretiva em diferentes níveis do fluxo de trabalho. Neste exemplo, o requisito no nível do fluxo de trabalho substitui as dicas no nível do fluxo de trabalho. As configurações de requisitos nos níveis de tarefa e etapa substituem as configurações de dicas.

class: Workflow # Workflow-level requirement and hint requirements: ResourceRequirement: omicsRetryOn5xx: false hints: ResourceRequirement: omicsRetryOn5xx: false # The value in requirements overrides this value steps: task_step: # Step-level requirement requirements: ResourceRequirement: omicsRetryOn5xx: false # Step-level hint hints: ResourceRequirement: omicsRetryOn5xx: false run: class: CommandLineTool # Task-level requirement requirements: ResourceRequirement: omicsRetryOn5xx: false # Task-level hint hints: ResourceRequirement: omicsRetryOn5xx: false

Repetir uma etapa do fluxo de trabalho

HealthOmics suporta o loop de uma etapa do fluxo de trabalho. Você pode usar loops para executar etapas do fluxo de trabalho repetidamente até que uma condição especificada seja atendida. Isso é útil para processos iterativos em que você precisa repetir uma tarefa várias vezes ou até que um determinado resultado seja alcançado.

Nota: A funcionalidade de loop requer a versão 1.2 ou posterior do CWL. Os fluxos de trabalho usando versões do CWL anteriores à 1.2 não oferecem suporte a operações de loop.

Para usar loops em seu fluxo de trabalho CWL, defina um requisito de loop. O exemplo a seguir mostra a configuração dos requisitos de loop:

requirements: - class: "http://commonwl.org/cwltool#Loop" loopWhen: $(inputs.counter < inputs.max) loop: counter: loopSource: result valueFrom: $(self) outputMethod: last

O loopWhen campo controla quando o loop termina. Neste exemplo, o loop continua enquanto o contador for menor que o valor máximo. O loop campo define como os parâmetros de entrada são atualizados entre as iterações. O loopSource especifica qual saída da iteração anterior alimenta a próxima iteração. O outputMethod campo definido como last retorna somente a saída da iteração final.

Repita as tarefas com maior memória

HealthOmics suporta repetição automática de falhas de out-of-memory tarefas. Quando uma tarefa sai com o código 137 (out-of-memory), HealthOmics cria uma nova tarefa com maior alocação de memória com base no multiplicador especificado.

nota

HealthOmics repete as out-of-memory falhas até 3 vezes ou até que a alocação de memória alcance 1536 GiB, qualquer que seja o limite atingido primeiro.

O exemplo a seguir mostra como configurar a nova out-of-memory tentativa:

hints: ResourceRequirement: ramMin: 4096 http://arvados.org/cwl#OutOfMemoryRetry: memoryRetryMultiplier: 2.5

Quando uma tarefa falha devido a out-of-memory, HealthOmics calcula a alocação de memória de repetição usando a fórmula:. previous_run_memory × memoryRetryMultiplier No exemplo acima, se a tarefa com 4096 MB de memória falhar, a nova tentativa usará 4096 × 2,5 = 10.240 MB de memória.

O memoryRetryMultiplier parâmetro controla a quantidade de memória adicional a ser alocada para tentativas de repetição:

  • Valor padrão: se você não especificar um valor, o padrão é 2 (dobra a memória)

  • Intervalo válido: deve ser um número positivo maior que1. Valores inválidos resultam em um erro de validação 4XX

  • Valor efetivo mínimo: valores entre 1 e 1.5 são aumentados automaticamente 1.5 para garantir aumentos significativos de memória e evitar tentativas excessivas de repetição

Exemplos

Veja a seguir um exemplo de um fluxo de trabalho escrito em 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

O arquivo a seguir define a copy.cwl tarefa.

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)"

Veja a seguir um exemplo de um fluxo de trabalho escrito em CWL com um 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: []