如何简单调试WDL脚本

biocli命令行需要编写pipeline和job文件来托管任务,在WDL脚本编写阶段调试人员需要频繁修改Pipeline。为此Achelous 提供了一个简单的命令行wdl,可以直接运行wdl脚本提交任务到调度系统进行分布式运行,方便脚本的编写和调试。


1. WDL命令行介绍及配置

Achelous 用户可以通过下载页面中,获取对应版本集群 WDL测试引擎安装包。

[!WARNING|style:flat] 集群版 wdl命令行功能只对Achelous 用户集群有效,如非Achelous 用户,请采用单机版wdl 进行测试。

安装后可查看wdl 命令参数。

[demo@Cc3Apc wdl-interactive]$ wdl run -h
usage: wdl run [<flags>] <wdlfile> <datafile>

Run the WDL file on the input data

Flags:
  -h, --help                 Show context-sensitive help (also try --help-long and --help-man).
  -t, --trace                Trace the execution of Wom Graph
  -c, --concurrent           Concurrent execution the Wom Graph
  -w, --workdir=WORKDIR      The work directory of the WDL program, default: /opt/workflow
  -m, --mode=MODE            execution mode of wdl task: docker | paladin
  -r, --resources=RESOURCES  Resources avaliable to the docker container, such as CPU, etc
  -q, --queue=QUEUE          The schedule domain used by the job
  -p, --priority="0"         The priority of the job

Args:
  <wdlfile>   The file of the WDL program
  <datafile>  The input data file of the WDL program

wdl命令行执行前需要简单的配置,在用户的home目录下,编辑文件.wdlconfig如下: 令解决:

{
   "volumes" : [
        "/home"
    ]
}

一般用户只需要在文件中配置volumes挂载路径,即默认每个容器需要挂载的卷目录。由于wdl命令行没有bioflow自动卷挂载功能,所有的卷可以在~/.wdlconfig中指定,或者在task中通过volumes属性指定。可以不指定volumes,但是需要创建~/.wdlconfig,编写一个空{}


2 示例

以下为使用wdl命令进行投递的命令行示例:

(base) [demo@Cc3Saturn wdl-interactive]$ wdl run -w ./work -m paladin src/demo-pipeline.wdl input.json 
Start execution remotely in Paladin
The resources configuration is: Resources(Cpu:-1.000000,Memory:-1.000000,Volumes:/home,NotifyServer:,PaladinServer:paladin-backend.servicemgr.saturn:1026)

Workflow Outputs: 
 output_bam: /home/demo/wdl-interactive/work/wxs-wxs.markdup/P59_N.dup.bam
 gvcf: /home/demo/wdl-interactive/work/wxs-wxs.HaplotypeCaller/P59_N.g.vcf.gz

Time cost:  4m17.274331754s

其中:

  • -w 指定工作目录,必须是一个共享存储的目录
  • -m paladin指定投递作业到Paladin(也就是在集群中运行任务)。-m不指定的话会在本地执行,不建议这样。
  • -p 可以指定作业的优先级0~10
  • -q 可以指定作业的队列后者调度域

在工作目录下生成一个wdl-engine.log,该文件记录作业的执行过程。

示例中的input.json是一个JSON格式的文件,对应着作业的主workflow的输入参数赋值,如下所示:

{
     "wxs.read1": "/home/demo/makeflow-demo/demo1.fq.gz",
     "wxs.read2": "/home/demo/makeflow-demo/demo2.fq.gz",
     "wxs.prefix" : "P59_N",
     "wxs.ref" : "/home/demo/makeflow-demo/chr22.fa"
}

其内容对应job的JSON中的WorkflowInput指向的部分:

{
         "Name" : "demo-job",
         "Pipeline" : "GATK4-PART-PIPELINE",
         "InputDataSet" : {
               "WorkflowInput" : {
                       "wxs.read1": "/home/demo/makeflow-demo/demo1.fq.gz",
                       "wxs.read2": "/home/demo/makeflow-demo/demo2.fq.gz",
                       "wxs.prefix" : "P59_N",
                       "wxs.ref" : "/home/demo/makeflow-demo/chr22.fa"
                }
    },
         "Priority" : 7,
         "ScheduleDomains" : "all"
}

3 如何查看提交到Paladin的任务

wdl命令行产生的正在运行的任务,可以通过hermit qstat -r查看:

(base) demo@Cc1Saturn:~$ 
(base) demo@Cc1Saturn:~$ hermit qstat -r
job-ID                                                        prior        name                        user        state                submit/start at                queue        slots        ja-task-ID
----------------------------------------------------------------------------------------------------------------------------------------------------------
paladin-task.10704ae6-b4cd-4fe9-973c-b77a10a16679        0        demo.wdlcmd.wxs-wxs.bwa_mem        demo        running        28 second(s) ago        -NA-        -NA-        -NA-

从上述结果可以看到,wdl命令行产生的task的name有明显的模式:USERID.wdlcmd.WDL-STAGE-NAME

通过Poros界面也可以看到任务列表,寻找task的name得模式:

图片

[!NOTE|style:flat]

  1. wdl命令行仅仅支持简单的脚本调试,生产请用biocli。
  2. wdl支持一定程度的作业恢复。即ctrl-c后,再次运行,会从上一个任务开始执行。不保证生产级别的可用性。
  3. 不支持高级功能:Spark、AI、自动卷挂载等等
Powered by XTAO TechnologyLast Modified On:2021 2023-03-24 09:06:38

results matching ""

    No results matching ""