miniBWA
背景
在 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× | ≈1.67× | ≈4× | ≈miniBWA |
| 相对 BWA-MEM2 | ~0.6× | 1× | >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 | 1× |
| 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、看哪些指标。