Памятка для пользователей кластера "Макарьич"

Получение аккаунта на кластере

Чтобы получить аккаунт на кластере, необходимо заполнить форму регистрации.

В случае возникновения вопросов, можно персонально связаться с администраторами:

  • Сергей Сарайкин (saraykin@gmail.com) - старший администратор, отвечает за инфраструктуру.
  • Андрей Томаровский (andrey.tomarovsky@gmail.com) - младший администратор, отвечает за поддержку пользователей.

или руководителем лаборатории:

Вход на кластер

Доступ к кластеру осуществляется по протоколу SSH.

GNU/Linux, BSD и OS X:

Пользователи указанных операционных систем могут воспользоваться командой ssh:

ssh username@ma.fbb.msu.ru

Windows:

Пользователи Windows могут воспользоваться одной из следующих программ: Putty, tunnelier. При этом необходимо указать следующие параметры:

Протокол: ssh
Адрес:    ma.fbb.msu.ru
Порт:     22

Альтертанивным решением будет включение WSL (Windows Subsystem for Linux), подробно описанное здесь.

Смена пароля

При регистрации аккаунта администраторы назначают временный пароль. Желательно его сменить сразу же, после первого успешного логина на кластер. Сделать это можно при помощи команды passwd.

Загрузка и скачивание файлов

Для копирования файлов рекомендуется использовать протоколы scp/sftp.

GNU/Linux, BSD и OS X: Пользователи перечисленных операционных систем могут воспользоваться следующими командами для копирования файлов:

С ПК на кластер:

scp path/to/file username@ma.fbb.msu.ru:path/to/destination/

С кластера на ПК:

scp username@ma.fbb.msu.ru:path/to/file path/to/destination/

Чтобы копировать директории нужно добавить опцию -r:

scp -r path/to/folder username@ma.fbb.msu.ru:path/to/destination/

Можно использовать относительные пути (path/to/source или абсолютные /path/to/source). Для определения абсолютного пути удобно использовать команду readlink -f path/to/source.

Windows: Пользователи Windows могут воспользоваться следующими приложениями: WinSCP или WinSCP as FAR Plugin. Параметры для подключения такие же, как в секции про доступ к кластеру.

Расчеты на кластере

Важно! Не считайте на главном узле (главный узел - это head02, куда вы попадаете, когда заходите).

На кластере используется Portable Batch System (PBS). Для запуска задачи нужно создать скрипт и запросить ресурсы на выполнение задачи.

Например скрипт, который считает количество прочтений в файле FASTQ и записывает результат в файл:

#!/bin/bash
#PBS -l walltime=50:00:00,mem=40gb,nodes=1:ppn=8
#PBS -d .
echo $(zcat sample.fastq.gz | wc -l)/4 | bc > sample.fastq.wc

В скрипте указано, что задача будет:

  • выполняться на 1-ом узеле (nodes=1);
  • использовать 8 ядер (ppn=8) и 40Гб ОЗУ (mem=40gb);
  • выполняться максимум 50 часов расчетного времени (walltime=50:00:00). Если задача не будет выполнена по истечению заданного срока, она будет принудительно завершена.
  • начнет выполненяться из текущего каталога (опция -d)

Важно! Для корректной работы вычислительных узлов важно запрашивать все вышеперечисленные ресурсы. Дело в том, что если, например, указать при отправке задачи только время и ОЗУ, то на ее выполнение будет запрошено 1 ядро, тогда как сама задача может выполняться на большем количестве ядер. В результате, несколько таких ресурсоемких задач могут быть отправлены на один вычислительный узел, который не будет справляться с нагрузкой.

Если не указать walltime, то через час задача будет автоматически завершена. Более подробно о запросе ресурсов можно прочитать в файле man pbs_resources, либо на официальном сайте.

Очередь задач

После создания скрипта и запроса в нем необходимых ресурсов, его нужно отправить в очередь. Для отправки задачи в определенную очередь, необходимо выполнить команду qsub -q queue_name scriptname. Например: qsub -q big -l nodes=1 script.sh. По умолчанию задачи попадают в очередь eternity.

Типы доступных узлов (очереди):

name cpu mem node count comment
eternity 24 48G 30 default
big 32 128G 3
mem512g 48 512G 1
mem1t 80 1T 1
mem1t 80 2T 1
gpu 24 48G 2 Nvidia GTX 1060

