Nextflow configuration

Nextflow的关键能力是将workflow的的实现与底层执行平台所需的配置解耦。这使得workflow具有可移植性,运行其在不同的计算平台上运行,而不需要修改实现。

配置文件

配置文件中的内容是以键值对(name-value)的形式存储的,其中的value可以为字符串,布尔类型,或其他变量,还可以为环境变量,例如:$PATH$HOME, $PWD等。

配置文件可以分为不同的作用域,这些作用域控制不同的行为。例如,workflow参数由params作用域管理,而process的指令则由process作用域控制。所有的作用域可以参考作用域。

workflow的配置通常保存在nextflow.config,配置可以以2种方式写入:第一种使用params.xxx,第二种使用大括号表示。例如:

// first:
params.input = ''             // The workflow parameter "input" is assigned an empty string to use as a default value
params.outdir = './results'   // The workflow parameter "outdir" is assigned the value './results' to use by default.//second:
params {input  = ''outdir = './results'
}

配置文件还可以分为多个文件,并使用 includeConfig 语句包含到另一个文件中。例如:

// system_resources.config
process {cpus = 1    // default cpu usagetime = '1h' // default time limit
}// nextflow.config
params {input  = ''outdir = './results'
}includeConfig 'system_resources.config'

配置文件如何导入

配置文件可以分布在不同的文件,这也允许配置文件覆盖其他的。配置文件的优先级从高到低排列如下。

  1. 命令行指定(--param_name value)。
  2. 使用-params-file选项提供参数。
  3. 使用-c指定配置文件。
  4. 当前目录下的nextflow.config文件。
  5. 项目目录projectDir下的nextflow.config文件。($projectDir: 要运行的脚本所在的目录)
  6. 配置文件:$HOME/.nextflow/config
  7. workflow脚本里面定义的值。

如果有多个配置文件,则使用优先级高的。

-打头的参数是nextflow的配置选项,例如:-c my_config.config,而以--打头的参数是定义在params作用域里面的,例如:--outdir

配置process

前面讲到process的指令可以为任务执行指定配置,如cpus,memory,conda等其他资源。这样做在小的脚本里面是可以的,但是这也将配置与workflow绑定了。更好的做法是将process的配置写在另外的文件。
process作用域可以设置任何process的指令,例如:

// nextflow.config
process {cpus = 2memory = 8.GBtime = '1 hour'publishDir = [ path: params.outdir, mode: 'copy' ]
}

可以使用withName来指定特定的process:

// process_resources.config
process {withName: INDEX {cpus = 4memory = 8.GB}withName: FASTQC {cpus = 2memory = 4.GB}
}

当process很多时,分别为每个process指定指令很不方便,特别是有一些process的指令是重复的。一个好办法是为process增加label指令(process可以有多个label)。然后在配置中使用withLabel来指定被该label标记的。例如:

// configuration_process_labels.nf
nextflow.enable.dsl=2process P1 {label "big_mem"script:"""echo P1: Using $task.cpus cpus and $task.memory memory."""
}process P2 {label "big_mem"script:"""echo P2: Using $task.cpus cpus and $task.memory memory."""
}workflow {P1()P2()}// configuration_process-labels.config
process {withLabel: big_mem {cpus = 16memory = 64.GB}
}

另一种方法是使用process的选择器表达式。若使用正则表达式,则需要使用引号括起来。

  • |匹配或or。例如: withName: 'INDEX|FASTQC'匹配名为INDEXFASTQC的process。
  • !可以排除某项。例如:withLabel: '!small_mem'匹配名称不为small_mem的process。
  • .*匹配任意数量的字符串。例如:withName: 'NFCORE_RNASEQ:RNA_SEQ:BAM_SORT:.*'匹配workflow NFCORE_RNASEQ:RNA_SEQ:BAM_SORT下的所有process。

当混合使用配置和选择器时,遵循以下优先级(从高到低):

  1. withName选择器。
  2. withLabel选择器。
  3. 在workflow中定义的指令。
  4. 通用的process配置

动态配置

一个常见的场景是,配置可能取决于正在处理的数据。这样可以使用一个闭包来处理。例如:

// nextflow.config
process {withName: FASTQC {cpus = 2memory = { 2.GB * task.cpus }publishDir = { "fastqc/$sample" }}
}

配置运行平台

nextflow支持很多的运行平台,例如:本地执行,或运行在HPC集群或云设备。可以参考这里。

