AWSのEC2 GPUインスタンスでNanopore Guppyを実行する
目的
- Nanopore GuppyをGPUで実行する
EC2の環境
- p3.2xlarge
- ubuntu 16.04
手順
- GPUが使用出来るEC2インスタンスを起動する
- AWS EC2のLinux インスタンスに NVIDIA ドライバをインストールする
- Nanopore Guppyのインストール
- Nanopore Guppyを実行する
1. GPUが使用出来るEC2インスタンスを起動する
AWS EC2 の GPUの製品シリーズ(2019/07/24現在)。
Nanoporeのウェブページをみると、製作者がTesla V100 を使っているようだ。Guppyと互換性があるだろうと考えてTesla V100にする。
GPUつきのEC2インスタンスは、値段高い。(仕方ないとは思うけど率直な感想)
コンソール画面からp3.2xlargeのインスタンスを起動。テスト用なので小さいインスタンスを選択した。EC2インスタンスを立てる処理に特別なことはしていないので説明は省略。
2. AWS EC2のLinux インスタンスに NVIDIA ドライバをインストールする
http://www.nvidia.com/Download/Find.aspx からNvidia Driverをダウンロードする。
EC2インスタンス環境に合わせて、Tesla V100、ubuntu16.04、CUDA Toolkit 最新バージョンを選択して「SEARCH」ボタンを押下
2つのドライバ候補が表示されたので、新しいバージョンのversion 418.67の 「Tesla Driver for Ubunbu 16.04」をクリック(リンクになってる)
Dowonload画面に遷移した。この後にEC2インスタンス上からwgetしてドライバをダウンロードするので「DOWNLOAD」ボタンのURLをコピーしておく。
EC2インスタンスにログインして、NVIDIAドライバをインストールする。基本的に以下URLのアマゾンの公式ドキュメントの通りに実行する
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/install-nvidia-driver.html
EC2インスタンスに接続
# パッケージの更新
$ sudo apt-get update -y
# パッケージのアップグレード
$ sudo apt-get upgrade -y linux-aws
# インスタンス再起動
$ sudo reboot
EC2インスタンスに再接続
# gccとカーネルヘッダーパッケージをインストール
$ sudo apt-get install -y gcc make linux-headers-$(uname -r)
# NVIDIA グラフィックカード用のnouveauオープンソースを無効化する
$cat << EOF | sudo tee --append /etc/modprobe.d/blacklist.conf
blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist nvidiafb
blacklist rivatv
EOF
# 以下の行を追加する
$ sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX="rdblacklist=nouveau"
# grubの再構築
$ sudo update-grub
# NVIDIA ドライバのダウンロード。NVIDIAのホームページから検索したドライバのURLを指定する。
$ wget https://www.nvidia.com/content/DriverDownload-March2009/confirmation.php?url=/tesla/xxx.xxx/nvidia-diag-driver-local-repo-ubuntu1604-xxx.xxx.amd64.deb&lang=us&type=Tesla
# NVIDIA ドライバーのインストール
$ sudo /bin/sh ./NVIDIA-Linux-x86_64-xxx.xxx.run
# インスタンスの再起動
$ sudo reboot
EC2インスタンスに再接続
# NVIDIA ドライバがインストールされたか確認する
$ nvidia-smi -q | head
3. Nanopore Guppyのダウンロード
NanoporeのサイトからGuppyをダウンロードする。NanoporeのユーザのみGuppyのダウンロードが可能。
# Guppyのダウンロード $ wget https://xxxxx/xxxxx/ont-guppy_3.1.5_linux64.tar.gz # 解凍する $ tar xzvf ont-guppy_3.1.5_linux64.tar.gz
4. Nanopore Guppyを実行する
コマンドのオプションを確認する
guppy_basecaller
--input 当研究室でNanopore PromethIONでシークエンスしたデータの一部を入力する
--flowcell シークエンス時に使用したFlowcell
--kit シークエンス時に使用したKit
--save_path 出力ディレクトリ
-x auto GPUを使用するときにこのオプションを使用する
--cpu_threads_per_caller ベースコールあたりのCPUスレッドの数。GPUを使用しないときにこのオプションを指定する。
GPUモード
実行時間 114秒
ubuntu@ip-xxx-xx-xx-xxx:~/tools$ ont-guppy/bin/guppy_basecaller --flowcell FLO-PRO002 --kit SQK-LSK109 --input ~/guppy/input --save_path ~/guppy/output_gpu -x auto
ONT Guppy basecalling software version 3.1.5+781ed57
config file: /home/ubuntu/tools/ont-guppy/data/dna_r9.4.1_450bps_hac_prom.cfg
model file: /home/ubuntu/tools/ont-guppy/data/template_r9.4.1_450bps_hac_prom.jsn
input path: /home/ubuntu/guppy/input
save path: /home/ubuntu/guppy/output_gpu
chunk size: 1000
chunks per runner: 1000
records per file: 4000
num basecallers: 4
gpu device: auto
kernel path:
runners per device: 2
Found 5 fast5 files to process.
Init time: 4247 ms
0% 10 20 30 40 50 60 70 80 90 100%
|----|----|----|----|----|----|----|----|----|----|
***************************************************
Caller time: 114628 ms, Samples called: 1694657572, samples/s: 1.4784e+07
Finishing up any open output files.
Basecalling completed successfully.
CPUモード
実行開始から2時間で、全体の10%くらいの進捗(遅いorz
ubuntu@ip-xxx-xx-xx-xxx:~/tools$ ont-guppy/bin/guppy_basecaller --flowcell FLO-PRO002 --kit SQK-LSK109 --input ~/guppy/input --save_path ~/guppy/output_cpu --cpu_threads_per_caller 2
ONT Guppy basecalling software version 3.1.5+781ed57
config file: /home/ubuntu/tools/ont-guppy/data/dna_r9.4.1_450bps_hac_prom.cfg
model file: /home/ubuntu/tools/ont-guppy/data/template_r9.4.1_450bps_hac_prom.jsn
input path: /home/ubuntu/guppy/input
save path: /home/ubuntu/guppy/output_cpu
chunk size: 1000
chunks per runner: 1000
records per file: 4000
num basecallers: 4
cpu mode: ON
threads per caller: 2
Found 5 fast5 files to process.
Init time: 2344 ms
0% 10 20 30 40 50 60 70 80 90 100%
|----|----|----|----|----|----|----|----|----|----|
*******
EC2インスタンスの値段が高いのでCtrl+Cして処理を中断しました。
GPUモードでFASTQファイルが正常にできた。
Minimap2やngmlrを使用して作ったFASTQのアライメントをしていこうと思う。
メモ
- Albacoreの実行も試みたが、自分が持っているシークエンスデータのフローセルとキットの組み合わせ(--flowcell FLO-PRO002 --kit SQK-LSK109)が存在しなかった。新しくシークエンスしたFAST5データはguppyを使えということだろうと解釈した。