Инструменты автоматизации исследований. Snakemake

Тимур Салимов — Techlead DS

Введение

  • Рассмотрим процесс работы в DS:
    • Зафиксировать предмет исследования
    • Сформулировать гипотезу и зафиксировать прогноз
    • Создать дизайн эксперимента
    • Провести эксперимент и зафиксировать результаты
    • Интерпретировать результаты
  • А теперь посмотрим на эти же шаги но с точки зрения механической работы, которую нужно сделать, чтобы их выполнить:
    • Выгрузить исходные данные из источника
    • Написать отчет, скорее всего, в интерактивном документе, который ещё нужно собрать потом
    • Новый отчет с предлагаемой гипотезой, или же какая-то система, где можно эту гипотезу занести, чтобы на неё потом можно было ссылаться
    • Новый отчет с дизайном эксперимента, который сам по себе представляет набор шагов, которые нужно последовательно выполнить
    • Взять отчет с последовательностью шагов и проделать их, при этом сохранив куда-то результаты эксперимента
    • И снова отчет, с уже интерпретацией результатов эксперимента, на которые тоже хотелось бы сослаться, а не ручками копировать.

Есть ли решение?

  • Есть множество решений, позволяющих задавать последовательность выполнения различных задач и автоматизировать их. Такие инструменты часто носят название workflow management system или workflow engine.
  • На самом деле, инструментов стало настолько много, что появилось открытое сообщество, которое выпускает стандарт синтаксиса описания последовательности задач – Common Workflow Language(cwl).

Workflow management system

Шаг

  • Входные данные
    • Различные типы
    • Обобщение
    • Индексация
    • Валидация
  • Функция преобразования
    • Консольная команда или скрипт
    • Изолированная среда исполнения и её параметры
    • Требования
    • Модульность
  • Выходные данные
    • Различные типы
    • Индексы
    • Валидация

Workflow

  • Используемая терминология
    • Линейная последовательность шагов - pipeline.
    • Множество pipeline’ов, со всеми пересечениями и ветвлениями - workflow.
    • В рамках стандарта cwl, dataflow это синоним workflow, который просто подсвечивает ориентацию на данные.
  • Общие элементы
    • Задавать последовательность исполнения
    • Условное исполнение
    • Множественный запуск
    • Вложенные workflow

GNU Make

Всё началось с GNU… Ну, естественно.

GNU Make — утилита, автоматизирующая процесс преобразования файлов из одной формы в другую. Чаще всего это компиляция исходного кода в объектные файлы и последующая компоновка в исполняемые файлы или библиотеки.

Синтаксис Makefile:

    цель1 цель2 ...: реквизит1 реквизит2 ...
    команда1
        команда2
        ...

Пример:

GNU Make: Реальность

Однако, с ним есть свои трудности:

Snakemake

  • Snakemake - это workflow management system, следующий парадигме GNU Make и использующий Python в качестве основы своего синтаксиса.
  • Пример DAG:

Основная идея

Правило

  • Из чего состоит правило?

    • Основные элементы:
      • Имя правила
      • Входные данные
      • Выходные данные
      • Команда
  • Пример:

Обобщение правила

  • wildcard:

  • Агрегация через python:

  • Агрегация через встроенную функцию expand:

Индексация данных

  • Обращение по индексу:

  • Обращение по имени:

Функция преобразования

  • shell был показан ранее. Рассмотрим, какие есть ещё варианты.
  • run для использования Python кода напрямую:

  • script для указания файла со скриптом:

  • Пример файла скрипта:

Изоляция: Виртуальное окружение

  • Пример:

  • Объявление conda окружения:

  • Запуск с использованием виртуальных окружений:

Изоляция: Контейнеризация

  • Пример:

  • Запуск с использованием контейнеризации:

Указание дополнительных параметров

  • Пример:

Выгрузка данных из источников

  • В Snakemake с 8 версии эта функциональность вынесена в плагин, который необходимо установить. Пример установки плагина для S3:
    •       conda install -c bioconda snakemake-storage-plugin-s3
  • Пример с S3:

Workflow (DAG)

  • Зависимость между правилами строится сверху вниз
    • Пример:

Множественный запуск

  • Можно выполнить правило несколько раз для разных файлов.
  • Пример правила для множественного запуска:

  • Итоговый DAG:

Интерфейс командной строки

Распараллеливание и контроль ресурсов

  • Использование threads и resources:

  • Указание количества ядер при запуске:

  • Запуск с количеством ядер и ограничением на ресурсы:

Модульность

  • Можно разбить ваш Snakefile на множество .smk файлов и собрать их потом вот таким образом:

  • Также можно импортировать другой файл с возможность исключить или изменить правила:

Выводы