miniBWA

#software

背景

在 NGS 分析流程中,序列比对一直是耗时最多的步骤之一。BWA-MEM 作为经典工具统治了这个领域近十年,BWA-MEM2 通过 SIMD 和工程优化实现了约 1.67 倍的加速,但算法本质没有变化。

2026 年,Heng Li 发布了 miniBWA,这才是真正意义上的算法换代。它整合了 BWA-MEM 的 BWT/FM-index、ropebwt3 的 SMEM 算法、minimap2 风格的 chaining 和 ksw2 SIMD 对齐内核,实现了约 4 倍的性能提升。

与此同时,社区也出现了 miniBWA 的 Rust 重写版——miniBWA-rs。本文将从速度、内存、精度、生产成熟度等多个维度,对这四个工具进行全面比较。


核心结论

如果只看 short-read DNA NGS 的综合性能,目前大致是 miniBWA ≈ miniBWA-rust > BWA-MEM2 > BWA-MEM;但如果把"临床生产成熟度和结果兼容性"算进去,则 BWA-MEM2 仍然是最稳妥的。

维度 BWA-MEM BWA-MEM2 miniBWA miniBWA-rs
核心定位 经典基准 BWA-MEM 等价加速 新一代算法 miniBWA Rust 重写
Short-read WGS 速度 ≈1.67× ≈4× ≈miniBWA
相对 BWA-MEM2 ~0.6× >2× 约 >2×
WGS 峰值内存 较低 明显较高 较低 与 miniBWA 相当/略低
与 BWA-MEM 输出 基准 基本 bit-identical 不同 跟 miniBWA 对齐
模拟短读理论比对精度 略优 ≈BWA-MEM 极接近,重复区略低 ≈miniBWA
下游 small variant calling 基准 ≈BWA-MEM 相当或略优 理论上≈miniBWA
成熟度 ★★★★★ ★★★★★ ★★★★☆ ★★☆☆☆
定位 legacy 临床稳妥选择 下一代首选候选 Rust 生态/实验

1. 真正的分水岭:BWA-MEM2 → miniBWA

BWA-MEM2 并没有真正替换 BWA-MEM 的算法。它的核心目标一直是:

"给我和 BWA-MEM 一样的结果,但是算得更快。"

BWA-MEM2 对 FM-index 内存布局、SA 查询、SIMD extension 等进行了大量工程优化,官方明确表示输出应与原始 BWA-MEM 0.7.17 匹配。因此在正常 short-read pipeline 中,可以基本认为:

BWA-MEM ≈ BWA-MEM2 的比对结果和精度。

BWA-MEM2 的提升主要是:算法基本不变 → SIMD / cache / memory layout / batching 优化 → 加速。

但 miniBWA 不一样。Heng Li 已经明确把它定位成 BWA-MEM 的 successor,甚至 BWA 自己的 README 现在都写了:

BWA-MEM for short reads will be replaced by minibwa.

miniBWA 实际做的是 BWA-MEM + ropebwt3 + minimap2 的重新组合

  • 保留 BWA-MEM 的 BWT/FM-index 和 variable-length seed 思路
  • SMEM 查找使用 ropebwt3 的新算法
  • Chaining 换成 minimap2 风格
  • Base alignment 改用 minimap2 的 ksw2 SIMD 内核

这一代才真正发生了算法层面的变化。


2. 比对速度:miniBWA 是这次最大的突破

Heng Li 的 2026 miniBWA 论文,在 GRCh38、32 CPU threads、真实 WGS short reads 上给出了非常直观的结果:

Mapper WGS throughput(大约) 相对 BWA-MEM
BWA-MEM ~30 Gbp/h
BWA-MEM2 ~50 Gbp/h ~1.7×
miniBWA ~135 Gbp/h ~4×
miniBWA-rs ~130 Gbp/h ~4×

