Как можно убедиться, что скрипт представления Python в slurm находится в том месте, откуда была дана команда sbatch?
У меня есть скрипт отправки Python, с которым я запускаю sbatch
с помощью slurm
:
sbatch batch.py
когда я делаю это, вещи не работают должным образом, потому что я предполагаю, что batch.py
Процесс не наследует правильные переменные среды. Таким образом, вместо запуска batch.py
откуда sbatch
Команда была выполнена, его побежал откуда-то еще (/
Я верю). Мне удалось это исправить, обернув скрипт python скриптом bash:
#!/usr/bin/env bash
cd path/to/scripts
python script.py
кажется, что этот временный взлом работает, хотя кажется, что он избегает вопроса вместе, а не решает его. Кто-нибудь знает, как это исправить лучше?
Я знаю например, что в докере -w
или же -WORKDIR
существует так, что контейнер докера знает, где он должен быть. Мне было интересно, если что-то подобное существовало для грязи.
1 ответ
Slurm предназначен для передачи пользовательской среды во время отправки задания, за исключением переменных, явно отключенных пользователем или системным администратором.
Но способ запуска сценария заключается в следующем: сценарий копируется на главный узел выделения в специальном каталоге Slurm и запускается оттуда с $PWD
установить в каталог, где sbatch
команда была выполнена
Вы можете увидеть это с помощью простого скрипта, подобного этому:
$ cat t.sh
#!/bin/bash
#
#SBATCH --job-name=test_ms
#SBATCH --output=res_ms.txt
echo $PWD
dirname $(readlink -f "$0")
$ sbatch t.sh
Submitted batch job 1109631
$ cat res_ms.txt
/home/damienfrancois/
/var/spool/slurm/job1109631
Одним из следствий этого является то, что скрипты Python, которые импортируют модули в текущем каталоге, не могут этого сделать. Обходной путь должен явно добавить sys.path.append(os.getcwd())
до провала импорта.