Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
nextflow [2025/02/05 14:45] mirocownextflow [2025/02/26 20:36] (текущий) mirocow
Строка 1: Строка 1:
 ====== Nextflow ====== ====== Nextflow ======
  
-===== Docker =====+===== Основные компоненты ===== 
 + 
 +==== Директивы ==== 
 + 
 +./main.nf 
 +<code> 
 +process FASTQC { 
 + container 'biocontainers/fastqc:v0.11.5' 
 + tag "FASTQC on $sample_id" 
 +
 +</code> 
 + 
 +  * https://training.nextflow.io/basic_training/containers/#software-directives 
 + 
 +==== Каналы ==== 
 + 
 +./main.nf 
 +<code> 
 +ch = Channel.of(1, 2, 3) 
 +ch.view()  
 +</code> 
 + 
 +  * https://training.nextflow.io/basic_training/channels/#channel-factories 
 + 
 +==== Процессы ==== 
 + 
 +<code> 
 +process < name > { 
 +    [ directives ]  
 + 
 +    input:  
 +    < process inputs > 
 + 
 +    output:  
 +    < process outputs > 
 + 
 +    when:  
 +    < condition > 
 + 
 +    [script|shell|exec]:  
 +    """ 
 +    < user script to be executed > 
 +    """ 
 +
 +</code> 
 + 
 +  * directives/Директивы — это начальные декларации, определяющие необязательные параметры. 
 +  * input/Вход определяет ожидаемый входной канал(ы) 
 +  * output/Выход определяет ожидаемый выходной канал(ы) 
 +  * when/Когда является необязательным оператором предложения, разрешающим условные процессы 
 +  * script|shell|exec/Скрипт — это строковый оператор, определяющий команду, которая должна быть выполнена задачей процесса. 
 + 
 +  * https://training.nextflow.io/basic_training/processes 
 + 
 +==== Операторы ==== 
 + 
 +<code> 
 +Channel 
 +    .of(1, 2, 3, 4) 
 +    .map { it -> it * it } 
 +    .view() 
 +</code> 
 + 
 +  * https://training.nextflow.io/basic_training/operators 
 + 
 +==== Модули ==== 
 + 
 +<code> 
 +include { SPLITLETTERS   } from './modules.nf' 
 +include { SPLITLETTERS; CONVERTTOUPPER } from './modules.nf' 
 +include { CONVERTTOUPPER as CONVERTTOUPPER_one } from './modules.nf' 
 +</code> 
 + 
 +  * https://training.nextflow.io/basic_training/modules/ 
 + 
 +==== Конфигурация ==== 
 + 
 +./nextflow.config 
 +<code> 
 +propertyOne = 'world' 
 +anotherProp = "Hello $propertyOne" 
 +customPath = "$PATH:/my/app/folder" 
 +// comment a single line 
 +params.foo = 'Hello' 
 +env.ALPHA = 'some value' 
 + 
 +process.container = 'nextflow/rnaseq-nf' 
 +docker.enabled = true 
 + 
 +// Настройки пакетного планировщика 
 +process { 
 +    cpus = 10 
 +    memory = 8.GB 
 +    container = 'biocontainers/bamtools:v2.4.0_cv3' 
 +    withName: FOO { 
 +        memory = { 4.GB * task.cpus } 
 +    } 
 +
 +</code> 
 + 
 +  * library:// загрузите образ контейнера из сервиса Singularity Library. 
 +  * shub:// загрузите образ контейнера из Singularity Hub. (не работает) 
 +  * docker:// загрузите образ контейнера из Docker Hub и преобразуйте его в формат Singularity. 
 +  * docker-daemon:// извлеките образ контейнера из локальной установки Docker и преобразуйте его в файл образа Singularity. 
 + 
 +  * https://training.nextflow.io/basic_training/config/ 
 + 
 +===== # Docker =====
  
 ==== Варианты работы: ==== ==== Варианты работы: ====
Строка 7: Строка 114:
 === Dockerfile === === Dockerfile ===
  
-Dockerfile+./Dockerfile
 <code yaml> <code yaml>
 FROM debian:bullseye-slim FROM debian:bullseye-slim
Строка 16: Строка 123:
 RUN apt-get update && apt-get install -y curl cowsay RUN apt-get update && apt-get install -y curl cowsay
 </code> </code>
 +
 +== Запуск ==
  
 <code bash> <code bash>
Строка 27: Строка 136:
 </code> </code>
  
-nextflow.config+./nextflow.config
 <code> <code>
  
 +</code>
 +
 +== Repositories ==
 +
 +<code bash>
 +$ docker pull quay.io/biocontainers/ubuntu:24.04
 </code> </code>
  
Строка 38: Строка 153:
 Singularity реализует модель выполнения контейнера, похожую на Docker. Однако она использует совершенно другой дизайн реализации. Singularity реализует модель выполнения контейнера, похожую на Docker. Однако она использует совершенно другой дизайн реализации.
  
 +./my-image.sif
 <code> <code>
 Bootstrap: docker Bootstrap: docker
Строка 67: Строка 183:
 </code> </code>
  
-nextflow.config+./nextflow.config
 <code> <code>
  
 </code> </code>
  
-===== Docker Swarm =====+== Repositories == 
 + 
 +<code bash> 
 +$ singularity run https://depot.galaxyproject.org/singularity/ubuntu:24.04 
 +</code> 
 + 
 +=== Conda === 
 + 
 +Conda — популярный менеджер пакетов и сред. Встроенная поддержка Conda позволяет рабочим процессам Nextflow автоматически создавать и активировать среду(ы) Conda, учитывая зависимости, указанные каждым процессом. 
 + 
 +<code bash> 
 +conda init 
 +</code> 
 + 
 +./env.yml 
 +<code> 
 +name: nf-tutorial 
 +channels: 
 +    - conda-forge 
 +    - defaults 
 +    - bioconda 
 +dependencies: 
 +    - bioconda::salmon=1.5.1 
 +    - bioconda::fastqc=0.11.9 
 +    - bioconda::multiqc=1.12 
 +    - conda-forge::tbb=2020.2 
 +</code> 
 + 
 +<code bash> 
 +$ conda env create --file env.yml 
 +$ conda env list 
 +</code> 
 + 
 +<code bash> 
 +$ nextflow run script7.nf -with-conda ./ 
 +</code> 
 + 
 +Другой способ создания сред, подобных conda, — это использование Dockerfile и micromamba. 
 + 
 +./Dockerfile 
 +<code> 
 +FROM mambaorg/micromamba:0.25.1 
 + 
 +COPY --chown=$MAMBA_USER:$MAMBA_USER env.yml /tmp/env.yml 
 + 
 +RUN micromamba create -n nf-tutorial 
 + 
 +RUN micromamba install -y -n nf-tutorial -f /tmp/env.yml && \ 
 +    micromamba clean --all --yes 
 + 
 +ENV PATH /opt/conda/envs/nf-tutorial/bin:$PATH 
 +</code> 
 + 
 +== Repositories == 
 + 
 +<code bash> 
 +$ conda install -c conda-forge -c bioconda ubuntu==24.04 
 +</code> 
 + 
 +=== BioContainers === 
 + 
 +<code bash> 
 + 
 +</code> 
 + 
 +== Repositories == 
 + 
 +  * https://biocontainers.pro/multipackage 
 +  * https://biocontainers.pro/registry 
 + 
 +<code bash> 
 + 
 +</code> 
 + 
 +===== # Docker Swarm =====
  
 Отсутствует поддержка в Nextflow Отсутствует поддержка в Nextflow
  
-===== Kubernetes =====+===== Kubernetes =====
  
 <code bash> <code bash>
Строка 82: Строка 272:
 </code> </code>
  
-===== Slurm =====+===== Slurm =====
  
-Slurm — это отказоустойчивая и высокомасштабируемая система управления кластером и планирования заданий с открытым исходным кодом для больших и малых кластеров Linux. Slurm не требует никаких изменений ядра для своей работы и является относительно самодостаточной. Как менеджер рабочей нагрузки кластера, Slurm имеет три ключевые функции. Во-первых, он выделяет пользователям эксклюзивный и/или неэксклюзивный доступ к ресурсам (вычислительным узлам) на определенный период времени, чтобы они могли выполнять работу. Во-вторых, он предоставляет фреймворк для запуска, выполнения и мониторинга работы (обычно параллельной работы) на наборе выделенных узлов. Наконец, он разрешает конфликты за ресурсы, управляя очередью ожидающих работ.+[[application:hpc:slurm|Slurm]] — это отказоустойчивая и высокомасштабируемая система управления кластером и планирования заданий с открытым исходным кодом для больших и малых кластеров Linux. Slurm не требует никаких изменений ядра для своей работы и является относительно самодостаточной. Как менеджер рабочей нагрузки кластера, Slurm имеет три ключевые функции. Во-первых, он выделяет пользователям эксклюзивный и/или неэксклюзивный доступ к ресурсам (вычислительным узлам) на определенный период времени, чтобы они могли выполнять работу. Во-вторых, он предоставляет фреймворк для запуска, выполнения и мониторинга работы (обычно параллельной работы) на наборе выделенных узлов. Наконец, он разрешает конфликты за ресурсы, управляя очередью ожидающих работ.
  
-Демоны slurmd обеспечивают отказоустойчивую иерархическую связь. Пользовательские команды включают: sacct , sacctmgr , salloc , sattach , sbatch , sbcast , scancel , scontrol , scrontab , sdiag , sh5util , sinfo , sprio , squeue , sreport , srun , sshare , sstat , strigger и sview . Все команды могут выполняться в любом месте кластера.+Демоны slurmd обеспечивают отказоустойчивую иерархическую связь.  
 +Пользовательские команды включают: sacct, sacctmgr, salloc, sattach, sbatch, sbcast, scancel, scontrol, scrontab, sdiag, sh5util, sinfo, sprio, squeue, sreport, srun, sshare, sstat, strigger и sview.  
 +Все команды могут выполняться в любом месте кластера.
  
-CharlieCloud и Singularity больше подходят для использования контейнеров в системе HPC с отдельным контроллером заданий (обычно Slurm) и устранения проблем безопасности в Docker в общей системе.+  https://github.com/koroltim/NextFlow-on-SLURM/tree/main/examples
  
 <code bash> <code bash>
Строка 98: Строка 290:
  
 OAR — это универсальный менеджер ресурсов и задач (также называемый пакетным планировщиком) для кластеров HPC и других вычислительных инфраструктур (например, экспериментальных испытательных стендов распределенных вычислений, где универсальность является ключевым фактором). OAR — это универсальный менеджер ресурсов и задач (также называемый пакетным планировщиком) для кластеров HPC и других вычислительных инфраструктур (например, экспериментальных испытательных стендов распределенных вычислений, где универсальность является ключевым фактором).
 +
 +  * https://oar.imag.fr/
 +  * https://github.com/oar-team/oar
 +  * https://github.com/oar-team/oar3
 +  * https://oar.imag.fr/docs/2.5/
  
 <code bash> <code bash>
Строка 103: Строка 300:
 </code> </code>
  
-===== HyperQueue =====+===== HyperQueue =====
  
  
 HyperQueue — это инструмент, разработанный для упрощения выполнения больших рабочих процессов (графов задач) на кластерах HPC. Он позволяет выполнять большое количество задач простым способом, без необходимости вручную отправлять задания в пакетные планировщики, такие как Slurm или PBS. Вы указываете, что именно вы хотите вычислить, а HyperQueue автоматически запрашивает вычислительные ресурсы и динамически распределяет нагрузку задач по всем выделенным узлам и ресурсам. HyperQueue также может работать без Slurm/PBS как общий распределенный механизм выполнения задач. HyperQueue — это инструмент, разработанный для упрощения выполнения больших рабочих процессов (графов задач) на кластерах HPC. Он позволяет выполнять большое количество задач простым способом, без необходимости вручную отправлять задания в пакетные планировщики, такие как Slurm или PBS. Вы указываете, что именно вы хотите вычислить, а HyperQueue автоматически запрашивает вычислительные ресурсы и динамически распределяет нагрузку задач по всем выделенным узлам и ресурсам. HyperQueue также может работать без Slurm/PBS как общий распределенный механизм выполнения задач.
 +
 +  * https://github.com/It4innovations/hyperqueue
 +  * https://it4innovations.github.io/hyperqueue
 +  * https://github.com/jaantollander/workflows
  
 <code bash> <code bash>
Строка 112: Строка 313:
 </code> </code>
  
-===== HTCondor =====+===== HTCondor =====
  
  
 HTCondor — это программная система, которая создает среду высокопроизводительных вычислений (HTC). Она эффективно использует вычислительную мощность машин, подключенных через сеть, будь то отдельный кластер, набор кластеров в кампусе, облачные ресурсы, как автономные, так и временно присоединенные к локальному кластеру, или международные сети. Мощь исходит из способности эффективно использовать общие ресурсы с распределенным владением. HTCondor — это программная система, которая создает среду высокопроизводительных вычислений (HTC). Она эффективно использует вычислительную мощность машин, подключенных через сеть, будь то отдельный кластер, набор кластеров в кампусе, облачные ресурсы, как автономные, так и временно присоединенные к локальному кластеру, или международные сети. Мощь исходит из способности эффективно использовать общие ресурсы с распределенным владением.
 +
 +  * https://github.com/htcondor/htcondor
  
 <code bash> <code bash>
Строка 121: Строка 324:
 </code> </code>
  
-===== Flux =====+===== Flux =====
  
  
 Flux — это гибкая структура для управления ресурсами, созданная для вашего сайта. Структура состоит из набора проектов, инструментов и библиотек, которые могут использоваться для создания настраиваемых менеджеров ресурсов для центров высокопроизводительных вычислений. В отличие от традиционных менеджеров ресурсов, Flux может работать как параллельное задание в большинстве пусковых установок, поддерживающих MPI, в том числе в самом Flux. Это не только делает пакетные скрипты и рабочие процессы для Flux переносимыми на другие менеджеры ресурсов (просто запустите Flux как задание), но также означает, что пакетные задания имеют в своем распоряжении все функции полного менеджера ресурсов, как будто у них есть целый кластер.  Flux — это гибкая структура для управления ресурсами, созданная для вашего сайта. Структура состоит из набора проектов, инструментов и библиотек, которые могут использоваться для создания настраиваемых менеджеров ресурсов для центров высокопроизводительных вычислений. В отличие от традиционных менеджеров ресурсов, Flux может работать как параллельное задание в большинстве пусковых установок, поддерживающих MPI, в том числе в самом Flux. Это не только делает пакетные скрипты и рабочие процессы для Flux переносимыми на другие менеджеры ресурсов (просто запустите Flux как задание), но также означает, что пакетные задания имеют в своем распоряжении все функции полного менеджера ресурсов, как будто у них есть целый кластер. 
  
-<code bash>+./nextflow.config 
 +<code> 
 +manifest { 
 +    mainScript = 'demo.nf' 
 +    homePage = 'https://github.com/nextflow-io/nextflow/tree/master/docker/flux' 
 +    description = 'Demo using Nextflow with Flux' 
 +}
  
 +process {
 +    executor = 'flux'
 +}
 </code> </code>
  
-===== Bridge =====+./main.nf 
 +<code> 
 +workflow { 
 +    breakfast Channel.of '🥞️', '🥑️', '🥧️', '🍵️', '🍞️' 
 +    haveMeal(breakfast) 
 +
 + 
 +process haveMeal { 
 +    debug true 
 +    input: 
 +    val food 
 +    script: 
 +    """ 
 +    printf '$food for breakfast!' 
 +    """ 
 +
 +</code> 
 + 
 +<code bash> 
 +$ nextflow -c nextflow.config run main.nf 
 +</code> 
 + 
 +===== # Bridge ===== 
 + 
 +Repo: https://github.com/cea-hpc/bridge
  
 <code bash> <code bash>
  
 </code> </code>