fq2bam (BWA-MEM + GATK)
根据一个或多个 FASTQ 文件对生成 BAM/CRAM 输出。还可以选择性地生成 BQSR 报告。
请参阅 fq2bam 参考 部分,以获取所有可用选项的详细列表。
在 v4.3.2 中,fq2bam 被之前称为 fq2bamfast 的工具所取代。
BWA-MEM 是一种快速、准确的算法,用于将 DNA 序列 reads 比对到参考基因组,执行局部比对并为查询序列的不同部分生成比对结果。它是 Burrows-Wheeler Aligner (BWA) 中用于长度超过 70bp 的 reads 的默认算法,专为 Illumina 和 Pacific Biosciences 等高通量测序技术而设计。
BWA-MEM 能够处理更长的 reads,并且比其他比对算法对错误不太敏感。因此,它被用于各种应用,从测序数据的常规分析到更高级的应用,如从头组装和变异检测。
使用 BWA-MEM 而不是类似工具的一些优势包括
它比许多其他比对算法更快,使其成为高通量测序的理想选择。
它比许多其他比对算法具有更低的假阳性率,这意味着报告的假阳性变异更少。
它具有内存效率,允许在资源有限的情况下使用。
它非常准确,据报告在 Illumina 数据上的准确率超过 99%。
BWA-MEM 可以部署在 Parabricks 中,Parabricks 是一套为基因组学加速二级分析而设计的软件套件,将行业标准工具和工作流程从 CPU 转移到 GPU,并提供相同的分析结果,运行速度提高高达 60 倍。FQ2BAM 是 BWA-MEM 的 Parabricks 封装器,它将对输出进行排序,并且可以按照 GATK 最佳实践标记重复项和重新校准碱基质量评分。在 NVIDIA DGX 系统上,运行 30 倍全基因组的 FQ2BAM 只需 6 分钟,而 CPU 实例(m5.24xlarge,96 x vCPU)则需要 4-9 小时。如果设备内存小于 50GB,则可能需要尝试使用 --bwa-nstreams
或 --low-memory
。
fq2bam 使用加速版本的 BWA-MEM,根据一个或多个 FASTQ 文件对生成 BAM/CRAM 输出。用户可以通过添加 --no-markdups 选项来关闭重复项标记。只有在提供 --knownSites input 和 --out-recal-file output 选项时才会执行 BQSR 步骤;这样做还将生成 BQSR 报告。

