2012年4月27日 星期五

Building the GPU Cluster


我們有幾台 GPU Server,老師有想要將他建立成一個 GPU Cluster 的 prototype, 在Infrastructure,我們有了機器,那問題就是要如何管理這些資源(CPU, Mem, Network, GPU ...)。

我的想法是,有三個部份要做,分別為基礎建設的管理、程式介面(Platform)、用戶介面。


1. 基礎建設的管理

用以往實驗室常用的方式,就是將程式寫成 components 然後再不同台機器上運作, 接著建個 data flow 交換資料。以我的經驗,這樣的方式在多個使用者時不免會有一人當機,整車人都不能用機器。虛擬化既然這麼紅,那我們是不是用虛擬化的管理方式呢? 現有的 Hypervisor 有 VMWare, xen, kvm 等。將每個 component 放在一個虛擬機器裡頭,接著也一樣用 data flow 做溝通,萬一某台虛擬機器死翹翹,那也不會影響機器內的其他用戶,是一個可行的方法。再者跨多台機器的 Management Tool 也是很多,像是 Nimbus, OpenNebula, Eucalyptus,他們可以用來管理這些 Hypervior。如此一來,我們有了一個中控中心,可以發佈虛擬機器和關閉虛擬機器,有人要執行他的 component 們,我們就給他幾台虛擬機吧。


2. 程式介面

既然 DataFlow 是這樣一個好的傳統,那我們也許可以繼續沿用,每個用戶將他的程式寫成一個 component,然後我們將他放在虛擬機裡。他要 CPU/Mem/Network 我們就給他,他要 GPU,我們也給他。這裡比較難的地方就是要怎麼將 GPU 給虛擬化,有人有辦法請給我一點方向。好加在的是,CUDA 4.0 允許多工,多個人再一台機器上享用 GPU 也不會有太大的問題,剩下的就是 GPU 虛擬化的問題。


3. 用戶介面

前端的用戶介面,負責與使用者溝通,讓他們上傳程式,觀看結果。以往的方法都是寫個 Shell,像是小大象 Hadoop 的 Shell,但我想是不是有其他方法呢?這裡頭還需要 Build System,讓上傳的 Component 可以順利編譯。所以用戶介面要有幾個功能,包括上傳資料程式、建置系統、瀏覽結果的介面。




特別打出來,希望各位看倌、高人能給一些建議。

以後這裡就變一個討論串了,歡迎不吝嗇提出意見。