Можно ли запускать команды slurm в контейнере сингулярности?

Я хочу войти в контейнер с особенностями, а затем запустить команды slurm. Например:

singularity shell docker://tensorflow/tensorflow:1.0.0-gpu-py3

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

python tf_test.py

содержимое tf_test:

import tensorflow as tf
print(tf.random_uniform((3,2)))

у меня проблема в том, что контейнер не знает, что я нахожусь в HPC, или что этот slurm существует. Можно ли запускать команды slurm только после того, как мы находимся в контейнере? Я особенно заинтересован в использовании sbatch. Использование srun с последующим переходом в контейнер - это обман, а не то, что я хочу.


person Charlie Parker    schedule 26.03.2018    source источник


Ответы (1)


Не уверен, какая у вас версия, но это должно работать для серии 2.4.x.

Вы можете установить slurm в контейнер или, если он установлен в вашем кластере, скажем:

/apps/sched/slurm/[ver]

Вы можете использовать параметр -B / --bind, чтобы привязать его, например:

singularity shell -B /apps/sched/slurm/[ver] -B /etc/slurm

Но при запуске задание не будет в контейнере. Чтобы добиться этого, вы можете отправить сценарий запуска, который выполняет что-то вроде:

singularity exec docker://tensorflow/tensorflow:1.0.0-gpu-py3 python /path/to/tf_test.py

Изменить: Как только вы получите это, где вы довольны запуском, IMO было бы хорошо создать образ Singularity из исходного кода Docker. В файле определения настройте раздел% runscript, например

%runscript
    python "$@"

Затем вы можете просто отправить:

/path/to/imagename.img /path/to/tf_test.py

Образы Singularity можно запускать как приложение, и по умолчанию оно будет выполнять все, что находится в разделе% runscript.

person Jason Stover    schedule 28.03.2018