Python脚本、conda和clus的SnakeMake规则

2024-05-21 02:26:30 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

因为miniconda在我的主目录中,默认情况下conda命令不在操作系统路径上。一、 为了使用conda,我需要首先显式地将它添加到路径中。在

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

FWIW我还使用conda环境启动snakemake(实际上是我想要运行脚本的同一个环境)。在


Tags: 命令路径脚本yaml节点环境选项情况
1条回答
网友
1楼 · 发布于 2024-05-21 02:26:30

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

你的迷你们车的位置,本地的或共享的,可能不重要。如果您使用登录来访问集群,您应该能够在登录时更新默认变量。这将产生全局影响。如果可能,我强烈建议编辑.bashrc中的默认设置来完成此操作。这将正确地、自动地在登录时设置您的conda路径。在

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

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

编辑评论中的一个好观点

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

也就是说,就像我在执行Snakemake之前一样,我建议初始化大多数或整个管道使用的conda环境。我发现这是最好的方法,因为它允许conda创建环境,而不是让Snakemake请求conda来创建环境。我没有网络讨论的链接,但我相信我在某个地方读到过,那些只依赖Snakemake来创建环境的人,他们发现环境被存储在/.Snakemake目录中,而且目录变得太大了。随便找一下这个职位。这个问题是作者解决的,他减少了隐藏文件夹的负载,但我认为从现有的Snakemake环境启动作业更有意义,该环境与head节点交互,然后将相应的环境变量传递给它的子节点。我喜欢等级制度。在

也就是说,如果您在头节点的环境中运行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系统的,我不知道。在

^{pr2}$

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

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

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

相关问题 更多 >