2015-09-17 69 views
0

我在我們的集羣中有一臺主機,其中有8個Nvidia K80 s,我想設置它以便每個設備最多可以運行1個進程。之前,如果我在主機上運行多個作業,並且每個作業都使用大量內存,則它們都會試圖擊中同一設備並失敗。Cuda計算模式和'CUBLAS_STATUS_ALLOC_FAILED'

我將所有設備設置爲通過nvidia-smi -c 3來計算模式3(E. Process),我相信這樣做是爲了讓每個設備只能從一個CPU進程接受作業。我再運行2個職位(每個只需要大約〜150 MB出的設備上存儲12 GB沒有指定cudaSetDevice,但第二個作業將失敗,ERROR: CUBLAS_STATUS_ALLOC_FAILED,而不是去第二個可用的設備。

我對this網站的解釋進行了假設建模,並期望每個作業能級聯到下一個設備上,但它不起作用。有什麼我失蹤?

更新:我在多個不同的實例中使用gpuArray運行Matlab,並且它正確地將Matlab作業級聯到不同的設備上。因此,我相信我在操作系統級別正確設置了計算模式。除了cudaSetDevice,什麼可能會迫使我的CUDA代碼鎖定到設備0?

回答

3

這是依賴於官方沒有記錄的行爲(或者證明我錯了,並指出官方文檔,請)CUDA運行時,當設備被設置爲Exclusive計算模式時,會自動選擇另一個可用設備,當一個正在使用。

CUDA運行時顯然強制執行此行爲,但它在CUDA 7.0中「破碎」。

My understanding是它應該在CUDA 7.5中再次「修復」。

我的猜測是你在這些節點上運行CUDA 7.0。如果是這樣,我會嘗試更新到CUDA 7.5,或者如果您確實需要這種行爲,請還原爲CUDA 6.5。

建議您不要依賴於此,而是使用外部方式(例如作業計劃程序(例如Torque))來管理類似情況下的資源。

+0

實際上,我使用的是一個工作調度程序,但一直沒有得到它與設備發揮很好 - 因此我決心只是將每個設備鎖定到一個進程中。另外...我們使用7.0時間重新映像到7.5,看看它是否修復了事情! – drjrm3