macでインフォマティクス

macでインフォマティクス

HTS (NGS) 関連のインフォマティクス情報についてまとめています。

BWA-MEM-SCALE

2025/05/08 追記

 

 BWA-MEM-SCALEはBWA-MEM2およびBWA-Michをベースに、ゲノム配列アライメントの全ステップにおける性能向上を実現した。Exact Match Filter (EMF)、FM-index Accelerator (FMA)、様々な最適化技術が追加されている。BWA-MEM-SCALEは、利用可能なメモリ容量が133GB以上の場合、BWA-MEM2と比較して最大3.32倍の高速化を実現する。また、性能向上を抑制したままメモリ消費量を削減する。BWA-MEM-SCALEは、MAPQスコア、XSタグ、XAタグの一部(実験では3.14%)を除き、BWA-MEM2と同じ結果を得られる。

 

インストール

9900X CPUでAVX2版をコンパイルした (g++ (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0)。5995WX CPUではAVX512版もコンパイルした。*1

Github

git clone --recursive https://github.com/etri/bwa-mem-scale.git bwa-mem-scale
cd bwa-mem-scale
# If AVX512BW (512-bit SIMD) is supported
make clean
make -j<num_threads> scale=1 arch=avx512

# If AVX2 (256-bit SIMD) is supported
make clean
make -j<num_threads> scale=1 arch=avx2

# If SSE4.1 (128-bit SIMD) is supported (default)
make -j<num_threads> scale=1

#パスを通す
export PATH=${PWD}:$PATH

> bwa-mem2.scale.avx2

Usage: bwa-mem2.scale <command> <arguments>

Commands:

  index         create index

  perfect-index create index for perfect match

  smem-table    create index for FM-index accelerator

  mem           alignment

  load-shm      load index on process shared memory

  remove-shm    remove index from process shared memory

  version       print version number

 

> bwa-mem2.scale.avx2 index

Usage:   bwa-mem2 index [options] <in.fasta>

 

Options: -a STR    BWT construction algorithm: bwtsw, is, rb2, mem2 or ert

         -p STR    prefix of the index [same as fasta name]

         -t INT    number of threads for ERT index building [1]

         -6        index files named as <in.fasta>.64.* instead of <in.fasta>.*

 

Warning: `-a bwtsw' does not work for short genomes, while `-a is' and

         `-a div' do not work not for long genomes.

 

         `-a ert' to build ERT index.

 

> bwa-mem2.scale.avx2 perfect-index

Usage: bwa-mem2 perfect-index [-l seed_length] [-s slack] <prefix>

       -s (float) ==> the hash table will have (slack) * (length of reference sequence) entries

T

 

> bwa-mem2.scale.avx2 smem-table

usage: bwa-mem2.scale.avx2 accel <idxbase>

       build two smem tables for FM-index walking acceleration.

 

 

実行方法

十分なメモリが利用できるサーバーで実行する。

 

1、indexing

#1 WA-MEM2と互換性のあるFM-index
bwa-mem2.scale.avx512bw index -t 20 -p index_prefix Homo_sapiens.GRCh38.fa

#2 続いてERTを用いたインデックスを生成 (FM-index検索を高速化)メモリが少ないときはスレッド数を減らす
bwa-mem2.scale.avx512bw index -a ert -t 20 -p index_prefix Homo_sapiens.GRCh38.fa

#3 続いてFMA(FM-index Accelerator)インデックスを生成
bwa-mem2.scale.avx512bw smem-table index_prefix

#4 最後にExact Match Filter(EMF)を用いたインデックスを生成(シード長に基づいて不要な候補を事前にフィルタリング)
bwa-mem2.scale.avx512bw perfect-index -l <seed length> index_prefix

#1の出力例

#2までの出力例

#3までの出力例

#4までの出力例

 

2、1GBのメモリページを121枚確保させる(1GB単位の大きなメモリ領域を使いアクセスを高速化させる) *2。

echo 121 | sudo tee /sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages

#確認
cat /sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages

 

3、load-shmでインデックスを共有メモリに読み込む。-l 150でリード長を指定、-g 121 で使用するHugepage数(step2ので指定した値)を指定。-HでHugepageのサイズを指定(1gb)。*3 *4

bwa-mem2.scale.avx512bw load-shm -H 1gb -l 150 -g 121 Homo_sapiens.GRCh38.dna.primary_assembly.fa 



4、マッピング

bwa-mem2.scale.avx512bw mem -t 20 -i 64 -l 150 -o out.sam Homo_sapiens.GRCh38.dna.primary_assembly.fa reads_R1.fq.gz reads_R2.fq.gz

 

5、共有メモリの削除

bwa-mem2.scale.avx512bw remove-shm

 

 

その他

  • BWA-MEM-SCALEの最小メモリ要件はBWA-MEM2と同じ約20GBだが、すべての最適化メカニズムを有効にするには140GB以上のメモリが必要。総メモリ消費量は主にスレッド数に依存する。

引用

BWA-MEM-SCALE: Accelerating Genome Sequence Mapping on Commodity Servers
Changdae Kim, Kwangwon Koh, Taehoon Kim, Daegyu Han, Jiwon SeoAuthors Info & Claims
ICPP '22: Proceedings of the 51st International Conference on Parallel Processing
Article No.: 83, Pages 1 - 12

https://dl.acm.org/doi/abs/10.1145/3545008.3545033

 

*1

src/utils.hの52-66行目を削除

*2

https://qiita.com/plusultra/items/bcfccb8ef1de46f1b9b7

*3

管理者権限でメモリへのロードを行うと、マッピングや共有メモリの削除はsudo実行する必要がある点に注意。

*4

HugePagesを確保するには、物理メモリ上に連続した領域が必要なため、空きメモリが多数あってもメモリの断片化によって連続して1GB以上空いている領域が少ないと確保できない可能性がある。その場合はサーバーを再起動した直後に実行する。

 

関連