本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
CWL 工作流程定义细节
用通用工作流语言 (CWL) 编写的工作流程提供的功能与用 WDL 和 Nextflow 编写的工作流程类似。您可以使用 Amazon S3 或 HealthOmics 存储 URIs 作为输入参数。
如果您在子工作流程的 SecondaryFile 中定义输入,请在主工作流程中添加相同的定义。
HealthOmics 工作流程不支持操作流程。要了解有关 CWL 工作流中操作流程的更多信息,请参阅 CWL 文档
最佳做法是为您使用的每个容器定义单独的 CWL 工作流程。我们建议您不要使用固定的亚马逊 ECR URI 对 DockerPull 条目进行硬编码。
转换要使用的 CWL 工作流程 HealthOmics
要将现有 CWL 工作流定义转换为使用 HealthOmics,请进行以下更改:
-
将所有 Docker 容器 URIs 替换为亚马逊 EC URIs R。
-
确保在主工作流程中将所有工作流文件声明为输入,并且所有变量都已明确定义。
-
确保所有 JavaScript 代码都是严格模式投诉。
使用退出任务重试 omicsRetryOn5xx
HealthOmics 如果任务由于服务错误而失败(5XX HTTP 状态代码),则支持任务重试。默认情况下,最多 HealthOmics 会尝试对失败的任务进行两次重试。有关任务重试的更多信息 HealthOmics,请参阅任务重试次数。
要因服务错误而选择不重试任务,请在工作流定义中配置omicsRetryOn5xx指令。你可以在要求或提示下定义这个指令。我们建议添加该指令作为便携性提示。
requirements: ResourceRequirement: omicsRetryOn5xx: false hints: ResourceRequirement: omicsRetryOn5xx: false
要求覆盖提示。如果任务实施在提示中提供了资源需求,而该提示也由封闭工作流程中的需求提供,则随附的要求优先。
如果相同的任务要求出现在工作流的不同级别,则 HealthOmics 使用来自requirements(或者hints,如果中没有条目requirements)中最具体的条目。以下列表显示了 HealthOmics 用于应用配置设置的优先顺序,从最低优先级到最高优先级:
-
工作流程级别
-
阶梯级别
-
工作流定义的 “任务” 部分
以下示例显示了如何在工作流的不同级别配置omicsRetryOn5xx指令。在此示例中,工作流级别的要求优先于工作流程级别的提示。任务和步骤级别的需求配置会覆盖提示配置。
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
示例
以下是用 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
以下文件定义了copy.cwl任务。
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)"
以下是使用 CWL 编写的、具有 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: []