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 종속성이 사전 설치되어 있어 설정 시간이 절약됩니다.
- Amazon EC2 콘솔에서 us-east-1(버지니아 북부) 리전을 선택합니다.
- Deep Learning AMI를 검색하여 새 EC2 인스턴스를 시작할 AMI 를 선택합니다. 이 글에서는 ubuntu20.04를 기반으로 한 tensorflow 2.13버전의 DLAMI 를 사용합니다. 이 글을 쓰는 시점의 최신 버전입니다.
- 하나의 GPU가 있는 p3.2xlarge 인스턴스를 선택합니다. p3.2xlarge 인스턴스의 할당량이 충분하지 않은 경우 AWS 계정의 Amazon EC2 할당량을 늘릴 수 있습니다.
- AWS 환경 요구 사항에 따라 적절한 Amazon Virtual Private Cloud(Amazon VPC) 설정을 구성합니다. Amazon VPC를 처음 구성하는 경우 기본 Amazon VPC를 사용할 수 있으며 Amazon VPC 시작하기를 검토하세요.
- 시스템 볼륨을 200GiB로 설정하고 크기가 3TB (3072GiB) 인 새 데이터 볼륨 하나를 추가합니다.
- 보안 그룹 설정에서 SSH로 EC2 인스턴스에 액세스할 수 있도록 허용하고 EC2 인스턴스가 인터넷에 연결하여 AlphaFold 및 기타 패키지를 설치할 수 있는지 확인합니다.
– 인스턴스는 인터넷 게이트웨이가 연결 되어있는 퍼블릭 서브넷에 배포하여 인터넷을 통해 필요한 패키지를 다운받을 수 있도록 합니다.
– 네트워크 설정 부분의 편집 버튼을 클릭하고 EC2 인스턴스에 사용할 보안그룹을 생성합니다. 내 IP 에서만 ssh 연결을 허용하는 인바운드 룰을 설정하겠습니다.
- EC2 인스턴스를 시작합니다.
- EC2 인스턴스가 준비될 때까지 기다린 후 SSH를 사용하여 Amazon EC2 터미널에 액세스합니다.
- 필요에 따라 새 EC2 인스턴스에 필요한 다른 소프트웨어가 있는 경우 지금 설치하세요.
AlphaFold 설치
이제 AlphaFold를 설치할 준비가 되었습니다.
- SSH를 사용하여 Amazon EC2 터미널에 액세스한 후 먼저 모든 패키지를 업데이트하세요.
sudo apt update
- 아래의 단계를 따라 데이터 볼륨을
/data
폴더에 마운트합니다. 자세한 내용은 Linux에서 사용할 수 있도록 Amazon EBS 볼륨 만들기 문서를 참조하세요. lsblk
명령을 입력하면 사용 가능한 디스크 디바이스 및 해당 마운트 포인트를 확인하여 사용할 디바이스명을 확인할 수 있습니다.
- 볼륨에 파일 시스템이 있는지 확인합니다. 새 볼륨은 원시 블록 디바이스이므로 마운트하여 사용하려면 먼저 해당 볼륨에 파일 시스템을 만들어야 합니다. 디바이스가 빈 볼륨입니다.
sudo file -s /dev/xvdb
- 볼륨에 파일 시스템을 생성하고 볼륨을
/data
폴더에 마운트합니다.sudo mkfs.xfs /dev/xvdb sudo mkdir /data sudo mount /dev/xvdb /data sudo chown ubuntu:ubuntu -R /data df -h /data
- AlphaFold 종속성 및 기타 필요한 도구를 설치합니다.
sudo apt install aria2 rsync git vim wget tmux tree -y
- 작업 폴더를 생성하고 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 를 사용하는데 필요한 모든 데이터가 포함됩니다.
- 제공된 스크립트를 사용하여 백그라운드에서 데이터를 다운로드합니다. 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
폴더에 다음 파일이 있어야 합니다. - /data/alphafold/docker/run_docker.py 파일을 로컬 경로와 일치하도록 업데이트합니다.
vim /data/alphafold/docker/run_docker.py
생성한 폴더의 구성은 다음과 같습니다. EC2 인스턴스에서 다른 폴더 구조를 설정한 경우 그에 맞게 설정하세요.
- Nvidia 컨테이너 키트가 설치되었는지 확인합니다.
sudo docker run --rm --gpus all nvidia/cuda:11.1.1-base nvidia-smi
다음 스크린샷과 비슷한 출력이 표시됩니다.
- AlphaFold 도커 이미지를 빌드합니다.
.dockerignore
파일이/data/alphafold
아래에 있기 때문에 해당 디렉토리에서 이미지를 빌드합니다.cd /data/alphafold docker build -f docker/Dockerfile -t alphafold . docker images
빌드가 완료되면 새 Docker 이미지가 표시됩니다.
- pip 명령어를 통해 AlphaFold 에 필요한 Python 종속성을 설치합니다.
pip3 install -r /data/alphafold/docker/requirements.txt
- CASP14대상 목록으로 이동하여 T1050 일반 텍스트 링크에서 시퀀스를 복사합니다.
- T1050.fasta 파일을 생성한 후 복사한 T1050의 시퀀스를 저장합니다.
vi /data/input/T1050.fasta
- 이와 동일한 프로세스를 사용하여
/data/input
폴더 아래에 테스트용 .fasta 파일을 몇 개 더 만들 수 있습니다.
AlphaFold 로 예측
이제 AlphaFold로 예측을 실행할 준비가 되었습니다.
- 다음 명령을 실행하여
/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 &
tail
명령어로 예측 진행 상황을 모니터링합니다.tail -F /data/nohup.out
전체 예측을 완료하는 데 몇 시간이 걸립니다. 예측이 완료되면 출력 폴더에 다음과 같은 내용이 표시됩니다.
- Output 폴더의 소유자를 변경하여 하위 파일을 복사할 수 있도록 합니다.
sudo chown ubuntu:ubuntu /data/output/alphafold/ -R
scp
명령어를 통해 output 폴더를 로컬 폴더로 복사합니다.scp -i <ec2-key-path>.pem -r ubuntu@<ec2-ip>:/data/output/alphafold/T1050 ~/Downloads/
- NIH의 단백질 3D 뷰어를 사용해 예측된 3D 구조를 확인합니다.
- File > Open File > PDB Files메뉴를 선택하고 신뢰도가 가장 높은 예측을 포함하는
ranked_0.pdb
를 추가합니다.
다음 이미지는 AlphaFold 가 예측한 T1050 구조의 3D 뷰입니다.
데이터 볼륨에서 스냅샷 생성
EC2 인스턴스에 AlphaFold를 설치하는 데는 시간이 걸립니다. 하지만 P3 인스턴스와 EBS 볼륨을 항상 실행하면 비용이 많이 들 수 있습니다. EC2 인스턴스를 빠르게 준비하고 싶지만 필요할 때마다 환경을 재구축하는 데 시간을 낭비하고 싶지는 않을 수 있습니다. EBS 스냅샷은 시간과 비용을 모두 절약하는 데 도움이 됩니다.
- Amazon EC2 콘솔의 탐색 창의 Elastic Block Store 아래에서 볼륨을 선택합니다.
- EC2 인스턴스 ID를 기준으로 필터링합니다. 두 볼륨이 나열되어야 합니다.
- 크기가 3072GiB인 데이터 볼륨을 선택합니다.
- 작업 메뉴에서 스냅샷 생성을 선택합니다. 스냅샷을 생성하는데 몇 시간이 걸립니다.
- 스냅샷이 완료되면 스냅샷을 선택하고 목록에서 새로 생성된 스냅샷을 확인합니다.
데이터 볼륨의 모든 데이터는 나중에 다시 사용할 수 있도록 스냅샷에 안전하게 저장되었습니다. 이제 EC2 인스턴스를 종료할 수 있습니다.
스냅샷으로 EC2 인스턴스 재생성
AlphaFold를 사용하여 새 EC2 인스턴스를 다시 생성하기 위한 첫 번째 단계는 앞서 EC2 인스턴스를 처음부터 생성할 때 수행한 것과 유사합니다. 하지만 데이터 볼륨을 처음부터 새로 만드는 대신 Amazon EBS 스냅샷에서 복원된 새 볼륨을 연결하면 됩니다.
앞서 DLAMI 를 사용하여 EC2 인스턴스 시작 부분의 1~7번을 다시 수행하여 새 EC2 인스턴스를 생성합니다. 한 가지 다른 스텝은 5번 스토리지 구성에서 시스템 볼륨을 200GiB로 설정하되 새 볼륨은 추가하지 않습니다.
- 새 EC2 인스턴스가 실행되면 인스턴스가 생성된 가용영역과 인스턴스ID 를 기록해둡니다.
- Amazon EC2 콘솔에서 스냅샷을 선택합니다.
- 이전에 생성한 스냅샷을 선택합니다.
- 작업 메뉴에서 볼륨 생성을 선택합니다.
- 새 데이터 볼륨을 적절히 설정합니다. 데이터 볼륨의 가용영역이 새로 생성된 EC2 인스턴스와 동일한지 확인합니다. 그렇지 않으면 새 EC2 인스턴스에 볼륨을 마운트 할 수 없습니다.
- 볼륨 생성을 선택하여 새 데이터 볼륨을 생성합니다.
- 볼륨을 선택하고 새로 생성된 데이터 볼륨이 표시되는 지 확인합니다. 사용가능 상태가 되어야 합니다.
- 볼륨을 선택하고 작업 메뉴에서 볼륨 연결을 선택합니다.
- 새로 생성한 EC2 인스턴스를 선택하고 볼륨을 연결합니다.
- SSH 를 사용하여 Amazon EC2 터미널에 접속하고
lsblk
명령어를 실행합니다. 이전 스텝에서 연결한 데이터 볼륨(/dev/xvdf)이 마운트 되어 있지 않습니다.
- 볼륨에 파일 시스템이 있는지 확인합니다. 스냅샷에서 생성된 데이터 볼륨에는 이미 XFS 파일 시스템이 있습니다.
sudo file -s /dev/xvdf
- 새 데이터 볼륨을
/data
폴더에 마운트 합니다.sudo mkdir /data sudo mount /dev/xvdf /data sudo chown ubuntu:ubuntu -R /data
- 시스템의 모든 패키지를 업데이트하고 종속성을 설치합니다. 알파폴드 도커 이미지를 다시 빌드해야 합니다.
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
- Nvidia 컨테이너 키트가 설치되었는지 확인합니다.
sudo docker run --rm --gpus all nvidia/cuda:11.1.1-base nvidia-smi
- 다음 명령을 사용하여
/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 결과 폴더를 삭제하거나 이름을 변경해야 합니다.
- 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 인스턴스를 다시 생성하는 데 필요한 시간이 크게 단축됩니다. 따라서 짧은 시간 내에 예측 실행을 시작할 수 있습니다.