使用 Parabricks 进行 DeepVariant 训练
DeepVariant 是一个数据分析流程,它采用深度神经网络来识别来自下一代 DNA 测序 (NGS) 数据的基因变异。虽然 DeepVariant 对于各种 NGS 数据都非常精确,但可能有些用户热衷于制作专门为高度特定数据量身定制的深度学习模型。
DeepVariant 训练流程主要有三个步骤
在训练和验证数据集上以“训练”模式运行 make_examples,
Shuffle 每个示例集,并为每个示例集生成一个数据配置文件,以及
Parabricks 当前包含前两个步骤的 GPU 加速版本。
“make_examples”步骤处理输入数据,生成适合在后续步骤中使用的输出。生成的输出将包含一个标签字段。
从 1.4.0 版本开始,DeepVariant 通过 --channels "insert_size"
标志在其 WGS 配置中引入了一个附加参数。
根据您的数据性质,您可能希望调整 make_examples 步骤的标志,这可能会导致输出示例的格式有所不同。有关这些选项的详细信息,请参阅 DeepVariant 文档。
make_examples 快速入门
此代码运行“make_examples”步骤,将参考文件、BAM 文件、VCF 文件和 BED 文件合并为 shuffle、model_train 和 model_eval 步骤适用的格式。
# 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/deepvariant_train:4.3.2-1 \
pbrun make_examples \
--ref /workdir/${REFERENCE_FILE} \
--reads /workdir/${INPUT_BAM} \
--truth-variants /workdir/${TRUTH_VCF} \
--confident-regions /workdir/${TRUTH_BED} \
--examples /outputdir/${TFRECORD_FILE} \
--disable-use-window-selector-model \
--channel-insert-size
兼容的 make_examples 基线命令
( seq 0 $((N_SHARDS-1)) |\
parallel --halt 2 --line-buffer \
sudo docker run --volume <INPUT_DIR>:/workdir --volume <OUTPUT_DIR>:/outputdir \
google/deepvariant:"${BIN_VERSION"} \
/opt/deepvariant/bin/make_examples \
--mode training \
--ref "/workdir/${REF}" \
--reads "/workdir/${INPUT_BAM}" \
--examples "/outputdir/validation_set.with_label.tfrecord@${N_SHARDS}.gz" \
--truth_variants "/workdir/${TRUTH_VCF" \
--confident_regions "/workdir/${TRUTH_BED}" \
--task {} \
--channels "insert_size" )
在训练模式下运行 deepvariant make_examples
以创建 tensorflow.Examples。
make_examples 输入/输出文件选项
- --ref REF
-
要使用的基因组参考。还必须具有关联的 FAI 索引。支持文本或 gzip 压缩的参考文件。应与用于比对提供给 --reads 的 BAM 文件的参考文件匹配。(默认值:None)
此选项为必填项。
- --reads READS
-
已比对、已排序、已索引的 BAM 文件,其中包含我们要调用的 reads。应比对到与 --ref 兼容的参考基因组。(默认值:None)
此选项为必填项。
- --interval-file INTERVAL_FILE
-
用于选择性访问的 BED 文件 (.bed) 的路径。此选项可以多次使用。(默认值:None)
- --confident-regions CONFIDENT_REGIONS
-
我们确信是同源参考或 BED 格式变异的区域。Contig 名称必须与参考基因组的名称匹配。(默认值:None)
此选项为必填项。
- --truth-variants TRUTH_VARIANTS
-
Tabix 索引的 VCF 文件,其中包含用于标记示例的真实变异调用。(默认值:None)
此选项为必填项。
- --examples EXAMPLES
-
以 TFRecord 格式写入 tf.Example 原型的路径。(默认值:None)
此选项为必填项。
- --proposed-variants PROPOSED_VARIANTS
-
vcf.gz 文件的路径,其中包含 make examples 阶段的提议变异。(默认值:None)
make_examples 工具选项
- --num-cpu-threads-per-stream NUM_CPU_THREADS_PER_STREAM
-
每个流要使用的 CPU 线程数。(默认值:6)
- --num-zipper-threads NUM_ZIPPER_THREADS
-
用于压缩和写入输出文件的线程数。(默认值:4)
- --num-streams-per-gpu NUM_STREAMS_PER_GPU
-
每个 GPU 要使用的流数。(默认值:2)
- --disable-use-window-selector-model
-
将窗口选择器模型从 Allele Count Linear 更改为 Variant Reads。此选项将提高准确性和运行时。(默认值:None)
- --gvcf
-
以 .gvcf 格式生成变异调用。(默认值:None)
- --norealign-reads
-
在调用变异之前,不要在本地重新比对 reads。长度超过 500 bp 的 reads 永远不会重新比对。(默认值:None)
- --sort-by-haplotypes
-
Reads 按单倍型(使用 HP 标记)排序。(默认值:None)
- --keep-duplicates
-
保留重复的 reads。(默认值:None)
- --vsc-min-count-snps VSC_MIN_COUNT_SNPS
-
在 AlleleCount 中至少出现这么多次的 SNP 等位基因将作为候选基因推进。(默认值:2)
- --vsc-min-count-indels VSC_MIN_COUNT_INDELS
-
在 AlleleCount 中至少出现这么多次的 Indel 等位基因将作为候选基因推进。(默认值:2)
- --vsc-min-fraction-snps VSC_MIN_FRACTION_SNPS
-
在 AlleleCount 中至少占所有计数的此分数的 SNP 等位基因将作为候选基因推进。(默认值:0.12)
- --vsc-min-fraction-indels VSC_MIN_FRACTION_INDELS
-
在 AlleleCount 中至少占所有计数的此分数的 Indel 等位基因将作为候选基因推进。(默认值:None)
- --min-mapping-quality MIN_MAPPING_QUALITY
-
默认情况下,保留具有任何比对质量的 reads。将此字段设置为正整数 i 将仅保留 MAPQ >= i 的 reads。请注意,这仅适用于比对的 reads。(默认值:5)
- --min-base-quality MIN_BASE_QUALITY
-
最低碱基质量。此选项对替代等位基因强制执行最低碱基质量分数。只有当等位基因中的所有碱基的质量都大于 min_base_quality 时,才会考虑替代等位基因。(默认值:10)
- --mode MODE
-
值可以是 [shortread, pacbio, ont] 之一。默认情况下,它是 shortread。如果模式设置为 pacbio,则使用以下默认值:--norealign-reads、--alt-aligned-pileup diff_channels、--vsc-min-fraction-indels 0.12。如果模式设置为 ont,则使用以下默认值:-norealign-reads、--variant-caller VCF_CANDIDATE_IMPORTER。(默认值:shortread)
- --alt-aligned-pileup ALT_ALIGNED_PILEUP
-
值可以是 [none, diff_channels] 之一。在 pileup 图像中包含 reads 与每个候选替代等位基因的比对。(默认值:None)
- --variant-caller VARIANT_CALLER
-
值可以是 [VERY_SENSITIVE_CALLER, VCF_CANDIDATE_IMPORTER] 之一。用于生成示例的调用程序。如果您使用 VCF_CANDIDATE_IMPORTER,则意味着强制调用。默认值为 VERY_SENSITIVE_CALLER。(默认值:None)
- --add-hp-channel
-
添加另一个通道来表示每个 read 的 HP 标记。(默认值:None)
- --parse-sam-aux-fields
-
将解析 BAM/CRAM 记录的辅助字段。如果设置了 --sort-by-haplotypes 或 --add-hp-channel,则还必须设置此选项。(默认值:None)
- --use-wes-model
-
如果传递此选项,将使用 WES 模型文件。仅在 shortread 模式下使用。(默认值:None)
- --run-partition
-
将整个基因组划分为多个分区,并同时运行多个进程,每个进程在一个分区上运行。(默认值:None)
- --gpu-num-per-partition GPU_NUM_PER_PARTITION
-
每个分区要使用的 GPU 数量。(默认值:None)
- --include-med-dp
-
如果为 True,则包括 MED(默认值:None)
- --normalize-reads
-
如果为 True,则等位基因计数器将每个 read 的 INDEL 左对齐。(默认值:None)
- --pileup-image-width PILEUP_IMAGE_WIDTH
-
Pileup 图像宽度。仅当您知道您的模型支持此宽度时才更改此设置。(默认值:221)
- --channel-insert-size
-
如果为 True,则将 insert_size 通道添加到 pileup 图像中。默认情况下,此参数在 WGS 和 WES 模式下为 true。(默认值:None)
- --no-channel-insert-size
-
如果为 True,则不要将 insert_size 通道添加到 pileup 图像中。(默认值:None)
- --max-read-size-512
-
允许 deepvariant 在大小为 512bp 的 reads 上运行。默认大小为 320 bp。(默认值:None)
- --prealign-helper-thread
-
为预比对步骤使用额外的线程。当设置 --max-reads-size-512 时,此参数更有用。(默认值:None)
- --max-reads-per-partition MAX_READS_PER_PARTITION
-
在进行后续处理(如采样和重新比对)之前,每个分区要考虑的最大 reads 数。(默认值:1500)
- --partition-size PARTITION_SIZE
-
在将区域拆分为多个较小的子区域之前,区域中允许的最大碱基对数。(默认值:1000)
- --track-ref-reads
-
如果为 True,则等位基因计数器会跟踪支持 ref 的 reads。默认情况下,等位基因计数器会简单地计数支持 ref 的 reads 数。(默认值:None)
- --phase-reads
-
自动计算相位并将 HP 标记添加到所有 reads。(默认值:None)
- --dbg-min-base-quality DBG_MIN_BASE_QUALITY
-
要考虑的 k-mer 序列中的最低碱基质量。(默认值:15)
- --ws-min-windows-distance WS_MIN_WINDOWS_DISTANCE
-
用于局部组装的候选窗口之间的最小距离(默认值:80)
- --channel-gc-content
-
如果为 True,则添加 gc(默认值:None)
- --channel-hmer-deletion-quality
-
如果为 True,则将 hmer deletion quality 通道添加到 pileup 图像中(默认值:None)
- --channel-hmer-insertion-quality
-
如果为 True,则将 hmer insertion quality 通道添加到 pileup 图像中(默认值:None)
- --channel-non-hmer-insertion-quality
-
如果为 True,则将 non-hmer insertion quality 通道添加到 pileup 图像中(默认值:None)
- --skip-bq-channel
-
如果为 True,则忽略碱基质量通道。(默认值:None)
- --aux-fields-to-keep AUX_FIELDS_TO_KEEP
-
要保留的辅助 BAM 字段的逗号分隔列表。值可以是 [HP, tp, t0](默认值:HP)
- --vsc-min-fraction-hmer-indels VSC_MIN_FRACTION_HMER_INDELS
-
至少出现此分数的 Hmer Indel 等位基因将作为候选基因推进。如果应区别对待 hmer 和 non-hmer indel(Ultima reads),请使用此阈值。默认值将对 hmer 和 non-hmer indel 使用相同的阈值,如 vsc_min_fraction_indels 中定义。(默认值:None)
- --vsc-turn-on-non-hmer-ins-proxy-support
-
将来自软剪切 reads 和其他 non-hmer insertion 等位基因的 read 支持添加到最常见的 non-hmer insertion 等位基因。(默认值:None)
- --consider-strand-bias
-
如果为 True,则在调用中期望 SB 字段并将其写入 VCF(默认值:None)
- --p-error P_ERROR
-
参考置信度模型的碱基检出错误。(默认值:0.001)
- --channel-ins-size
-
如果为 true,则添加另一个通道来表示插入的大小。(适用于基于流的测序)(默认值:None)
- --max-ins-size MAX_INS_SIZE
-
ins_size_channel 的最大插入大小,较大的插入看起来像最大值(具有最大强度)(默认值:10)
- --disable-group-variants
-
如果使用 vcf_candidate_importer 并且多等位基因位点在 VCF 中的多行中拆分,则设置为 True,以便在将 CallVariantsOutput 转换为 Variants 时不分组变异。(默认值:None)
- -L INTERVAL, --interval INTERVAL
-
从中调用 BAM/CRAM 文件中的变异的区间。重叠区间将合并。应使用 --interval-file 选项传递区间文件。此选项可以多次使用(例如 "-L chr1 -L chr2:10000 -L chr3:20000+ -L chr4:10000-20000")。(默认值: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)。
TensorFlow 示例数据的 shuffle 是模型训练中的关键阶段。在 DeepVariant 训练过程中,示例在预处理步骤中进行全局 shuffle。
此脚本在本地和内存中 shuffle TensorFlow 记录。
shuffle 快速入门
# 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/deepvariant_train:4.3.2-1 \
pbrun shuffle \
--input-pattern-list /workdir/validation_set.with_label.tfrecord-?????-of-00016.gz \
--output-pattern-prefix /outputdir/validation_set.with_label.shuffled \
--output-dataset-config-pbtxt /outputdir/validation_set.dataset_config.pbtxt \
--output-dataset-name HG001 \
--direct-num-workers 16
兼容的 shuffle 基线命令
python3 shuffle_tfrecords_lowmem.py \
--input_pattern_list="${INPUT_DIR}/validation_set.with_label.tfrecord=?????-of-00016.gz" \
--output_pattern_prefix="${OUTPUT_DIR}/validation_set.with_label.shuffled" \
--output_dataset_config="${OUTPUT_DIR}/validation_set.dataset_config.pbtxt" \
--putput_dataset_name="HG001" \
--direct_num_workders=16 \
--step=-1
全局 shuffle 示例。
Shuffle 输入/输出文件选项
- --output-dataset-config-pbtxt OUTPUT_DATASET_CONFIG_PBTXT
-
DeepVariantDatasetConfig 的人类可读版本。(默认值:None)
此选项为必填项。
- --input-pattern-list INPUT_PATTERN_LIST [INPUT_PATTERN_LIST ...]
-
TFRecord 文件名模式。(默认值:None)
此选项为必填项。
Shuffle 工具选项
- --output-pattern-prefix OUTPUT_PATTERN_PREFIX
-
输出 TFRecord 的文件名模式。(默认值:None)
此选项为必填项。
--output-dataset-name OUTPUT_DATASET_NAME
此选项为必填项。
- --direct-num-workers DIRECT_NUM_WORKERS
-
写入器线程数(默认值:1)
常用选项
- --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)。
我们提供了一个 Jupyter Notebook,其中包含使用 Parabricks 重新训练 DeepVariant 1.6.1 的更详细示例,以及关于 model_train 和 model_eval 步骤的其他说明。
另请参阅 DeepVariant 训练文档和原始 Shuffle 程序。