기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
CWL 워크플로 정의 세부 정보
공통 워크플로 언어 또는 CWL로 작성된 워크플로는 WDL 및 Nextflow로 작성된 워크플로와 유사한 기능을 제공합니다. Amazon S3 또는 HealthOmics 스토리지 URIs 입력 파라미터로 사용할 수 있습니다.
하위 워크플로의 secondaryFile에서 입력을 정의하는 경우 기본 워크플로에 동일한 정의를 추가합니다.
HealthOmics 워크플로는 작업 프로세스를 지원하지 않습니다. CWL 워크플로의 운영 프로세스에 대한 자세한 내용은 CWL 설명서를
사용하는 각 컨테이너에 대해 별도의 CWL 워크플로를 정의하는 것이 좋습니다. 고정 Amazon ECR URI로 dockerPull 항목을 하드코딩하지 않는 것이 좋습니다.
HealthOmics를 사용하도록 CWL 워크플로 변환
HealthOmics를 사용하도록 기존 CWL 워크플로 정의를 변환하려면 다음을 변경합니다.
-
모든 Docker 컨테이너 URIs Amazon ECR URIs.
-
모든 워크플로 파일이 기본 워크플로에서 입력으로 선언되고 모든 변수가 명시적으로 정의되었는지 확인합니다.
-
모든 JavaScript 코드가 엄격한 모드 수신 거부인지 확인합니다.
를 사용하여 작업 재시도 옵트아웃 omicsRetryOn5xx
HealthOmics는 서비스 오류(5XX HTTP 상태 코드)로 인해 작업이 실패한 경우 작업 재시도를 지원합니다. 기본적으로 HealthOmics는 실패한 작업을 최대 2회 재시도합니다. 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
워크플로 단계 반복
HealthOmics는 워크플로 단계 반복을 지원합니다. 루프를 사용하여 지정된 조건이 충족될 때까지 워크플로 단계를 반복적으로 실행할 수 있습니다. 이는 작업을 여러 번 반복해야 하거나 특정 결과가 달성될 때까지 반복 프로세스에 유용합니다.
참고: 루프 기능을 사용하려면 CWL 버전 1.2 이상이 필요합니다. 1.2 이전의 CWL 버전을 사용하는 워크플로는 루프 작업을 지원하지 않습니다.
CWL 워크플로에서 루프를 사용하려면 루프 요구 사항을 정의합니다. 다음 예제에서는 루프 요구 사항 구성을 보여줍니다.
requirements: - class: "http://commonwl.org/cwltool#Loop" loopWhen: $(inputs.counter < inputs.max) loop: counter: loopSource: result valueFrom: $(self) outputMethod: last
loopWhen 필드는 루프가 종료되는 시기를 제어합니다. 이 예제에서는 카운터가 최대값보다 작은 한 루프가 계속됩니다. loop 필드는 반복 간에 입력 파라미터를 업데이트하는 방법을 정의합니다. 는 이전 반복에서 다음 반복으로 피드되는 출력을 loopSource 지정합니다. 로 설정된 outputMethod 필드는 최종 반복의 출력만 last 반환합니다.
메모리가 증가한 상태에서 작업 재시도
HealthOmics는 out-of-memory 작업 실패의 자동 재시도를 지원합니다. 태스크가 코드 137(out-of-memory)로 종료되면 HealthOmics는 지정된 승수를 기반으로 메모리 할당을 늘려 새 태스크를 생성합니다.
참고
HealthOmics는 out-of-memory 실패를 최대 3회 또는 메모리 할당이 1536GiB에 도달할 때까지 중 먼저 도달하는 쪽까지 재시도합니다.
다음 예제에서는 out-of-memory 재시도를 구성하는 방법을 보여줍니다.
hints: ResourceRequirement: ramMin: 4096 http://arvados.org/cwl#OutOfMemoryRetry: memoryRetryMultiplier: 2.5
out-of-memory으로 인해 작업이 실패하면 HealthOmics는 공식을 사용하여 재시도 메모리 할당을 계산합니다previous_run_memory × memoryRetryMultiplier. 위 예제에서 메모리가 4,096MB인 작업이 실패하면 재시도는 4,096 × 2.5 = 10,240MB의 메모리를 사용합니다.
memoryRetryMultiplier 파라미터는 재시도에 할당할 추가 메모리의 양을 제어합니다.
-
기본값: 값을 지정하지 않으면 기본값은 입니다
2(메모리의 두 배). -
유효한 범위: 보다 큰 양수여야 합니다
1. 값이 잘못되면 4XX 검증 오류가 발생합니다. -
최소 유효 값: 의미 있는 메모리 증가를 보장하고 과도한 재시도를 방지하기
1.5위해1와 사이의 값이 로1.5자동 증가합니다.
예제
다음은 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)"
다음은 GPU 요구 사항이 있는 CWL로 작성된 워크플로의 예입니다.
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: []