Nextflow 실행

이 페이지에서는 Nextflow를 사용하여 Google Cloud에서 파이프라인을 실행하는 방법을 설명합니다.

이 가이드에 사용된 파이프라인은 Google Cloud에서 Nextflow 사용을 표시하기 위한 RNA-Seq 파이프라인의 개념 증명입니다.

목표

이 가이드를 완료하고 나면 다음의 작업을 수행할 수 있게 됩니다.

  • Cloud Shell에 Nextflow를 설치합니다.
  • Nextflow 파이프라인 구성
  • Google Cloud에서 Nextflow를 사용하여 파이프라인 실행

비용

이 가이드에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.

  • Compute Engine
  • Cloud Storage

가격 계산기를 사용하여 예상 사용량을 토대로 예상 비용을 산출합니다. Google Cloud를 처음 사용하는 사용자는 무료 체험판을 사용할 수 있습니다.

시작하기 전에

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  3. Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

  4. Cloud Life Sciences, Compute Engine, and Cloud Storage API를 사용 설정합니다.

    API 사용 설정

Cloud Storage 버킷 생성

버킷 이름 지정 가이드라인의 지침에 따라 이 가이드 전체에서 임시 작업 및 출력 파일을 저장할 고유한 이름의 버킷을 만듭니다. 버킷 이름 지정 가이드라인에 설명된 대로 DNS 호환성을 위해 이 가이드에서는 밑줄(_)이 포함된 버킷 이름이 사용되지 않습니다.

Console

  1. Cloud Console에서 Cloud Storage 브라우저를 엽니다.

    Cloud Storage 브라우저로 이동

  2. 버킷 만들기를 클릭합니다.

  3. 버킷 이름 텍스트 상자에 버킷의 고유 이름을 입력한 후 만들기를 클릭합니다.

gcloud

  1. Cloud Shell을 엽니다.

    Cloud Shell로 이동

  2. 다음 명령어를 실행하여 버킷을 만들고 BUCKET은 해당 버킷의 고유 이름으로 바꿉니다.

    gsutil mb gs://BUCKET
    

서비스 계정 생성 및 역할 추가

서비스 계정을 만들고 관련 IAM 역할을 추가하려면 다음 단계를 완료하세요.

콘솔

Cloud Console을 사용하여 서비스 계정을 만듭니다.

  1. Cloud Console에서 서비스 계정 페이지로 이동합니다.

    서비스 계정 페이지로 이동

  2. 서비스 계정 만들기를 클릭합니다.

  3. 서비스 계정 이름 필드에 nextflow-service-account를 입력하고 만들기를 클릭합니다.

  4. 이 서비스 계정에 프로젝트에 대한 액세스 권한 부여 섹션에서 역할 선택 드롭다운 목록에서 다음 역할을 추가합니다.

    • Cloud Life Sciences 워크플로 실행자
    • 서비스 계정 사용자
    • 서비스 사용량 소비자
    • 저장소 객체 관리자
  5. 계속을 클릭한 다음 완료를 클릭합니다.

  6. 서비스 계정 페이지에서 만든 서비스 계정을 찾습니다. 서비스 계정의 행에서 을 클릭한 후 키 관리로 이동합니다.

  7. 페이지에서 키 추가를 클릭한 후 새 키 만들기를 클릭합니다.

  8. 키 유형으로 JSON을 선택하고 만들기를 클릭합니다.

    키가 포함된 JSON 파일이 컴퓨터에 다운로드됩니다.

gcloud

