СЛУРМ работа. NameError: имя «python3» не определено

Некоторое время я пытался понять, как запустить работу в slurm.

Версии Python в каталоге пользователя:

$ python -V
Python 2.7.5
$ python3 -V
Python 3.6.8

test.py включает в себя:

import pandas as pd
import numpy as np
true = pd.read_csv("testfile.csv")
print('Just Testing. End for now.')

gpu.job, который передается в SLURM:

#!/usr/bin/python3

#SBATCH --job-name=testjob       # Job name
#SBATCH --output=job.%j.out      # Name of output file (%j expands to jobId)
#SBATCH --cpus-per-task=4        # Schedule one core
#SBATCH --gres=gpu               # Schedule a GPU
#SBATCH --time=71:59:59          # Run time (hh:mm:ss) - run for one hour max
#SBATCH --partition=red          # Run on either the Red or Brown queue
#SBATCH --mail-type=END          # Send an email when the job finishes
#SBATCH --export=ALL             # All of the users environment will be loaded from callers environment


python3 /home/username/test/test.py

После запуска sbatch gpu.job я получаю:

Traceback (последний последний вызов):

Файл /var/spool/slurm/d/job402350/slurm_script, строка 13, в

python3 /home/имя пользователя/test/test.py

NameError: имя «python3» не определено ~

Эти варианты тоже не помогли и выдают ту же ошибку:

python3 test.py
/usr/bin/python3 test.py
/usr/bin/python3 /home/username/test/test.py

Совет будет оценен.


person Fusen    schedule 08.04.2021    source источник
comment
Вы пытаетесь запустить python3 внутри python3? Обычно, когда вы делаете #!/usr/bin/python3, он уже знает о области действия python.   -  person user3832673    schedule 08.04.2021


Ответы (1)


Ваш сценарий отправки — это сценарий оболочки, а не сценарий Python. Итак, первая строка вашего скрипта отправки должна быть

#!/usr/bin/env bash

скорее, чем

#!/usr/bin/python3

Технически вы можете отправить сценарий задания, который является сценарием Python, но тогда директивы #SBATCH попадут непосредственно в сценарий Python, и это будет сценарий, который вы отправляете:

#!/usr/bin/python3

#SBATCH --job-name=testjob       # Job name
#SBATCH --output=job.%j.out      # Name of output file (%j expands to jobId)
#SBATCH --cpus-per-task=4        # Schedule one core
#SBATCH --gres=gpu               # Schedule a GPU
#SBATCH --time=71:59:59          # Run time (hh:mm:ss) - run for one hour max
#SBATCH --partition=red          # Run on either the Red or Brown queue
#SBATCH --mail-type=END          # Send an email when the job finishes
#SBATCH --export=ALL             # All of the users environment will be loaded from callers environment


import pandas as pd
import numpy as np
true = pd.read_csv("testfile.csv")
print('Just Testing. End for now.')

Затем вы можете sbatch напрямую использовать этот скрипт Python. Но чаще всего предпочтительнее использовать сценарий Bash, чтобы иметь возможность настраивать среду, менять каталоги, копировать файлы туда и обратно и т. д., что проще в Bash, чем в Python.

person damienfrancois    schedule 08.04.2021