Amazon Web Services ブログ
Amazon EC2でのAlphaFold v2.0の実行
この記事は、”Run AlphaFold v2.0 on Amazon EC2” を翻訳したものです。
DeepMindによるGitHub上のAlphaFold v2.0のオープンソースに関するNatureの論文の後、科学および研究コミュニティの多くは、DeepMindのAlphaFold実装を直接試してみたいと考えていました。Amazon Elastic Compute Cloud (Amazon EC2)とNVIDIA GPUを介したコンピューティングリソースを使用すると、AlphaFoldをすばやく実行して自分で試すことができます。
この記事では、NVIDIA GPUを使用してEC2インスタンスにAlphaFoldをインストールする方法について、順を追って説明します。
ソリューション概要
このプロセスは、Deep Learning Amazon Machine Image (DLAMI) から始まります。インストール後、インスタンスで CASP14サンプルを持つ AlphaFold モデルを使用して予測を実行します。また、Amazon Elastic Block Store (Amazon EBS) スナップショットを将来使用できるように作成して、再設定する手間を減らし、コストを節約する方法も示します。
新しいEC2インスタンスをゼロからセットアップせずにAlphaFoldを実行するには、この記事の最後のセクションに進んでください。提供されたパブリックEBSスナップショットを使用して、短時間で新しいEC2インスタンスを作成できます。
すべてのステップを完了し、24時間以内にすべてのリソースをシャットダウンした場合、この投稿で使用したAWSリソースの総コストは100ドル未満になります。EBSスナップショットを作成してAWSアカウント内に保存した場合、EBSスナップショットのストレージコストは月額約150ドルになります。
DLAMIを使用してEC2インスタンスを起動
このセクションでは、AWSからDLAMIを使用してEC2インスタンスをセットアップする方法を示します。AlphaFoldの依存関係がすでに多数プリインストールされており、セットアップにかかる時間を節約できます。
- Amazon EC2コンソールで、要件にあったAWS リージョンを選択します。
- Deep Learning AMIを検索して、DLAMIを使用して新しいEC2インスタンスを起動します。ここでは、この記事の執筆時点での最新バージョンUbuntu 18.04をベースにしたDLAMI version 48.0を使っています。
- インスタンスタイプとしてGPUが1つあるp3.2xlargeインスタンスを選択します。p3.2xlargeインスタンスに十分なクォータがない場合は、AWSアカウントのAmazon EC2クォータを増やすことができます。
- AWS環境の要件に基づいて、適切なAmazon Virtual Private Cloud (Amazon VPC)を設定します。Amazon VPCを初めて設定する場合は、デフォルトのAmazon VPCの使用を検討し、「Amazon VPCの使用を開始する」を確認してください。
- システムボリュームを200 GiBに設定し、サイズが3 TB (3072 GiB)の新しいデータボリュームを1つ追加します。
- セキュリティグループの設定で SSH を使用してEC2インスタンスにアクセスできること、およびEC2インスタンスがインターネットに接続してAlphaFoldやその他のパッケージをインストールできることを確認します。
- EC2インスタンスを起動します。
- EC2インスタンスの準備が整うのを待ち、SSHを使用してAmazon EC2ターミナルにアクセスします。
- 必要に応じて、新しいEC2インスタンスに必要なソフトウェアがほかにある場合は、ここでインストールします。
AlphaFoldをインストール
これでAlphaFoldをインストールする準備ができました。
- SSHを使用してAmazon EC2ターミナルにアクセスしたら、まずすべてのパッケージを更新します。
- データボリュームを
/data
フォルダにマウントします。詳細についてはLinuxでAmazon EBSボリュームを使用できるようにするを参照してください。 lsblk
コマンドを使用して、使用可能なディスクデバイスとそのマウントポイント (該当する場合) を表示します。使用する正しいデバイス名を判断するのに役立ちます。- ボリュームにファイルシステムがあるかどうかを確認します。新しいボリュームはrawブロックデバイスであり、マウントして使用する前に、そのボリューム上にファイルシステムを作成する必要があります。デバイスは空のボリュームです。
- ボリューム上にファイルシステムを作成し、ボリュームを
/data
フォルダにマウントします。 - AlphaFoldとその他の必要なツールをインストールします。
- 作業フォルダを作成し、GitHubリポジトリからAlphaFoldコードのクローンを作成します。
新しいボリュームは排他的に使用でき、後で作成するスナップショットには必要なデータがすべて揃っています。
- 提供されたスクリプトをバックグラウンドで使用して、データをダウンロードします。AlphaFoldには、複数の遺伝子 (配列) データベースとモデルパラメーターが必要です。
ダウンロードプロセス全体に10時間以上かかることがありますので、完了するまで待ちます。次のコマンドを使用して、ダウンロードと解凍のプロセスを監視できます。
ダウンロードプロセスが完了すると、
/data/af_download_data
フォルダに次のファイルがあるはずです。 /data/alphafold/docker/run_docker.py
を更新して、構成がローカルパスに反映されるようにします。作成したフォルダでは、構成は次のようになります。EC2インスタンスで別のフォルダ構造を設定する場合は、それに応じて設定します。
- NVIDIAコンテナキットがインストールされていることを確認します。
次のスクリーンショットのような出力が表示されるはずです。
- AlphaFold Dockerイメージをビルドします。ローカルパスが
/data/alphafold
であることを確認してください。.dockerignore
ファイルはそのフォルダの下にあります。ビルドが完了すると、新しいDockerイメージが表示されます。
- pipを使用して、AlphaFoldに必要なすべてのPython依存関係をインストールします。
- CASP14ターゲットリストに移動し、T1050のプレーンテキストリンクからシーケンスをコピーします。
- コンテンツを新しい
T1050.fasta
ファイルにコピーし、/data/input
フォルダーに保存します。
- これと同じプロセスを使用して、
/data/input
フォルダーの下にテスト用の.fasta
ファイルをさらにいくつか作成できます。
GPU用のCloudWatchモニタリングをインストール (オプション)
必要に応じて、GPU用のAmazon CloudWatchモニタリングをインストールします。これにはAWS Identity and Access Management (IAM)ロールが必要です。
- CloudWatch用のAmazon EC2 IAMロールを作成し、EC2インスタンスにアタッチします。
gpumon.py
を開いて、EC2 インスタンスを起動しているリージョンを設定し、CloudWatch名前空間としてAlphaFold
のような新しい名前空間を指定します。gpumon
を起動し、CloudWatchへのGPUメトリックスの送信を開始します。
AlphaFoldで予測
AlphaFoldで予測を実行する準備が整いました。
- 次のコマンドを使用して、
/data/input/T1050.fasta
からのタンパク質配列の予測を実行します。 tail
コマンドを使用して、予測の進行状況を確認します。全体の予測が完了するまでに数時間かかります。予測が完了すると、出力フォルダーに次の内容が表示されます。この場合、
<target_name>
はT1050
です。- 出力フォルダの所有者を
root
から変更して、コピーできるようにします。 scp
を使用して、予測出力フォルダからローカルフォルダに出力をコピーします。- NIHのタンパク質3Dビューアを使用して、結果フォルダーから予測された3D構造を表示します。
- 信頼度が最も高い予測を含む
ranked_0.pdb
を選択します。
以下は、AlphaFoldによるT1050
の予測構造の3Dビューです。
データボリュームからスナップショットを作成
AlphaFoldをEC2インスタンスにインストールするには時間がかかります。ただし、P3インスタンスとEBSボリュームを常に実行し続けると、コストが高くなる可能性があります。EC2インスタンスをすぐに準備したいが、必要なたびに環境の再構築に時間をかけたくない場合もあります。EBSスナップショットは、時間とコストの両方を節約するのに役立ちます。
- Amazon EC2コンソールで、Elastic Block Storeの下のナビゲーションペインで[ボリューム]を選択します。
- EC2インスタンスIDでフィルタリングします。2つのボリュームが表示されます。
- サイズが3072 GiBのデータボリュームを選択します。
- [アクション]メニューの[スナップショットの作成]を選択します。
スナップショットの作成には数時間かかります。 - スナップショットが完了したら、[スナップショット]を選択すると、新しいスナップショットがリストに表示されます。
これで EC2インスタンスを安全にシャットダウンできます。この時点で、データボリューム内のすべてのデータは、将来の使用に備えてスナップショットに安全に保存されます。
スナップショットを使用してEC2インスタンスを再作成
AlphaFoldを使用して新しいEC2インスタンスを再作成するには、最初にEC2インスタンスをゼロから作成したときに行った手順と似ています。ただし、データボリュームをゼロから作成する代わりに、Amazon EBSスナップショットから復元した新しいボリュームをアタッチします。
- お好みのAWSリージョンでAmazon EC2コンソールを開き、
Deep Learning AMI
を検索してDLAMIを使用して新しいEC2インスタンスを起動します。 - Deep Learning AMI (Ubuntu 18.04)を選択します。
- インスタンスタイプとして1つの GPU を持つp3.2xlargeを選択します。p3.2xlargeインスタンスに十分なクォータがない場合は、AWSアカウントのAmazon EC2クォータを増やすことができます。
- AWS環境の要件に基づいて、適切なAmazon VPC設定を構成します。Amazon VPCを初めて設定する場合は、デフォルトのAmazon VPCの使用を検討し、「Amazon VPC の使用を開始する」を確認してください。
- システムボリュームを200 GiBに設定しますが、新しいデータボリュームを追加しないでください。
- セキュリティグループ設定でEC2インスタンスへのアクセスが許可され、EC2インスタンスがインターネットに接続してPythonおよびDockerパッケージをインストールできることを確認します。
- EC2インスタンスを起動します。
- 後のステップで使用するため、インスタンスのアベイラビリティーゾーンとインスタンスID を書き留めておきます。
- Amazon EC2コンソールで、[スナップショット]を選択します。
- 以前に作成したスナップショットを選択するか、以下の手順11で示されている公開スナップショットを使用します。
- [アクション]メニューの[ボリュームの作成]を選択します。
この記事では、リージョンus-east-1
、us-west-2
、およびeu-west-1
で公開スナップショットを提供しています。パブリックスナップショットは、スナップショットIDで検索できます。us-east-1
の場合はsnap-0d736c6e22d0110d0
、us-west-2
の場合はsnap-080e5bbdfe190ee7e
、eu-west-1
ではsnap-08d06a7c7c3295567
です。 - 新しいデータボリューム設定を適宜セットアップします。アベイラビリティーゾーンが新しく作成されたEC2インスタンスと同じであることを確認します。そうしないと、新しいEC2インスタンスにボリュームをマウントできません。
- [ボリュームの作成]を選択して、新しいデータボリュームを作成します。
- [ボリューム]を選択すると、新しく作成されたデータボリュームが表示されます。その状態は[使用可能]であるはずです。
- ボリュームを選択し、[アクション]メニューの[ボリュームのアタッチ]を選択します。
- 新しく作成したEC2インスタンスを選択し、ボリュームをアタッチします。
- SSHを使用してAmazon EC2ターミナルにアクセスし、
lsblk
を実行します。新しいデータボリュームがアンマウントされているのがわかります。この場合は/dev/xvdf
です。
- ボリュームにファイルシステムがあるかどうかを確認します。スナップショットから作成されたデータボリュームには、すでにXFSファイルシステムがあります。
- 新しいデータボリュームを
/data
フォルダにマウントします。 - システム上のすべてのパッケージを更新し、依存関係をインストールします。AlphaFold Dockerイメージを再構築する必要があります。
- NVIDIAコンテナキットがインストールされていることを確認します。
次のスクリーンショットのような出力が表示されるはずです。
- 次のコマンドを使用して、
/data/input/T1024.fasta
のタンパク質配列の予測を実行します。スナップショットにはすでに
T1050
の結果が含まれているため、別のタンパク質配列を使用しています。T1050
の予測をもう一度実行する場合は、新しい予測を実行する前に、まず既存のT1050
結果フォルダーを削除するか名前を変更します。 - tailコマンドを使用して、予測の進行状況を監視します。
全体の予測が完了するまでに数時間かかります。
クリーンアップ
すべての予測を完了し、結果をローカルにコピーしたら、AWSリソースをクリーンアップしてコストを削減します。EC2インスタンスがシャットダウンされたときにEBSデータボリュームが削除されなかった場合は、EC2インスタンスを安全にシャットダウンし、EBSデータボリュームを削除できます。AlphaFoldを再度使用する必要がある場合は、同じプロセスに従って新しいEC2インスタンスを起動し、新しい予測をほんの数分で開始できます。また、EBSスナップショットストレージ以外の追加コストは発生しません。
まとめ
Amazon EC2とNVIDIA GPU、Deep Learning AMIを使用すると、DeepMindの新しいAlphaFold実装をインストールし、CASP14サンプルで予測を実行できます。データボリューム上のデータをその時点でスナップショットにバックアップするため、EC2インスタンスやEBSボリュームが不要なときに料金を支払う必要がありません。前のスナップショットに基づいてEBSボリュームを作成すると、AlphaFoldを使用してEC2インスタンスを再作成するのに必要な時間が大幅に短縮されます。したがって、短時間で予測の実行を開始できます。
著者について
Qi WangはAWSのグローバルヘルスケアおよびライフサイエンスチームに所属するシニアソリューションアーキテクトです。彼はヘルスケア・ライフサイエンス分野におけるビジネスイノベーションとデジタルトランスフォーメーションにおいて10年以上の経験があります。AWSでは、創薬研究、臨床試験、および商業化においてライフサイエンスのお客様の変革に貢献しています。
翻訳はIndustry Solutions Architectの松永が担当しました。原文はこちらです。