Cloud Shell을 사용하여 다음 단계를 완료합니다.

  1. Cloud Shell을 엽니다.

    Cloud Shell로 이동

  2. 서비스 계정을 만들 때 사용할 변수를 설정합니다. PROJECT_ID는 해당 프로젝트 ID로 바꿉니다.

    export PROJECT=PROJECT_ID
    export SERVICE_ACCOUNT_NAME=nextflow-service-account
    export SERVICE_ACCOUNT_ADDRESS=${SERVICE_ACCOUNT_NAME}@${PROJECT}.iam.gserviceaccount.com
    
  3. 서비스 계정을 만듭니다.

    gcloud iam service-accounts create ${SERVICE_ACCOUNT_NAME}
    
  4. 서비스 계정에는 다음 Identity and Access Management 역할이 필요합니다.

    • roles/lifesciences.workflowsRunner
    • roles/iam.serviceAccountUser
    • roles/serviceusage.serviceUsageConsumer
    • roles/storage.objectAdmin

    Cloud Shell에서 다음 명령어를 실행하여 역할을 부여합니다.

    gcloud projects add-iam-policy-binding ${PROJECT} \
        --member serviceAccount:${SERVICE_ACCOUNT_ADDRESS} \
        --role roles/lifesciences.workflowsRunner
    
    gcloud projects add-iam-policy-binding ${PROJECT} \
        --member serviceAccount:${SERVICE_ACCOUNT_ADDRESS} \
        --role roles/iam.serviceAccountUser
    
    gcloud projects add-iam-policy-binding ${PROJECT} \
        --member serviceAccount:${SERVICE_ACCOUNT_ADDRESS} \
        --role roles/serviceusage.serviceUsageConsumer
    
    gcloud projects add-iam-policy-binding ${PROJECT} \
        --member serviceAccount:${SERVICE_ACCOUNT_ADDRESS} \
        --role roles/storage.objectAdmin
    

애플리케이션에 사용자 인증 정보 제공

서비스 계정 키가 포함된 JSON 파일의 파일 경로에 환경 변수 GOOGLE_APPLICATION_CREDENTIALS를 설정하여 애플리케이션 코드 또는 명령어에 인증 사용자 인증 정보를 제공할 수 있습니다.

다음 단계에서는 GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정하는 방법을 보여줍니다.

콘솔

  1. Cloud Shell을 엽니다.

    Cloud Shell로 이동

  2. Cloud Shell의 더 보기 메뉴에서 파일 업로드를 선택하고 바로 전에 만든 JSON 키 파일을 선택합니다. 이 단계는 파일을 Cloud Shell 인스턴스의 홈 디렉터리에 업로드합니다.

  3. 업로드된 파일이 현재 디렉터리에 있는지 확인하고 다음 명령어를 실행하여 파일 이름을 확인합니다.

    ls
    

  4. KEY-FILENAME.json을 키 파일 이름으로 바꿔 사용자 인증 정보를 설정합니다.

    export GOOGLE_APPLICATION_CREDENTIALS=${PWD}/KEY-FILENAME.json
    

gcloud

Cloud Shell을 사용하여 다음 단계를 완료합니다.

  1. Cloud Shell을 엽니다.

    Cloud Shell로 이동

  2. 비공개 키 파일을 GOOGLE_APPLICATION_CREDENTIALS 환경 변수로 설정합니다.

    export SERVICE_ACCOUNT_KEY=${SERVICE_ACCOUNT_NAME}-private-key.json
    gcloud iam service-accounts keys create \
      --iam-account=${SERVICE_ACCOUNT_ADDRESS} \
      --key-file-type=json ${SERVICE_ACCOUNT_KEY}
    export SERVICE_ACCOUNT_KEY_FILE=${PWD}/${SERVICE_ACCOUNT_KEY}
    export GOOGLE_APPLICATION_CREDENTIALS=${PWD}/${SERVICE_ACCOUNT_KEY}
    

Cloud Shell에서 Nextflow 설치 및 구성