Указать подходящую очередь можно также в самом скрипте. Например, ниже мы запрашиваем ресурсы вычислительного узла из очереди big:

#!/bin/bash
#PBS -l walltime=200:00:00,mem=128G,nodes=1:ppn=32
#PBS -q big
#PBS -d .

Несколько полезных команд:

  • qstat -n1 - просмотреть состояние очереди. Запускать на короткое время и отлаживать программы можно с любого свободного от задач узла. Зайти на узел можно с главного (head02) по ssh nodeX.
  • pbsnodes (или qhost) - посмотреть доступные узлы.
  • pbsnodes -l free - посмотреть все узлы, на которых свободно хотя бы одно ядро.
  • qsub <script.sh> - поставить задачу на выполнение. В ходе выполнения задачи создаются 2 файла start.sh.o<номерзадачи> - поток вывода и start.sh.e<номерзадачи> - поток ошибок.
  • qdel 139843.head02 - остановка/удаление задачи из очереди.
  • qstat -f <номерзадачи>.head02 - просмотр детальной информации о выполняемой задаче.
  • checkjob -v - узнать статус задачи. Если задача ждет в очереди, то указывается также почему задача не попала на каждый из узлов. Например, узел может быть полностью загружен, нет запрошенного количества ядер или памяти.

Если задача создает очень большой (гигабайты) файл вывода, то лучше перенаправлять его сразу в определенный файл, например:

perl script.pl > /home/user/result.out

Иначе, весь большой вывод сначала создается в виде файла shart.sh.0 на одном из расчетных узлов, а в конце счета копируется по сети в домашнюю папку, что замедляет работу главного узла.

Массивы задач

Для работы с большим количеством файлов можно использовать массивы задач. Важно! Не делайте массивов больше чем на 1000 задач.

Для запуска массива задач (job array) используется параметр -t, которому можно передать список из ID задач. Например, -t 0-39:

#!/bin/bash -l
#PBS -l walltime=5:00:00,mem=8gb,nodes=1:ppn=4
#PBS -d .
#PBS -t 0-39

python3 script.py -i ${PBS_ARRAYID}.fasta > ${PBS_ARRAYID}.prot

В этом случае каждая из задач будет выполняться на 4-х ядрах и использовать 8gb ОЗУ. Порождается 40 одинаковых задач, каждой выделяется свое ядро, каждой передается свое значение переменной $PBS_ARRAYID от 0 до 39. В зависимости от значения, можно внутри скрипта обратиться к какому-либо файлу, как показано в примере выше.

Запуск массива задач можно также выполнить из консоли: qsub -t 1-3,6,7 script.sh. Просмотр очереди в данном случае: qstat -t.

Массив задач можно ограничить одним узлом: #PBS -l nodes=node13, тогда начнется выполнение первых 24-х задач (максимальное число ядер в узлах очереди eternity), а остальные задачи массива будут ждать в очереди.

Использование модулей

На клаcтере реализована так называемая "система модулей". С ее помощью можно быстро получать доступ к различному ПО и к последним версиям интерпретаторов Python, R и т.д.

Основные команды:

  • module avail - посмотреть список доступных модулей;
  • module load <modulename> - подгрузить модуль;
  • module unload <modulename> - отключить модуль;
  • module list - список активированных на данный момент модулей.

Для примера, на кластере установлено несколько версий Python, удобное переключение между которыми реализовано через модули:

module load python/python-3.7.4
python3 --version  # Python 3.7.4
module unload python/python-3.7.4
module load python/python-3.8.2
python3 --version  # Python 3.8.2

Для запуска скрипта на языке программирования R необходимо подгрузить модуль с нужной версией языка, а после запустить скрипт при помощи команды Rscript <script.r>. Запуск скриптов на языке Perl осуществляется командой perl <script.pl>, также с предварительной подгрузкой модуля языка.

Conda

Актуальную версию Miniconda можно загрузить с официального сайта и установить самостоятельно в домашней директории. После установки рекомендуется отключить автоматическую активацию base-окружения командой:

conda config --set auto_activate_base false