论文中明确表述:BWA-MEM2 比 BWA-MEM 快约 67%,而 miniBWA 约为 BWA-MEM 的 4 倍速度,超过 BWA-MEM2 的 2 倍。

对于标准 PE150 WGS:

  • BWA-MEM → BWA-MEM2:明显升级
  • BWA-MEM2 → miniBWA:又是一次类似甚至更大的升级

3. miniBWA 为什么还能比 BWA-MEM2 快 2 倍?

BWA-MEM2 已经 SIMD 化了,按理说再快很多其实很困难。miniBWA 的办法不是继续硬优化 BWA-MEM,而是直接把一些旧设计扔掉。

① SMEM 查找重新设计

miniBWA 使用了最早在 ropebwt3 中实现的新 SMEM 算法,同时缓存全部 10-mer 的 SA interval。更关键的是,它把多条 reads 的 SMEM 搜索批处理在一起进行 memory prefetch

Heng Li 报告这一项就使 SMEM finding 加速约 2.5 倍

传统 BWA-MEM 有个非常典型的 CPU 问题:human genome BWT 本身大约 3 GB,根本塞不进 CPU cache,所以 FM-index 查找大量时间其实是在等内存。

传统方式:
CPU → 算几下 → 等 RAM → 等 RAM → 等 RAM → 算几下

miniBWA 方式:
read1 → prefetch
read2 → prefetch
read3 → prefetch
read4 → prefetch
然后回头处理 read1

通过把多个 query 的 memory request 提前发出去,从而把 memory latency 隐藏掉。

② Chaining 改用 minimap2

BWA-MEM 原来的 chaining 是比较老的 heuristic tree/chaining 方案。miniBWA 使用的是 minimap2 风格的 chaining,只是为了 variable-length seeds 做了调整。

③ 大量减少没必要的 DP

特别是 mate rescue。miniBWA 会先用一个 7-mer hash filter 判断这个 candidate 值不值得进行 Smith-Waterman。明显不靠谱的直接 skip,而不是先跑一遍昂贵的 DP,最后发现垃圾再丢掉。

④ 对高度重复区域"少做无用功"

这是 miniBWA 最有争议、同时也是最聪明的一项优化。BWA-MEM 在 centromere、acrocentric short arms、highly repetitive regions 会尝试大量候选位置。

miniBWA 的观点是:这些 reads 本身在 short-read 条件下很多就不可能被可靠定位。因此少做一些 extension / mate rescue,直接节省了大量 CPU。

但它也正好带来了后面我们要讲的"理论 mapping accuracy 略低"。


4. 内存:miniBWA 反而比 BWA-MEM2 漂亮很多

这是 miniBWA 特别值得注意的地方。

BWA-MEM2 的速度提升很大程度上是用更 aggressive 的内存布局换速度。目前 BWA-MEM2 human genome index 本身的 memory footprint 大约就是 10 GB

在 Heng Li 的 Figure 3、GRCh38、32-thread WGS benchmark 中:

Mapper Peak RAM
BWA-MEM ~8–10 GB
BWA-MEM2 ~25–30 GB
miniBWA ~8–10 GB
miniBWA-rs ~8–10 GB

一个有趣的现象:miniBWA 不仅比 BWA-MEM2 快很多,RAM 反而少很多。

BWA-MEM2 的 peak RAM 受 thread 数、batch、reads characteristics、reference、allocator 影响很大。已有真实 benchmark 曾观察到 BWA-MEM2 在高线程下达到 50–100 GB 以上,而 BWA-MEM 明显低得多。

因此单纯从 CPU throughput / GB RAM 来看,miniBWA 实际非常有优势。


5. miniBWA-rust:Rust 重写版的表现

miniBWA-rs 是社区进行的 Rust faithful translation,目前已同步到 miniBWA v0.6。

Rust 版开发者做了一个 parity benchmark(GRCh38 + WGS PE):

20 threads:

miniBWA C miniBWA-rs
wall time 78.28 s 76.79 s
peak RSS 8.59 GB 7.99 GB
输出 identical