머신에 소프트웨어를 설치하지 않으려면 이 가이드의 모든 터미널 명령어를 Cloud Shell에서 계속 실행합니다.

  1. 아직 열려 있지 않으면 Cloud Shell을 엽니다.

    Cloud Shell로 이동

  2. 다음 명령어를 실행하여 Nextflow를 설치합니다.

    export NXF_VER=20.10.0
    export NXF_MODE=google
    curl https://get.nextflow.io | bash
    

    설치가 완료되면 다음 메시지가 표시됩니다.

        N E X T F L O W
    version 20.10.0 build 5430
    created 01-11-2020 15:14 UTC (10:14 EDT)
    cite doi:10.1038/nbt.3820
    http://nextflow.io
    
    Nextflow installation completed. Please note:
    ‐ the executable file `nextflow` has been created in the folder: DIRECTORY
    ‐ you may complete the installation by moving it to a directory in your $PATH
    
  3. 다음 명령어를 실행하여 샘플 파이프라인 저장소를 클론합니다. 저장소에는 실행할 파이프라인과 파이프라인에서 사용하는 샘플 데이터가 포함됩니다.

    git clone https://github.com/nextflow-io/rnaseq-nf.git
    
  4. Nextflow를 구성하려면 다음 단계를 완료하세요.

    1. rnaseq-nf 폴더로 변경합니다.

      cd rnaseq-nf
      git checkout v2.0
      

    2. 선택한 텍스트 편집기를 사용하여 이름이 nextflow.config인 파일을 편집하고 gls 라벨로 표시된 섹션을 다음과 같이 업데이트합니다.

      • google.project 줄이 없으면 추가합니다.
      • PROJECT_ID를 프로젝트 ID로 바꿉니다.
      • 원하는 경우 google.location의 값을 변경합니다. 현재 사용 가능한 Cloud Life Sciences API 위치 중 하나여야 합니다.
      • 원하는 경우 Compute Engine VM이 실행되는 리전을 지정하는 google.region의 값을 변경합니다. 사용 가능한 Compute Engine 리전 및 영역을 참조하세요.
      • BUCKET은 위에서 만든 버킷 이름으로 바꿉니다.
      • WORK_DIR은 로깅 및 출력에 사용할 폴더의 이름으로 바꿉니다. 아직 버킷에 없는 새 디렉터리 이름을 사용합니다.
      • 참고: workDir 변수 위치는 하위 디렉터리를 1개 이상 포함해야 합니다. 버킷 이름만 사용하면 안 됩니다.
      gls {
         params.transcriptome = 'gs://rnaseq-nf/data/ggal/transcript.fa'
         params.reads = 'gs://rnaseq-nf/data/ggal/gut_{1,2}.fq'
         params.multiqc = 'gs://rnaseq-nf/multiqc'
         process.executor = 'google-lifesciences'
         process.container = 'nextflow/rnaseq-nf:latest'
         workDir = 'gs://BUCKET/WORK_DIR'
         google.location = 'europe-west2'
         google.region  = 'europe-west1'
         google.project = 'PROJECT_ID'
      }
      
    3. 이전 폴더로 다시 변경합니다.

      cd ..
      

Nextflow를 사용하여 파이프라인 실행

Nextflow를 사용하여 파이프라인을 실행합니다. 파이프라인을 시작한 후 완료될 때까지 백그라운드에서 계속 실행됩니다. 파이프라인이 완료되는 데는 최대 10분이 걸릴 수 있습니다.

./nextflow run rnaseq-nf/main.nf -profile gls

파이프라인이 완료되면 다음 메시지가 표시됩니다.

N E X T F L O W  ~  version 20.10.0
Launching `rnaseq-nf/main.nf` [suspicious_mestorf] - revision: ef908c0bfd
R N A S E Q - N F   P I P E L I N E
 ===================================
 transcriptome: gs://rnaseq-nf/data/ggal/transcript.fa
 reads        : gs://rnaseq-nf/data/ggal/gut_{1,2}.fq
 outdir       : results
executor >  google-lifesciences (4)
[db/2af640] process > RNASEQ:INDEX (transcript)     [100%] 1 of 1 ✔
[a6/927725] process > RNASEQ:FASTQC (FASTQC on gut) [100%] 1 of 1 ✔
[59/438177] process > RNASEQ:QUANT (gut)            [100%] 1 of 1 ✔
[9a/9743b9] process > MULTIQC                       [100%] 1 of 1 ✔
Done! Open the following report in your browser --> results/multiqc_report.html
Completed at: DATE TIME
Duration    : 10m
CPU hours   : 0.2
Succeeded   : 4

Nextflow 파이프라인의 출력 보기

파이프라인이 끝나면 출력, 로그, 오류, 명령어 실행, 임시 파일을 확인할 수 있습니다.

파이프라인은 최종 출력 파일 results/qc_report.htmlnextflow.config 파일에 지정된 Cloud Storage 버킷에 저장합니다.

