带有Python脚本、conda和集群的SnakeMake规则

带有Python脚本、conda和集群的SnakeMake规则,python,conda,sungridengine,snakemake,Python,Conda,Sungridengine,Snakemake,我想让snakemake通过SGE集群在特定的conda环境下运行Python脚本 在集群上,我的主目录中安装了miniconda。我的主目录是通过NFS装载的,因此所有群集节点都可以访问 由于miniconda位于我的主目录中,默认情况下,conda命令不在操作系统路径上。也就是说,要使用conda,我首先需要显式地将其添加到路径中 我有一个作为yaml文件的conda环境规范,可以与--use conda选项一起使用。这是否也适用于--cluster“qsub”选项 FWIW我还使用cond

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

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

由于miniconda位于我的主目录中,默认情况下,conda命令不在操作系统路径上。也就是说,要使用conda,我首先需要显式地将其添加到路径中

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


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

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

迷你康达的位置,本地或共享,可能并不重要。如果您使用登录访问集群,那么您应该能够在登录时更新默认变量这将产生全局影响。如果可能,我强烈建议您编辑中的默认设置以实现这一点。这将在登录时正确且自动地设置您的conda路径

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

编辑评论中提出的1个要点

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

如上所述,就像我在Snakemake执行之前一样,我建议初始化大部分或全部管道使用的conda环境。我发现这是首选的方式,因为它允许康达创建环境,而不是让蛇人要求康达创建环境。我没有网络讨论的链接,但我相信我在某个地方读到过,那些只依赖Snakemake创建环境的人,而不是从基础环境中创建环境的人,他们发现这些环境存储在/.Snakemake目录中,并且目录变得过大。请随便找这个职位。这个问题是作者提出的,他减少了隐藏文件夹的负载,但我认为从现有的Snakemake环境启动作业更有意义,该环境与头部节点交互,然后将相应的环境变量传递给其子节点。我喜欢有点层次感

话虽如此,如果要从主节点的环境运行Snakemake,并让Snakemake通过与SGE作业调度器交互,则可能需要将环境传递给子节点。实际上,我使用内置的,这是我极力推荐的。两种提交介质都要求我提供以下参数:

还有

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

-V -S /bin/bash -l h_vmem=10G -pe ncpus 1
我非常希望您在提交SGE集群时需要这两个参数,就像我个人所做的那样。我建议将集群提交变量以JSON格式放在一个单独的文件中。上面的代码片段可以在下面的示例中找到。我对它的组织方式与中的略有不同,但这是因为我需要更多的粒度

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


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

非常有帮助,谢谢。我不喜欢使用.bashrc将conda放在我的路径上,因为我发现它会破坏大量的系统二进制文件,导致其他工具崩溃,但是我想如果我手动将conda放在路径上以激活我的snakemake环境,然后将-V标志与qsub一起使用,那么就不需要使用.bashrc?中所描述的,我认为您不需要编辑您的.bashrc,但是,如果可能的话,我鼓励您将一切都置于conda的控制之下。我鼓励将此作为研究目的的黄金标准,因为它使其包可分发。对我来说,我所做的一切都与管道相关,因此,我编辑.bashrc以获得全局效果。使用conda不支持的软件的多方面用户可能会使用您建议的方法,即为特定终端会话和后续管道执行设置环境快速回答:是,--使用conda还将触发集群作业中的conda使用。要使miniconda在一般情况下“轻松”工作,它应该在PATH中。
   -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.
-V -S /bin/bash -l h_vmem=10G -pe ncpus 1