我正在尝试运行一个snakemake v8工作流程,其中整个项目需要在SLURM集群上完成,但一个规则需要在GPU分区上运行,而其他规则则在CPU节点上执行。我在配置文件中指定了默认分区,它工作正常,但是当它尝试执行 GPU 规则时,我从 SLURM 收到以下错误:
WorkflowError:
SLURM job submission failed. The error message was sbatch: error: You must request a gpu using the --gpus or --gres option to use gpu_test partition, if you have CPU work for this hardware please use test
sbatch: error: Batch job submission failed: Unspecified error
我尝试使用 gpus、gres 和简单的 gpu 来指定我的资源(如 snakemake 文档中所示),但无论如何都会得到相同的错误。
resources:
slurm_partition="gpu_test",
gpus=1,
# gres="gpu:1",
# gres="gpu:nvidia_a100_1g.10gb:1",
当我查看日志文件时,snakemake 似乎首先请求集群上的节点?我不确定发生了什么或如何解决它。
如何确保 Snakemake 将必要的参数传递给 SLURM?
在snakemake v8中,最简单的方法(在撰写本文时)似乎是在您的环境中安装slurm执行器插件:
pip install snakemake-executor-plugin-slurm
conda install -c bioconda snakemake-executor-plugin-slurm
然后创建一个配置文件,定义供提交脚本使用的参数。如果您还没有,您可以创建始终自动使用的默认配置文件:
profiles/default/config.yaml
executor: slurm
default-resources:
slurm_partition="some_dpartition_name",
如果您需要针对特定规则进行不同的设置(就像您的情况一样),您可以添加到配置文件中:
set-resources:
my_gpu_rule:
slurm_partition: "gpu_test"
slurm_extra: "'---gres=gpu:1'"
我自己还没有尝试过,所以它可能不会立即起作用,但它应该会让你走上正轨。请参阅文档和 Github 问题以获得更多灵感,并分享它是否有效: