【问题标题】:Problem with Python environment and Slurm (srun/sbatch)Python 环境和 Slurm (srun/sbatch) 的问题
【发布时间】:2021-01-19 03:25:42
【问题描述】:
当我尝试在 Ubuntu 上设置虚拟环境时遇到问题,使用 "virtualenv --system-site-packages myenv",并尝试用 slurm (srun/sbatch)
运行我的 python 脚本
虽然我过去运行我的代码没有问题,但此时我在尝试在激活我的环境的情况下运行时遇到 "ModuleNotFoundError"(来源./myenv/bin/activate)
我注意到虽然我可以在当前环境激活的情况下正常运行 "python foo.py",但 "srun python foo.py" 失败。事实上,通过printint sys.version,我可以看到使用srun运行的python版本与使用srun的python命令不同,这告诉我环境改变了(因此找不到我的包)。 “srun python --version”也证实了这一点。
有人遇到过类似的问题吗?
谢谢
【问题讨论】:
标签:
python
virtualenv
slurm
modulenotfounderror
【解决方案1】:
我在使用 Slurm 版本 20.11.7 时遇到了类似的问题
我有一个使用系统 python3 创建的虚拟环境,它是 Python 3.6.8
在调用已安装模块的日志节点上激活 venv 时工作正常,但例如在以下 shell 脚本中它没有并导致 ModuleNotFound:
#!/bin/bash
#SBATCH --partition=gpu #use GPU partition
#SBATCH --nodes=1 #number of nodes
#SBATCH --gres=gpu:2 #number of GPUs per node
#SBATCH --job-name=joeynmt_test
#SBATCH --mail-user=email
#SBATCH --mail-type=all
#SBATCH --ntasks=1
#SBATCH --mem=24G
#SBATCH --time=08:00:00
#SBATCH --qos=standard
source /home/.../bin/activate #activate venv
python3 --version
which python3
python3 -m myModule
在激活 venv 后直接调用 python3 --version 会导致系统 python 及其位置从 venv 插入 python
对我有用的是加载较新的 Python 版本(模块添加 Python/3.8.6-GCCcore-10.2.0),然后创建 venv,然后相应地在 shell 脚本中:
#!/bin/bash
#SBATCH --partition=gpu #use GPU partition
#SBATCH --nodes=1 #number of nodes
#SBATCH --gres=gpu:2 #number of GPUs per node
#SBATCH --job-name=joeynmt_test
#SBATCH --mail-user=email
#SBATCH --mail-type=all
#SBATCH --ntasks=1
#SBATCH --mem=24G
#SBATCH --time=08:00:00
#SBATCH --qos=standard
module add Python/3.8.6-GCCcore-10.2.0
source /home/.../bin/activate #activate venv
python3 --version
which python3
python3 -m myModule
使用 sbatch 将其提交给 Slurm 并没有引发任何错误,并且 venv 已成功“转移”到工作节点。也许对其他人有帮助。
【解决方案2】:
python 环境是通过环境变量设置的,Slurm 并不总是将您当前的环境带到您的工作中。您可以使用 --export option 指定它,例如与--export=ALL。如果未指定任何内容,这应该是默认值,但您的管理员可能已通过特定的 Slurm 环境变量对其进行了更改。
如果您使用 sbatch,另一种解决方法是在作业脚本中加载虚拟环境。