2012-05-11 124 views
4

我們擁有一組機器,每個機器都有4個GPU。每個作業應該能夠要求1-4個GPU。這裏有一個問題:我希望SGE告訴每個作業它應該採用哪一個 GPU。與CPU不同,如果一次只有一個進程訪問GPU,則GPU的效果最佳。所以我想:使用Sun Grid Engine(SGE)調度GPU資源

Job #1 GPU: 0, 1, 3 
Job #2 GPU: 2 
Job #4 wait until 1-4 GPUs are avaliable 

我碰到的問題,是上海黃金交易所將讓我創建4個單位的每個節點上的GPU資源,但不會明確告訴工作,其GPU使用(只有它得到1,或3,或其他)。

我想創建4個資源(gpu0, gpu1, gpu2, gpu3),但我不確定-l標誌是否採用glob模式,並且無法弄清楚SGE如何告知作業它接收到哪些gpu資源。有任何想法嗎?

回答

4

當您有多個GPU並且您希望作業請求GPU但Grid Engine調度程序應該處理並選擇一個免費 GPU時,您可以配置一個RSMAP(資源映射)複合體(而不是INT)。這使您可以指定主機配置中特定主機上的GPU數量和名稱。你也可以將它設置爲HOST消費品,這樣就可以獨立於你的請求插槽,使用-l cuda = 2請求的GPU設備數量是針對每個主機2的(即使並行作業也是如此,即不同主機上有8個插槽)。

qconf -mc 
    #name    shortcut type  relop requestable consumable default urgency  
    #---------------------------------------------------------------------------------------------- 
    gpu     gpu  RSMAP   <=  YES   HOST  0  0 

在執行主機配置,你可以使用IDS /名稱(這裏簡單GPU1和GPU2)初始化你的資源。

qconf -me yourhost 
hostname    yourhost 
load_scaling   NONE 
complex_values  gpu=2(GPU1 GPU2) 

然後,當請求-l gpu = 1時,如果GPU1已被其他作業使用,則Univa Grid Engine調度程序將選擇GPU2。您可以在qstat -j輸出中看到實際的選擇。作業通過讀取$ SGE_HGR_gpu環境變量來獲取選定的GPU,其中包含本例中選定的ID /名稱「GPU2」。這可以用於訪問正確的GPU而不會發生衝突。

如果您有多插槽主機,您甚至可以將GPU直接連接到GPU附近的某些CPU核心(靠近PCIe總線),以便加速GPU和CPU之間的通信。這可以通過在執行主機配置中附加拓撲掩碼來實現。

qconf -me yourhost 
hostname    yourhost 
load_scaling   NONE 
complex_values  gpu=2(GPU1:SCCCCScccc GPU2:SccccSCCCC) 

現在,當UGE調度器選擇GPU2它自動綁定作業到第二插座(S)的所有4個核(C),使得該作業是不允許第一插座上運行。這甚至不需要綁定qsub參數。

更多可在www.gridengine.eu上找到的配置示例。

請注意,所有這些功能僅適用於Univa Grid Engine(8.1.0/8.1.3及更高版本),而不適用於SGE 6.2u5和其他Grid Engine版本(如OGE,Grid Engine的Sun等)。 )。您可以通過從univa.com下載48核有限免費版本來試用它。

相關問題