2

我想让 snakemake 通过 SGE 集群运行具有特定 conda 环境的 Python 脚本。

在集群上,我的主目录中安装了 miniconda。我的主目录是通过 NFS 挂载的,因此所有集群节点都可以访问。

因为 miniconda 在我的主目录中,所以 conda 命令默认不在操作系统路径上。即,要使用 conda,我需要首先明确地将其添加到路径中。

我有一个 conda 环境规范作为 yaml 文件,可以与 --use-conda 选项一起使用。这也适用于 --cluster "qsub" 选项吗?

FWIW 我还使用 conda 环境启动了snakemake(实际上与我想运行脚本的环境相同)。

4

1 回答 1

2

我在 SGE 集群上有一个运行 conda 的现有 Snakemake 系统。这是令人愉快的,非常可行。我会尽力提供观点和指导。

您的 miniconda 的位置,无论是本地的还是共享的,都可能无关紧要。如果您使用登录来访问您的集群,您应该能够在登录时更新您的默认变量。这将产生全局影响。如果可能,我强烈建议您编辑.bashrc中的默认设置来完成此操作。这将在登录时正确且自动地设置您的 conda 路径。

我的文件中的一行,“home/tboyarski/.bashrc”

 export PATH=$HOME/share/usr/anaconda/4.3.0/bin:$PATH

编辑 1 评论中提出的好观点

就我个人而言,我认为将一切都置于 conda 控制之下是一种很好的做法。但是,对于通常需要访问 conda 不支持的软件的用户来说,这可能并不理想。通常支持问题与使用旧操作系统有关(例如,最近放弃了对 CentOS 5 的支持)。正如评论中所建议的,在单个终端会话中手动导出 PATH 变量对于不专门处理管道的用户可能更理想,因为这不会产生全局影响。

话虽如此,就像我在执行 Snakemake 之前一样,我建议初始化大多数或整个管道使用的 conda 环境。我发现这是首选方式,因为它允许conda创建环境,而不是让Snakemake 询问 conda创造环境。我没有网络讨论的链接,但我相信我在某个地方读到过那些只依赖 Snakemake 创建环境而不是从基础环境启动的人,他们发现环境存储在 /. snakemake 目录,并且它变得过大。随意寻找帖子。该问题已由减少隐藏文件夹负载的作者解决,但我认为从现有的 Snakemake 环境启动作业更有意义,该环境与您的头节点交互,然后将相应的环境变量传递给它是子节点。我喜欢有点层次感。

话虽如此,如果您从头节点的环境中运行 Snakemake 并让 Snakemake 通过qsub与 SGE 作业调度程序交互,您可能需要将环境传递给您的子节点。我实际上使用了我强烈推荐的内置DRMAA 功能。两种提交媒介都要求我提供以下论点:

   -V     Available for qsub, qsh, qrsh with command and qalter.

         Specifies that all environment variables active within the qsub
          utility be exported to the context of the job.

还...

  -S [[hostname]:]pathname,...
         Available for qsub, qsh and qalter.

         Specifies the interpreting shell for the job.  pathname must be
          an executable file which interprets command-line options -c and
          -s as /bin/sh does.

为了给你一个更好的起点,我还指定了虚拟内存和核心数,这可能是我的 SGE 系统特有的,我不知道。

-V -S /bin/bash -l h_vmem=10G -pe ncpus 1

我非常希望您在提交 SGE 集群时需要这两个参数,就像我个人一样。我建议将您的集群提交变量以 JSON 格式放在一个单独的文件中。上面的代码片段可以在我个人所做的这个例子中找到。我对它的组织方式与教程中的略有不同,但那是因为我需要更多的粒度。

就个人而言,我只在运行与我用来启动和提交 Snakemake 作业的环境不同的 conda 环境时使用 --use-conda 命令。例如,我的主要 conda 环境运行 python 3,但如果我需要使用需要 python 2 的工具,我将使用 Snakemake 在该特定环境下启动规则,以便执行规则使用对应于 python2 安装的路径。这对我的雇主来说非常重要,因为我要替换的现有系统很难在 python2 和 3 之间无缝切换,使用 conda 和 snakemake,这非常容易。

原则上,我认为这是启动基本 conda 环境并从那里运行 Snakemake 的好习惯。它鼓励在整个运行过程中使用单一环境。保持简单,对吧?仅在必要时使事情复杂化,例如需要在同一管道中同时运行 python2 和 python3 时。:)

于 2017-08-21T17:29:56.633 回答