Systemd

如何限制對 GPU 的訪問?

  • December 12, 2019

我正在 Ubuntu 18.04 下配置一個小型 GPU 伺服器。它應該支持互動式和批處理作業。

它專門由一個小團隊執行機器學習任務。我們還有一些僅在 CPU 上進行大規模並行數據處理的任務。

我的目標是避免一個人無限佔用 GPU,例如,這可能會啟動 IPython 控制台,import tensorflow在其中發布並離開辦公室,因為他的工作時間已經結束。

另一方面,希望允許使用者以互動方式(在 CPU 上)進行一些原型設計。

考慮到以上所有,我安裝了 SLURM 工作負載管理器來支持作業隊列和調度。

現在我想限制互動式會話對 GPU 的訪問,並將它們完全置於 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.sliceuser.slice.

原則上,我可以按照此處所述手動編輯文件/lib/systemd/system/user.slice並添加,但此文件可能會在下次更新軟體包後更改。DeviceAllow="char-nvidia-frontend"

那麼,device.deny在 Ubuntu 18.04 中設置屬性的正確方法是什麼?

Systemd 開發人員 Lennart Pottering說,另一個限制訪問的選項是 udev

我已經開始閱讀手冊,但似乎 udev 主要用於硬碟驅動器或 USB 設備,而不是影片卡。

任何人都可以分享一個範例配置設置權限嗎?

我想,我已經用環境變數解決了我的任務CUDA_VISIBLE_DEVICES

我已經排了/etc/environment一條線CUDA_VISIBLE_DEVICES=-1,因此“懇請”互動式會話不要使用 GPU。

引用自:https://serverfault.com/questions/958031