30 threads:

miniBWA C miniBWA-rs
wall time 77.08 s 97.02 s
peak RSS 8.38 GB 8.13 GB
输出 identical

Rust 版真正的结论不是"Rust 比 C 更快",而是:Rust 版现在已经基本可以做到 C 版同一性能等级,内存甚至略低。 作者全部测试项里,Rust/C 平均 peak RSS ratio 约 0.96×

miniBWA 论文自己也说:对 short reads,Rust rewrite closely matches miniBWA;对于 long reads,不同测试环境下相差大约 20%。因此目前不能宣称 Rust 版稳定比 C 版快。


6. 最重要的问题:miniBWA 为了速度,精度到底有没有下降?

这里要分成两个问题:read mapping theoretical accuracy最终 variant calling accuracy。这两个答案是不一样的。

第一层:单纯看模拟 reads 的正确比对位置

BWA-MEM / BWA-MEM2 略胜。

论文用 simulated 2×150 bp reads 测试,整体上 BWA-MEM 的正确比对率略优于 miniBWA。但进一步把 centromere / acrocentric regions 去掉以后,两者曲线已经非常接近。

原因是 miniBWA 有意减少了这些高度重复区域中的 extension、candidate evaluation、mate rescue,所以偶尔会放弃一个 BWA-MEM 最后还能找出来的 alignment。

排名:BWA-MEM ≈ BWA-MEM2 > miniBWA ≈ miniBWA-rs

但差距很小,而且主要集中在高度重复区域。

第二层:最终 variant calling accuracy

这部分比前面的 mapping ROC 更有意义。

作者用了 HG002 short-read → GRCh38 → DeepVariant 1.10 → GIAB Q100 truth set 比较 miniBWA 和 BWA-MEM:

miniBWA BWA-MEM miniBWA 变化
SNP FN 46,367 46,895 -528
SNP FP 7,544 7,585 -41
Indel FN 36,321 37,425 -1,104
Indel FP 5,308 5,218 +90

SNP 方面:miniBWA 的 Sensitivity ↑,而且 Precision 也略 ↑,因为 FN 和 FP 都下降。

Indel 方面:miniBWA 的 Sensitivity 明显 ↑,FN 少了 1,104 个。代价是 Precision 略降,多出 90 个 FP。

作者进一步检查发现,很大一部分改善来自 miniBWA 对 >10 bp indel 的 reads 比 BWA-MEM 更容易形成正确 alignment。这和 minimap2-style chaining / alignment 本身更加适合较大 gap 是一致的。

miniBWA 并不能简单说"为了速度牺牲精度",实际更接近:牺牲了一小部分高度重复区理论 mapping accuracy,换来了更合理的 alignment 算法,最终 small variant calling 反而相当甚至略好。

这个结论非常重要。


7. 但是对临床 NGS 特别重要的坑:ALT contig

这是如果你真考虑把 miniBWA 放进生产 pipeline,最需要注意的一点。

目前 miniBWA README 明确写:

does not properly work with alternate contigs

并建议使用不含 alternate contig 的 reference。

所以如果你现在 pipeline 用的是 GRCh38 full analysis set(带 ALT、decoy、HLA / alternative haplotypes),就不能简单把 bwa-mem2 mem 替换成 minibwa mem 然后认为验证结束了。

这是目前 miniBWA 真正需要注意的生产差异之一。


8. 当前 v0.6 和论文里的 miniBWA 已经有变化

miniBWA 论文是 2026 年 6 月的,但现在最新已经到 v0.7,2026-07-30 发布

其中 v0.5 做了一个非常值得关注的修改:修正 paired-end MAPQ。Heng Li 认为 BWA-MEM 在一个罕见情况下会 overestimate MAPQ,miniBWA 新版本修正了这一点。

release note 特别说明:

在真实 SNP calling 中,这个改变会提高 precision,但降低 sensitivity。

