09-Nextflow Configuration(2)
Config scopes
配置设置可以组织在不同的作用域中,方法是用作用域标识符在属性名前加点前缀,或者使用花括号标记将相同作用域中的属性分组。下面的例子显示了这一点:
alpha.x = 1
alpha.y = 'string value..'
beta {
p = 2
q = 'another string ..'
}
Scope env
env作用域允许定义一个或多个变量,这些变量将被导出到将要执行工作流任务的环境中。
只需在变量名前加上env作用域的前缀,或者用花括号括起来,如下所示:
env.ALPHA = 'some value'
env.BETA = "$HOME/some/path"
env {
DELTA = 'one more'
GAMMA = "/my/path:$PATH"
}
Scope params
params作用域允许您定义可在管道脚本中访问的参数。只需在参数名称前加上params作用域或用花括号括起来,如下所示:
params.custom_param = 123
params.another_param = 'string value .. '
params {
alpha_1 = true
beta_2 = 'another string ..'
}
Scope process
process配置作用域允许您为管道中的流程提供默认配置。
您可以在这里指定process指令和executor部分中描述的任何属性。例子
process {
executor='sge'
queue='long'
clusterOptions = '-pe smp 10 -l virtual_free=64G,h_rt=30:00:00'
}
通过使用此配置,管道中的所有进程都将通过SGE集群执行,并具有指定的设置。
Process selectors
withLabel选择器允许配置所有带标签指令的进程,如下所示:
process {
withLabel: big_mem {
cpus = 16
memory = 64.GB
queue = 'long'
}
}
上面的配置示例为所有标注了big_mem标签的进程分配了16个cpu、64 Gb内存和长队列。
以同样的方式,withName选择器允许通过管道中的名称配置特定的进程。例如:
process {
withName: hello {
cpus = 4
memory = 8.GB
queue = 'short'
}
}
Tip
标签和进程名都不需要用引号括起来,只要名称包含特殊字符(例如-,!等),或者它不是关键字或内置类型标识符。如果有疑问,可以用单引号或双引号字符将标签名称或进程名称括起来。
Selector expressions
标签和进程名选择器都允许使用正则表达式,以便对匹配指定模式条件的所有进程应用相同的配置。例如:
process {
withLabel: 'foo|bar' {
cpus = 2
memory = 4.GB
}
}
上面的配置片段将2个cpu和4 GB内存设置为带有标签foo和bar的注释进程。
可以对进程选择器进行反求,用特殊字符!作为前缀。例如:
process {
withLabel: 'foo' { cpus = 2 }
withLabel: '!foo' { cpus = 4 }
withName: '!align.*' { queue = 'long' }
}
上面的配置片段为带foo标签的进程设置了2个cpu,为所有没有带foo标签的进程设置了4个cpu。最后,它将长队列的使用设置为所有名称不是以align开头的进程。
Selectors priority
当混合通用流程配置和选择器时,应用以下优先级规则(从低到高):
1、通用的配置过程。
2、工作流脚本中定义的特定于流程的指令。
3、withLabel选择器定义。
4、withName选择器定义。
process {
cpus = 4
withLabel: foo { cpus = 8 }
withName: bar { cpus = 32 }
}
使用上面的配置片段,如果没有在工作流脚本中指定,所有工作流进程都使用4个cpu。此外,带有foo标签的进程使用8个cpu。最后,名为bar的进程使用32个cpu。
Scope executor
执行器配置范围允许您设置可选的执行器设置,如下表所示。
Name | Description |
---|---|
name | 使用执行人的名称,例如local、sge等 |
queueSize | 执行器将以并行方式处理的任务数量(默认:100) |
pollInterval | 确定为检查进程终止而进行轮询的频率 |
dumpInterval | 确定将执行器状态写入应用程序日志文件的频率(默认为5分钟) |
queueStatInterval | 确定从集群系统获取队列状态的频率。此设置仅由网格执行器使用(默认为1分钟) |
exitReadTimeout | 确定当进程被终止但退出文件不存在或为空时,执行器在返回错误状态之前等待多长时间。此设置仅由网格执行器使用(默认值:270秒) |
killBatchSize | 确定在单个命令执行中可以终止的作业数量(默认值:100) |
submitRateLimit | 确定每个时间单元的最大作业提交速率,例如“10秒”。每秒最多10个作业或“50/2分钟”,即每2分钟提交50个作业(默认:无限制) |
perJobMemLimit | 指定平台LSF每作业内存限制模式。看到LSF |
jobName | 确定提交给底层集群执行器(例如executor)的作业的名称。jobName = {"task.name ";注意:当使用此选项时,您需要确保生成的作业名称匹配底层批处理调度程序的验证约束 |
cpus | 底层系统可用的cpu的最大数量(仅由本地执行器使用) |
memory | 底层系统可用的最大内存量(仅由本地执行程序使用) |
执行器的设置可以定义如下:
executor {
name = 'sge'
queueSize = 200
pollInterval = '30 sec'
}
当在管道中使用两个(或更多)不同的执行器时,可以通过在执行器名称前加上符号$并将其用作特殊的作用域标识符来分别指定它们的设置。例如:
executor {
$sge {
queueSize = 100
pollInterval = '30sec'
}
$local {
cpus = 8
memory = '32 GB'
}
}
上面的配置示例可以使用点符号重写,如下所示:
executor.$sge.queueSize = 100
executor.$sge.pollInterval = '30sec'
executor.$local.cpus = 8
executor.$local.memory = '32 GB'
Scope docker
docker配置作用域控制Nextflow如何执行docker容器。
可进行以下设置:
Name | Description |
---|---|
enabled | 将此标志改为true以启用Docker执行(默认为false) |
envWhitelist | 要包含在容器环境中的环境变量名列表,由逗号分隔 |
legacy | 使用版本1.10后删除的命令行选项。x(默认值:false) |
sudo | 以sudo方式执行Docker run命令(默认为false) |
tty | 分配一个伪tty(默认值:false) |
temp | 将您选择的路径挂载到容器中作为/tmp目录。每次创建容器时,使用特殊值auto创建临时目录 |
remove | 在执行之后清理容器(默认值:true)。详情请参见:https://docs.docker.com/engine/reference/run/#clean-up-rm |
runOptions | 此属性可用于提供docker run命令支持的任何额外命令行选项。详情请参见:https://docs.docker.com/engine/reference/run/ |
registry | 获取Docker映像的注册表。它只能用于指定私有注册中心服务器。它不应该包括协议前缀,如http:// |
fixOwnership | 修复由docker容器创建的文件的所有权问题 |
engineOptions | 这个属性可以用来提供Docker引擎支持的任何选项,例如Docker [OPTIONS] |
mountFlags | 添加指定的标志到卷挂载,例如mountFlags = ' ro,Z ' |
上面的选项可以用docker作用域作为前缀,或者用花括号括起来,如下所示:s
process.container = 'nextflow/examples'
docker {
enabled = true
temp = 'auto'
}
阅读Docker containers页了解更多如何使用Docker容器与Nextflow
更多配置范围见
https://www.nextflow.io/docs/latest/config.html#config-scopes