我需要编写工作流程,并且一直在寻找工作流程管理系统。我选择 Snakemake 是因为它集成了 Conda,而且我想要一个可以在本地或集群 (Linux) 中轻松运行的工作流程。因此,在阅读文档和教程后,我在集群的登录机器中制作了这个Conda环境:
name: testing
channels:
- conda-forge
- bioconda
- defaults
- R
dependencies:
- r-base=4.3.2
- snakemake=8.4.2
然后我制定了一个测试规则,然后我去
snakemake --cores 1
,一切正常。现在我想测试Snakemake是否将规则发送到Slurm。所以我尝试了我在文档和几乎每个教程中看到的 --cluster
命令:
snakemake: error: unrecognized arguments: --cluster
我也尝试了
--slurm
,也没有被识别。 --cluster-config
似乎也不能被 Snakemake 理解。
在寻找一些解释时,我发现显然 Snakemake 8 包含不向后兼容的更改(https://snakemake.readthedocs.io/en/stable/getting_started/migration.html)。看起来现在的情况是这样的:
New designed: Now if you want to use --cluster CMD, please use --executor cluster-generic --cluster-generic-submit-cmd CMD instead.
Note you should install cluster-generic using command pip install snakemake-executor-cluster-generic
好吧,忽略 pip 或 pip3,无论是在 Conda 内部还是外部,都找不到这样的包(我认为这本身应该是另一个问题),我真的非常非常困惑,因为:
--cluster
不再起作用的参考文献--cluster
--cluster
更复杂?我的意思是现在我需要手动安装以前默认工作的东西,我什至无法将其包含在 Conda 环境 YAML 中。我是 Snakemake 的新手,看起来我刚刚陷入了一个充满重大变化的雷区。 我应该把这一切都扔到地狱去并选择 Snakemake 7 版本吗?或者我应该继续使用版本 8,以便我习惯它,因为现在事情就是这样运作的?在这种情况下,你知道我可以在哪里找到如何运行这个东西的资源吗?我认为选择 Snakemake 的优点是拥有大量有用的文档,但老实说我快要疯了。
我遇到了一个非常相似的问题。我曾经对 SGE/UGE 集群做过类似的事情:
snakemake \
--cluster-config cluster.json \
-j 1 \
--cluster 'qsub -q all.q -l h_vmem={cluster.mem} -pe smp {cluster.num_cores} -V -cwd'
cluster.json
的内容是:
{
"__default__": {
"mem": "8G",
"num_cores": "{threads}",
"jobname": "{rule}"
}
}
在 Snakemake 8 中,您首先需要安装一个新插件:
pip install snakemake-executor-plugin-cluster-generic
--cluster-config
参数不再可用。所以第一个命令变成:
snakemake \
--executor cluster-generic \
--cluster-generic-submit-cmd 'qsub -N {rule} -q all.q -l h_vmem=8G -pe smp {threads} -V -cwd'
此逻辑应该适用于其他集群(例如 SLURM)。