2022/03/21 誤字修正
アップルの開発したM1チップのCPUは、高性能な4コアと、性能は控えめですが省電力な4コアの合計8コアからなるbig.LITTLEライクなヘテロジニアスCPUです。ハイパースレッディング技術はないため、OS側から合計8つのコアとして認識されます。M1チップの性能の高さと省電力性の高さについては2020年の年末にM1のmacが発売された直後からよく耳にしましたが、実際、ショットガンのシークエンシングデータを扱う時にはどのくらいの性能が出るのでしょうか。これを調べた記事や論文は見たことがありません。そこで、M1 macbok airを使って、イルミナのショートリードのマッピングにかかる時間を調べてみることにしました。
使用したハードウエア
ベンチマークに使用するのは、M1チップを積んだmacbook airとmac mini 2018モデル。mac miniにはインテルのcorei7 8700Bが搭載されている。
1、macbook air 2021下位
- CPU: M1 (SoC) (合計8コア8スレッド)
- memory: 8GB LPDDR4X SDRAM 4266MHz (*1) (SoC)
- GPU: M1 (SoC)
- system: drive: M.2 SSD 256 GB
- OS: macOS Big Sur 11.6.2
2、mac mini 2018上位
- CPU: core i7 8700B (合計6コア12スレッド)
- memory: DDR4 2667MHz 16GB x 2 (合計32 GB)
- GPU: CPU内蔵グラフィック
- system: drive: M.2 SSD 512 GB
- OS: macOS Monterey 12.0.1
OSのバージョンは揃えられていません。関係のない話ですが、mac miniは長い間安定なMojave(10.14)を使っていたのですが、ソフトウエアの関係で最近Montereyにアップデートせざるを得なくなりました。使いにくくなって困っています。
ベンチマーク時のハードウエア設定
部屋の温度は21度。他のジョブは実行しない。いつも通り、再起動して10分後に測定開始。
使用したデータ
イルミナで読んだ細菌のペアエンドシークエンシングデータ(150-bp x 2)。 ファイルサイズはgzip圧縮で1GB x 2、非圧縮で2.4GB x 2。リード数は7,151,461 x 2。
測定方法
計測には Rustのhyperfine(紹介)を使用。bwaとminimap2のマッピングタイムを4スレッドで測定する時は以下の通り。
#indexing
bwa index -a is reference.fasta
#bwa mapping (benchmark)
cpu=4
hyperfine "bwa mem -t $cpu reference.fasta sample1_Read* > output.sam"
#indexing
minimap2 -ax sr -d reference.mmi reference.fasta
#minimap2 mapping (benchmark)
cpu=4
hyperfine -r 10 "minimap2 -ax sr -t $cpu reference.mmi sample1_Read* > output.sam"
終わると平均タイム、最大タイム、最小タイムがまとめられる。最大タイムと最低タイムが平均タイムの2倍以上、0.5倍以下になった時はやり直すつもりだったが、今回はこのようなばらつきは起きなかった。昔5950xを使って計測した時は3倍ほどばらついたことがある(ソフトウエアの実行時間は高い再現性があり、反復を調べて分散を出すことは必要ないという考えを否定する結果;n=1で提示されているデータがチェリーピッキングになっている可能性)。
使用したソフトウエア
bwaの各プラットフォーム向けバイナリ
Minimap2のAnaconda配布最新版;v2.24
結果
初めに、M1 macbook airを使ってショートリードのマッピングにかかる時間を、Rosetta2のトランスレーションの有無で比較しました。続いて、M1 macbook airのRosetta2環境とmac mini2018間で、ショートリードのマッピングにかかる時間を比較しました。
まずbwa memのマッピング時間を、Rosetta2のトランスレーションの有無で計測した結果が以下になります。使用スレッド数は1、2、4、8と変えています。全てM1 macbook airの結果になります。インテル版のbwaは、前回説明したように、Rosetta2環境のターミナルを立ち上げて実行しました。
Table.1
同じスレッド数で比較すると、Native環境で実行したarm bwaの方が、Rosetta2のトランスレーション環境で実行したx86 bwaと比べておよそ1.2倍〜1.4倍高速に計算できていました。
続いて、minimap2のマッピング時間をM1 macbook airとmac mini2018間で比較した結果が以下になります(使用データはtable.1と同じ)。使用スレッド数は1、2、4、8と変えています。M1のarm向けのminimap2 バイナリは公開されていないため、前回説明した通り、M1 macbook airのターミナルをRosetta2モードで起動して、x64 minimap2 バイナリをcondaで導入して計測しています。Intel mac miniはそのままx64 minimap2 をcondaで導入して計測しました。結果が以下になります。
Table.2
M1 macbook airの結果はエミュレーションでの結果ですが、同じスレッド数のmac miniと比較するとほぼ同じ時間で計算できていて、シングルスレッドの結果だけはM1 macbook airの方が1.2倍ほど高速でした。これらの結果から導かれる単純な結論は、M1 macbook airはエミュレーション環境でもmac mini2018上位モデルくらいの性能があり、変換なしに実行できればさらに1.2倍〜1.4倍くらい高速であるということです(シングルスレッドに限ればもっと高速)。
マッピング以外も確かめたいところですが、何か興味がある計算があればお伝えください。簡単なものであれば試して結果を↓掲載します。
引用
*1
参考
関連