
我在一個研究實驗室工作,擁有多台不同規格的實體機器。這些機器有不同的 CPU(有些是 Intel,有些是 AMD)、不同的 RAM 大小,有些有獨立的 GPU,有些則沒有。
我們目前的解決方案是基於 SSSD 和 Kerberos,以便使用者可以從每個終端登入其帳戶並存取其檔案。問題在於,這樣,使用者在工作時就被「束縛」在一台機器上,導致資源分配不理想。
因此,我們正在為我們的叢集尋找替代解決方案。我們的主要目標是真正統一所有機器,即從使用者的角度來看,叢集由一台機器組成。然而,根據我們收集的信息,Slurm 這樣的解決方案並不理想,因為我們不想依賴作業調度程序。我們設想的解決方案是這樣的:當使用者登入時,他們可以指定他們需要的規格(RAM、CPU 數量、獨立 GPU 等),然後創建具有所需規格的虛擬化環境(一個 Docker 映像) ,或例如虛擬機器)。然後,使用者可以將該環境用作常規“計算機”。儘管如此,該虛擬環境的資源應該來自集群,而不是來自單一機器。還應該可以共享每個「虛擬環境」都可以存取的大型資料集。叢集也應該有一個身份驗證和權限系統。
我們一直在尋找可以實現我們目標的叢集工具,但我們不確定該選擇哪一個。我們研究了 Mesos、OS/DB、Docker Swarm、Kubernetes 和 oVirt,但我們不知道這些工具是否可以實現我們想要的目標,如果可以,哪一個是最佳選擇。我們認為容器可能是生產的一個不錯的選擇,但可能不是研發的最佳選擇。你們能否幫助我們並重點介紹要做什麼以及從哪裡開始?
最好的問候,pinxau1000
答案1
同意 @NikitaKipriyanov 的觀點,即您無法將多個系統的資源組合到單一映像中,儘管過去已經有商業產品這樣做,並且它們依靠 infiniband 來降低延遲(恕我直言,它效果不佳)。 Slurm 可以用作調度程序,但您也可以將它用於互動式作業,然後它可以更像是資源管理器。
每個作業可以指定 cpu 核心數量、gpu 數量和類型、記憶體量等。如果需要,可以使用 X11 轉送。
此外,容器在研發環境中也非常有用。您不應該因為看不到它們的實用性而將它們扔掉,但它們並不是解決此問題的方法。
答案2
這是不可能的。
- 不同的CPU意味著指令可能不同。如果您想在 CPU 之間遷移程式碼,這將是一場噩夢。
- 記憶體延遲以奈秒為單位,網路延遲以數十微秒為單位。
根據您的工作負載,可以將您的工作負載轉換為在多台電腦上運行並在它們之間通訊資料。對於某些問題來說,這是微不足道的,您可以將資料集分割成更小的分割區並並行處理它們。對於其他工作負載來說,這是很困難的。但這需要修改工作負載,而不是作業系統。