| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия |
| nextflow [2025/02/05 15:36] – mirocow | nextflow [2025/02/26 20:36] (текущий) – mirocow |
|---|
| ====== 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 ===== |
| |
| ==== Варианты работы: ==== | ==== Варианты работы: ==== |
| 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> |
| </code> | </code> |
| |
| nextflow.config | ./nextflow.config |
| <code> | <code> |
| |
| </code> | </code> |
| |
| ===== Docker Swarm ===== | === 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> |
| </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> |
| |
| 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> |
| </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> |
| </code> | </code> |
| |
| ===== HTCondor ===== | ===== # HTCondor ===== |
| |
| |
| HTCondor — это программная система, которая создает среду высокопроизводительных вычислений (HTC). Она эффективно использует вычислительную мощность машин, подключенных через сеть, будь то отдельный кластер, набор кластеров в кампусе, облачные ресурсы, как автономные, так и временно присоединенные к локальному кластеру, или международные сети. Мощь исходит из способности эффективно использовать общие ресурсы с распределенным владением. | HTCondor — это программная система, которая создает среду высокопроизводительных вычислений (HTC). Она эффективно использует вычислительную мощность машин, подключенных через сеть, будь то отдельный кластер, набор кластеров в кампусе, облачные ресурсы, как автономные, так и временно присоединенные к локальному кластеру, или международные сети. Мощь исходит из способности эффективно использовать общие ресурсы с распределенным владением. |
| | |
| | * https://github.com/htcondor/htcondor |
| |
| <code bash> | <code bash> |
| </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> |