Batch에서 dsub 파이프라인을 실행하여 작업 조정


이 튜토리얼에서는 Batch에서 dsub 파이프라인을 실행하는 방법을 설명합니다. 특히 dsub 파이프라인 예시는 바이너리 정렬 맵(BAM) 파일의 DNA 시퀀싱 데이터를 처리하여 BAM 색인(BAI) 파일을 만듭니다.

이 튜토리얼은 Batch에서 dsub를 사용하려는 Batch 사용자를 대상으로 합니다. dsub는 Google Cloud에서 일괄 처리 워크플로를 조정하기 위한 오픈소스 작업 스케줄러입니다. dsub와 함께 Batch를 사용하는 방법에 대한 자세한 내용은 Batch용 dsub 문서를 참조하세요.

목표

  • Cloud Storage 버킷에서 파일을 읽고 쓰는 Batch에서 dsub 파이프라인을 실행합니다.
  • Cloud Storage 버킷에서 출력 파일을 확인합니다.

비용

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

  • Batch
  • Cloud Storage

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요. Google Cloud를 처음 사용하는 사용자는 무료 체험판을 사용할 수 있습니다.

이 튜토리얼에서 만든 리소스는 정리 단계까지 모든 단계를 적시에 완료한다고 가정할 때 1달러 미만의 비용이 소요됩니다.

시작하기 전에

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud CLI를 설치합니다.
  3. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

    gcloud init
  4. Google Cloud 프로젝트를 만들거나 선택합니다.

    • Google Cloud 프로젝트를 만듭니다.

      gcloud projects create PROJECT_ID

      PROJECT_ID를 만들려는 Google Cloud 프로젝트의 이름으로 바꿉니다.

    • 만든 Google Cloud 프로젝트를 선택합니다.

      gcloud config set project PROJECT_ID

      PROJECT_ID를 Google Cloud 프로젝트 이름으로 바꿉니다.

  5. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  6. Batch, Cloud Storage, Compute Engine, and Logging API를 사용 설정합니다.

    gcloud services enable batch.googleapis.com compute.googleapis.com logging.googleapis.com storage.googleapis.com
  7. Google Cloud CLI를 설치합니다.
  8. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

    gcloud init
  9. Google Cloud 프로젝트를 만들거나 선택합니다.

    • Google Cloud 프로젝트를 만듭니다.

      gcloud projects create PROJECT_ID

      PROJECT_ID를 만들려는 Google Cloud 프로젝트의 이름으로 바꿉니다.

    • 만든 Google Cloud 프로젝트를 선택합니다.

      gcloud config set project PROJECT_ID

      PROJECT_ID를 Google Cloud 프로젝트 이름으로 바꿉니다.

  10. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  11. Batch, Cloud Storage, Compute Engine, and Logging API를 사용 설정합니다.

    gcloud services enable batch.googleapis.com compute.googleapis.com logging.googleapis.com storage.googleapis.com
  12. 프로젝트에 이 튜토리얼에 필요한 권한이 있는 서비스 계정이 하나 이상 있는지 확인합니다.

    각 작업에는 Batch 서비스 에이전트가 작업을 실행하는 데 필요한 리소스를 만들고 액세스할 수 있는 서비스 계정이 필요합니다. 이 튜토리얼에서 작업의 서비스 계정은 Compute Engine 기본 서비스 계정입니다.

    Compute Engine 기본 서비스 계정에 Batch 서비스 에이전트가 Batch 작업을 위한 리소스를 만들고 액세스하도록 허용하는 데 필요한 권한이 있는지 확인하려면 관리자에게 Compute Engine 기본 서비스 계정에 다음 IAM 역할을 부여해 달라고 요청하세요.

    역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.

    관리자는 커스텀 역할이나 다른 사전 정의된 역할을 통해 Compute Engine 기본 서비스 계정에 필요한 권한을 부여할 수도 있습니다.

  13. 이 튜토리얼에 필요한 권한이 있는지 확인합니다.

    이 튜토리얼을 완료하는 데 필요한 권한을 얻으려면 관리자에게 다음의 IAM 역할을 부여해 달라고 요청하세요.

  14. dsub 및 해당 종속 항목을 설치합니다. 자세한 내용은 dsub 설치 문서를 참조하세요.

    1. 최신 버전의 dsub에서 지원하는 Pythonpip 버전이 설치되어 있는지 확인합니다. 현재 설치된 버전을 보려면 다음 명령어를 실행합니다.

      pip --version
      

      pip 또는 Python을 설치하거나 업데이트해야 하는 경우 Python 설치 단계를 수행합니다.

    2. 권장: dsub를 설치할 때 종속 항목 충돌 오류를 방지하려면 Python 가상 환경을 만들고 활성화합니다.

      python -m venv dsub_libs && source dsub_libs/bin/activate
      
    3. git를 사용하여 dsub GitHub 저장소를 클론합니다.

      git clone https://github.com/databiosphere/dsub.git && cd dsub
      
    4. dsub 및 해당 종속 항목을 설치합니다.

      python -m pip install .
      

      출력은 다음과 비슷합니다.

      ...
      Successfully installed cachetools-5.3.1 certifi-2023.7.22 charset-normalizer-3.3.1 dsub-0.4.9 funcsigs-1.0.2 google-api-core-2.11.0 google-api-python-client-2.85.0 google-auth-2.17.3 google-auth-httplib2-0.1.0 google-cloud-batch-0.10.0 googleapis-common-protos-1.61.0 grpcio-1.59.0 grpcio-status-1.59.0 httplib2-0.22.0 idna-3.4 mock-4.0.3 parameterized-0.8.1 proto-plus-1.22.3 protobuf-4.24.4 pyasn1-0.4.8 pyasn1-modules-0.2.8 pyparsing-3.1.1 python-dateutil-2.8.2 pytz-2023.3 pyyaml-6.0 requests-2.31.0 rsa-4.9 six-1.16.0 tabulate-0.9.0 tenacity-8.2.2 uritemplate-4.1.1 urllib3-2.0.7
      

