BaizeGen 使用手册 手册版本 2026-11-09

版本说明#

发布包以日期和代码版本号命名(baizegen-YYYYMMDD-xxxxxxx)。每个发布包的 README.md 中有该版本的完整变化、实测环境和参考耗时。

开发中(下一个发布包)#

  • 新命令 selectvariants:GATK SelectVariants 4.6.2.0 的选取(类型、JEXL 表达式、样本子集并重算 AC/AN/AF/DP、过滤与未分型样本数、ID、indel 长度等),输出与 GATK 逐条记录相同,参数名相同;--remove-unused-alternates 按保留的等位基因重算 PL/GQ/AD;-t N 多线程,任意线程数输出相同。见 selectvariants。
  • 新命令 variantfiltration:GATK VariantFiltration 4.6.2.0 的过滤(JEXL 表达式、SNP 聚集、掩码),输出与 GATK 逐条记录相同,参数名相同。JEXL 表达式的取值方式与 GATK 完全一致(例如 QD < 2 这样的整数常量和 GATK 一样报错,组合表达式中缺失的注释使整个表达式不生效)。也支持基因型层面的过滤(-G-filter、--set-filtered-genotype-to-no-call,后者按新的基因型重算 AC/AN/AF);-t N 多线程,任意线程数输出相同。见 variantfiltration。
  • 同一样本的多对 FASTQ:fastq2bam、align 的每一端可以写成逗号分隔的文件列表(run1_R1.fq.gz,run2_R1.fq.gz run1_R2.fq.gz,run2_R2.fq.gz),按顺序首尾相接读入,结果与先合并文件再比对完全相同,不必写出合并后的文件。所有引擎都支持;加 --fastp 时 fastp 对合并后的数据运行一次,输出一对修剪后的 FASTQ 和一份报告。见多对 FASTQ。
  • 运行日志:任何命令运行时,都在日志目录下当天的 baizegen_YYYY-MM-DD.log 里追加两行:开始时记录命令行、程序版本(含源码提交号)、用户和工作目录,结束时记录状态(成功 / 失败 / 被终止)、退出码或信号、错误信息、运行时间、CPU 时间和内存峰值;崩溃、内存不足被系统终止、被调度系统杀死时也会记录。默认目录为程序所在目录下的 logs/,可用 --log-dir DIR、环境变量 BAIZEGEN_LOG_DIR 或程序旁的 baizegen.conf 指定,--log-dir off 关闭;--log-tag 指定样本标签(默认取读组的 SM)。新增 baizegen --version。见运行日志。
  • 运行报告:任何命令加 --run-report FILE,写出这次运行的 JSON 记录(成功 / 失败 / 被杀死、错误信息、耗时、内存峰值、输出文件、GPU 退回 CPU 等降级、警告、stderr 末尾),崩溃或被杀死时也会写出,便于批量流程汇总出错的样本。见运行报告。
  • 新命令 fqzip:FASTQ 无损压缩:解压结果与原始 FASTQ 逐字节相同。有参考基因组时,reads 以在参考上的位置和差异保存(--device gpu 时由 GPU 定位);没有参考基因组时用 --pseudo。fastq2bam / align(bwa 引擎)可以直接读入归档,输出与读入解压后的 FASTQ 相同。见 FASTQ 无损压缩。
  • combinegvcfs 新增 --resume(断点续跑):合并途中失败或被中断时,已写出的部分保留下来。再用同一条命令加 --resume 运行,就从最后写完的染色体之后接着跑,结果与一次跑完逐字节相同。需要 -t 2 以上或 --device gpu,且每个输入都有索引。见中途出错后继续运行。
  • --engine bwa-gpu 支持长 read:此前长于 160 bp 的 read(如 2×250)直接报错退出。现在 Illumina 最长的 2×301、华大单端 400 bp 都在 GPU 上比对;更长的也能运行(约 725 bp 以上的批次交给 CPU 上的 bwa)。结果都与 bwa mem 逐条相同,短 read 的速度不变。
  • --engine bwa-gpu 的 -A 2 等打分:匹配得分大于 1 时,GPU 上 mate rescue 的次优得分(影响 MAPQ)此前与 bwa 不同(150 bp 双端约 0.2 % 的记录),已修正。
  • haplotyper:VCF 模式不再逐条输出 drawn after the region GATK draws it before 提示(深度很高的数据上会有上千条;它不表示结果与 GATK 不同,运行结束时的汇总行仍给出计数,设置 BG_QD_JITTER_DEBUG 时逐条输出)。
  • gvcftyper / combinegvcfs --genotype-out 的一个边界情况:位点的替代等位基因超过 6 个时,若某样本最可能的基因型是纯合参考且 GQ 恰好为 1,GATK 有时把它写成 ./.,此前我们写成 0/0(1,091 个样本的群体中前 1 Mb 有 1 处)。已修正,与 GATK 4.6.2.0 一致。
  • fastq2bam(GPU 排序)内存不足时不再中断:标记重复用的 read 端点信息此前只能放在内存里(每条 read 约 20 字节,350× 的 HG005 约 85 GB),内存放不下时会被系统杀掉。现在内存不够时这部分写到 -T 指定的临时目录,标记完自动删除,输出的 BAM 与全部放在内存时逐字节相同。
  • fastq2bam / align 检查 -R:读组行(@RG…)写在 -- 之前时会被当作参考基因组,此前到加载索引时才报错,信息里也不提读组。现在启动时直接报错,并提示改用 --rg。手册中的例子已统一用 --rg 给出读组(--rg 适用于所有引擎,与写在 -- 之后的 -R 结果相同)。

