最佳性能
NVIDIA Parabricks 软件的目标是为生物信息学和基因组分析获得最高性能。您可以调整一些关键的基本系统选项以实现最佳性能。
使用快速 SSD
Parabricks 软件使用两种类型的文件
用户指定的输入/输出文件
执行期间创建并在运行结束时删除的临时文件
当两种类型的文件都位于快速本地 SSD 上时,可实现最佳性能。如果不可能,您可以将输入/输出文件放在快速网络存储设备上,并将临时文件放在本地 SSD 上,使用 --tmp-dir
选项。
测试表明,对于输入/输出文件,您可以使用最多 4 个 GPU,并且仍然可以通过 Lustre 网络获得良好的性能。如果您计划使用超过 4 个 GPU,我们强烈建议对所有类型的文件使用本地 SSD。
DGX 用户
DGX 配备 SSD,通常挂载在 /raid
上。使用此磁盘,并将此磁盘上的目录用作 --tmp-dir
。对于初始测试,您甚至可以将输入文件复制到此磁盘以消除性能的可变性。
在某些情况下,已发现透明大页支持 (THP) 可以提高性能。考虑启用 THP 并在基准测试用例中测试性能。
指定要使用的 GPU
您可以使用命令行选项 --num-gpus N
为那些使用 GPU 的工具选择要运行的 GPU 数量。使用此选项,将仅使用 nvidia-smi
输出中列出的前 N 个 GPU。
要使用特定的 GPU,请设置环境变量 NVIDIA_VISIBLE_DEVICES
。GPU 从零开始编号。例如,此命令将仅使用第二个(GPU #1)和第四个(GPU #3)GPU
$ NVIDIA_VISIBLE_DEVICES="1,3" pbrun fq2bam --num-gpus 2 --ref Ref.fa --in-fq S1_1.fastq.gz --in-fq S1_2.fastq.gz
本节详细介绍了特定于各个工具的指南。
Germline Pipeline 的最佳性能
在 H100 DGX 上,germline pipeline 通常在十分钟内运行。
$ # 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 \
--env TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES=268435456 \
nvcr.io/nvidia/clara/clara-parabricks:4.4.0-1 \
pbrun germline \
--ref /workdir/Homo_sapiens_assembly38.fasta \
--in-fq /workdir/fastq1.gz /workdir/fastq2.gz \
--out-bam /outputdir/fq2bam_output.bam \
--tmp-dir /workdir \
--bwa-cpu-thread-pool 16 \
--out-variants /outputdir/out.vcf \
--run-partition \
--read-from-tmp-dir \
--gpusort \
--gpuwrite \
--keep-tmp
Deepvariant Germline Pipeline 的最佳性能
$ # 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 \
--env TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES=268435456 \
nvcr.io/nvidia/clara/clara-parabricks:4.4.0-1 \
pbrun deepvariant_germline \
--ref /workdir/Homo_sapiens_assembly38.fasta \
--in-fq /workdir/fastq1.gz /workdir/fastq2.gz \
--out-bam /outputdir/fq2bam_output.bam \
--tmp-dir /workdir \
--bwa-cpu-thread-pool 16 \
--out-variants /outputdir/out.vcf \
--run-partition \
--read-from-tmp-dir \
--num-streams-per-gpu 4 \
--gpusort \
--gpuwrite \
--keep-tmp
PacBio Germline Pipeline 的最佳性能
$ # 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 --env TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES=268435456
nvcr.io/nvidia/clara/clara-parabricks:4.4.0-1 \
pbrun pacbio_germline \
--ref /workdir/${REFERENCE_FILE} \
--in-fq /workdir/${INPUT_FASTQ} \
--out-bam /outputdir/${OUTPUT_BAM} \
--out-variants /outputdir/out.vcf
--num-chaining-threads 3 \
--alignment-large-pair-size 5000 \
--process-large-alignments-on-cpu \
--num-alignment-threads-per-gpu 8 \
--num-alignment-device-mem-buffers 8 \
--run-partition \
--read-from-tmp-dir \
--num-streams-per-gpu 4 \
--gpusort \
--gpuwrite \
--keep-tmp
fq2bam 的最佳性能
$ # 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 --env TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES=268435456 \
nvcr.io/nvidia/clara/clara-parabricks:4.4.0-1 \
pbrun fq2bam \
--ref /workdir/Homo_sapiens_assembly38.fasta \
--in-fq /workdir/fastq1.gz /workdir/fastq2.gz \
--out-bam /outputdir/fq2bam_output.bam \
--tmp-dir /workdir \
--bwa-cpu-thread-pool 16 \
--out-recal-file recal.txt \
--knownSites /workdir/hg.known_indels.vcf \
--gpusort \
--gpuwrite
deepvariant 的最佳性能
Parabricks 的 DeepVariant 能够在 GPU 上使用多个流。可以使用的流的数量取决于可用资源。默认流的数量设置为两个,但最多可以增加到六个以获得更好的性能。这需要进行实验,才能在您的系统上获得最佳数量。
$ # 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 --env TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES=268435456
nvcr.io/nvidia/clara/clara-parabricks:4.4.0-1 \
pbrun deepvariant \
--ref /workdir/Homo_sapiens_assembly38.fasta \
--in-bam /outputdir/fq2bam_output.bam \
--out-variants /outputdir/out.vcf \
--num-streams-per-gpu 4 \
--run-partition
haplotypecaller 的最佳性能
$ # 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 --env TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES=268435456
nvcr.io/nvidia/clara/clara-parabricks:4.4.0-1 \
pbrun haplotypecaller \
--ref /workdir/Homo_sapiens_assembly38.fasta \
--in-bam /outputdir/fq2bam_output.bam \
--out-variants /outputdir/out.vcf \
--num-htvc-threads 8 \
--no-alt-contigs \#This flag will ignore all outputs after chrM
--run-partition
minimap2 的最佳性能
以下命令行选项为在 2x 7742 + 2x A100 80GB PCIe 上运行的 PacBio 数据提供了最佳性能。
$ # 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 --env TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES=268435456
nvcr.io/nvidia/clara/clara-parabricks:4.4.0-1 \
pbrun minimap2 \
--ref /workdir/${REFERENCE_FILE} \
--in-fq /workdir/${INPUT_FASTQ} \
--out-bam /outputdir/${OUTPUT_BAM} \
--num-chaining-threads 3 \
--alignment-large-pair-size 5000 \
--process-large-alignments-on-cpu \
--num-alignment-threads-per-gpu 8 \
--num-alignment-device-mem-buffers 8 \
--gpusort \
--gpuwrite
为了进一步提高性能和最终 BAM 写入带宽,请使用 GPUDirect Storage (GDS),它是 CUDA 工具包的一部分。请注意,系统必须设置并支持使用 GDS。
以下是设置和使用 GDS 的参考资料
# Using GDS with the convenience docker wrapper.
$ wget https://raw.githubusercontent.com/NVIDIA/MagnumIO/main/gds/docker/gds-run-container
$ chmod +x gds-run-container
$ ./gds-run-container run \
--rm \
--gpus all \
--enable-mofed \
--enable-gds \
--volume INPUT_DIR:/workdir \
--volume OUTPUT_DIR:/outputdir \
--workdir /workdir \
--env TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES=268435456 \
nvcr.io/nvidia/clara/clara-parabricks:4.4.0-1 \
pbrun fq2bam \
--ref /workdir/Homo_sapiens_assembly38.fasta \
--in-fq /workdir/fastq1.gz /workdir/fastq2.gz \
--out-bam /outputdir/fq2bam_output.bam \
--tmp-dir /workdir \
--out-recal-file recal.txt \
--knownSites /workdir/hg.known_indels.vcf \
--gpusort \
--gpuwrite \
--use-gds
# Using GDS without the wrapper.
$ docker run \
--ipc host \
--volume /run/udev:/run/udev:ro \
--device=/dev/nvidia-fs0 \
--device=/dev/nvidia-fs1 \
--device=/dev/nvidia-fs2 \
--device=/dev/nvidia-fs3 \
--device=/dev/nvidia-fs4 \
--device=/dev/nvidia-fs5 \
--device=/dev/nvidia-fs6 \
--device=/dev/nvidia-fs7 \
--device=/dev/nvidia-fs8 \
--device=/dev/nvidia-fs9 \
--device=/dev/nvidia-fs10 \
--device=/dev/nvidia-fs11 \
--device=/dev/nvidia-fs12 \
--device=/dev/nvidia-fs13 \
--device=/dev/nvidia-fs14 \
--device=/dev/nvidia-fs15 \
--rm \
--gpus all \
-enable-mofed \
--volume INPUT_DIR:/workdir \
--volume OUTPUT_DIR:/outputdir \
--workdir /workdir \
--env TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES=268435456 \
nvcr.io/nvidia/clara/clara-parabricks:4.4.0-1 \
pbrun fq2bam
--ref /workdir/Homo_sapiens_assembly38.fasta \
--in-fq /workdir/fastq1.gz /workdir/fastq2.gz \
--out-bam /outputdir/fq2bam_output.bam \
--tmp-dir /workdir \
--out-recal-file recal.txt \
--knownSites /workdir/hg.known_indels.vcf \
--gpusort \
--gpuwrite \
--use-gds