Cloud Storage 버킷 만들기

gcloud CLI를 사용하여 샘플 dsub 파이프라인에서 출력 파일을 저장할 Cloud Storage 버킷을 만들려면 gcloud storage buckets create 명령어를 실행합니다.

gcloud storage buckets create gs://BUCKET_NAME \
    --project PROJECT_ID

다음을 바꿉니다.

출력은 다음과 비슷합니다.

Creating gs://BUCKET_NAME/...

dsub 파이프라인 실행하기

샘플 dsub 파이프라인은 1,000 Genomes Project의 BAM 파일을 색인화하고 결과를 Cloud Storage 버킷에 출력합니다.

샘플 dsub 파이프라인을 실행하려면 다음 dsub 명령어를 실행합니다.

dsub \
    --provider google-batch \
    --project PROJECT_ID \
    --logging gs://BUCKET_NAME/WORK_DIRECTORY/logs \
    --input BAM=gs://genomics-public-data/1000-genomes/bam/HG00114.mapped.ILLUMINA.bwa.GBR.low_coverage.20120522.bam \
    --output BAI=gs://BUCKET_NAME/WORK_DIRECTORY/HG00114.mapped.ILLUMINA.bwa.GBR.low_coverage.20120522.bam.bai \
    --image quay.io/cancercollaboratory/dockstore-tool-samtools-index \
    --command 'samtools index ${BAM} ${BAI}' \
    --wait

다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트의 프로젝트 ID입니다.

  • BUCKET_NAME: 만든 Cloud Storage 버킷의 이름입니다.

  • WORK_DIRECTORY: 파이프라인이 로그와 출력을 저장하는 데 사용할 수 있는 새 디렉터리의 이름입니다. 예를 들어 workDir를 입력합니다.

dsub 파이프라인은 BAI 파일을 쓰고 Cloud Storage 버킷의 지정된 디렉터리에 로깅하는 Batch 작업을 실행합니다. 특히 dsub 저장소에는 samtools를 사용하여 --input 플래그에서 지정한 BAM 파일의 색인을 생성하는 사전 빌드된 Docker 이미지가 포함되어 있습니다.

dsub 파이프라인 실행이 완료될 때까지 명령어가 완료되지 않으며 이는 Batch 작업이 예약된 시간에 따라 달라질 수 있습니다. 일반적으로 약 10분 정도 소요됩니다. Batch는 일반적으로 몇 분 내에 작업 실행을 시작하고 작업 런타임은 약 8분입니다.

처음에는 명령어가 계속 실행 중이며 출력이 다음과 비슷합니다.

Job properties:
  job-id: JOB_NAME
  job-name: samtools
  user-id: USERNAME
