正確的方式將多個科學實驗分佈在多個伺服器上?
如果我有 8 台功能強大的機器,那麼分配和平衡來自使用者應用程序和科學實驗的負載的正確方法是什麼?
虛擬化是正確的方式,還是有任何類型的負載管理器軟體來實現這一點?
查看TORQUE、PBS、Slurm等批處理排隊軟體。它可以讓您創建一個隊列,使用者可以在其中送出他們的任務,並且該軟體在可用的機器上執行該隊列。請注意,這種方法僅適用於非互動式內容。
- 你想要的是一種與虛擬化相反的東西,一個集群。
我將嘗試盡可能簡單地解釋差異。
虛擬化是在一台(或多台)物理機上執行多個虛擬機。通過在一台物理電腦上執行多個完全獨立的虛擬機,您可以更有效地利用現有硬體。
集群允許您使用一個或多個物理機器(稱為“節點”)來執行您的應用程序。這允許您將集群中的所有 CPU 能力用於計算作業,由批處理調度程序協調。
這兩件事可以結合起來——例如,我曾經在一個名為Nectar Research Cloud的項目上工作,該項目使用基於 Openstack 的虛擬化來允許澳大利亞各地的科學家和其他研究人員按需創建從單個 VM 到大型虛擬機集群的任何東西。 2. 除了@Alexander Batischev 提到的批處理排隊軟體
slurm
,或torque
,您可能還需要安裝MPI庫或類似的庫。pbs
例如,如果您需要執行的計算類型可以劃分為可以獨立處理的較小塊,然後將結果組合起來,您將需要 MPI 庫。您還需要編寫程式碼來使用它們,以便在集群中不同節點上執行的程序的不同實例可以相互通信。
各種科學和其他學術學科中的許多常見和流行應用程序都內置了 MPI 支持(或類似的,可能是專有的替代方案),因為它們旨在在集群上執行。 3. Alexander 提到集群最適合非互動式軟體……這是真的,但對於許多應用程序來說,有用於創建、查看和編輯數據、創建批處理作業文件並將其送出到集群的圖形前端(使用slurm 或扭矩等),並查看結果。
關鍵是,對於您的主要計算工作,您不只是執行它們並直接與它們互動。您(或您的前端軟體)創建一個批處理腳本並將其送出到隊列以供執行。它將排隊並且在集群有足夠的可用資源來執行您的作業之前不會執行(這可能幾乎是立即進行,或者在非常繁忙的集群上,不會持續幾天甚至幾週)。當作業完成執行時,它通常會保存一個日誌文件和一個或多個結果文件,這些文件可以載入到您的桌面前端程序中以供查看。
批處理腳本可以指定各種事情讓批處理調度程序知道如何處理它——例如它需要多少記憶體或磁碟空間、多少 cpu 或 cpu 核心和/或什麼類型(例如它需要 1 個或更多GPU節點)?,它是否可以跨多個節點執行MPI或只能在一個節點上執行。
這是一篇關於從頭開始設置 HPC 集群的有趣部落格文章- 重點是計算化學,但沒有理由不能將相同類型的設置用於其他學科,所描述的集群是基於 Debian 建構的,而 Debian 有一個龐大的科學軟體庫。