Skip to content

Nextflow #

Find similar titles

2회 업데이트 됨.

Edit
  • 최초 작성자
  • 최근 업데이트

Structured data

Category
Programming

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는 더욱 확장된 다양한 기능을 제공하고 있으며, 복잡성이 높은 파이프라인도 워크플로우화 할 수 있습니다. 구성이 잘 되어있는 공식 문서를 참조하여 효율적이고 멋진 워크플로우를 만들어 보아요!

참고 #

0.0.1_20230725_7_v68