2020 9/12,9/13 誤字修正
1の続きになります。
ピークメモリ値
以下のグラフは前回の投稿のxeon E5 v4 dualのランログから取った、各ツールのピークメモリ使用量(GB)になる (n=5)。flyeのピークメモリが突出していた。特にエラー修正していないraw ONT リードをアセンブリに使うと60GBを超えていた(*1)。前もってLordecでエラー修正してから使うと、ピークメモリは25GB前後まで減った。
前回の投稿で、32GBメモリのryzen7計算機は、raw ONT リードのアセンブリのみセグメンテーションフォルト を出して終了したと書いたが、ピークメモリの値からメモリが足りなかった事が主要な原因だとわかった。
補足
ところでLoRDEC(紹介)でエラー修正することでONTのアセンブリは変化するのだろうか?アセンブリ配列をseqkitでチェックする。
$ seqkit stats -T flye_correct/assembly.fasta flye_raw/assembly.fasta
出力を表にした。
de novo アセンブリ前にエラー修正することで、contig数は144から49まで減り、連続性も大きく改善していた。最大長のcontigサイズも14Mbから16Mbに増加した。QUAST-LG(紹介)の結果も一番下にまとめた(*5)。アセンブリ前にショートリードでエラー修正する価値は多いにあると言える。
まとめに入る。今回使ったマシンの長所・短所を簡単にまとめた。
1、3700x自作機
不可の低いジョブで高い性能を示したものの、多くのコアを使う計算集約的なジョブでは遅れが目立った。ECCメモリ(参考)を使えないため、長時間のジョブを走らせるには不安が残る。しかし8万円前後で組めることを考えれば費用効果は抜群に高い。2019夏に購入して連続運用しているが、今のところシャットダウンやパーツの破損などのトラブルもない。Ubuntuがかなり成熟してきたことも使い勝手の良さを後押ししている。目立った欠点は128GBしかメモリが積めないことか(ボードによっては64GB)。またメモリがデュアルチャネル、PCIの帯域なども気になるところ。
2、MousePro
簡単なジョブ、計算集約的なジョブを問わず高い性能を示した。
本体価格が一番高い割には計算時間がかかることが多く、今回の比較ではいいところがなかった。flyeのランタイムが長くなった原因は不明。AVX-512対応は長所だが(e.g., BWA MEM2)、AVX-512はクロックが下がる問題があるので手放しで喜べない。
4、mac mini 2018上位
3と同様、特にいいところがなかった。計算集約的なジョブ、特にのlordecのランで遅れが目立ったのは、mac miniの冷却性能が低く、長時間負荷による熱の蓄積でCPUのサーマルスロットリングが起き、上限クロックまで上がらなかったためかもしれない(*4)。osxが使え、各種安定ドライバ、完成度の高い有料アプリが揃っているのが一番のメリットかもしれない。
5、Apple mac pro 2012 early (リンク)
すでに引退させた機種だが、予想以上に高いパフォーマンスを示した。osのアップデートができないので今後セキュリティ面が難しくなるが、用途を限定すればまだまだ使えそうな気がした。しかし電気代の面で高コストである。主力運用は控えたい。
次に、今回実行したジョブの各計算機のランタイムの平均値と、計算機の価格の図を示した。計算機の発売時期は全く異なり、点の数も全然足りないのだが、参考程度に見て欲しい。図では、安くて性能が高い(費用効果が良い)計算機ほど左下に位置する。ryzen7の計算機がその位置に最も近く、2番目に近いのはxeon E5 2680 dualの計算機である。では、ryzen7 3700xが最も優秀な計算機と結論して良いのだろうか。
ここで忘れてはいけないのが、計算機の堅牢性や冗長性、環境負荷(消費電力)など数値に変えにくい因子である。上の図はこれらの因子を抜きにして議論している。いくら安くても、ラン中にメモリエラーを起こしたり、データが頻繁に飛ぶような計算機では使い物にならない。よって、左下に行くほど良い計算機と簡単に判断するのは危険である。とすれば、実は散布図中央の一番下付近がスイートスポットで、この位置する計算機が好ましいのかもしれない。高い計算能力を持ち、堅牢性も備えた計算機を組み立てれば、コストが上がって自然にその辺りにプロットされるからである。今回使った計算機の中では、xeon E5 2680 dualが最もその位置に近いだろうか。
では結局のところどのような計算機を持つのが理想的だろうか?とりあえず3990xを買って計算集約的なジョブにはこちらを使い、ルーチンの軽いジョブはryzenやcoreiシリーズ、という風に使い分けするのがバランスが良いろうか?この手の話はケースバイケースであり、十把一絡げな議論は難しいが、ここで1つ注意したいのは、ZEN2世代のRyzen Threadripperのメモリ上限が256GBしかないことである。256GBメモリでは、真核生物のアセンブリ(例えばmasurcaのメモリ使用量)、メタゲノムのアセンブリ(metaFlyeの質問, metaspades)では不安が残る。幸い現在ではたくさんのクラウドリソースが利用できるようになっていて、お金を払えば24TBメモリなどリッチなクラウドはすぐに利用できる。
この文章自体5年、いや10年遅いが、今や研究室単位で巨大なクラスタを持つ時代ではなくなって来ている。研究室単位ではせいぜいRyzen Threadripper程度のマシンにとどめ、大きなデータはクラウド(スパコン含む)、という風に使い分けるのが賢い選択だと思う。(分野によります。主観性の強い意見なので参考程度に)。
2020 9/13 追記
OEM向けに2TBまで対応したThreadripper Proが発売・出荷されている。こちらのCPUが搭載されたマシンを使えば、メモリ容量問題はほぼ解決する(3990xよりクロックがやや低いので、TRを使うメリットがやや損なわれているのは問題だと思う)。
まとめ
xeon E5 v4 2680 dual > ryzen7 3700x ≥ mac mini i7 > xeon platinum P-8136
補足
*1
flyeのメモリ使用量はGithubにまとめられている。
https://github.com/fenderglass/Flye
*2
実はxeon platinumのマシンはその位置を狙って組んだのだが、ジョブによってかなり時間がかかる計算機になってしまった(flye参照)。
*3
このmac mini2018のcorei7はオプションであり、デフォルトではよりクロックの低いCPUになっている。appleは時々インテル系CPUの発熱を甘く見てやらかすので(macbook pro2018のcorei9コアモデル)、corei7の熱をうまくさばけていないのかもしれない。
*4
学内のスパコンサービスや計算機研究者にお願いしてリッチな環境も利用させてもらえるなら解決する問題かもしれない。
*5
連続性は向上していても、その分エラーが増えていれば意味がない。QUEST-LGで評価する。
quast flye_correct/assembly.fasta flye_raw/assembly.fasta \
-R Arabidopsis_thaliana.TAIR10.dna.toplevel.fa.gz \
-1 clean_1.fq.gz -2 clean_2.fq.gz \
--nanopore ont_trimmed.fq.gz \
--labels flye_correct,flye_raw \
--eukaryote \
-o quast_output \
-t 40 --large
以下に結果の表を乗せた。エラー修正することで、genome fraction6%近く上がった。ミスマッチの塩基数は増えているものの、indelエラーが大きく減った。また、リファレンスゲノムに全くアラインされないcontigの数が41から1に減った。まだindelエラーは多いが、raconやpilonでエラー修正することでさらにrefineできると思われる。
Genome statistics | flye_correct | flye_raw |
Genome fraction (%) | 79.563 | 73.857 |
Duplication ratio | 1.017 | 1.002 |
Largest alignment | 3832552 | 3540314 |
Total aligned length | 96645076 | 88413363 |
NG50 | 14486416 | 12278303 |
NG75 | 11422790 | 9738359 |
NA50 | 488799 | 274714 |
NA75 | 58141 | - |
NGA50 | 488799 | 336387 |
NGA75 | 56885 | - |
LG50 | 4 | 5 |
LG75 | 7 | 7 |
LA50 | 44 | 64 |
LA75 | 222 | - |
LGA50 | 44 | 54 |
LGA75 | 224 | - |
Misassemblies | ||
# misassemblies | 856 | 565 |
# relocations | 428 | 354 |
# translocations | 415 | 199 |
# inversions | 13 | 12 |
# misassembled contigs | 20 | 16 |
Misassembled contigs length | 116668822 | 112170040 |
# local misassemblies | 7465 | 4680 |
# scaffold gap ext. mis. | 0 | 0 |
# scaffold gap loc. mis. | 0 | 0 |
# possible TEs | 304 | 166 |
# unaligned mis. contigs | 15 | 56 |
Unaligned | ||
# fully unaligned contigs | 1 | 41 |
Fully unaligned length | 66442 | 1098364 |
# partially unaligned contigs | 36 | 92 |
Partially unaligned length | 22758306 | 36369393 |
Mismatches | ||
# mismatches | 1264899 | 973593 |
# indels | 381552 | 860169 |
Indels length | 1335715 | 1752268 |
# mismatches per 100 kbp | 1330.59 | 1103.27 |
# indels per 100 kbp | 401.37 | 974.74 |
# indels (<= 5 bp) | 348521 | 827147 |
# indels (> 5 bp) | 33031 | 33022 |
# N's | 200 | 900 |
# N's per 100 kbp | 0.17 | 0.71 |
Statistics without reference | ||
# contigs | 47 | 139 |
# contigs (>= 0 bp) | 47 | 144 |
# contigs (>= 1000 bp) | 47 | 141 |
# contigs (>= 5000 bp) | 46 | 127 |
# contigs (>= 10000 bp) | 43 | 112 |
# contigs (>= 25000 bp) | 41 | 102 |
# contigs (>= 50000 bp) | 38 | 72 |
Largest contig | 16188110 | 14781025 |
Total length | 119509464 | 125898504 |
Total length (>= 0 bp) | 119509464 | 125904440 |
Total length (>= 1000 bp) | 119509464 | 125902454 |
Total length (>= 5000 bp) | 119505257 | 125848957 |
Total length (>= 10000 bp) | 119481288 | 125734397 |
Total length (>= 25000 bp) | 119445279 | 125544799 |
Total length (>= 50000 bp) | 119331684 | 124385925 |
N50 | 14486416 | 12278303 |
N75 | 11422790 | 8802673 |
L50 | 4 | 5 |
L75 | 7 | 8 |
GC (%) | 36.1 | 36.41 |