Вы здесь

Запуск интерактивных задач

Иногда бывает необходимо запустить на кластере интерактивную программу или подключиться к уже запущенной программе в интерактивном режиме (например для запуска отладчика). Ниже рассмотрено несколько вариантов запуска интерактивных программ.

Запуск интерактивной программы

Для взаимодействия с пользователем через текстовый интерфейс программа обращается к специальному устройству — псевдотерминалу (pseudo teletype, PTY). Для создания такого устройства на узлах необходимо указать команде srun опцию --pty.

В примере ниже для задачи выделено два узла, но интерактивный интерпретатор командной строки запущен только на первом из них.

[host]$ srun -n 36 -t 40 --pty bash 

[node19]$ echo $SLURM_NODELIST
node[19,23]

Если вы работаете в графической среде XWindow (клиенты X2Go, Mobaxterm и т.п.), то по такой же схеме можно запускать на узлах задачи с графическим интерфейсом. Единственное отличие — при запуске надо добавить опцию --x11. По умолчанию графический вывод возможен с любого из выделенных узлов.

[host]$ srun -n 8 -N 1  -t 40 --pty --x11 matlab

Подключение к запущенной задаче

Для подключения к уже запущенной задаче необходимо знать её идентификатор и список узлов. На кластере "Уран" для этого служит команда mps, которая разворачивается в команду squeue:

squeue -a -u $USER -o '%.9i %.5P %.8j %.8u %.20S %.4T %.9M %.9l %.5D %R

Получив идентификатор задания его можно указать в параметре --jobid. Дополнительно в параметре -w можно указать узел, к которому надо подключиться. По умолчанию выполняется подключение к первому из узлов.

Пример подключения к задаче отладчиком gdb:

[host]$ srun -p debug -n 36 -t 40 myprog &

[host]$ mps
    JOBID PARTI     NAME     USER           START_TIME STAT      TIME TIME_LIMI NODES NODELIST(REASON)
 10323407 debug     bash    user8  2020-06-25T10:48:45 RUNN      1:52      3:00     3  node[31-32,46]

[host]$ srun --jobid=10323407 -w node46 --pty bash

[node46]$ ps ax | grep myprog
 9556 ?   S+     0:00  myprog

[node46]$ gdb -p 9556

Веб-интерфейс

Многие современные пакеты, такие как Jupiter Notebook или Tensor Board имеют встроенный веб-сервер, который обеспечивает взаимодействие с программой через веб-браузер. В этом случае возможно запустить сервер на узле, а браузер на хост-машине или на домашнем компьютере пользователя.

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

Далее предполагается, что пользователь кластера использует подключение с поддержкой графической среды XWindow (клиенты X2Go, Mobaxterm и т.п.). Поскольку запускаемые скрипты требуют выполнения нескольких команд, они оформлены в виде файлов, которые могут запускаться как через srun, так и через sbatch.

В скриптах номера портов TCP выбираются на основе UID пользователя и базового смещения большего 1024. Это должно обеспечить возможность одновременного запуска скрипта на одном узле несколькими пользователями. Если порт случайно оказался занят, то можно поменять базу (в пределах 2000-20000) и попробовать запустить скрипт снова.

Запуск Jupiter Notebook

Для запуска Jupiter Notebook на узле, необходимо передать ему опцию --no-browser и IP адрес сетевой карты (иначе будет использован IP 127.0.0.1). Можно настроить авторизацию по паролю, отредактировав файл ~/.jupyter или выполнив команду jupyter notebook password, но авторизации по токену будет достаточно.

Скрипт запуска jupiter_slurm.sh

#!/bin/sh

#SBATCH -J  jupiter_notebook  # Job name

HOST=$(hostname -i)

unset XDG_RUNTIME_DIR
jupyter notebook --no-browser ---ip=$IP

Запустив скрипт и дождавшись сообщения с URL и токеном можно запустить браузер и подключиться к своему JupiterNotebook.

[host]$ srun -n1 -t60  jupiter_slurm.sh &
...
[I 11:59:00.782 NotebookApp] The Jupyter Notebook is running at:
[I 11:59:00.782 NotebookApp] http://192.168.100.19:8888/?token=e5044d65c85c7759e428667826fca80e96f6c3178e754931 

[host]$ firefox http://192.168.100.19:8888/?token=e5044d65c85c7759e428667826fca80e96f6c3178e754931 

Запуск Tensor Board

Запуск Tensor Board в целом аналогичен запуску Jupiter Notebook. В отличие от Jupiter Notebook у Tensor Board нет парольной защиты, так что теоретически возможно подключение к вашей Tensor Board какого-то пользователя кластера. При необходимости, эта проблема будет решаться административным путём — отключением слишком любопытных пользователей.

Скрипт запуска tensorboard_slurm.sh

#!/bin/sh

#SBATCH -J  tensor_board    # Job name

HOST=$(hostname -i)

tensorboard --host=$HOST --logdir=$1

Запуск:

[host]$ srun -n1 -t60 tensorboard_slurm.sh ./mylogdir &
...
TensorBoard 2.2.1 at http://192.168.100.19:6006/ (Press CTRL+C to quit)<enter>

[host]$ firefox http://192.168.100.19:6006
Яндекс.Метрика