BUSCO コンテナを EC2 インスタンス で実行できる環境構築してローカルPC と処理速度の違いを比較してみる

2022.03.17

BUSCOの実行環境構築に EC2インスタンスを利用して Docker コンテナで実行してみた記録です。最終目標はクラウドHPCを駆使した Docker コンテナ実行環境を構築します。

  • EC2 インスタンスに Docker インストール
  • BUSCO コンテナを起動
  • BUSCO で解析処理

これまで

前回ローカルPCで BUSCO コンテナの実行確認をしました。

今回はローカルPCだとスペック不足で解析に2時間かかったので AWS の EC2インスタンスで同じ Docker コンテナでの実行環境を作り試してみます。

EC2で実行環境構築してみた

BUSCO コンテナを利用して EC2 インスタンス上で解析処理を走らせてみます。

検証環境

Product Version
BUSCO v5.2.2
Docker 20.10.7
Instance Type C6i.2xlarge
OS Amazon Linuex 2
CPU 8vCPU
Memory 16 GB

EC2インスタンスの準備

高性能なコンピュートリソースを従量課金で使えます。今回は現行最新世代のCPU最適化インスタンスのc6i.2xlargeを使用しました。スペックは 8vCPU, 16GB メモリのスペックです。OS はAmazon Linux2を使用しています。

EC2の作成方法

EC2の作成方法は以下のリンクを参考にしてください。

インスタンスタイプについて

C6i インスタンスタイプについては以下のリンクを参考にしてください。

Docker インストールの準備

Amzon Linux2 に Docker をインストールして BUSCO コンテナを実行する土台を作ります。

sudo yum update -y
sudo yum install docker -y
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -a -G docker ec2-user

usermodの実行を反映させるためec2-userでログインし直すます。設定したsystemctl enableの確認も兼ねてリブートしました。

sudo reboot

リブート後、SSHまたはセッションマネージャーで接続してください。

BUSCO で解析するインプットファイルの準備

ec2-userのホームディレクトリにworkディレクトリを作成します。そして、後ほど BUSCO コンテナにマウントして使います。そのため BUSCO で解析するテストデータを事前にダウンロードして用意しておきます。前回同様にショウジョウバエのリファレンスゲノムをテストデータとして用います。

mkdir ./work
cd ./work
wget https://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/000/001/215/GCF_000001215.4_Release_6_plus_ISO1_MT/GCF_000001215.4_Release_6_plus_ISO1_MT_genomic.fna.gz
gunzip GCF_000001215.4_Release_6_plus_ISO1_MT_genomic.fna.gz

マウント成功した

Docker で BUSCO コンテナ を起動

workディレクトリをマウントして BUSCO コンテナを起動しログインします。

docker run --rm -it --mount type=bind,src=/home/ec2-user/work,dst=/mnt ezlabgva/busco:v5.2.2_cv2 bash

buscoコマンドを実行します。-c 8でCPUコア数/スレッド数をc6i.2xlargeのvCPU数に合わせています。

cd /mnt
busco -i /mnt/GCF_000001215.4_Release_6_plus_ISO1_MT_genomic.fna -l eukaryota -o test.out -m genome -c 8

ローカルPCと比べるとすぐに終わりました。Total running time: 1000 secondsなので約17分で解析が完了しました。ちなみにローカルPCで実行したときは完了するまで2時間かかりました。

実行結果

