기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
WDL 워크플로 정의 세부 정보
다음 주제에서는 HealthOmics에서 WDL 워크플로 정의에 사용할 수 있는 유형 및 명령에 대한 세부 정보를 제공합니다.
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 키 및 값의 예 | 참고 |
---|---|---|---|---|
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 키 및 값의 예 | 참고 |
---|---|---|---|---|
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 지원합니다.
acceleratorType 및 acceleratorCount
HealthOmics는 지원되는 모든 GPU 인스턴스acceleratorCount에서 런타임 속성 acceleratorType 및를 지원합니다. HealthOmics는 액셀러레이터와 동일한 기능을 gpuCount가진 gpuType 및 라는 별칭도 지원합니다. WDL 정의에 두 명령이 모두 포함된 경우 HealthOmics는 액셀러레이터 값을 사용합니다.
다음 예제에서는 이러한 지시문을 사용하는 방법을 보여줍니다.
runtime { gpuCount: 2 gpuType: "nvidia-tesla-t4" }
returnCodes
returnCodes 속성은 작업의 성공적인 실행을 나타내는 반환 코드 또는 반환 코드 세트를 지정하는 메커니즘을 제공합니다. WDL 엔진은 WDL 정의의 런타임 섹션에서 지정한 반환 코드를 준수하고 그에 따라 작업 상태를 설정합니다.
runtime { returnCodes: 1 }
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}" } }