Trinity 中間ファイルの保存先ストレージの違いで処理時間に影響あるのか確認してみた

Trinity 中間ファイルの保存先ストレージの違いで処理時間に影響あるのか確認してみた

Clock Icon2024.05.18

Trinity は RNA-Seq データの de novo アセンブリで広く使われるアプリケーションです。本記事では、中間ファイルの保存先ストレージが実行パフォーマンスに与える影響を検証します。具体的には、インスタンスストア、EBS、EFS の実行速度を比較し、その結果を分析します。

検証結果サマリ

  • Trinity の中間ファイルの生成場所が実行パフォーマンスに与える影響を検証
    • インスタンスストア vs EBS(gp3) vs EFS(Elastic スループットモード)
  • インスタンスストアと EBS(gp3)の実行速度がほぼ同じ
    • ディスクアクセス以外のところにボトルネックがある可能性あり
  • EFS(Elastic スループットモード)は他のストレージと比べて実行速度が約 3 倍遅い

検証内容・方法

Trinity の実行中には多くの中間ファイルが生成されます。これらのファイルは高い I/O 性能を必要とします。そのため、保存先のストレージ性能が実行パフォーマンスに大きく影響します。本検証では、インスタンスストア、EBS、EFS を使用して実行パフォーマンスに与える影響を確認します。

中間ファイルの保存場所

中間ファイルの生成先は以下のストレージを利用して実行時間を確認します。

  1. インスタンスストア: 一部の EC2 インスタンスに付属する高い I/O 性能のブロックストレージ。インスタンス停止でデータが失われるため、解析終了後に永続ストレージへ退避します。

  2. EBS(Elastic Block Store): 標準的なブロックストレージサービスで、よく利用される gp3 タイプを使用します。性能は 3000 IOPS、スループットは 125MiB/s です。プロビジョンド IOPS(io2)は使用しません。

  3. EFS(Elastic File System): 複数の EC2 インスタンスから同時にアクセス可能なファイルストレージサービス。Elastic スループットモードを利用します。

テスト用のインプットファイル

Trinity のインプットファイルにはシロイヌナズナのシーケンスデータを使用します。

# ファイルサイズ 77 MB
$ ./seqstats /mnt/s3-readonly/reads/D1_R1.fastq
Total n:    382799
Total seq:  29047372 bp
Avg. seq:   75.88 bp
Median seq: 76.00 bp
N 50:       76 bp
Min seq:    51 bp
Max seq:    76 bp

# ファイルサイズ 97 MB
$ ./seqstats /mnt/s3-readonly/reads/L1_R1.fastq
Total n:    485913
Total seq:  36864248 bp
Avg. seq:   75.87 bp
Median seq: 76.00 bp
N 50:       76 bp
Min seq:    51 bp
Max seq:    76 bp

Trinityの実行環境と設定

検証に使用した AWS ParallelCluster のバージョンとコンピュートノードのスペックは以下の通りです。

項目
AWS ParallelCluster 3.9.1
OS Ubuntu 22.04
Compute Node m6id.8xlarge
CPU 16 core
Memory 128 GB
Simultaneous Multi-Threading 無効

Trinity のバージョンは以下の通りです。Apptainer コンテナで実行します。

項目
Trinity v2.15.1

実行時間の測定方法

中間ファイルの保存先のストレージごとに、Trinity の実行を 5 回ずつ行いました。実行終了後に保存される Trinity.timing ファイルから解析処理にかかった時間を確認します。

Trinity.timing には以下の様に開始時刻と、終了時刻、各フェーズでかかった時間が記録されます。

Statistics:
===========
Trinity Version:      Trinity-v2.15.1
Compiler:             GCC
Trinity Parameters:   --seqType fq --single /mnt/s3-readonly/reads/L1_R1.fastq,/mnt/s3-readonly/reads/D1_R1.fastq --CPU 16 --max_memory 128G --output /scratch/test-mountpoint-s3-m6id8x-29/trinity_out_dir
Unpaired read mode
 Input data
  Single.fasta  78 MByte
  Number of unique KMERs: 12092362
  Number of reads:        659537 Output data
  Trinity.fasta 0 MByte

Runtime
=======
Start:       Mon May  6 08:14:09 UTC 2024
End:         Mon May  6 08:25:01 UTC 2024
Trinity   652 seconds
  Inchworm (phase 1 - read clustering)  19 seconds
  Chrysalis (phase 1 - read clustering) 603 seconds
  Rest (phase 2 - parallel assembly)       30 seconds

実行結果

Trinity実行速度の比較

インスタンスストアと EBS(gp3)の実行速度がほぼ同じでした。EFS は高い I/O 性能が必要になると遅く、不向きでした。

ストレージタイプ 1回目 2回目 3回目 4回目 5回目 平均
インスタンスストア 660 660 665 673 654 662.40
EBS(gp3) 652 673 669 662 658 662.80
EFS(Elastic スループット) 1830 1754 1689 1674 1549 1699.20

ディスクアクセスのメトリクス

解析実行中のディスク読み書きのメトリクスです。とちらも大差ない結果でした。

インスタンスストア

EBS(gp3)

EFS Elastic スループットモードの課金

Elastic スループットモードの読み書き課金は $0 の状態から検証を始めました。中間ファイルの生成先が EFS になると、読み書きが発生するため課金されます。今回の検証では、EFS が最もパフォーマンスが悪く、読み書きで従量課金も発生するため、最もコストパフォーマンスが悪い結果となりました。

検証前

検証後

考察・展望

インスタンスストアと EBS(gp3)の実行速度がほぼ同じであることから、ディスク I/O 以外にボトルネックがあると考えています。 一方、EFS は高い I/O 性能を要求する用途には適していないことが明らかになりました。今後はボトルネックを特定し、さらなる最適化を図る予定です。

おわりに

インスタンスストアの実行速度が一番早いと予想していましたが、EBS(gp3)と実行速度という結果でした。Trinity 実行のために Apptainer を利用していることもあり、Apptainer の設定不備の可能性もあり、切り分けができていません。CloudWatch のメトリクスを細かく確認していこうかと思ったのですが、Trinity の実行オプションに --monitor がありました。概ね必要そうなデータが取れそうなので Apptainer 環境でも実行可能か試すところからはじめてみます。

Trinity Runtime Profiling · trinityrnaseq/trinityrnaseq Wiki

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.