Для установки необходимой программы нужно создать окружение, активировать его и выполнить установку. Не рекомендуется устанавливать все инструменты в одно окружение, т.к. это повышает вероятность конфликта зависимостей.

  • conda create -n mybase - создать новое окружение;
  • conda env remove --name mybase - удалить окружение: ;
  • conda env list - просмотр созданных окружений;
  • conda activate mybase - активация окружения;
  • conda deactivate - деактивация активного окружения;
  • conda install -c conda-forge parallel - для установки нужной программы (например, parallel). Через параметр -c указывается канал, обычно это conda-forge, либо bioconda, но лучше узнать индивидуально для каждого устанавливаемого инструмента.

Для использования Conda окружений в PBS-скриптах необходимо указать #!/bin/bash -l. Например:

#!/bin/bash -l
#PBS -l walltime=50:00:00,mem=40gb,nodes=1:ppn=8
#PBS -d .
conda actibate mybase
tool_name -i input >> output

Jupyter

Jupyter доступен и работает на вычислительном узле node11.

R и RStudio

RStudio работает на вычислительных на узлах:

Ограничения по вводу-выводу

Все вычислительные узлы, а также рабочий узел head02 подключены к файл-серверу (/home). Если файл сервер начинает испытывать очень большие нагрузки по чтению-записи, то становится трудно работать на head02.

Не запускайте одновременно много задач интенсивно использующие I/O. Задачи будут тормозить значительно дольше, чем если бы они были бы запущены по очереди.

По умолчанию программы вроде tar, cp запускаются с ionice -3. К сожалению, это нельзя сделать для cat. Если вам нужно объединить два огромных файла или что-то еще с помощью cat, то лучше используйте pv. Это интерактивный аналог, который может показывать progress-bar, скорости передачи данных, и, самое главное, ограничивать скорость передачи данных подобно rsync. Пример использования:

pv -L 10m file1 file2 > concatenated

Сборка геномов/транскриптомов

Для операций над большим количеством файлов, на узлах node01, node02 и node36, node33-node35 созданы специальные scratch разделы /mnt/scr размером 600Gb, 1Tb, 2Tb соответственно. Если вам необходимо, например, собрать транскриптом, то имеет смысл использовать именно их - это существенно поднимет скорость выполнения задачи.

Типичный PBS скрипт с использованием scratch директории будет выглядеть так:

#!/bin/bash
#PBS -d .

# Copy data from main storage to scratch
cp /home/my/data /mnt/scr/data
cd /mnt/scr/data

# Do some job
do_some_job

# Copy results back to main storage
cp /mnt/scr/data/results /home/my/data

# Clean all stuff
rm -rf /mnt/scr/data

NB: Будьте внимательны, в случае Array job.

Доступное ПО

Многие программы, необходимые для работы с геномными данными, уже установлены на кластере. Их можно найти в директории /home/tools/. Если вам нужна какая-то программа, и её нет в /home/tools/, но она может пригодиться другим, то установите её в /home/tools/newprogram/ или попросите об этом администраторов.

Удаленный графический доступ

Мы запустили в тестовом режиме возможно удаленно работать с графическими приложениями. Все действия осуществляются на специально выделенном узле. В данный момент, по соображениям безопасности, доступ возможен только из сети Факультета.

Для доступа необходимо: - Cкачать и установить клиент x2go под соответствующую ОС (поддерживаются GNU/Linux, Windows, Mac OS X) - Согласно инструкции (вариант с картинками) создать новую сессию, где указать следующие параметры:

Host: ma.fbb.msu.ru
Login: <username>
SSH port: 222
Session type: GNOME
  • Попробовать подключиться - все должно работать. Если вы используете для авторизации ключ, его также можно указать при создании сесии. На вкладке Connection можно выбрать тип вашего соединения, для оптимизации производительности. На вкладке Shared folders можно дополнительно подключить локальные директории (на вашем компьютере), которые вам будут также доступны на кластере. Соответственно можно легко копировать файлы, но этот интерфейс далеко не самый производительный. При отключении сессии сохраняются.

IGV

Одна из ключевых возможностей, ради которой мы реализовали удаленный графический доступ - возможность работы с геномными браузерами.

Для использования IGV необходимо открыть терминал и ввести следующие команды

module load igv
igv.sh

Первая активирует соответствующий модуль и устанавливает необходимые пути, вторая непосредственно запускает IGV.