Как можно убедиться, что скрипт представления 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()) до провала импорта.

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