Sentieon | 应用教程:Sentieon分布模式

介绍

本文档描述了如何利用Sentieon®基因组学工具的分片能力将DNAseq®流程分布到多台服务器上;将其他流程(如TNseq®)进行分布遵循相同原则,因为所有Sentieon®基因组学工具都具有相同的内置分布式处理能力。这种分布的目标是为了减少流程的总运行时间,以更快地生成结果;然而,这种分布也会带来一些额外的开销,使计算成本增加。
利用分布能力,流程的每个阶段被分成小任务;每个任务处理基因组的一部分,并可以在不同的服务器上并行运行。每个任务生成一个部分结果,需要按顺序合并为最终的单一输出;这种合并需要仔细进行,以确保考虑到边界并生成与没有分片运行的流程相同的结果。
分布的执行框架不在本文档的范围内,用户需要在保持正确的数据依赖关系的同时,分发数据/文件并启动正确的进程。

分片和分片化

我们将基因组分成许多连续且不重叠的部分,每个部分称为一个分片(shard)。每个分片可以定义为单个染色体contig的名称,或者是遵循contig:shard_start-shard_end约定的染色体的一部分。特殊的分片NO_COOR用于所有没有坐标的未映射读取。
Sentieon®二进制文件支持将分片分布到多个服务器,并且可以通过添加一个或多个带参数的分片选项在单个命令中处理多个分片。在单个命令行中使用多个选项时,这些分片需要按照参考染色体列表是连续的;例如,一个命令可以包含一个覆盖chr2结尾的分片和一个覆盖chr3开头的分片,但不能同时包含一个覆盖chr2结尾和chr22开头的分片。--shard SHARD --shard
您可以参考附录中的脚本,根据与参考相关联的dict或输入bam文件中的bam文件表头,为基因组创建分片的示例文件。我们建议使用100M作为分片大小。generate_shards.sh

分布式处理的数据流和数据/文件依赖关系

按照推荐的工作流程,DNAseq®的流程将一对fastq文件通过以下阶段进行处理:BWA对齐生成sorted.bam,去重生成dedup.bam,BQSR生成recal.table,Haplotyper生成output.vcf.gz文件。如图1所示,说明了这样一个流程的数据流。

图片

图1 DNAseq®流程的典型数据流程

为了将上述流程分布到多个服务器上,每个阶段被划分为处理分片数据的命令,这些命令需要来自特定分片以及相邻分片的输入;但是,有两个例外情况:Dedup阶段需要来自所有分片上的LocusCollector命令的所有score文件,而Haplotyper阶段需要一个完整的合并校正表。

图片

图2 以4个分片进行分布式处理的DNAseq®流程的数据流程,不处理未映射的读取

以图2为例,说明了一个以4个分片进行分布的流水线的数据流程;这并不是一个典型的使用案例,因为使用推荐的分片大小为100M碱基会导致需要超过30个分片。在图2的示例中,各个阶段需要以下输入并生成以下输出:

  • 分片的LocusCollector阶段(去重1)需要sorted.bam作为输入。该阶段生成一个文件。i-th part_deduped.bam$shard_i.score.gz

  • 分片的Dedup阶段(去重2)需要sorted.bam输入,以及所有LocusCollector阶段的所有结果。该阶段生成一个文件。i-th part_deduped$shard_i.bam

  • 分片的QualCal阶段需要文件,以及可用的文件和文件。该阶段生成一个文件。i-th part_deduped$shard_i.bam part_deduped$shard_i+1.bam part_deduped$shard_i-1.bam part_recal_data$shard_i.table

  • 在QualCal之后,所有文件需要合并为一个单一的校准表文件,用于变异调用。驱动程序和QualCal的选项可以用于执行边界感知合并。part_recal_data$shard_i.table --passthru --merge

  • 分片的Haplotyper阶段需要文件,以及可用的文件和文件;此外,完整合并的校准表需要作为输入。该阶段生成一个文件。i-th part_deduped$shard_i.bam part_deduped$shard_i+1.bam part_deduped$shard_i-1.bam part_output$shard_i.vcf.gz

  • 在Haplotyper之后,所有文件需要合并为一个单一的输出VCF文件。驱动程序和Haplotyper的选项用于执行边界感知合并。part_output$shard_i.vcf.gz --passthru --merge

  • 如果在流程的任何阶段需要合并的输出bam文件,可以使用util二进制文件执行边界感知合并;需要在命令中添加选项,以便util merge不处理读取,而只是按块复制它们。--mergemode=10