Provider internal-id (operation): projects/PROJECT_ID/locations/us-central1/jobs/JOB_NAME
Launched job-id: JOB_NAME
To check the status, run:
  dstat --provider google-batch --project PROJECT_ID --location us-central1 --jobs 'JOB_NAME' --users 'USERNAME' --status '*'
To cancel the job, run:
  ddel --provider google-batch --project PROJECT_ID --location us-central1 --jobs 'JOB_NAME' --users 'USERNAME'
Waiting for job to complete...
Waiting for: JOB_NAME.

그런 다음 작업이 성공적으로 완료되면 명령어가 종료되고 출력은 다음과 비슷합니다.

  JOB_NAME: SUCCESS
JOB_NAME

이 출력에는 다음 값이 포함됩니다.

  • JOB_NAME: 작업의 이름입니다.

  • USERNAME: Google Cloud 사용자 이름입니다.

  • PROJECT_ID: Google Cloud 프로젝트의 프로젝트 ID입니다.

출력 파일 보기

gcloud CLI를 사용하여 샘플 dsub 파이프라인에서 생성된 출력 파일을 보려면 gcloud storage ls 명령어를 실행합니다.

gcloud storage ls gs://BUCKET_NAME/WORK_DIRECTORY \
    --project PROJECT_ID

다음을 바꿉니다.

  • BUCKET_NAME: 만든 Cloud Storage 버킷의 이름입니다.

  • WORK_DIRECTORY: dsub 명령어에 지정한 디렉터리입니다.

  • PROJECT_ID: Google Cloud 프로젝트의 프로젝트 ID입니다.

출력은 다음과 비슷합니다.

gs://BUCKET_NAME/WORK_DIRECTORY/HG00114.mapped.ILLUMINA.bwa.GBR.low_coverage.20120522.bam.bai
gs://BUCKET_NAME/WORK_DIRECTORY/logs/

이 출력에는 BAI 파일과 작업 로그가 포함된 디렉터리가 포함됩니다.

삭제

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

프로젝트 삭제

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

    Google Cloud 프로젝트를 삭제합니다.

    gcloud projects delete PROJECT_ID

개별 리소스 삭제

현재 프로젝트를 계속 사용하려면 이 튜토리얼에서 사용된 개별 리소스를 삭제합니다.

버킷 삭제

파이프라인 실행이 완료되면 Cloud Storage 버킷의 WORK_DIRECTORY 디렉터리에 출력 파일을 만들고 저장합니다.

현재 Google Cloud 계정에 대한 Cloud Storage 요금을 줄이려면 다음 중 하나를 수행합니다.

  • 이 튜토리얼에서 사용한 버킷이 더 이상 필요하지 않으면 --recursive 플래그와 함께 gcloud storage rm 명령어를 사용하여 버킷과 해당 콘텐츠를 모두 삭제합니다.

    gcloud storage rm gs://BUCKET_NAME \
        --recursive \
        --project PROJECT_ID
    

    다음을 바꿉니다.

    • BUCKET_NAME: 만든 Cloud Storage 버킷의 이름입니다.

    • PROJECT_ID: Google Cloud 프로젝트의 프로젝트 ID입니다.

  • 그렇지 않고 버킷이 계속 필요한 경우 --recursive 플래그와 함께 gcloud storage rm 명령어를 사용하여 WORK_DIRECTORY 디렉터리와 해당 콘텐츠민 삭제합니다.

    gcloud storage rm gs://BUCKET_NAME/WORK_DIRECTORY \
        --recursive \
        --project PROJECT_ID
    

    다음을 바꿉니다.

    • BUCKET_NAME: 만든 Cloud Storage 버킷의 이름입니다.

    • WORK_DIRECTORY: dsub 명령어에 지정한 디렉터리입니다.

    • PROJECT_ID: Google Cloud 프로젝트의 프로젝트 ID입니다.

작업 삭제

gcloud CLI를 사용하여 작업을 삭제하려면 gcloud batch jobs delete 명령어를 실행합니다.

gcloud batch jobs delete JOB_NAME \
    --location us-central1 \
    --project PROJECT_ID

다음을 바꿉니다.

  • JOB_NAME: 작업의 이름입니다.
  • PROJECT_ID: Google Cloud 프로젝트의 프로젝트 ID입니다.

다음 단계