2026-11-11#

  • 常规用法的输出与上一版相同。
  • --max-memory SIZE:所有命令都接受,给本次运行设内存上限(例如 --max-memory 64G)。默认仍按机器内存和 cgroup 限制自动调整;设了上限后,排序数据、标记重复等预算都按"上限减去已占用的内存"计算,其余写到磁盘,GPU 比对器也只在内存够时才读入下一批 reads,输出不变(甘蔗 fastq2bam:默认峰值 79 GB,--max-memory 32G 时 26 GB,慢约 15%)。见内存。
  • 输出文件只在命令成功后出现:所有命令先写 <输出名>.partial,成功结束时才改名为正式文件名;命令失败或被杀死时,正式文件不生成,之前已有的同名结果不被覆盖。批量运行时"输出文件存在"即可视为该步完成。gvcftyper 遇到 RAW_MQ 报错(退出码 2)时不再留下写到一半的 VCF。BG_ATOMIC_OUTPUT=0 恢复直接写入。见输出的完整性。
  • haplotyper 用靶向 panel / 外显子的 BED(-L):17 个 panel 样本(约 200×)的 VCF 和 gVCF 与 GATK 4.6.2.0 整个文件逐字节相同。
    • -L 的区间按参考基因组的染色体顺序排序,重叠的区间合并,与 GATK 相同(此前 BED 中有重叠区间时 gVCF 会出错)。
    • 区间平均短于 1 Mb 时 GPU 版读 BAM 更快:一个 panel 样本的 gVCF 从 42 分钟降到约 1 分钟,结果不变。
    • VCF 模式下可能报 "Invalid interval" 退出、偶尔不结束的问题已修正。
  • fastq2bam:未比对的 reads 很多时(例如 33× 小麦),GPU 排序可能一直不结束,已修正。
  • gvcftyper
    • 表头没有声明的 INFO 字段按 GenotypeGVCFs --lenient 的方式带到输出中(此前丢弃)。
    • 等位基因超过 50 个(参考等位基因和 * 都计入)的位点与 GenotypeGVCFs 一样跳过、不输出(此前会输出);其后位点的 QD 因此也与 GATK 相同。
  • combinegvcfs
    • --variant-list 和 -V 给出的 .list 文件与 GATK 读法相同:每行去掉首尾空白,跳过空行和以 # 开头的行。
    • --genotype-out 的 .tbi 索引不再偶尔被判为比数据旧。
    • 染色体字典的检查与 GATK 相同:输入表头多出参考基因组没有的染色体、或染色体顺序与参考基因组不同时照常运行;同名染色体长度不一致、或与参考基因组没有共同染色体时拒绝运行。落在参考基因组没有的染色体上的记录跳过并警告(GATK 会中途退出)。
    • 表头没有声明的 INFO 字段(GATK 需要 --lenient 才能运行)照 GATK --lenient 带到合并结果和 --genotype-out 的 VCF 中。
    • --genotype-out 同样跳过等位基因超过 50 个的位点,与 GenotypeGVCFs 相同。
    • 各输入表头列出的染色体顺序不同时,输出表头中的 ##contig 行与 GATK 相同(此前会多出某些输入独有的染色体行)。
    • --device gpu 在样本很多(数百个)时,内存占用不再随运行时间不断增长:此前 GPU 传输用的主机内存每次扩大后旧的部分要到程序结束才释放,753 个样本在 125 GB 内存的机器上会涨到约 120 GB。

2026-11-09#

  • 常规用法的输出与上一版相同。
  • align / fastq2bam:不给 -K 时批大小改为 1000 万 × 线程数,与 bwa 本身相同,结果因此随线程数变化(与 bwa 一样);给了 -K 的命令结果不变。
  • gvcftyper
    • -L / -XL 与 GenotypeGVCFs 相同:支持区间字符串、.bed、.interval_list、.list,可重复;新增 --merge-input-intervals、--variant-output-filtering(--only-output-calls-starting-in-intervals)。此前起点在区间之前的缺失会丢失。
    • GATK 3 / 4.0 生成的 gVCF:与 GenotypeGVCFs 一样遇到只有 RAW_MQ 的记录时报错退出(退出码 2),新增 --allow-old-rms-mapping-quality-annotation-data。
    • 重复等位基因、END 小于 POS 等 GATK 会中途报错退出的记录,改为跳过并警告,输出等于 GATK 在去掉这些记录后的结果。
    • 若干边界情况(无变异等位基因的位点、全缺失样本、INFO 键的继承、重复的表头行)与 GenotypeGVCFs 一致。
  • combinegvcfs
    • -L / -XL 也可以与 -t N、--device gpu 一起使用,输出与单线程相同;--device gpu --genotype-out 修正了一处可能卡住的问题。
    • --device gpu 在主机内存紧张时可能中途报错退出(857 个样本、128 GB 内存),已修正。
  • haplotyper:--gatk-version 4.1.9.0 的两处边界情况与 GATK 一致;GPU 版修正了 4.5.0.0 / 4.6.2.0 下极少数记录的差异。
  • 甲基化:--aligner bowtie2 在全部模式下(包括 --non_directional、--local、单端 --pbat)与 Bismark 逐字节相同;转换后的 reads 通过管道直接送给 bowtie2,不再写临时文件,整体更快;基因组载入更快。

