2

当我尝试使用"virtualenv --system-site-packages myenv"在 Ubuntu 上设置虚拟环境并尝试使用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”也证实了这一点。

有没有人遇到过类似的问题?

谢谢

4

2 回答 2

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 已成功“转移”到工作节点。也许对其他人有帮助。

于 2021-05-19T12:40:35.950 回答
0

python 环境是通过环境变量设置的,Slurm 并不总是将您当前的环境带入您的工作中。您可以使用--export 选项指定它,例如使用--export=ALL. 如果未指定任何内容,这应该是默认设置,但您的管理员可能已通过特定的 Slurm 环境变量对其进行了更改。

如果使用 sbatch,另一种解决方法是在作业脚本中加载虚拟环境。

于 2020-10-05T12:43:46.297 回答