usco_user@cd63991f92ed:/mnt$ busco -i /mnt/GCF_000001215.4_Release_6_plus_ISO1_MT_genomic.fna -l eukaryota -o test.out -m genome -c 8
2022-02-23 10:15:36 INFO:       ***** Start a BUSCO v5.2.2 analysis, current time: 02/23/2022 10:15:36 *****
2022-02-23 10:15:36 INFO:       Configuring BUSCO with local environment
2022-02-23 10:15:36 INFO:       Mode is genome
2022-02-23 10:15:36 INFO:       Downloading information on latest versions of BUSCO data...
2022-02-23 10:15:38 INFO:       Input file is /mnt/GCF_000001215.4_Release_6_plus_ISO1_MT_genomic.fna
2022-02-23 10:15:38 INFO:       Downloading file 'https://busco-data.ezlab.org/v5/data/lineages/eukaryota_odb10.2020-09-10.tar.gz'
2022-02-23 10:15:56 INFO:       Decompressing file '/mnt/busco_downloads/lineages/eukaryota_odb10.tar.gz'
2022-02-23 10:15:57 INFO:       Running BUSCO using lineage dataset eukaryota_odb10 (eukaryota, 2020-09-10)
2022-02-23 10:15:59 INFO:       Running 1 job(s) on metaeuk, starting at 02/23/2022 10:15:59
2022-02-23 10:24:32 INFO:       [metaeuk]       1 of 1 task(s) completed
2022-02-23 10:24:33 INFO:       ***** Run HMMER on gene sequences *****
2022-02-23 10:24:33 INFO:       Running 255 job(s) on hmmsearch, starting at 02/23/2022 10:24:33
2022-02-23 10:24:33 INFO:       [hmmsearch]     26 of 255 task(s) completed
2022-02-23 10:24:34 INFO:       [hmmsearch]     51 of 255 task(s) completed
2022-02-23 10:24:34 INFO:       [hmmsearch]     77 of 255 task(s) completed
2022-02-23 10:24:34 INFO:       [hmmsearch]     102 of 255 task(s) completed
2022-02-23 10:24:34 INFO:       [hmmsearch]     128 of 255 task(s) completed
2022-02-23 10:24:34 INFO:       [hmmsearch]     153 of 255 task(s) completed
2022-02-23 10:24:35 INFO:       [hmmsearch]     179 of 255 task(s) completed
2022-02-23 10:24:36 INFO:       [hmmsearch]     204 of 255 task(s) completed
2022-02-23 10:24:36 INFO:       [hmmsearch]     230 of 255 task(s) completed
2022-02-23 10:24:37 INFO:       [hmmsearch]     255 of 255 task(s) completed
2022-02-23 10:24:37 INFO:       Extracting missing and fragmented buscos from the file refseq_db.faa...
2022-02-23 10:24:39 INFO:       Running 1 job(s) on metaeuk, starting at 02/23/2022 10:24:39
2022-02-23 10:32:15 INFO:       [metaeuk]       1 of 1 task(s) completed
2022-02-23 10:32:15 INFO:       ***** Run HMMER on gene sequences *****
2022-02-23 10:32:15 INFO:       Running 1 job(s) on hmmsearch, starting at 02/23/2022 10:32:15
2022-02-23 10:32:16 INFO:       [hmmsearch]     1 of 1 task(s) completed
2022-02-23 10:32:17 INFO:       Validating exons and removing overlapping matches
2022-02-23 10:32:17 INFO:       Results:        C:99.6%[S:99.6%,D:0.0%],F:0.4%,M:0.0%,n:255

2022-02-23 10:32:18 INFO:

        --------------------------------------------------
        |Results from dataset eukaryota_odb10             |
        --------------------------------------------------
        |C:99.6%[S:99.6%,D:0.0%],F:0.4%,M:0.0%,n:255      |
        |254    Complete BUSCOs (C)                       |
        |254    Complete and single-copy BUSCOs (S)       |
        |0      Complete and duplicated BUSCOs (D)        |
        |1      Fragmented BUSCOs (F)                     |
        |0      Missing BUSCOs (M)                        |
        |255    Total BUSCO groups searched               |
        --------------------------------------------------
2022-02-23 10:32:18 INFO:       BUSCO analysis done. Total running time: 1000 seconds
2022-02-23 10:32:18 INFO:       Results written in /mnt/test.out
2022-02-23 10:32:18 INFO:       For assistance with interpreting the results, please consult the userguide: https://busco.ezlab.org/busco_userguide.html

2022-02-23 10:32:18 INFO:       Visit this page https://gitlab.com/ezlab/busco#how-to-cite-busco to see how to cite BUSCO

実行結果の出力されたディレクトをローカルPCに持ってきたい場合はSCPで転送してもよいですし、AWS なので EC2 から一度S3バケットにディレクトリをコピーして、ローカルPCからAWS CLIコマンドで取得するか、マネジメントコンソールからS3バケットアクセスしてダウンロードすればよろしいかと。

注意: EC2 から S3 へデータを転送するには EC2 に S3 へアクセスできる権限が必要です。

おわりに

巨大なゲノムを BUSCO で処理するのにスパコンを利用するくらいですから、実行時間を短縮するにはマシンスペックの違いによるものが大きいです。

c6i.2xlargeで特段ハイスペックなインスタンスではありませんでしたが、それでも実行時間は2時間から20分へ短縮できました。計算時間が短くなるということはトライ & エラーもしやすくなので恩恵を感じるのではないでしょうか。

また、コンテナで実行する分には Docker さえインストールすれば済み非常にお手軽なセットアップでした。計算リソースの確保はクラウドだと従量課金で済むのも相性がいいですね。

次回は解析時間短縮を狙って AWS を利用してクラウドHPC環境で実行したいと思います。

トライアンドエラーを調べてみたら

「トライ & エラー」のアンドの表記方法を調べていたら「トライアンドエラー」は和製英語であることを知りました。英語ではTrial and errorという言うのですね。

「トライ・アンド・エラー」は間違い! 会議で使ってはいけない和製ビジネス英語 | 翻訳の代行・見積なら スピード翻訳