10. Configuração do Nextflow¶
Um recurso importante do Nextflow é a capacidade de desacoplar a implementação do fluxo de trabalho e as configurações exigidas pela plataforma onde ele será executado.
Isso permite a portabilidade da aplicação sem a necessidade de modificar seu código quando se faz necessária a execução em diferentes ambientes.
10.1 Arquivo de configuração¶
Quando um script de fluxo de trabalho é executado, o Nextflow procura um arquivo chamado nextflow.config
no diretório atual e no diretório base do script (se não for o mesmo que o diretório atual). Caso não encontre, o Nextflow verifica o arquivo: $HOME/.nextflow/config
.
Quando existir mais de um dos arquivos acima, eles serão mesclados, de modo que as configurações do primeiro substituam as mesmas configurações que podem aparecer no segundo e assim por diante.
O mecanismo de pesquisa padrão do arquivo de configuração pode ser estendido fornecendo um arquivo de configuração extra usando a opção de linha de comando: -c <arquivo de configuração>
.
10.1.1 Sintaxe do arquivo de configuração¶
Um arquivo de configuração do Nextflow é um arquivo de texto simples contendo um conjunto de propriedades definidas usando a sintaxe:
Info
Observe que strings precisam ser colocadas entre aspas, enquanto números e valores booleanos (true
, false
) não. Além disso, observe que os valores são tipados, o que significa, por exemplo, que 1
é diferente de '1'
, pois o primeiro é interpretado como o número um, enquanto o último é interpretado como uma string.
10.1.2 Variáveis de configuração¶
As propriedades de configuração podem ser usadas como variáveis no próprio arquivo de configuração, usando a sintaxe usual $nomePropriedade
ou ${expressao}
.
Tip
No arquivo de configuração é possível acessar qualquer variável definida no ambiente de execução, como $PATH
, $HOME
, $PWD
, etc.
10.1.3 Comentários no arquivo de configuração¶
Os arquivos de configuração usam as mesmas convenções para comentários usados no script Nextflow:
10.1.4 Escopos de configuração¶
As definições de configuração podem ser organizadas em diferentes escopos. Pode-se utilizar a notação escopo.propriedade
ou agrupar as propriedades no mesmo escopo usando a notação de chaves, como mostrado a seguir:
10.1.5 Configurar parâmetros¶
O escopo params
permite a definição de parâmetros que substituem os valores definidos no script principal do fluxo de trabalho.
Isso é útil para reforçar o uso de um ou mais parâmetros de execução em um arquivo separado.
Script do fluxo de trabalho | |
---|---|
Exercise
Salve o primeiro trecho como nextflow.config
e o segundo como params.nf
. Em seguida, execute:
Execute novamente o comando anterior especificando o parâmetro foo
na linha de comando:
Compare o resultado das duas execuções.
10.1.6 Configurar ambiente¶
O escopo env
permite a definição de uma ou mais variáveis que serão exportadas para o ambiente onde serão executadas as tarefas do fluxo de trabalho.
Salve o trecho acima como um arquivo chamado meu-env.config
. Em seguida, salve o trecho abaixo em um arquivo chamado foo.nf
:
Por fim, execute o seguinte comando:
10.1.7 Configurar processos¶
As diretivas de processos permite a especificação de configurações para a execução de uma tarefa, como cpus
, memory
, container
, além de outros recursos, no script do fluxo de trabalho.
Isso é útil ao criarmos um exemplo-teste ou um protótipo para o nosso fluxo de trabalho.
No entanto, é sempre uma boa prática desassociar a lógica de execução do fluxo de trabalho das configurações que serão utilizadas por ele. Assim, é altamente recomendável definir as configurações do processo no arquivo de configuração do fluxo de trabalho em vez de no script do fluxo de trabalho.
Além disso, quaisquer diretivas do escopo dos processos (process
) podem ser usadas no arquivo de configuração.
O trecho de configuração acima define as diretivas cpus
, memory
e container
para todos os processos em seu fluxo de trabalho.
O seletor de processo pode ser usado para aplicar a configuração a um processo específico ou grupo de processos (discutido posteriormente).
Info
As unidades de memória e a duração de tempo podem ser especificadas usando uma notação baseada em string na qual o(s) dígito(s) e a unidade podem ser separados por um espaço em branco. Também pode-se usar a notação numérica na qual o(s) dígito(s) e a(s) unidade(s) são separados por um ponto e não são colocados entre aspas.
Sintaxe de string | Sintaxe numérica | Valor |
---|---|---|
'10 KB' |
10.KB |
10240 bytes |
'500 MB' |
500.MB |
524288000 bytes |
'1 min' |
1.min |
60 segundos |
'1 hour 25 sec' |
- | 1 hora e 25 segundos |
A sintaxe para definir as diretivas de processo no arquivo de configuração requer =
(ou seja, operador de atribuição). Esta notação não deve ser usada para definir as diretivas do processo no script do fluxo de trabalho.
Example
Isso é especialmente importante quando você deseja criar uma definição de configuração usando uma expressão dinâmica com uma clausura. Por exemplo, em um arquivo de fluxo de trabalho:
E o equivalente em um arquivo de configuração, se você preferir configurar isso lá:
Diretivas que exigem mais de um valor, como a diretiva pod, precisam ser expressas como um objeto Map no arquivo de configuração.
Por fim, as diretivas que devem ser repetidas na definição do processo e nos arquivos de configuração precisam ser definidas como um objeto List. Por exemplo:
10.1.8 Configurar execução do Docker¶
A imagem do contêiner a ser utilizada para a execução do processo pode ser especificada no arquivo nextflow.config
:
O uso de IDs únicos com "SHA256" para imagens Docker garante que o conteúdo da imagem não mude com o tempo, por exemplo:
10.1.9 Configurar execução do Singularity¶
Para rodar um fluxo de trabalho com Singularity, é necessário fornecer o caminho para o arquivo de imagem do contêiner usando a diretiva de contêiner (container
):
Info
O arquivo de imagem do contêiner deve ser um caminho absoluto: deve começar com /
.
Os seguintes protocolos são suportados:
library://
baixe a imagem do contêiner do Singularity Library service.shub://
baixe a imagem do contêiner do Singularity Hub.docker://
baixe a imagem do contêiner do Docker Hub e a converta para o formato Singularity.docker-daemon://
extraia a imagem do contêiner de uma instalação local do Docker e a converta em um arquivo de imagem Singularity.
Tip
O hub do Singularity shub://
não está mais disponível como serviço de construção de contêineres. Entretanto, as imagens existentes anteriores a 19 de abril de 2021 ainda funcionam.
Tip
Ao especificar um nome simples de imagem de contêiner do Docker, o Nextflow faz o download e a converte implicitamente em uma imagem do Singularity quando a execução do Singularity está habilitada.
A configuração acima instrui o Nextflow a usar o mecanismo Singularity para executar seus processos. O contêiner é extraído do repositório de imagens do Docker e armazenado em cache no diretório atual para ser usado em outras execuções.
Como alternativa, se você tiver uma imagem Singularity, seu caminho absoluto pode ser especificado por meio do nome do contêiner usando a opção -with-singularity
ou a configuração process.container
no arquivo de configuração.
Exercise
Tente executar o script conforme mostrado abaixo, alterando o arquivo nextflow.config
para ser usado com o Singularity:
Note
O Nextflow irá baixar a imagem do contêiner automaticamente. Isto levará alguns segundos, dependendo da velocidade da sua conexão.
10.1.10 Configurar execução com ambientes Conda¶
Ambientes Conda também podem ser fornecidos no arquivo de configuração. Basta adicionar a seguinte configuração no arquivo nextflow.config
:
Você pode especificar o caminho de um ambiente Conda existente como diretório ou o caminho do arquivo YAML do ambiente Conda.