所以上面给出的 DeepVariant 数字严格来说属于论文 benchmark,不应该直接认为当前 v0.6 一定一模一样。当前 v0.6 的 precision/sensitivity balance 已经有轻微调整。这反而说明 miniBWA 现在还处于一个比较活跃的算法成熟期。


9. 商用友好:许可证分析

对于企业或商用场景,许可证是选择工具时的重要考量。以下是四个工具的许可证对比:

工具 主体许可 依赖代码许可 商用友好度
BWA-MEM GPL v3 🟥 有 copyleft 限制
BWA-MEM2 MIT 🟢 宽松
miniBWA MIT libsais (Apache 2), mimalloc (MIT) 🟡 需注意分支选择
miniBWA-rs MIT libsais (Apache 2), mimalloc (MIT) 🟢 宽松

miniBWA 的许可证细节

miniBWA 主体采用 MIT 许可,但它整合了以下项目的源代码:

  • libsais:Apache 2 License,Copyright (c) 2021-2025 Ilya Grebnov
  • mimalloc:MIT License,Copyright (c) 2018-2026 Microsoft Corporation, Daan Leijen

master 分支可选依赖:

  • QSufSort:HPND License,Copyright (c) 1999 N. Jesper Larsson
  • bwtgen:GPL 2 License,Copyright (c) 2004 Wong Chi Kwong

关键注意事项:master 分支默认包含 GPL 的 bwtgen.c 用于低内存 BWT 构建。如果编译这个文件(默认行为),生成的二进制将是 GPL 的。可以通过 make gpl=0 禁用低内存算法来生成非 GPL 二进制。Apache2 分支不包含 GPL 源代码,适合商用场景。

实际建议

场景 推荐选择
商用集成,需避免 GPL miniBWA (Apache2 分支) 或 miniBWA-rs
开源项目,可接受 GPL BWA-MEM、miniBWA 均可
商用闭源产品 BWA-MEM2、miniBWA-rs 最省心
Rust 生态集成 miniBWA-rs,MIT 许可无额外负担

10. 我目前的使用建议

针对常规 Illumina / MGI PE100/PE150 DNA NGS,我的看法:

排名 速度 内存效率 Alignment 可靠性 Small variant 生产成熟度
miniBWA 🥇 🥇 🥈 🥇/🥈 🥈
miniBWA-rs 🥇/🥈 🥇 🥈 理论≈miniBWA 🟥
BWA-MEM2 🥉 🟥 🥇 🥇/🥈 🥇
BWA-MEM 🟥 🥈 🥇 🥇/🥈 🥇但属于 legacy

新建科研 pipeline / 高通量 WGS

优先测试 miniBWA C。

已完成验证的临床 NGS pipeline

BWA-MEM2 继续生产 + miniBWA 做 parallel validation。

等 miniBWA:

  • ALT contig 支持完善
  • 版本稳定一段时间
  • 在 tumor-normal / FFPE / low-VAF / complex indel 上有更多真实验证

再考虑迁移。

miniBWA-rs

目前更像一个非常有意思的技术项目,而不是我会优先用于临床生产的 aligner。除非你有明确需求:Rust library embedding、WebAssembly、Rust pipeline、避免 C ABI / dependency、内嵌 aligner 而不是 CLI subprocess。


11. 与肿瘤靶向检测的相关性

miniBWA 在 >10 bp indel 上的改善,让我非常想进一步看它对 EGFR exon 19 deletion、MET exon14 周边 indel、KIT/PDGFRA indel、FLT3-ITD 乃至低 VAF indel 的真实影响。

论文现在做的是 germline HG002,这和 FFPE 肿瘤 panel 是两个世界

如果你需要,我可以按真正的应用场景,设计一套 "BWA-MEM2 vs miniBWA 肿瘤 NGS 验证方案",包括 SNV、短 Indel、长 Indel、低 VAF、FFPE artifact、同源/重复区域分别该拿什么 truth set、看哪些指标。


参考链接