Я настраиваю небольшой сервер GPU под Ubuntu 18.04. Он должен поддерживать как интерактивные, так и пакетные задания.
Он предназначен для выполнения задач машинного обучения небольшой командой. У нас также есть задачи для массовой параллельной обработки данных только на CPU.
Моя цель - избежать бесконечного захвата графических процессоров одним человеком, который может, например, запустить консоль IPython, проблема import tensorflow
в нем и покинуть офис, потому что его рабочее время закончилось.
С другой стороны, желательно позволить пользователям создавать прототипы в интерактивном режиме (на CPU).
Учитывая все вышесказанное, я установил диспетчер рабочей нагрузки SLURM для поддержки очередей заданий и планирования.
Теперь я хочу ограничить доступ к графическим процессорам из интерактивных сеансов и полностью передать их под контроль SLURM.
Ограничение доступа к /dev/nvidia[0-3]
, как было предложено Вот, не работает, поскольку SLURM изменяет пользователей процесса с root на фактических владельцев задач.
После некоторого поиска в Google я пришел к двум вариантам: cgroups и udev.
Чтение Эта тема в списке рассылки systemd-devel предполагает, что ограничение доступа с помощью cgroups можно выполнить в обход systemd, просто выполнив такие команды, как echo "c 195:*" > /sys/fs/cgroup/devices/ blah-blah-blah /device.deny
Тем не менее я читал в руководство что systemd поддерживает 3 фрагмента.
Я также обнаружил, что процессы, запущенные демоном SLURM, выполняются в system.slice
, а процессы, запущенные пользователями, подключенными к серверу с помощью ssh или подключения к удаленному рабочему столу, запускаются в user.slice
.
В принципе могу вручную редактировать файл /lib/systemd/system/user.slice
и добавить DeviceAllow="char-nvidia-frontend"
как описано Вот, но этот файл может измениться после следующего обновления пакетов.
Итак, как правильно настроить device.deny
свойства в Ubuntu 18.04?
Леннарт Поттеринг, системный разработчик говорит, что еще один вариант ограничения доступа - udev.
Я начал читать руководства, но похоже, что udev в основном предназначен для жестких дисков или USB-устройств, а не для видеокарт.
Может ли кто-нибудь поделиться примером разрешений настройки конфигурации?
Думаю, я решил свою задачу с переменной окружения CUDA_VISIBLE_DEVICES
.
Я вставил /etc/environment
линия CUDA_VISIBLE_DEVICES=-1
и таким образом «любезно попросили» интерактивные сеансы не использовать GPU.