AWSのEC2 GPUインスタンスでNanopore Guppyを実行する

目的

  • Nanopore GuppyをGPUで実行する

EC2の環境

手順

  1. GPUが使用出来るEC2インスタンスを起動する
  2. AWS EC2のLinux インスタンスNVIDIA ドライバをインストールする
  3. Nanopore Guppyのインストール
  4. Nanopore Guppyを実行する 

1. GPUが使用出来るEC2インスタンスを起動する

AWS EC2 の GPUの製品シリーズ(2019/07/24現在)。

f:id:ken0-1n:20190724154636p:plain

EC2インスタンスGPUシリーズ

Nanoporeのウェブページをみると、製作者がTesla V100 を使っているようだ。Guppyと互換性があるだろうと考えてTesla V100にする。

f:id:ken0-1n:20190724155215p:plain

https://aws.amazon.com/jp/ec2/pricing/on-demand/

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」ボタンを押下

f:id:ken0-1n:20190723173444p:plain

NVIDIA DRIVERの選択

2つのドライバ候補が表示されたので、新しいバージョンのversion 418.67の 「Tesla Driver for Ubunbu 16.04」をクリック(リンクになってる)

f:id:ken0-1n:20190723173736p:plain

SEARCHボタンを押した結果

Dowonload画面に遷移した。この後にEC2インスタンス上からwgetしてドライバをダウンロードするので「DOWNLOAD」ボタンのURLをコピーしておく。

f:id:ken0-1n:20190723174610p:plain

Driverのダウンロード

 

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を使えということだろうと解釈した。

 

docs.aws.amazon.com