【问题标题】:Loading a virtualenv in a job file to run on linux cluster在作业文件中加载 virtualenv 以在 linux 集群上运行
【发布时间】:2019-07-20 15:27:32
【问题描述】:

我正在尝试使用

设置一个作业文件以在 linux 集群上运行
$ qsub network.job 

我已经加载了执行脚本所需的模块,但是还需要激活模块附带的虚拟环境。

#$ -S /bin/bash
#$ -cwd
#$ -j y
#$ -o output/
echo "Running job script"

module load python/python3

./network.py 
echo "Finished job script"

包括

$source activate machinelearning

不激活 virtualenv

我需要在文件中添加什么来激活加载模块python/python3时附带的virtualenv机器学习?

【问题讨论】:

  • 我怀疑您需要创建一个包含所有依赖项的自定义 Python 模块,然后加载它,例如像module load my_custom/python 这样的东西。我还看到使用直接修改PYTHONPATH 的bash 脚本。
  • 我怀疑您脚本中的 source 行不正确。您是如何创建您打算使用的虚拟环境的,以及它是如何分发到您的集群节点的?
  • 我没有创建虚拟环境,它是加载模块的一部分,我似乎找不到它所在的路径。在我只在交互式会话上使用集群之前,我所要做的就是Module Load python/python3 然后source activate machinelearning
  • “我没有创建虚拟环境,它是加载模块的一部分”——这不是虚拟环境的工作方式。

标签: python linux bash virtualenv cluster-computing


【解决方案1】:
source /PATH/WHERE/YOUR/VIRTUAL/ENVIRONMENT/EXISTS/bin/activate

例如在你的 homedir 的子目录 venv 中

source ~/venv/machinelearning/bin/activate

【讨论】:

    【解决方案2】:

    从您的评论回复来看,source 命令可能不是问题所在。 python 虚拟环境中的典型做法是在虚拟环境内的activate 脚本上调用source。有关source 的更多信息,请参阅this 超级用户帖子。

    在这种情况下,由于命令 source activate machinelearning 在交互式会话中适用于您,因此您的主目录(或您正在使用的任何目录)中可能有一个名为 activate 的脚本将 machinelearning 作为一个参数,并激活适当的虚拟环境。

    这是我解决您当前问题的最佳方法:

    由于您能够在交互式会话中激活虚拟环境,请登录到交互式会话并激活虚拟环境。完成此操作后,在终端中键入 which python3,然后在 it should give you 中输入您正在工作的虚拟环境的完整路径。使用该完整路径并将最后一个 python3 替换为 activate,即您应该获取的脚本。例如:

    $>which python3
    /home/cmf05/environments/machinelearning/bin/python3
    

    然后将其放在您的脚本中 module load python/python3./network.py 之间:

    source /home/cmf05/environments/machinelearning/bin/activate
    

    顺便说一句:module load 不是我曾经工作过的任何系统中内置的东西,但看起来您正在向由 slurm 或类似管理的集群提交作业。看起来这正在加载计算作业所需的所有特定文件。我建议使用您的特定集群计算环境标记问题并将其放在标题中以获得更集中的帮助,以防这不能解决您的问题。

    【讨论】:

      猜你喜欢
      • 2015-07-14
      • 1970-01-01
      • 2016-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多