Skip to content

WDL #

Find similar titles
  • 최초 작성자
    shlee

Structured data

Category
Programming

소개 #

Workflow Description Language (이하 WDL)은 사람이 읽고 쓸 수 있는 구문으로 데이터 전처리 워크플로우를 지정할 수 있는 오픈 소스 스크립트 언어입니다. WDL은 원래 Broad Institute에서 게놈 분석 파이프라인을 위해 개발되었지만, 다른 도메인으로 확장하여 사용할 수 있게 되었습니다.

Miniwdl 분석환경 #

본 문서에서는 miniwdl 도구를 사용하여 분석하는 과정을 보여줍니다. miniwdl은 파이썬 기반의 WDL 분석 툴킷을 의미합니다. 로컬 컴퓨터에는 파이썬, miniwdl 그리고 도커를 설치해야 합니다. miniwdl은 Docker Swarm을 통해 컨테이너를 실행하며 컴퓨팅 자원을 효율적으로 사용하여 워크플로우를 구동합니다. 입력 데이터는 분석에 쓰이는 파일과 wdl과 config 파일이 필요합니다. 분석 후에는 작업에 대한 로그 파일과 출력 결과 파일을 얻을 수 있습니다.

Image

Miniwdl 설치 #

아래 두 코드 중 하나를 쉘에서 실행하여 miniwdl이 설치합니다.

pip3 install miniwdl
conda install -c conda-forge miniwdl

설치가 정상적으로 되었는지 확인하려면 아래 코드를 실행합니다.

miniwdl run_self_test

파이프라인 패턴 #

  • LINEAR 패턴: 하나의 작업 뒤에 또 다른 작업을 연결하여 실행

Image

  • SCATTER-GATHER 패턴: 같은 작업을 병렬로 수행 후 다음 작업에서 모아서 실행

Image

  • MULTI-OUTPUT 패턴: 여러 출력 결과를 다음 작업에서 받아서 실행

Image

WDL파이프라인 예시 #

  • 파일 구조

아래 wdl, json, input 파일 등 3개가 있습니다. wdl 파일은 워크플로우와 작업 등을 코드로 작성되어 있습니다. json 파일은 워크플로우에 들어가는 설정값을 지정할 수 있습니다. input 파일은 이번 분석에 쓰이는 파일입니다.

.
├── linear.json
├── linear.wdl
└── md5sum.input
  • linear.wdl 파일

wdl 파일은 워크플로우에 대한 코드가 작성되어 있습니다. 해당 워크플로우는 2개의 작업을 가지고 있으며, 첫 번째 작업인 md5은 Md5sum 값을 만듭니다. 두 번째 작업인 checkMd5은 md5sum 값을 비교하여 일치하는 개수를 파일로 저장합니다.

version 1.0 # wdl 버전을 명시합니다.

workflow ga4ghMd5 { # 워크플로우를 선언합니다.

    File inputFile # 변수를 가져옵니다.
    String knownMd5Sum # 변수를 가져옵니다.

    call md5 { input: inputFile=inputFile } # md5라는 작업을 실행합니다.
    call checkMd5 { input: inputFile=md5.value,knownMd5Sum=knownMd5Sum } # checkMd5라는 작업을 실행합니다.
        meta {
        author: "Brian O’Connor"
        email: "brian@somewhere.com"
        description: "a simple workflow that calculates an md5 checksum and then checks it"
    }

}

task md5 { # md5 작업을 정의합니다.
    File inputFile

    command {
        /bin/my_md5sum ${inputFile} # 실행할 커맨드를 작성합니다.
    }

    output {
        File value = "md5sum.txt" # 아웃풋 파일을 지정합니다.
    }

    runtime {
    docker: "quay.io/briandoconnor/dockstore-tool-md5sum:1.0.4" # 런타임에 사용할 도커 이미지를 세팅합니다.
    cpu: 1
    memory: "512 MB"
    }

    parameter_meta {
        inputFile: "the file to create an md5 checksum for"
    }

task checkMd5 { # checkMd5 작업을 정의합니다.
    File inputFile
    String knownMd5Sum

    command {
        grep ${knownMd5Sum} ${inputFile} | wc -l > check_md5sum.report.txt
    }

    output {
        File value = "check_md5sum.report.txt"
    }

    runtime {
    docker: "quay.io/briandoconnor/dockstore-tool-md5sum:1.0.4"
    cpu: 1
    memory: "512 MB"
    }

    parameter_meta {
        inputFile: "the file to create an md5 checksum for"
        knownMd5Sum: "the known md5sum value to compare against"
    }

}
  • linear.json

linear.json 파일은 워크플로우에 사용할 변수를 지정합니다. ga4ghMd5는 워크플로우 이름입니다. md5sum.input 파일을 inputFile 라는 변수로 설정합니다. 00579a00e3e7fa0674428ac7049423e2 문자열을 knownMd5Sum 라는 변수로 설정합니다.

{
    "ga4ghMd5.inputFile": "md5sum.input",
    "ga4ghMd5.knownMd5Sum": "00579a00e3e7fa0674428ac7049423e2"
}
  • 워크플로우 실행 코드

아래 코드를 실행하면 워크플로우가 실행됩니다.

miniwdl run linear.wdl --input linear.json
  • 실행 결과

실행이 완료되면 아래와 같이 시간과 워크플로우 이름으로 폴더가 생성됩니다. 해당 폴더 안에는 작업별 폴더가 존재하며 각 작업의 인풋과 아웃풋을 확인할 수 있습니다.

.
├── 20231129_203544_ga4ghMd5
│   ├── call-checkMd5
│   ├── call-md5
│   ├── inputs.json
│   ├── out
│   ├── outputs.json
│   ├── rerun
│   ├── wdl
│   └── workflow.log
├── _LAST -> 20231129_203544_ga4ghMd5
├── linear.json
├── linear.wdl
└── md5sum.input

참고 #

0.0.1_20240214_1_v81