跳转至

BWA-MEM2 — 下一代短读段高速比对工具


一句话说明

BWA-MEM2 是 BWA-MEM 的加速版本,利用 SIMD 指令集(AVX-512/AVX2/SSE)将短读段比对速度提升 2-3 倍,输出结果与 BWA-MEM 完全兼容。


安装与配置

# 方法1:conda 安装(推荐,自动处理依赖)
conda install -c bioconda bwa-mem2  # 从 bioconda 频道安装 bwa-mem2

# 方法2:源码编译安装(需要支持 AVX2 的 CPU)
git clone --recursive https://github.com/bwa-mem2/bwa-mem2  # 克隆仓库(含子模块)
cd bwa-mem2                                                   # 进入目录
make                                                          # 编译,自动检测 CPU 指令集

# 验证安装
bwa-mem2 version  # 查看版本,当前最新 2.3(2025年)

环境要求

  • CPU 需支持 SSE4.1 以上指令集(2010 年后的 CPU 基本都支持)
  • 索引构建需要约 参考基因组大小 × 8 的内存(人类基因组约 24GB)

核心用法

构建索引

# 为参考基因组构建索引(只需一次,耗时约 10-15 分钟)
bwa-mem2 index ref.fa  # ref.fa 是参考基因组 FASTA 文件
# 会生成 .0123 .amb .ann .bwt.2bit.64 .pac 等索引文件

基本比对(双端测序)

# 标准双端比对流程
bwa-mem2 mem \
  -t 16 \                    # 使用 16 个线程加速
  -R '@RG\tID:sample1\tSM:sample1\tPL:ILLUMINA' \  # 添加 read group 信息(GATK 必需)
  ref.fa \                   # 参考基因组(已建索引)
  reads_R1.fq.gz \           # 正向读段(Read 1)
  reads_R2.fq.gz \           # 反向读段(Read 2)
  | samtools sort -@ 8 -o aligned.bam  # 管道排序并输出 BAM 文件

进阶用法

# 比对 + 排序 + 标记重复 一步完成
bwa-mem2 mem -t 16 -R '@RG\tID:S1\tSM:S1\tPL:ILLUMINA' ref.fa R1.fq.gz R2.fq.gz \
  | samtools fixmate -m -@ 4 - - \    # 填充 mate 信息(标记重复前置步骤)
  | samtools sort -@ 4 - \             # 按坐标排序
  | samtools markdup -@ 4 - final.bam  # 标记 PCR 重复读段

samtools index final.bam  # 为 BAM 文件建索引(后续分析必需)

# 单端测序比对(只有一个 FASTQ 文件)
bwa-mem2 mem -t 16 ref.fa reads.fq.gz | samtools sort -o se_aligned.bam

常见问题与踩坑

问题1:索引构建时内存不足(killed / MemoryError)

原因:人类基因组索引需要约 24GB 内存
解决:在大内存节点上运行,或使用 bwa-mem2 index -p prefix ref.fa 指定输出前缀,确认磁盘空间充足

问题2:输出结果与 BWA-MEM 不完全一致

原因:浮点运算精度差异导致极少数读段的 MAPQ 可能略有不同
解决:这是正常现象,不影响下游分析。需要 100% 一致时用原版 BWA-MEM

问题3:运行速度没有明显提升

原因:CPU 不支持 AVX2/AVX-512 指令集
解决lscpu | grep avx 检查 CPU 支持情况,至少需要 SSE4.1

问题4:Read Group 格式错误导致 GATK 报错

原因-R 参数中缺少必要字段或格式不对
解决:确保包含 IDSMPL 三个必需字段,用 \t 分隔


速查卡片

命令用途
bwa-mem2 index ref.fa构建参考基因组索引
bwa-mem2 mem -t 16 ref.fa R1.fq R2.fq双端比对
bwa-mem2 mem -t 16 ref.fa reads.fq单端比对
-R '@RG\tID:xx\tSM:xx\tPL:ILLUMINA'添加 Read Group
-M标记短 split hit 为次要比对(Picard 兼容)
-k 19最小种子长度(默认 19)
-w 100band width(默认 100)
-A 1 -B 4 -O 6 -E 1匹配/错配/开 gap/延伸 gap 罚分