【问题标题】:Prevent GPU usage in SLURM when --gpus is not set未设置 --gpus 时防止在 SLURM 中使用 GPU
【发布时间】:2019-08-26 22:36:09
【问题描述】:

我们正在使用 SLURM 来管理一个小型本地集群。我们管理的一个关键资源是 GPU。当用户通过 --gpus=2 请求 GPU 时,CUDA_VISIBLE_DEVICES 环境变量会设置为 SLURM 分配给用户的 GPU。

$ srun --gpus=2 bash -c 'echo $CUDA_VISIBLE_DEVICES'
0,1

我们有一个小团队,可以相信我们的用户不会滥用系统(他们很容易覆盖环境变量),所以这很有效。但是,意外绕过这个有点太容易了,因为当未指定 --gpus 时,$CUDA_VISIBLE_DEVICES 未设置,因此用户可以使用任何 GPU(我们通常使用 PyTorch)。

换句话说,以下命令可以正常工作(只要它位于 GPU 节点上),但我希望它失败(因为没有请求 GPU)。

srun sudo docker run -e CUDA_VISIBLE_DEVICES --runtime=nvidia pytorch/pytorch:1.1.0-cuda10.0-cudnn7.5-runtime python -c 'import torch; print(torch.tensor([1., 2.], device=torch.device("cuda:0")))'

如果将$CUDA_VISIBLE_DEVICES 设置为-1,它将失败。

$ CUDA_VISIBLE_DEVICES=-1 sudo docker run -e CUDA_VISIBLE_DEVICES --runtime=nvidia pytorch/pytorch:1.1.0-cuda10.0-cudnn7.5-runtime python -c 'import torch; print(torch.tensor([1., 2.], device=torch.device("cuda:0")))'
THCudaCheck FAIL file=/opt/conda/conda-bld/pytorch_1556653099582/work/aten/src/THC/THCGeneral.cpp line=51 error=38 : no CUDA-capable device is detected
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/opt/conda/lib/python3.6/site-packages/torch/cuda/__init__.py", line 163, in _lazy_init
    torch._C._cuda_init()
RuntimeError: cuda runtime error (38) : no CUDA-capable device is detected at /opt/conda/conda-bld/pytorch_1556653099582/work/aten/src/THC/THCGeneral.cpp:51

如果未指定 --gpus,如何配置 SLURM 以将 CUDA_VISIBLE_DEVICES 设置为 -1?

【问题讨论】:

  • 可能,你最好的方法是有不同的分区,因为你想要做的修改意味着调整代码并重新编译 Slurm。

标签: pytorch slurm


【解决方案1】:

如果 Slurm 未设置,您可以使用 TaskProlog 脚本将 $CUDA_VISIBLE_DEVICES 变量设置为 -1。

在slurm.conf中,配置TaskProlog=/path/to/prolog.sh,为prolog.sh设置如下内容。

#! /bin/bash

if [[ -z $CUDA_VISIBLE_DEVICES]]; then
echo export CUDA_VISIBLE_DEVICES=-1
fi

echo export ... 部分将在作业环境中注入CUDA_VISIBLE_DEVICES=-1。

确保/path/to 在所有计算节点上都是可见的。 但这不会阻止用户玩系统并从 Python 脚本中重新定义变量。真正阻止访问需要配置cgroups。

【讨论】:

  • 或者,实际上,您可以简单地在默认用户配置文件 (/etc/profile.d) 中设置 CUDA_VISIBLE_DEVICES=-1。然后它将由 Slurm 传播到作业,并在设置了--gpu 选项的情况下被覆盖。
  • 所有这些都未经测试。
  • 谢谢!我的目标不是建立一个防弹系统,而是引导我们信任的用户朝着正确的方向前进。我试试看。
  • 我对此进行了测试,这可行,nvidia-smi 仍然可见,但如果不覆盖该环境变量,任务将无法访问 GPU
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 2020-06-23
  • 2020-04-19
相关资源
最近更新 更多