2026-11-06#

  • fastq2bam、haplotyper 的输出与上一版相同。
  • 结果不再依赖系统的 glibc:所有程序自带数学库。CPU 版改为基于 musl 的全静态程序,Alpine 等 musl 系统和空容器也能运行;glibc 2.41 及以后的系统上 CPU 版与 GPU 版不再有 PL 差 1 的情况;glibc 2.18–2.27 的系统上 haplotyper 也全部在 GPU 上计算。
  • combinegvcfs 大幅提速,一次运行同时输出 gVCF 和 VCF:新增 --genotype-out;--device gpu 在 GPU 上完成合并、分型和压缩。100 个猪样本全基因组 gVCF + VCF 约 8 分钟(此前仅 gVCF 就要 36 分钟)。可选 --merge-ties-by-input(更快,但输出不再与 GATK 相同)。
  • 甲基化流程有了自己的比对器(--aligner baize,可在 GPU 上运行,不需要安装 bowtie2);新增文库类型 --non_directional、--pbat(含单端)、--local;新增 bsreport、bssummary;bsextract 支持 Bismark 的其余选项。
  • gvcftyper 写 VCF 更快,输出不变。

2026-10-30#

  • CentOS 7 / RHEL 7 上 haplotyper 也全部在 GPU 上计算,结果不变。
  • combinegvcfs 支持多线程(-t N)和 GPU(--device gpu),结果仍与 GATK CombineGVCFs 逐条相同;修正了 gVCF 中染色体顺序与参考基因组不一致时漏掉记录的问题。
  • 新增甲基化流程(试用):bsprep、bsalign --aligner bowtie2、bsdedup、bsextract、fastq2meth,在测试过的人类 WGBS 数据上每个输出文件都与 Bismark 3.1.0 逐字节相同。

2026-10-29(第二版)#

  • GPU 版可在 CentOS 7 等老系统上运行:要求从 glibc ≥ 2.34 降低为 glibc ≥ 2.17。
  • 新增 realign 和 fastq2bam --realign:GATK 3.8-1 RealignerTargetCreator + IndelRealigner,目标区间和每条记录与 GATK 3.8-1 相同(人类 WGS 全基因组 6.77 亿条记录实测一致)。
  • 新增 combinegvcfs:GATK 4.6.2.0 CombineGVCFs,输出逐条相同。
  • gvcftyper 多样本联合分型时,等位基因超过 6 个的位点也与 GenotypeGVCFs 一致。

2026-10-29(第一版)#

  • GPU 版支持 V100(sm_70)。
  • 新增质控指标:fastq2bam --qc 和 qcmetrics,每个文件与所选 GATK 版本自带的 Picard / GATK 逐字节相同,含 samtools flagstat(1.10–1.25)和外显子的 CollectHsMetrics;GPU 版在 GPU 上统计,几乎不增加耗时。
  • --gatk-host-simd avx512 支持 GPU 版。
  • fastq2bam 的输出文件系统不支持 O_DIRECT 时自动改用普通写入。

2026-10-27#

  • 可以指定要复现的 GATK 版本:haplotyper --gatk-version,支持 4.0.12.0 至 4.6.2.0 共 8 个版本;新增 --gatk-host-simd、--gatk-host-glibc、--pair-hmm-implementation LOGLESS_CACHING。GPU 版支持全部版本。
  • VCF / gVCF 的表头与 GATK 一致(除 ##GATKCommandLine 外逐行相同)。
  • 多样本 BAM、多倍体(GPU 版倍性 1–6 全部在 GPU 上计算);gvcftyper 支持多样本联合分型和任意倍性。
  • mutect2 --device gpu:组装、Smith-Waterman 和 PairHMM 在 GPU 上计算,可用多张卡,结果与 CPU 逐字节相同。
  • fastq2bam:比对结果与 bwa mem 0.7.19 逐条相同(相同 -K);每条记录添加 PG:Z:MarkDuplicates 标签(--no-pg-tag 关闭);--fastp 在任何线程数下与 fastp -w 1 相同。
  • 显存不足时各阶段自动拆小或退回 CPU,不会中途失败。

BaizeGen 使用手册 · 手册版本 2026-11-09。命令行参数以所用版本的 baizegen <命令> --help 为准。