AWS 기술 블로그

Amazon EC2에서 AlphaFold v2.0 실행하기

이 글은 AWS Machine Learning Blog에 게시된 ‘Run AlphaFold v2.0 on Amazon EC2 by Qi Wang’을 한국어 번역 및 편집하였습니다.

DeepMind사의 AlphaFold v2.0이 오픈소스로 GitHub에 공개되고 이 논문이 Nature 지에 출판된 이후, 과학 및 연구 커뮤니티의 많은 사람들이 AlphaFold를 직접 사용해보고 싶어 했습니다. Nvidia GPU를 사용하는 Amazon Elastic Compute Cloud (Amazon EC2) 를 통해 컴퓨팅 리소스를 사용하면 AlphaFold를 빠르게 실행하고 직접 사용해 볼 수 있습니다.

이 게시물에서는 Nvidia GPU를 사용하는 EC2 인스턴스에 AlphaFold를 설치하는 방법에 대한 단계별 지침을 제공합니다.

솔루션 개요

AlphaFold 설치 과정은 Deep Learning Amazon Machine Image (DLAMI) 로 시작됩니다. 설치 후에는 인스턴스에서 CASP14 샘플과 함께 AlphaFold 모델을 사용하여 예측을 실행합니다. 또한 나중에 사용할 수 있도록 Amazon EBS(Elastic Block Store) 스냅샷을 생성하여 다시 설정해야 하는 수고를 줄이고 비용을 절감하는 방법도 보여드립니다.

DLAMI 를 사용하여 EC2 인스턴스 시작

이 섹션에서는 AWS의 DLAMI를 사용하여 EC2 인스턴스를 설정하는 방법을 기술합니다. 이미 많은 AlphaFold 종속성이 사전 설치되어 있어 설정 시간이 절약됩니다.

  1. Amazon EC2 콘솔에서 us-east-1(버지니아 북부) 리전을 선택합니다.
  2. Deep Learning AMI를 검색하여 새 EC2 인스턴스를 시작할 AMI 를 선택합니다. 이 글에서는 ubuntu20.04를 기반으로 한 tensorflow 2.13버전의 DLAMI 를 사용합니다. 이 글을 쓰는 시점의 최신 버전입니다.
  3. 하나의 GPU가 있는 p3.2xlarge 인스턴스를 선택합니다. p3.2xlarge 인스턴스의 할당량이 충분하지 않은 경우 AWS 계정의 Amazon EC2 할당량을 늘릴 수 있습니다.
  4. AWS 환경 요구 사항에 따라 적절한 Amazon Virtual Private Cloud(Amazon VPC) 설정을 구성합니다. Amazon VPC를 처음 구성하는 경우 기본 Amazon VPC를 사용할 수 있으며 Amazon VPC 시작하기를 검토하세요.
  5. 시스템 볼륨을 200GiB로 설정하고 크기가 3TB (3072GiB) 인 새 데이터 볼륨 하나를 추가합니다.
  6. 보안 그룹 설정에서 SSH로 EC2 인스턴스에 액세스할 수 있도록 허용하고 EC2 인스턴스가 인터넷에 연결하여 AlphaFold 및 기타 패키지를 설치할 수 있는지 확인합니다.
    – 인스턴스는 인터넷 게이트웨이가 연결 되어있는 퍼블릭 서브넷에 배포하여 인터넷을 통해 필요한 패키지를 다운받을 수 있도록 합니다.
    – 네트워크 설정 부분의 편집 버튼을 클릭하고 EC2 인스턴스에 사용할 보안그룹을 생성합니다. 내 IP 에서만 ssh 연결을 허용하는 인바운드 룰을 설정하겠습니다.
  7. EC2 인스턴스를 시작합니다.
  8. EC2 인스턴스가 준비될 때까지 기다린 후 SSH를 사용하여 Amazon EC2 터미널에 액세스합니다.
  9. 필요에 따라 새 EC2 인스턴스에 필요한 다른 소프트웨어가 있는 경우 지금 설치하세요.

AlphaFold 설치

