
用
Pipelines API
运行多个工作流
|
305
10.3.3
成本优化建议
博德研究所团队是如何节约工作流成本的,你若对此好奇,想探索其实现,回头看
看第
9
章再好不过。我们一直在讨论的这条经优化的流水线,正是我们上一章拆解
的第二个工作流(含子工作流和任务库的那个)。
我们就不拘泥于细节,下面总结三个最有效的
WDL
工作流优化策略。合理使用
它们,可降低你在谷歌云上的运行成本。具体代码请见我们第
9
章研究的任务库
GermlineVariantDiscovery.wdl
。
动态调整资源配额
对于给定任务,你请求的虚拟机存储越多,成本就越高。任务最少需要多大硬盘存储,
你就请求多少,可保证成本处于低位,但输入文件大小不一该如何应对,如何省去
手动检查每个待处理样本?不用担心,一些
WDL
函数可帮你在运行时(但早于请
求虚拟机)计算任务的输入文件的大小。然后你可计算应分配多大硬盘(根据任务
输出多大文件,合理假定)。例如,下面代码先计算参考基因组大小,接着用
BAM
输入文件(稍后再多讲一讲)的部分大小,加上参考文件的大小,再加上为输出预
留的富余空间,最终确定实际可能需要多大硬盘:
Float
ref_size = size(ref_fasta, "GB") +
size(ref_fasta_index, "GB") + size(ref_dict, "GB")
Int
disk_size = ceil(((size(input_bam, "GB") + 30) / hc_scatter) + ref_size) ...