# This command assumes all the inputs are in INPUT_DIR and all the outputs go to OUTPUT_DIR.
docker run --rm --gpus all --volume INPUT_DIR:/workdir --volume OUTPUT_DIR:/outputdir \
--workdir /workdir \
nvcr.io/nvidia/clara/clara-parabricks:4.4.0-1 \
pbrun fq2bam \
--ref /workdir/${REFERENCE_FILE} \
--in-fq /workdir/${INPUT_FASTQ_1} /workdir/${INPUT_FASTQ_2} \
--knownSites /workdir/${KNOWN_SITES_FILE} \
--out-bam /outputdir/${OUTPUT_BAM} \
--out-recal-file /outputdir/${OUTPUT_RECAL_FILE}
以下命令是上述 Parabricks 命令的 bwa-0.7.15 和 GATK4 对等命令。这些命令的输出将与上述命令的输出相同。请参阅 输出比较 页面以比较结果。
设置 --bwa-options="-K 10000000"
以生成兼容的 paired-ended 结果。
# Run bwa-mem and pipe the output to create a sorted BAM.
$ bwa mem \
-t 32 \
-K 10000000 \
-R '@RG\tID:sample_rg1\tLB:lib1\tPL:bar\tSM:sample\tPU:sample_rg1' \
<INPUT_DIR>/${REFERENCE_FILE} <INPUT_DIR>/${INPUT_FASTQ_1} <INPUT_DIR>/${INPUT_FASTQ_2} | \
gatk SortSam \
--java-options -Xmx30g \
--MAX_RECORDS_IN_RAM 5000000 \
-I /dev/stdin \
-O cpu.bam \
--SORT_ORDER coordinate
# Mark duplicates.
$ gatk MarkDuplicates \
--java-options -Xmx30g \
-I cpu.bam \
-O mark_dups_cpu.bam \
-M metrics.txt
# Generate a BQSR report.
$ gatk BaseRecalibrator \
--java-options -Xmx30g \
--input mark_dups_cpu.bam \
--output <OUTPUT_DIR>/${OUTPUT_RECAL_FILE} \
--known-sites <INPUT_DIR>/${KNOWN_SITES_FILE} \
--reference <INPUT_DIR>/${REFERENCE_FILE}
虽然与 BWA-mem 和 GATK 相比,Parabricks fq2bam
在功能上不会损失任何准确性,但仍然有几个来源可能导致输出文件中的差异。
BWA-mem
-K
参数
在 paired-ended 模式下,由 -K
指定的 chunk 大小可能会导致输出 BAM 文件中的小不匹配。要消除此处的不匹配,请确保将相同的数字传递给基线 BWA-mem 和 Parabricks fq2bam
,例如 -K 10000000
。
PA
aux 标签Parabricks
fq2bam
将PA
标签放在最后,而 BWA-mem 将其放在最前面。BWA-mem 将
PA
标签四舍五入到 3 位数字,而 Parabricksfq2bam
则不进行四舍五入。Aux 标签可以通过samtools view -x <TAG>
进行过滤
未比对的 reads
Parabricks
fq2bam
对未比对的 reads 的排序方式与基线 GATK SortSam 略有不同。未比对的 reads 可以通过运行samtools view -F 4
使用 samtools 进行过滤。
运行 GPU-bwa mem,协调排序,标记重复项和碱基质量评分重新校准,以将 FASTQ 转换为 BAM/CRAM。
输入/输出文件选项
- --ref REF
-
参考文件的路径。(默认值:None)
此选项为必选项。
- --in-fq [IN_FQ ...]
-
pair-ended FASTQ 文件的路径,后跟可选的带有引号的 read groups(示例:“@RG\tID:foo\tLB:lib1\tPL:bar\tSM:sample\tPU:foo”)。文件必须为 fastq 或 fastq.gz 格式。所有输入集都应具有 read group;否则,都不应具有 read group,并且管道将自动添加。此选项可以重复多次。示例 1:--in-fq sampleX_1_1.fastq.gz sampleX_1_2.fastq.gz --in-fq sampleX_2_1.fastq.gz sampleX_2_2.fastq.gz。示例 2:--in-fq sampleX_1_1.fastq.gz sampleX_1_2.fastq.gz "@RG\tID:foo\tLB:lib1\tPL:bar\tSM:sample\tPU:unit1" --in-fq sampleX_2_1.fastq.gz sampleX_2_2.fastq.gz "@RG\tID:foo2\tLB:lib1\tPL:bar\tSM:sample\tPU:unit2"。对于同一 sample,Read Groups 应具有相同的 sample name (SM) 和不同的 ID 和 PU。(默认值:None)
- --in-se-fq [IN_SE_FQ ...]
-
single-ended FASTQ 文件的路径,后跟可选的带有引号的 read group(示例:“@RG\tID:foo\tLB:lib1\tPL:bar\tSM:sample\tPU:foo”)。文件必须为 fastq 或 fastq.gz 格式。所有输入集都应具有 read group,否则都不应具有 read group,并且管道将自动添加。此选项可以重复多次。示例 1:--in-se-fq sampleX_1.fastq.gz --in-se-fq sampleX_2.fastq.gz。示例 2:--in-se-fq sampleX_1.fastq.gz "@RG\tID:foo\tLB:lib1\tPL:bar\tSM:sample\tPU:unit1" --in-se-fq sampleX_2.fastq.gz "@RG\tID:foo2\tLB:lib1\tPL:bar\tSM:sample\tPU:unit2"。对于同一 sample,Read Groups 应具有相同的 sample name (SM) 和不同的 ID 和 PU。(默认值:None)
- --in-fq-list IN_FQ_LIST
-
包含 pair-ended FASTQ 文件位置的文件的路径。每行必须包含两个 FASTQ 文件的位置,后跟一个 read group,每个位置之间用空格分隔。每组文件(和关联的 read group)必须在单独的行上。文件必须为 fastq/fastq.gz 格式。行语法:<fastq_1> <fastq_2> <read group>(默认值:None)
- --in-se-bam IN_SE_BAM
-
single-ended BAM/CRAM 文件的路径,该文件将用于转换回 FASTQ 作为 fq2bam 的输入。(默认值:None)
- --knownSites KNOWNSITES
-
已知 indels 文件的路径。文件必须为 vcf.gz 格式。此选项可以多次使用。(默认值:None)
- --interval-file INTERVAL_FILE
-
interval 文件的路径,格式为以下格式之一:Picard 样式(.interval_list 或 .picard)、GATK 样式(.list 或 .intervals)或 BED 文件(.bed)。此选项可以多次使用。(默认值:None)
- --out-recal-file OUT_RECAL_FILE
-
碱基质量评分重新校准后的报告文件的路径。(默认值:None)
- --out-bam OUT_BAM
-
BAM/CRAM 文件的路径。(默认值:None)
此选项为必选项。
- --out-duplicate-metrics OUT_DUPLICATE_METRICS
-
标记重复项后重复指标文件的路径。(默认值:None)
- --out-qc-metrics-dir OUT_QC_METRICS_DIR
-
将生成 QC 指标的目录的路径。(默认值:None)
工具选项
- --max-read-length MAX_READ_LENGTH
-
用于 bwa 和过滤 FASTQ 输入的最大 read 长度/大小(即序列长度)(默认值:480)
- --min-read-length MIN_READ_LENGTH
-
用于 bwa 和过滤 FASTQ 输入的最小 read 长度/大小(即序列长度)(默认值:1)
- -L INTERVAL, --interval INTERVAL
-
从中调用 bqsr 的输入 reads 的 interval。所有 interval 都将具有 100 的 padding 以获取 read 记录,并且重叠的 interval 将被合并。Interval 文件应使用 --interval-file 选项传递。此选项可以多次使用(例如“-L chr1 -L chr2:10000 -L chr3:20000+ -L chr4:10000-20000”)。(默认值:None)
- --bwa-options BWA_OPTIONS
-
将支持的 bwa mem 选项作为字符串传递。当前原始 bwa mem 支持的选项是:-M、-Y、-C、-T、-B、-U、-L 和 -K(例如 --bwa-options="-M -Y")(默认值:None)
- --no-warnings
-
禁止显示有关系统线程和内存使用情况的警告消息。(默认值:None)
- --filter-flag FILTER_FLAG
-
如果条目的 flag 符合此条件,则不要在输出中生成 SAM 条目。条件:(flag & filter != 0)(默认值:0)
- --skip-multiple-hits
-
过滤 SA 长度不为 0 的 SAM 条目(默认值:None)
- --align-only
-
在 bwa-mem 之后生成输出 BAM。输出将不会进行坐标排序,也不会标记重复项(默认值:None)
- --no-markdups
-
不执行标记重复项步骤。排序后返回 BAM。(默认值:None)
- --fix-mate
-
将 mate cigar (MC) 和 mate quality (MQ) 标签添加到输出文件。(默认值:None)
- --markdups-assume-sortorder-queryname
-
假设 reads 已按 queryname 排序以进行标记重复项。这也将标记辅助、补充和未比对的 reads 为重复项。此标志不会影响变异检测,但会增加处理时间。(默认值:None)
- --markdups-picard-version-2182
-
假设标记重复项类似于 Picard 版本 2.18.2。(默认值:None)
- --monitor-usage
-
在执行期间监视近似的 CPU 利用率和主机内存使用情况。(默认值:None)
- --optical-duplicate-pixel-distance OPTICAL_DUPLICATE_PIXEL_DISTANCE
-
为了将两个重复簇视为光学重复项,它们之间的最大偏移量。如果未传递 --out-duplicate-metrics,则忽略此选项。(默认值:None)
- --read-group-sm READ_GROUP_SM
-
此运行中 read groups 的 SM 标签。(默认值:None)
- --read-group-lb READ_GROUP_LB
-
此运行中 read groups 的 LB 标签。(默认值:None)
- --read-group-pl READ_GROUP_PL
-
此运行中 read groups 的 PL 标签。(默认值:None)
- --read-group-id-prefix READ_GROUP_ID_PREFIX
-
此运行中 read groups 的 ID 和 PU 标签的前缀。此前缀将用于此运行中的所有 FASTQ 文件对。ID 和 PU 标签将包含此前缀和一个标识符,该标识符对于一对 FASTQ 文件是唯一的。(默认值:None)
- -ip INTERVAL_PADDING, --interval-padding INTERVAL_PADDING
-
要添加到您包含的每个 interval 的 padding 量(以碱基对为单位)。(默认值:None)
- --standalone-bqsr
-
运行独立的 BQSR。(默认值:None)
性能选项
- --bwa-nstreams BWA_NSTREAMS
-
每个 GPU 要使用的 streams 数量;注意:streams 越多,设备内存使用量越大(默认值:4)
- --bwa-cpu-thread-pool BWA_CPU_THREAD_POOL
-
每个 GPU 专用于 CPU 线程池的线程数(默认值:16)
- --num-cpu-threads-per-stage NUM_CPU_THREADS_PER_STAGE
-
(与上述相同)每个 GPU 专用于 CPU 线程池的线程数(默认值:None)
- --gpuwrite
-
使用一个 GPU 加速写入最终的 BAM/CRAM。(默认值:None)
- --gpuwrite-deflate-algo GPUWRITE_DEFLATE_ALGO
-
选择与 --gpuwrite 一起使用的 nvCOMP DEFLATE 算法。请注意,这些选项与 CPU DEFLATE 选项不对应。有效选项为 1、2 和 4。选项 1 最快,而选项 2 和 4 的吞吐量逐渐降低,但压缩率更高。当用户未提供输入时(即 None),默认值为 1(默认值:None)
- --gpusort
-
使用 GPU 加速排序和标记。(默认值:None)
- --use-gds
-
使用 GPUDirect Storage (GDS) 来启用直接数据路径,用于 GPU 内存和存储之间的直接内存访问 (DMA) 传输。必须与 --gpuwrite 同时使用。有关如何设置和使用 GPUDirect Storage 的信息,请参阅 Parabricks 文档 > 最佳性能。(默认值:None)
- --memory-limit MEMORY_LIMIT
-
排序和后排序期间的系统内存限制(以 GB 为单位)。默认情况下,限制为系统总内存的一半。(默认值:62)
- --low-memory
-
使用低内存模式;将降低每个 GPU 的 streams 数量(默认值:None)
通用选项
- --logfile LOGFILE
-
日志文件的路径。如果未指定,消息将仅写入标准错误输出。(默认值:None)
- --tmp-dir TMP_DIR
-
将存储临时文件的目录的完整路径。
- --with-petagene-dir WITH_PETAGENE_DIR
-
PetaGene 安装目录的完整路径。默认情况下,这应该已安装在 /opt/petagene。使用此选项还需要通过设置 LD_PRELOAD 环境变量来预加载 PetaLink 库。可以选择性地设置用于数据和凭据的 PETASUITE_REFPATH 和 PGCLOUD_CREDPATH 环境变量(默认值:None)
- --keep-tmp
-
完成操作后,不要删除存储临时文件的目录。
- --no-seccomp-override
-
不要覆盖 docker 的 seccomp 选项(默认值:None)。
- --version
-
查看兼容的软件版本。
GPU 选项
- --num-gpus NUM_GPUS
-
运行要使用的 GPU 数量。将使用 GPU 0..(NUM_GPUS-1)。
--in-fq 选项接受两个 FASTQ 文件的名称,可以选择后跟带引号的 read group。FASTQ 文件名不得以连字符开头。
使用 --in-fq-list 选项时,输入文件的每一行都需要一个 read group。