【问题标题】: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,另一种解决方法是在作业脚本中加载虚拟环境。

      【讨论】:

        猜你喜欢
        • 2017-10-01
        • 1970-01-01
        • 2021-01-27
        • 2016-05-18
        • 1970-01-01
        • 2015-10-29
        • 1970-01-01
        • 1970-01-01
        • 2019-06-09
        相关资源
        最近更新 更多