默认的执行器配置在executor作用域中。例如:

// nextflow.config
executor {name = 'sge'queueSize = 10
}

process.executor指令可以覆盖特定process使用的执行器。这是有用的,当有小任务能直接在本地执行,不适合提交到HPC上面。例如:

//nextflow.config
executor {name = 'sge'queueSize = 10
}
process {withLabel: 'short' {executor = 'local'}
}

配置软件

Nextflow 的一个重要特点是能够使用不同技术管理软件。其支持conda包管理系统,还有容器引擎例如:Docker,Singularity,Podman,Charliecloud,和Shifter。软件环境在process作用域中被指定。每种软件还有自己的作用域,可以进一步来配置。

conda

conda是一个软件包和环境管理工具,软件包与特定的conda通道绑定,例如,生信软件包可以从BioConda通道下载安装。
可以按照如下配置cond环境:

  • 提供一个现存conda环境的路径。
  • 提供一个特定conda环境文件路径(yaml格式的)。
  • 指定软件包:<channel>::<package_name>=<version>,这样会在process运行时构建conda环境。
process {conda = "/home/user/miniconda3/envs/my_conda_env"withName: FASTQC {conda = "environment.yml"}withName: SALMON {conda = "bioconda::salmon=1.5.2"}
}

docker

docker 是一种容器技术。容器镜像是轻量级的、独立的、可执行的软件包,包括运行应用程序所需的一切: 代码、运行时环境、系统工具、系统库和配置。容器化软件是不依赖于操作系统的。