重要提示:在合并结果时,务必按照正确的顺序依次输入部分结果,否则结果将不正确。

分发BWA

上述说明中未包含有关使用BWA进行分发对齐的任何信息。为了分发BWA对齐,您可以使用Sentieon®工具中提供的工具为输入的FASTQ文件创建索引文件;然后,您可以使用fqidx命令的结果作为BWA mem的输入,在不同的服务器上处理FASTQ文件的特定部分;您需要确保在BWA命令中包含该选项,因为fqidx的输出包含交错的reads在单个输出中。这个流程的结果与在单次运行上执行的结果是相同的。fqidx -p

 1BWA_K_size=100000000
 2num_splits=10
 3SAMPLE="sample_name" #Sample name SM tag in bam
 4GROUP="read_group_name" #Read Group name RGID tag in bam
 5PLATFORM="ILLUMINA"
 6NT=$(nproc) #number of threads to use in computation, set to all threads available
 7
 8FASTA="/home/regression/references/b37/human_g1k_v37_decoy.fasta"
 9FASTQ_1="WGS-30x_1.fastq.gz"
10FASTQ_2="WGS-30x_2.fastq.gz"
11FASTQ_INDEX="WGS-30x.fastq.gz.index"
12
13#create FASTQ indices
14sentieon fqidx index -K $BWA_K_size -o $FASTQ_INDEX $FASTQ_1 $FASTQ_2
15
16#get the number of runs that the inputs will be split into given the size
17num_K=$(sentieon fqidx query -i $FASTQ_INDEX | cut -d' ' -f1)
18BWA_K_size=$(sentieon fqidx query -i $FASTQ_INDEX | cut -d' ' -f2)
19num_K_splits=$(expr $num_K / $num_splits + 1)
20#run multiple BWA on multiple servers
21file_list=""
22for run in $(seq 0 $((num_splits-1))); do
23        region="$((run*num_K_splits))-$((run*num_K_splits+num_K_splits))"
24        #send each of these to a different server
25        sentieon bwa mem -R "@RG\tID:$GROUP\tSM:$SAMPLE\tPL:$PLATFORM" \
26          -K $BWA_K_size -t $NT -p $FASTA \
27          "<sentieon fqidx extract -i $FASTQ_INDEX -r $region $FASTQ_1 $FASTQ_2" | \
28          sentieon util sort -r $FASTA -t $NT --sam2bam -o sorted_run$run.bam -i -
29        file_list="$file_list sorted_run$run.bam"
30done
31
32#merge the results
33sentieon util merge -o sorted.bam $file_list
34#or perform deduplication on all the intermediate BAM files
35file_list_bam=""
36for file in $file_list; do file_list_bam="$file_list_bam -i $file"; done
37sentieon driver -r $FASTA -t $NT $file_list --algo LocusCollector --fun score_info score.txt.gz
38sentieon driver -r $FASTA -t $NT $file_list --algo Dedup --score_info score.txt.gz deduped.bam

1.当无法创建FASTQ索引文件(版本201808.02+)时进行BWA分发
如果无法创建FASTQ索引文件,则可以使用带有分数选项的util fqidx工具,并同时使用该选项。此方法将输入的FASTQ文件分割成多个读取块的片段,并从每个片段中提取每个元素以在不同的服务器上进行处理,从起始位置到结束位置。-F m/n -K n m-th m 0 n-1
请注意,此功能仅建议在文件存储速度足够快以支持每个fqidx进程同时读取输入FASTQ文件的IT环境中使用。这在云环境中很常见,或者在具有高带宽NFS系统的本地集群环境中使用。

 1BWA_K_size=100000000
 2num_splits=10
 3SAMPLE="sample_name" #Sample name SM tag in bam
 4GROUP="read_group_name" #Read Group name RGID tag in bam
 5PLATFORM="ILLUMINA"
 6NT=$(nproc) #number of threads to use in computation, set to all threads available
 7
 8FASTA="/home/regression/references/b37/human_g1k_v37_dec
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值