Можно ли запускать команды 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 только после того, как мы находимся в контейнере? Я особенно заинтересован в использовании sbatch
, Использование srun, а затем переход в контейнер - это обман, а не то, что я хочу.
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. В файле определения установите раздел%runcript, например
%runscript
python "$@"
Затем вы можете просто отправить:
/path/to/imagename.img /path/to/tf_test.py
Образы сингулярности можно запускать как приложение, и по умолчанию они будут выполняться независимо от того, что находится в разделе%runcript.