可以使用process.container指令来使用docker,并且提供镜像路径,同时也要开启docker在docker作用域:docker.enabled = true。容器镜像路径格式为:(protocol://)registry/repository/image:version--build。通常docker容器使用特权用户运行软件。这可能会导致问题,因此通常使用如下选项:docker.runOptions

process.container = 'quay.io/biocontainers/salmon:1.5.2--h84f40af_0'
docker.enabled = true
docker.runOptions = '-u $(id -u):$(id -g)'

singularity

Singularity 也是一种容器技术,通常用于HPC集群。其与docker有些不同。最主要的区别是process以用户身份运行,并且某些目录会自动挂载。Singularity同样支持从docker镜像来构建singularity镜像。
开启singularity使用如下配置:process.container指定镜像路径,还有singularity.enabled = true

process.container = 'https://depot.galaxyproject.org/singularity/salmon:1.5.2--h84f40af_0'
singularity.enabled = true

容器协议

  • docker://:从docker hub下载镜像再转换为singularity镜像(默认)。
  • library://:从singularity库服务下载镜像。
  • shub://:从singularity hub下载镜像。
  • docker-daemon://:从本地 Docker 安装中提取容器映像并将其转换为singularity镜像。
  • https://:从给定URL下载。
  • file://:使用本地计算存储的镜像。

Configuration profiles

Nextflow 配置最强大的特性之一是可以预定义多个配置或profiles为不同的执行平台。可以这样来调用:-profile <profile name>

//configuration_profiles.config
profiles {standard {params.genome = '/local/path/ref.fasta'process.executor = 'local'}cluster {params.genome = '/data/stared/ref.fasta'process.executor = 'sge'process.queue = 'long'process.memory = '10GB'process.conda = '/some/path/env.yml'}cloud {params.genome = '/data/stared/ref.fasta'process.executor = 'awsbatch'process.container = 'cbcrg/imagex'docker.enabled = true}}

这个配置定义了3个profile:standard, clustercloud设置了不同的process配置策略依赖于目标运行平台。使用-profile来指定特定的profile。

nextflow run <your script> -profile cluster

检查 Nextflow 配置

可以使用命令nextflow config来打印workflow的配置。

$ nextflow config workflow_02.nf -profile test

9 Nextflow configuration相关推荐

  1. 微生物组基因分析流程shotgene安装与nextflow初探

    3. 基于GeneShot的分析 参考: Minot, S.S., Barry, K.C., Kasman, C. et al. geneshot: gene-level metagenomics i ...

  2. Ubuntu20.04安装zabbix以及Cannot create the configuration file解决

    添加zabbix的扩展源 echo 'deb http://mirrors.aliyun.com/zabbix/zabbix/5.0/ubuntu/dists/ focal main' >> ...

  3. 参照STM32时钟树配置STM32CubeMX Clock Configuration(STM32L011G4U6为例)

    微控制器(处理器)的运行必须要依赖周期性的时钟脉冲来驱动--往往由一个外部晶体振荡器提供时钟输入为始,最终转换为多个外部设备的周期性运作为末,这种时钟"能量"扩散流动的路径,犹如大 ...

  4. SpringBoot复习:2(@Configuration注解)

    @Configuration注解 @Configuration注解的作用是代替以前我们使用的xml配置文件,被注解的类就是配置类,其内部包含有一个或多个被@Bean注解的方法,这些方法将会被Annot ...

  5. 《深入理解Android:Wi-Fi,NFC和GPS》章节连载[节选]--第六章 深入理解wi-Fi Simple Configuration...

    为什么80%的码农都做不了架构师?>>>    首先感谢各位兄弟姐妹们的耐心等待.本书预计在4月上市发售.从今天开始,我将在博客中连载此书的一些内容.注意,此处连载的是未经出版社编辑 ...

  6. Wireless-N Configuration

    Wireless-N Configuration/Zh Cn Contents [hide] 1 关于Wireless N的一般信息 2 基本设置 2.1 20 MHz vs 40 MHz 2.1.1 ...

  7. 检测到包降级: Microsoft.Extensions.Configuration.Abstractions 从 2.1.1 降 2.1.0

    解决方法:工具-nuget管理包-程序管理控制台-选择 项目- 执行 -Install-Package Microsoft.Extensions.Configuration.Abstractions ...

  8. Could not apply the stored configuration for monitors 解决办法

    Could not apply the stored configuration for monitors 解决办法: $ sudo rm -rf ~/.config/monitors.xml 重启电 ...

  9. xx.xib: error: Illegal Configuration: Safe Area Layout Guide before iOS 9.0报错问题解决

    之前是用xcode8.3.3创建的工程最近升级到Xcode9.0 遇见了这个问题 在Xcode 9.0以上 新建xib文件会报错 xx.xib: error: Illegal Configuratio ...

  10. Enterprise Library Configuration DAAB的使用

    1.要试用DAAB,首先要引用两个类库 第一个是Enterprise Library Shared Library 这个类库是所有Enterprist Library都必须引用的类库,它提供所需的结构 ...

最新文章

  1. engine中调整Element的上下显示顺序(遮盖)
  2. Boost TCP serverclient 有回调无发送
  3. 关于she'll脚本中echo -e使用sh命令执会显示参数-e-的问题
  4. java文件与bean所定义的_Spring定义bean的三种方式和自动注入
  5. 特别看好高校团队的联想创投,在中科大拉开高校AI精英挑战赛大幕
  6. mac10.12 安装“任何来源”软件解决
  7. 他对我有成见,怎么办
  8. Linux下的定时任务Cron
  9. javaswing个人记账系统 java swing mysql实现的个人记账系统源码(1012)
  10. 如何查看电脑ip和端口
  11. 008-2018-09-12 文件操作
  12. 科研笔记(六) 基于环境感知的室内路径规划方法
  13. 计算机网络与综合布线系统设计,谈计算机网络综合布线系统设计
  14. B. Cat Cycle
  15. latex06-LaTeX中的特殊字符
  16. 机器博弈游戏规则 德扑和德扑变种
  17. VC 获取控制台窗体的句柄(hWnd)
  18. 红外线感应器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  19. 世界需要简化第五篇:阅读本文需要有基础,仅一文教你快速应用FOC的SVPWM实现三相异步电机调速?快速学会使用著名的电机SVPWM调速控制算法——史上最简单易懂,算法经高度抽象简化,所有下标经仔细核对
  20. 基于5532制作的实用话放(单电源供电)

热门文章

  1. 摩登天空音乐节,谁去?(更新4个舞台演出时间表)
  2. 数据结构、栈和队列、树和二叉树
  3. 红黑树高度上限的证明(通俗易懂)
  4. Yang‘s 不等式与 Cauchy-Schwarz 不等式
  5. 压缩word文档大小的方法?
  6. 高刷新率电视机有必要吗?
  7. Mysql基本知识1
  8. 2019当今互联网赚钱的六大方式,赠送给迷茫的网赚新手
  9. 创建一个三维空间形状,算立方体,球体,正三棱锥表面积体积
  10. pdf照片显示正常打印时被翻转_要哭了,差点打印不了准考证!(2021考生提前收藏!)...