Linux
不同使用者自動調度和分派計算作業
我打算在電腦科學系建立一個 Linux 伺服器(可能是 CentOS)。該伺服器將用作計算伺服器,供從事 GPU 計算、生物資訊學或 AI 研究的人員使用。
假設我可以給每個使用者一個 shell,讓他們啟動他們的工作,這可能就是我一開始會做的事情。
然而,我面臨一個潛在的問題:有時機器會被用作計算工具,目的只是為了得到計算結果,而有時它會被用作基準測試平台,以衡量新機器的效率。技術/算法/隨便。
這意味著,當伺服器被用於第二類任務時,其他使用者不應該能夠啟動其他繁重的任務,從而乾擾基準測試結果。
所以我想設置並可能自動化一個類似的系統:
- 通常情況下,使用者沒有資源限制,不同的作業被調度並正常共享系統的資源。
- 如果使用者啟動“優先”作業,則其他使用者將被放入一個受限制的
cgroup
,僅限於一個或兩個可用 CPU,並且記憶體使用受到限制。- 優先作業在一個
cgroup
可以訪問所有其他 CPU 並且對記憶體使用沒有限制的獨立設備上啟動是否有一些軟體包可以幫助自動化這樣的架構?我在網際網路上找到的所有內容都在談論編排容器,但這裡的不同之處在於我想在我的工作執行時限制其他人使用的資源,所以在容器中為工作提供午餐並沒有幫助。
我還研究了類似的東西
dockersh
,以實現相反的效果:每個人都直接在容器內登錄,因此我可以輕鬆地按需為每個人分配資源。但是,dockersh
似乎沒有維護,我沒有找到任何其他實現相同概念的東西。
帶有 systemd 的 Linux 可以在單元上設置cgroups 資源控制。您可以為 machine.slice 設置一個較大的比率,例如
CPUShares=100000
. 然後在該切片中將重要作業作為容器執行。僅在作業執行時才施加配額可能會更棘手。配額是靜態的,可能需要調整。可能是這樣編寫的(感謝Chris 的 wiki)
systemctl --runtime set-property user-1001.slice CPUQuota=200%
如果你需要一些額外的功能,比如批處理作業控制,你需要找到或編寫一個系統來做這件事。