각 태스크 및 중간 파일의 개별 출력 파일을 확인하려면 다음 단계를 완료합니다.

콘솔

  1. Cloud Storage 콘솔에서 Storage 브라우저 페이지를 엽니다.

    Cloud Storage 브라우저로 이동

  2. BUCKET으로 이동하고 nextflow.config 파일에 지정된 WORK_DIR로 이동합니다.

  3. 파이프라인에서 실행된 각각의 개별 작업에 대한 폴더가 있습니다.

  4. 폴더에는 실행된 명령어, 출력 파일, 워크플로 중 사용된 임시 파일이 포함됩니다.

gcloud

  1. Cloud Shell에서 출력 파일을 보려면 먼저 Cloud Shell을 엽니다.

    Cloud Shell로 이동

  2. 다음 명령어를 실행하여 Cloud Storage 버킷의 출력을 나열합니다. BUCKETWORK_DIRnextflow.config 파일에 지정된 변수로 업데이트합니다.

    gsutil ls gs://BUCKET/WORK_DIR
    
  3. 실행된 각 작업에 대한 폴더가 출력에 표시됩니다. 하위 디렉터리의 콘텐츠를 계속 나열하면 파이프라인에서 생성된 모든 파일을 확인할 수 있습니다. TASK_FOLDER를 위의 명령어에서 나열된 태스크 폴더 중 하나로 업데이트합니다.

    gsutil ls gs://BUCKET/WORK_DIR/FOLDER/TASK_FOLDER
    

파이프라인에서 생성된 중간 파일을 보고 유지할 파일을 선택하거나 삭제하여 Cloud Storage와 관련된 비용을 줄일 수 있습니다. 파일을 삭제하려면 Cloud Storage 버킷에서 중간 파일 삭제를 참조하세요.

문제해결

  • 파이프라인을 실행할 때 문제가 발생하면 Cloud Life Sciences API 문제 해결을 참조하세요.

  • 파이프라인이 실패하는 경우 .command.err, .command.log, .command.out 등과 같이 Cloud Storage의 각 폴더에 있는 로그 파일을 확인하여 각 작업의 로그를 확인할 수 있습니다.

삭제

이 가이드에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.

GATK 권장사항 파이프라인 실행 가이드를 완료한 후에는 할당량을 차지하지 않고 이후에 요금이 청구되지 않도록 Google Cloud에서 만든 리소스를 삭제할 수 있습니다. 다음 섹션에서는 리소스를 삭제하거나 사용 중지하는 방법을 설명합니다.

Cloud Storage 버킷에서 중간 파일 삭제

파이프라인을 실행하면 중간 파일이 gs://BUCKET/WORK_DIR에 저장됩니다. Cloud Storage 요금을 줄이기 위해 워크플로가 완료된 후 파일을 삭제할 수 있습니다.

디렉터리에 사용된 공간을 확인하는 방법

gsutil du -sh gs://BUCKET/WORK_DIR

작업 디렉터리에서 파일을 삭제하는 방법

Console

  1. Cloud Storage 콘솔에서 Storage 브라우저 페이지를 엽니다.

    Cloud Storage 브라우저로 이동

  2. BUCKET으로 이동하고 nextflow.config 파일에 지정된 WORK_DIR로 이동합니다.

  3. 하위 폴더를 찾아 원치 않는 파일이나 디렉터리를 삭제합니다. 모든 파일을 삭제하려면 전체 WORK_DIR을 삭제합니다.

gcloud

  1. Cloud Shell을 열고 다음을 실행합니다.

    Cloud Shell로 이동

  2. WORK_DIR 디렉터리에 있는 모든 중간 파일을 삭제하려면 다음을 수행합니다.

    gsutil -m rm gs://BUCKET/WORK_DIR/**
    

프로젝트 삭제

비용이 청구되지 않도록 하는 가장 쉬운 방법은 가이드에서 만든 프로젝트를 삭제하는 것입니다.

프로젝트를 삭제하는 방법은 다음과 같습니다.

  1. Cloud Console에서 리소스 관리 페이지로 이동합니다.

    리소스 관리로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.

다음 단계