Можно ли запускать команды 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.

Другие вопросы по тегам