Achelous 平台 Makeflow 最佳实践
Makeflow是生物信息常用的一种流程组织工具。详细信息可以参考其官方网站。其优点在于代码可以在本地机器执行的同时也可以按在集群环境进行执行。
对于Achelous用户而言,可以通过SGE模拟功能,在Achelous平台上通过Makeflow进行进行作业投递。
1. Makeflow的安装
makeflow 可以通过conda进行安装,当系统中安装了conda程序之后,可通过以下命令进行安装:
# run this command once
conda create -n cctools-env -y -c conda-forge --strict-channel-priority python ndcctools
# run this command every time you want to use cctools
conda activate cctools-env
# run this command every time you want to update your version of cctools (after `activate` as above).
conda update -y -c conda-forge ndcctools
正常安装后,即可通过makeflow
命令进行任务投递操作。
2. Makeflow 流程编排
用户可以通过两种方式进行: Makefile 格式和 JX格式,两种方式达成的效果是一致的。从学习成本来说,Makefile 和 JX格式的编写都相对较低。用户可以根据自身具体需求进行选择。
需要注意的是,在任务编排的过程中需要对程序所使用的资源进行限制。
模式1: 通过 Makefile 进行流程编排
Makefile 设计的初衷是解决编译过程中顺序和依赖问题设计的,因此可以用于计算作业的执行顺序控制。
CORES=6
MEMORY=20000
S1.bam : lane1.sam lane2.sam
samtools merge --output-fmt BAM --threads 6 S1.bam lane1.sam lane2.sam
lane1.sam :
bwa mem -R \'@RG\\tID:1\\tLB:lib1\\tPL:ILLUMINA\\tSM:S1\\tPU:unit1\' -k 2 -t 6 Refs/hg19/hg19.fa S1_L1_1_clean.fq.gz S1_L1_2_clean.fq.gz > lane1.sam
lane2.sam :
bwa mem -R \'@RG\\tID:1\\tLB:lib1\\tPL:ILLUMINA\\tSM:S1\\tPU:unit1\' -k 2 -t 6 Refs/hg19/hg19.fa S1_L2_1_clean.fq.gz S1_L2_2_clean.fq.gz > lane2.sam
在上面的示例中,通过对CORES
和 MEMORY
两个变量对程序中运行的使用的计算资源进行了控制。显然该方式在实际中不是十分灵活,但是编写成本小,适用于计算资源消耗相似的步骤。
模式2: 通过 JX 格式编排流程
JX格式文件是makeflow 支持的另一种流程编排格式,其基础结构是Json 格式文件,其内置了循环和占位符,因此可以实现相对简单的流程。关于JX 语法进一步说明,可以参见其官方网站说明。
{
"define":{
"BWA" : "bwa mem -R \'@RG\\tID:1\\tLB:lib1\\tPL:ILLUMINA\\tSM:"+
sample +
"\\tPU:unit1\' -k 2 -t 6 " ,
"message" : "bwa+samtools Call SNP"
},
"categories" : {
"align" : { "resources" : { "cores" : 6, "memory" : 25000 } },
"samtools" : { "resources" : { "cores" : 2, "memory" : 25000 } }
},
"rules": [
{
"command": format("%s %s %s %s > %s.sam",BWA,ref_fasta,read1,read2,sample) ,
"inputs" : [ ref_fasta,
read1,
read2 ] ,
"outputs": [ format("%s.sam",sample) ],
"category" : "align"
} ,
{
"command": format("samtools sort -@ 6 -o %s.sorted.bam %s.sam",sample,sample),
"inputs" : [ format("%s.sam",sample) ],
"outputs": [ format("%s.sorted.bam",sample) ],
"category" : "samtools"
},
{
"command": format("gatk MarkDuplicates -I %s.sorted.bam -O %s.rmdup.bam -M %s.metrics.txt",sample,sample,sample),
"inputs": [ format("%s.sorted.bam",sample) ],
"outputs" : [ format("%s.rmdup.bam",sample) ],
"category" : "align"
},
]
}
上述例子为通过 JX 文件编写流程实例,流程编写者可以通过占位符和JX 语言中支持的函数,实现较为复杂的语法。同时可以通过 category
键,对不同类型的步骤实现较为精确的资源控制。
3. 在Achelous 平台投递作业
在投递任务时,需要根据流程中的参数,编写相应的参数文件。
{
"sample":"sample",
"read1":"/path/to/Sample.r1.fq.gz",
"read2":"/path/to/Sample.r2.fq.gz",
"ref_fasta" : "ref.fna"
}
编写后执行下面命令即可
makeflow --jx-args job.args.json --jx bwa-samtools.jx -Tsge -l job.log
其中 -Tsge
为指定Achelous平台模拟SGE调度进行任务分布式运行;-l job.log
为定向输入日志文件。
小结
Makeflow是目前较为常见的一种生信流程编辑方式,可以在Achelous平台上完美适配运行。对于已经有Makeflow 为基础的用户可以轻松的实现流程的迁移和正常的运行。