이제 AlphaFold를 설치할 준비가 되었습니다.

  1. SSH를 사용하여 Amazon EC2 터미널에 액세스한 후 먼저 모든 패키지를 업데이트하세요.
    sudo apt update
  2. 아래의 단계를 따라 데이터 볼륨을 /data 폴더에 마운트합니다. 자세한 내용은 Linux에서 사용할 수 있도록 Amazon EBS 볼륨 만들기 문서를 참조하세요.
  3. lsblk 명령을 입력하면 사용 가능한 디스크 디바이스 및 해당 마운트 포인트를 확인하여 사용할 디바이스명을 확인할 수 있습니다.
  4. 볼륨에 파일 시스템이 있는지 확인합니다. 새 볼륨은 원시 블록 디바이스이므로 마운트하여 사용하려면 먼저 해당 볼륨에 파일 시스템을 만들어야 합니다. 디바이스가 빈 볼륨입니다.
    sudo file -s /dev/xvdb

  5. 볼륨에 파일 시스템을 생성하고 볼륨을 /data 폴더에 마운트합니다.
    sudo mkfs.xfs /dev/xvdb
    sudo mkdir /data
    sudo mount /dev/xvdb /data
    sudo chown ubuntu:ubuntu -R /data
    df -h /data
  6. AlphaFold 종속성 및 기타 필요한 도구를 설치합니다.
    sudo apt install aria2 rsync git vim wget tmux tree -y
  7. 작업 폴더를 생성하고 GitHub 리포지토리에서 AlphaFold 코드를 복제합니다.
    cd /data
    mkdir -p /data/af_download_data
    mkdir -p /data/output/alphafold
    mkdir -p /data/input
    git clone https://github.com/deepmind/alphafold.git

    필요한 데이터는 모두 새로 생성한 볼륨에 저장됩니다. 따라서 이후 생성할 스냅샷에서는 AlphaFold 를 사용하는데 필요한 모든 데이터가 포함됩니다.

  8. 제공된 스크립트를 사용하여 백그라운드에서 데이터를 다운로드합니다. AlphaFold에는 여러 유전자 (서열) 데이터베이스 및 모델 매개변수가 필요합니다.
    nohup /data/alphafold/scripts/download_all_data.sh /data/af_download_data &

    전체 다운로드 프로세스는 하루 이상 걸릴 수 있으므로 완료될 때까지 기다리세요. 파일 용량이 크기 때문에 다운로드에 시간이 소요되는데 아래의 명령어로 각 다운로드 실행 파일을 수정하면 더 빠르게 다운로드를 진행할 수 있습니다. ­­­­-x 옵션은 다운로드에 필요한 커넥션의 수를 지정하는 옵션입니다.

    vi /data/alphafold/scripts/download_uniref90.sh	
    aria2c -x 16 "${SOURCE_URL}" --dir="${ROOT_DIR}"
    

    다음 명령을 사용하여 다운로드 및 압축 해제 프로세스를 모니터링할 수 있습니다.

    du -sh /data/af_download_data/*

    다운로드 프로세스가 완료되면 /data/af_download_data 폴더에 다음 파일이 있어야 합니다.

    1.8T	/data/af_download_data/bfd
    120G	/data/af_download_data/mgnify
    5.3G	/data/af_download_data/params
    56G	    /data/af_download_data/pdb70
    258G	/data/af_download_data/pdb_mmcif
    252M	/data/af_download_data/pdb_seqres
    112G	/data/af_download_data/uniprot
    206G	/data/af_download_data/uniref30
    75G	    /data/af_download_data/uniref90
  9. /data/alphafold/docker/run_docker.py 파일을 로컬 경로와 일치하도록 업데이트합니다.
    vim /data/alphafold/docker/run_docker.py

    생성한 폴더의 구성은 다음과 같습니다. EC2 인스턴스에서 다른 폴더 구조를 설정한 경우 그에 맞게 설정하세요.

    # Path to a directory that will store the results.
    output_dir = '/data/output/alphafold'
    flags.DEFINE_string(
        'output_dir', '/data/output/alphafold',
        'Path to a directory that will store the results.')
  10. Nvidia 컨테이너 키트가 설치되었는지 확인합니다.
    sudo docker run --rm --gpus all nvidia/cuda:11.1.1-base nvidia-smi

    다음 스크린샷과 비슷한 출력이 표시됩니다.

  11. AlphaFold 도커 이미지를 빌드합니다. .dockerignore 파일이 /data/alphafold 아래에 있기 때문에 해당 디렉토리에서 이미지를 빌드합니다.
    cd /data/alphafold
    docker build -f docker/Dockerfile -t alphafold .
    docker images

    빌드가 완료되면 새 Docker 이미지가 표시됩니다.

  12. pip 명령어를 통해 AlphaFold 에 필요한 Python 종속성을 설치합니다.
    pip3 install -r /data/alphafold/docker/requirements.txt
  13. CASP14대상 목록으로 이동하여 T1050 일반 텍스트 링크에서 시퀀스를 복사합니다.
  14. T1050.fasta 파일을 생성한 후 복사한 T1050의 시퀀스를 저장합니다.
    vi /data/input/T1050.fasta

  15. 이와 동일한 프로세스를 사용하여 /data/input 폴더 아래에 테스트용 .fasta 파일을 몇 개 더 만들 수 있습니다.

AlphaFold 로 예측

이제 AlphaFold로 예측을 실행할 준비가 되었습니다.

  1. 다음 명령을 실행하여 /data/input/T1050.fasta에서 단백질 서열을 예측합니다.
    nohup python3 /data/alphafold/docker/run_docker.py --data_dir=/data/af_download_data --fasta_paths=/data/input/T1050.fasta --max_template_date=2020-05-14 &
  2. tail 명령어로 예측 진행 상황을 모니터링합니다.
    tail -F /data/nohup.out

    전체 예측을 완료하는 데 몇 시간이 걸립니다. 예측이 완료되면 출력 폴더에 다음과 같은 내용이 표시됩니다.

    features.pkl
    confidence_model_{1,2,3,4,5}_pred_0.json
    ranked_{0,1,2,3,4}.pdb
    ranked_{0,1,2,3,4}.cif
    ranking_debug.json
    relax_metrics.json
    relaxed_model_{1,2,3,4,5}_pred_0.pdb
    result_model_{1,2,3,4,5}_pred_0.pkl
    timings.json
    unrelaxed_model_{1,2,3,4,5}_pred_0.pdb
    unrelaxed_model_{1,2,3,4,5}_pred_0.cif
    msas/
      bfd_uniclust_hits.a3m
      mgnify_hits.sto
      pdb_hits.hhr
      uniref90_hits.sto
  3. Output 폴더의 소유자를 변경하여 하위 파일을 복사할 수 있도록 합니다.
    sudo chown ubuntu:ubuntu /data/output/alphafold/ -R
  4. scp 명령어를 통해 output 폴더를 로컬 폴더로 복사합니다.
    scp -i <ec2-key-path>.pem -r ubuntu@<ec2-ip>:/data/output/alphafold/T1050 ~/Downloads/
  5. NIH의 단백질 3D 뷰어를 사용해 예측된 3D 구조를 확인합니다.
  6. File > Open File > PDB Files메뉴를 선택하고 신뢰도가 가장 높은 예측을 포함하는 ranked_0.pdb 를 추가합니다.
    다음 이미지는 AlphaFold 가 예측한 T1050 구조의 3D 뷰입니다.

데이터 볼륨에서 스냅샷 생성

EC2 인스턴스에 AlphaFold를 설치하는 데는 시간이 걸립니다. 하지만 P3 인스턴스와 EBS 볼륨을 항상 실행하면 비용이 많이 들 수 있습니다. EC2 인스턴스를 빠르게 준비하고 싶지만 필요할 때마다 환경을 재구축하는 데 시간을 낭비하고 싶지는 않을 수 있습니다. EBS 스냅샷은 시간과 비용을 모두 절약하는 데 도움이 됩니다.

  1. Amazon EC2 콘솔의 탐색 창의 Elastic Block Store 아래에서 볼륨을 선택합니다.
  2. EC2 인스턴스 ID를 기준으로 필터링합니다. 두 볼륨이 나열되어야 합니다.
  3. 크기가 3072GiB인 데이터 볼륨을 선택합니다.
  4. 작업 메뉴에서 스냅샷 생성을 선택합니다. 스냅샷을 생성하는데 몇 시간이 걸립니다.
  5. 스냅샷이 완료되면 스냅샷을 선택하고 목록에서 새로 생성된 스냅샷을 확인합니다.

데이터 볼륨의 모든 데이터는 나중에 다시 사용할 수 있도록 스냅샷에 안전하게 저장되었습니다. 이제 EC2 인스턴스를 종료할 수 있습니다.

스냅샷으로 EC2 인스턴스 재생성

AlphaFold를 사용하여 새 EC2 인스턴스를 다시 생성하기 위한 첫 번째 단계는 앞서 EC2 인스턴스를 처음부터 생성할 때 수행한 것과 유사합니다. 하지만 데이터 볼륨을 처음부터 새로 만드는 대신 Amazon EBS 스냅샷에서 복원된 새 볼륨을 연결하면 됩니다.

앞서 DLAMI 를 사용하여 EC2 인스턴스 시작 부분의 1~7번을 다시 수행하여 새 EC2 인스턴스를 생성합니다. 한 가지 다른 스텝은 5번 스토리지 구성에서 시스템 볼륨을 200GiB로 설정하되 새 볼륨은 추가하지 않습니다.

  1. 새 EC2 인스턴스가 실행되면 인스턴스가 생성된 가용영역과 인스턴스ID 를 기록해둡니다.
  2. Amazon EC2 콘솔에서 스냅샷을 선택합니다.
  3. 이전에 생성한 스냅샷을 선택합니다.
  4. 작업 메뉴에서 볼륨 생성을 선택합니다.
  5. 새 데이터 볼륨을 적절히 설정합니다. 데이터 볼륨의 가용영역이 새로 생성된 EC2 인스턴스와 동일한지 확인합니다. 그렇지 않으면 새 EC2 인스턴스에 볼륨을 마운트 할 수 없습니다.
  6. 볼륨 생성을 선택하여 새 데이터 볼륨을 생성합니다.
  7. 볼륨을 선택하고 새로 생성된 데이터 볼륨이 표시되는 지 확인합니다. 사용가능 상태가 되어야 합니다.
  8. 볼륨을 선택하고 작업 메뉴에서 볼륨 연결을 선택합니다.
  9. 새로 생성한 EC2 인스턴스를 선택하고 볼륨을 연결합니다.
  10. SSH 를 사용하여 Amazon EC2 터미널에 접속하고 lsblk 명령어를 실행합니다. 이전 스텝에서 연결한 데이터 볼륨(/dev/xvdf)이 마운트 되어 있지 않습니다.
  11. 볼륨에 파일 시스템이 있는지 확인합니다. 스냅샷에서 생성된 데이터 볼륨에는 이미 XFS 파일 시스템이 있습니다.
    sudo file -s /dev/xvdf

  12. 새 데이터 볼륨을 /data 폴더에 마운트 합니다.
    sudo mkdir /data
    sudo mount /dev/xvdf /data
    sudo chown ubuntu:ubuntu -R /data
  13. 시스템의 모든 패키지를 업데이트하고 종속성을 설치합니다. 알파폴드 도커 이미지를 다시 빌드해야 합니다.
    sudo apt update
    sudo apt install aria2 rsync git vim wget tmux tree -y
    pip3 install -r /data/alphafold/docker/requirements.txt
    
    cd /data/alphafold
    docker build -f docker/Dockerfile -t alphafold .
    docker images

  14. Nvidia 컨테이너 키트가 설치되었는지 확인합니다.
    sudo docker run --rm --gpus all nvidia/cuda:11.1.1-base nvidia-smi
  15. 다음 명령을 사용하여 /data/input/T1024.fasta에서 단백질 서열의 예측을 실행합니다.
    cd /data
    nohup python3 /data/alphafold/docker/run_docker.py --data_dir=/data/af_download_data --fasta_paths=/data/input/T1024.fasta --max_template_date=2020-05-14 &

    스냅샷에 이미 T1050 결과가 포함되어 있기 때문에 다른 단백질 서열을 사용하기 위해 위와 동일한 단계를 거쳐 T1024 데이터를 저장하고 예측을 실행합니다. T1050 예측을 다시 실행하려면 새 예측을 실행하기 전에 먼저 기존 T1050 결과 폴더를 삭제하거나 이름을 변경해야 합니다.

  16. tail 명령어로 예측 진행 상황을 모니터링합니다.
    tail -F /data/nohup.out

클린업

모든 예측을 완료하고 결과를 로컬로 복사한 후 AWS 리소스를 정리하여 비용을 절약하세요. EBS 데이터 볼륨이 EC2 인스턴스가 종료될 때 삭제되지 않은 경우 EC2 인스턴스를 안전하게 종료한 후 직접 EBS 데이터 볼륨을 삭제할 수 있습니다. AlphaFold를 다시 사용해야 하는 경우 동일한 프로세스에 따라 몇 분 만에 새 EC2 인스턴스를 가동하고 새 예측을 실행할 수 있습니다. 또한 EBS 스냅샷 스토리지 비용 이외의 추가 비용은 발생하지 않습니다.

결론

Nvidia GPU와 Deep Learning AMI를 갖춘 Amazon EC2를 사용하면 새로운 AlphaFold 구현을 설치하고 CASP14 샘플에 대해 예측을 실행할 수 있습니다. 데이터 볼륨의 데이터를 특정 시점 스냅샷에 백업하기 때문에 필요 없을 때 EC2 인스턴스 및 EBS 볼륨에 비용을 지불하지 않아도 됩니다. 이전 스냅샷을 기반으로 EBS 볼륨을 생성하면 AlphaFold를 사용하여 EC2 인스턴스를 다시 생성하는 데 필요한 시간이 크게 단축됩니다. 따라서 짧은 시간 내에 예측 실행을 시작할 수 있습니다.

Jisun Choi

Jisun Choi

최지선 솔루션즈 아키텍트는 소프트웨어 개발 경험을 바탕으로 엔터프라이즈 고객의 클라우드 여정을 돕는 역할을 하고 있습니다.