Nextflow
#
Find similar titles
-
최초 작성자
jheepark@insilicogen.com
-
최근 업데이트
jheepark@insilicogen.com
Structured data
- Category
- Programming
Table of Contents
NEXTFLOW #
배경 #
최근 유전체 연구를 비롯한 많은 분야에서 방대하고 복잡한 데이터를 효율적으로 처리하기 위해 워크플로우 파이프라인을 사용하고 있습니다. 이는 데이터 처리 작업을 단계별로 분할하고 각 단계를 병렬적으로 또 연속적으로 실행하여 전체 작업을 효율적으로 관리할 수 있습니다. 워크플로우 언어로는 Snakemake, Nextflow, WDL, CWL, Airflow 등이 있고 데이터 분석, 기계학습, 이미지 처리, 자연어 처리 등 다양한 방면에서 활용되고 있습니다.
NEXTFLOW란? #
NEXTFLOW는 데이터 처리와 분석을 위해 워크플로우 도메인에서 한정적으로 활용되는 DSL(Domain specific Language)입니다. JAVA 기반의 groovy 언어로 개발되었으며, Nextflow의 주요 특징은 다음과 같습니다.
- 재현성 : 작업의 필요한 실행환경을 정의하고 동일한 환경에서 작업을 실행하여 결과의 일관성과 재현성을 유지할 수 있음
- 휴대성 : 오픈소스이며 다양한 컴퓨팅 환경과 플랫폼을 지원하여 분산된 환경에서 독립적으로 실행이 가능
- 병렬처리 : 작업의 병렬처리를 간편하게 지원하며 동시에 실행 가능한 작업을 효율적으로 분산시킴
- 체크포인트 : 실행 중 생성 결과는 자동으로 추적되며 마지막의 성공적으로 실행된 단계부터 실행을 재개할 수 있음
- 스트림 기반 : 기능 구성을 기반으로 의존성 명시적으로 정의하여 실행 순서를 제어함
- 유연성과 확장성 : 다양한 도구와 라이브러리를 통합하여 실행할 수 있으며 유연성과 확장성을 제공
NEXTFLOW 기본 구성 요소 #
Processes #
Process는 Nextflow 워크 플로우에서 실행할 수 있는 작업 단위입니다. 각각의 Process는 특정 작업을 수행할 수 있도록 입력(input)과 출력(output), 실행 스크립트 혹은 명령어로 구성됩니다.
Channel #
Channel은 데이터의 흐름을 나타내는 객체로 워크 플로우에 입력 데이터와 출력 데이터를 전달합니다. 또한 Process 간의 데이터 흐름을 정의하여 작업의 실행 순서를 제어합니다.
Workflow #
workflow는 Nextflow 워크플로우의 전체 구조를 정의합니다. Process와 Channel을 조합하여 워크플로우를 구성합니다. 또한 Process, Channel 간의 의존성을 관리할 수 있으며 실행 순서와 데이터 흐름을 관리하는 요소입니다.
간단한 활용 #
Nextflow를 활용하여 다양한 종류의 작업을 조합하여 워크 플로우를 생성하고 실행할 수 있습니다. 다음은 예제를 활용해서 기본적인 예시를 구동해 보겠습니다.
Next flow 설치 #
nextflow는 간단한 방법으로 설치할 수 있습니다.
$ java -version # java 버전 확인
$ curl -s https://get.nextflow.io | bash # nextflow 다운로드
$ export PATH=$PATH: # 실행파일 경로 설정
$./nextflow run hello # 테스트 코드 실행
워크플로우 스크립트 작성 #
nextflow는 Groovy 언어를 사용하여 워크플로우를 정의합니다. .nf
확장자의 스크립트를 정의합니다.
$ vi hello.nf
Process 정의 #
먼저 워크플로우 스크립트에서 Process를 정의해야 합니다. 작업은 실행 가능한 단위의 명령어 또는 스크립트로 구성됩니다. 다음은 입력값을 echo 명령어로 stdout으로 출력합니다.
process sayHello{
input:
val cheers
output:
stdout
"""
echo $cheers
"""
}
Channel 정의 #
다음으로 Channel은 데이터 흐름을 정의합니다. 채널 내 입력과 출력을 전달하는 데 사용되며Channel.of 메소드를 사용하여 생성할 수 있습니다. 다음은 코드는 입력으로 "Ciao", "Hello", "Holla"를 전달합니다. 출력으로는 결과를 stdout으로 출력할 수 있도록 view를 전달하였습니다.
Channel.of( | sayHello | view
Workflow 구성 #
Channel을 Workflow 내에 조합 및 구성합니다. 현재는 하나의 Process만 있기 때문에 간략히 작성하였습니다.
workflow{
Channel.of("Ciao", "Hello", "Holla") | sayHello | view
}
Workflow 실행 #
작성한 워크플로우를 실행하기 위해서는 터미널에 다음 명령어를 실행합니다.
$ nextflow run hello.nf
정말 간단한 예시로 확인해 보았으나 앞선 설명에서와 같이 Nextflow는 더욱 확장된 다양한 기능을 제공하고 있으며, 복잡성이 높은 파이프라인도 워크플로우화 할 수 있습니다. 구성이 잘 되어있는 공식 문서를 참조하여 효율적이고 멋진 워크플로우를 만들어 보아요!
참고 #
- https://www.nextflow.io/index.html
- AWS Handson Session : 클라우드를 활용한 유전체학 연구 워크플로우 구현과 실습 Nextflow 강의