python - 具有Python脚本,conda和集群的SnakeMake规则

标签 python conda sungridengine snakemake

我想让Snakemake通过SGE集群在特定的conda环境下运行Python脚本。

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

由于miniconda在我的主目录中,因此默认情况下conda命令不在操作系统路径上。即,要使用conda,我需要首先将其明确添加到路径中。

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

FWIW我也使用conda环境(实际上是我要运行脚本的环境)启动snakemake。

最佳答案

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

您的小型图标的位置(本地或共享)可能无关紧要。如果使用登录名访问集群,则应该能够在登录时更新默认变量。这将产生全局影响。如果可能的话,我强烈建议您在.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,并通过qsub让Snakemake与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在该特定环境下启动规则,以便执行该规则规则使用与python2安装相对应的路径。这对我的雇主来说非常重要,因为我要替换的现有系统很难用conda和snakemake在python2和3之间切换,这非常容易。

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

关于python - 具有Python脚本,conda和集群的SnakeMake规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45801643/

相关文章:

python - 在 Tkinter 中指定字体?

python - 在 Atom 中激活 Python 虚拟环境

sqlite - SGE+ sqlite3 : Error: database is locked

python - Sun Grid Engine,强制每个节点执行一项作业

linux - 段错误后清空核心转储文件

c++ - 从 python 脚本调用非返回 python 函数

python - 在 Python 中使用 BeautifulSoup 从 HTML 中删除回车符

python - 什么是 Python 中的内置标识符?

centos - rMATS 错误 "unable to access a shared library"

python - 在 conda environment.yml 文件中,如何附加到现有变量而不覆盖它们?