기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
WDL 워크플로 정의 세부 정보
다음 주제에서는 HealthOmics에서 WDL 워크플로 정의에 사용할 수 있는 유형 및 명령에 대한 세부 정보를 제공합니다.
WDL lenient의 암시적 유형 변환
HealthOmics는 input.json 파일 및 워크플로 정의에서 암시적 유형 변환을 지원합니다. 암시적 유형 캐스팅을 사용하려면 워크플로를 생성할 때 워크플로 엔진을 WDL lenient로 지정합니다. WDL lenient는 Cromwell에서 마이그레이션된 워크플로를 처리하도록 설계되었습니다. 고객 Cromwell 지시문과 일부 규정 미준수 로직을 지원합니다.
WDL lenient는 WDL의 제한된 예외
-
Float to Int. 여기서 강제로 인해 정밀도가 손실되지 않습니다(예: 1.0이 1에 매핑됨).
-
Int/Float에 대한 문자열로, 강제로 인해 정밀도가 손실되지 않습니다.
-
W가 Y로 강제되고 X가 Z로 강제되는 경우, Map[W, X]를 Array[Pair[Y, Z]]에 매핑합니다.
-
Array[Pair[W, X]]를 Map[Y, Z]으로 바꿉니다.이 경우 W는 Y로 강제 적용되고 X는 Z로 강제 적용됩니다(예: 1.0은 1로 매핑).
암시적 유형 캐스팅을 사용하려면 워크플로 또는 워크플로 버전을 생성할 때 워크플로 엔진을 WDL_LENIENT로 지정합니다.
콘솔에서 워크플로 엔진 파라미터의 이름은 Language입니다. API에서 워크플로 엔진 파라미터의 이름은 엔진입니다. 자세한 내용은 프라이빗 워크플로 생성 또는 워크플로 버전 생성을 참조하세요.
input.json의 네임스페이스 정의
HealthOmics는 input.json에서 정규화된 변수를 지원합니다. 예를 들어 워크플로 SumWorkflow에서 number1 및 number2라는 두 개의 입력 변수를 선언하는 경우:
workflow SumWorkflow { input { Int number1 Int number2 } }
input.json에서 이러한 변수를 정규화된 변수로 사용할 수 있습니다.
{ "SumWorkflow.number1": 15, "SumWorkflow.number2": 27 }
WDL의 기본 유형
다음 표는 WDL의 입력이 일치하는 기본 유형에 매핑되는 방법을 보여줍니다. HealthOmics는 유형 강제에 대한 제한된 지원을 제공하므로 명시적 유형을 설정하는 것이 좋습니다.
| WDL 유형 | JSON 유형 | WDL 예 | JSON 키 및 값의 예 | Notes |
|---|---|---|---|---|
Boolean |
boolean |
Boolean b |
"b": true |
값은 소문자여야 하며 따옴표가 없어야 합니다. |
Int |
integer |
Int i |
"i": 7 |
따옴표가 없어야 합니다. |
Float |
number |
Float f |
"f": 42.2 |
따옴표가 없어야 합니다. |
String |
string |
String s |
"s": "characters" |
URI인 JSON 문자열은 가져올 WDL 파일에 매핑되어야 합니다. |
File |
string |
File f |
"f": "s3://amzn-s3-demo-bucket1/path/to/file" |
워크플로에 제공된 IAM 역할에 이러한 객체에 대한 읽기 액세스 권한이 있는 한 Amazon S3 및 HealthOmics 스토리지 URIs를 가져옵니다. 다른 URI 체계는 지원되지 않습니다(예: file://, https://및 ftp://). URI는 객체를 지정해야 합니다. 디렉터리일 수 없습니다. 즉, 로 끝날 수 없습니다/. |
Directory |
string |
Directory d |
"d": "s3://bucket/path/" |
Directory 유형은 WDL 1.0 또는 1.1에 포함되지 않으므로 WDL 파일의 헤더version development에를 추가해야 합니다. URI는 Amazon S3 URI여야 하며 접두사가 '/'로 끝나야 합니다. 디렉터리의 모든 콘텐츠는 단일 다운로드로 워크플로에 재귀적으로 복사됩니다. 에는 워크플로와 관련된 파일만 포함되어야 Directory 합니다. |
WDL의 복잡한 유형
다음 표는 WDL의 입력이 일치하는 복합 JSON 유형에 매핑되는 방법을 보여줍니다. WDL의 복잡한 유형은 기본 유형으로 구성된 데이터 구조입니다. 목록과 같은 데이터 구조는 배열로 변환됩니다.
| WDL 유형 | JSON 유형 | WDL 예 | JSON 키 및 값의 예 | Notes |
|---|---|---|---|---|
Array |
array |
Array[Int] nums |
“nums": [1, 2, 3] |
배열의 멤버는 WDL 배열 유형의 형식을 따라야 합니다. |
Pair |
object |
Pair[String, Int] str_to_i |
“str_to_i": {"left": "0", "right": 1} |
페어의 각 값은 일치하는 WDL 유형의 JSON 형식을 사용해야 합니다. |
Map |
object |
Map[Int, String] int_to_string |
"int_to_string": { 2: "hello", 1: "goodbye" } |
맵의 각 항목은 일치하는 WDL 유형의 JSON 형식을 사용해야 합니다. |
Struct |
object |
|
|
구조체 멤버의 이름은 JSON 객체 키의 이름과 정확히 일치해야 합니다. 각 값은 일치하는 WDL 유형의 JSON 형식을 사용해야 합니다. |
Object |
N/A | 해당 사항 없음 | N/A | WDL Object 유형은 오래된 유형이므로 Struct 모든 경우에 로 교체해야 합니다. |
WDL의 지침
HealthOmics는 HealthOmics가 지원하는 모든 WDL 버전에서 다음 명령을 지원합니다.
GPU 리소스 구성
HealthOmics는 지원되는 모든 GPU 인스턴스acceleratorCount에서 런타임 속성 acceleratorType 및를 지원합니다. HealthOmics는 액셀러레이터와 동일한 기능을 gpuCount가진 gpuType 및 라는 별칭도 지원합니다. WDL 정의에 두 명령이 모두 포함된 경우 HealthOmics는 액셀러레이터 값을 사용합니다.
다음 예제에서는 이러한 지시문을 사용하는 방법을 보여줍니다.
runtime { gpuCount: 2 gpuType: "nvidia-tesla-t4" }
서비스 오류에 대한 작업 재시도 구성
HealthOmics는 서비스 오류(5XX HTTP 상태 코드)로 인해 실패한 작업에 대해 최대 2회의 재시도를 지원합니다. 최대 재시도 횟수(1 또는 2)를 구성하고 서비스 오류에 대한 재시도를 옵트아웃할 수 있습니다. 기본적으로 HealthOmics는 최대 2회의 재시도를 시도합니다.
다음 예제에서는 서비스 오류에 대한 재시도를 옵트아웃preemptible하도록를 설정합니다.
{ preemptible: 0 }
HealthOmics의 작업 재시도에 대한 자세한 내용은 섹션을 참조하세요작업 재시도.
메모리 부족에 대한 작업 재시도 구성
HealthOmics는 메모리가 부족하여 실패한 작업에 대한 재시도를 지원합니다(컨테이너 종료 코드 137, 4XX HTTP 상태 코드). HealthOmics는 각 재시도에 대해 메모리 양을 두 배로 늘립니다.
기본적으로 HealthOmics는 이러한 유형의 실패에 대해 재시도하지 않습니다. maxRetries 지시문을 사용하여 최대 재시도 횟수를 지정합니다.
다음 예제에서는를 3maxRetries으로 설정하여 HealthOmics가 최대 4회의 작업 완료 시도(최초 시도 + 3회의 재시도)를 시도하도록 합니다.
runtime { maxRetries: 3 }
참고
메모리 부족에 대한 작업 재시도에는 GNU findutils 4.2.3 이상이 필요합니다. 기본 HealthOmics 이미지 컨테이너에는이 패키지가 포함되어 있습니다. WDL 정의에서 사용자 지정 이미지를 지정하는 경우 이미지에 GNU findutils 4.2.3 이상이 포함되어 있는지 확인합니다.
반환 코드 구성
returnCodes 속성은 작업의 성공적인 실행을 나타내는 반환 코드 또는 반환 코드 세트를 지정하는 메커니즘을 제공합니다. WDL 엔진은 WDL 정의의 런타임 섹션에서 지정한 반환 코드를 준수하고 그에 따라 작업 상태를 설정합니다.
runtime { returnCodes: 1 }
HealthOmics는 returnCodes와 동일한 기능을 가진 continueOnReturnCode라는 별칭도 지원합니다. 두 속성을 모두 지정하면 HealthOmics는 returnCodes 값을 사용합니다.
WDL 워크플로 정의 예제
다음 예제에서는 WDLBAM에서에서 로 변환CRAM하기 위한 프라이빗 워크플로 정의를 보여줍니다. BAM 워크플로CRAM에 대한는 두 가지 작업을 정의하고 genomes-in-the-cloud 컨테이너의 도구를 사용합니다.이 작업은 예제에 나와 있으며 공개적으로 사용할 수 있습니다.
다음 예제에서는 Amazon ECR 컨테이너를 파라미터로 포함하는 방법을 보여줍니다. 이렇게 하면 HealthOmics가 실행을 시작하기 전에 컨테이너에 대한 액세스 권한을 확인할 수 있습니다.
{ ... "gotc_docker":"<account_id>.dkr.ecr.<region>.amazonaws.com/genomes-in-the-cloud:2.4.7-1603303710" }
다음 예제에서는 파일이 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" }
시퀀스 스토어에서 파일을 지정하려면 다음 예제와 같이 시퀀스 스토어의 URI를 사용하여를 지정합니다.
{ "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" }
그런 다음 다음 예제와 같이 WDL에서 워크플로를 정의할 수 있습니다.
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}" } }