使用Python脚本,conda和集群的SnakeMake规则

时间:2017-08-21 16:15:26

标签: python conda sungridengine snakemake

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

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

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

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

FWIW我也使用conda环境启动snakemake(事实上我想运行脚本的环境相同)。

1 个答案:

答案 0 :(得分: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 来创建环境。我没有关于web-dicussion的链接,但我相信我读过那些只依靠Snakemake来创建环境,而不是从基础环境中生成区域的人,他们发现环境存储在/中。 snakemake目录,它变得过大。随意寻找帖子。这个问题是由减少隐藏文件夹负载的作者解决的,但我认为从现有的Snakemake环境启动作业更有意义,该环境与您的头节点交互,然后将相应的环境变量传递给它的子节点。我喜欢一点等级。

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

   -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格式放在单独的文件中。上面的代码段可以在I've done personally的示例中找到。我的组织方式与tutorial略有不同,但那是因为我需要更多的粒度。

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

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