隨著GPU算力越來越強(qiáng),其成本也越來越高昂。
但有時(shí),執(zhí)行一個(gè)深度學(xué)習(xí)任務(wù),并不需要占用一整張GPU。
就相當(dāng)于,你不僅多花了錢,還浪費(fèi)了資源。
阿里云最近提出的這項(xiàng)技術(shù),幫助你解決了這一困惑。
cGPU容器共享技術(shù)。
讓用戶通過容器來調(diào)度底層GPU資源,以更細(xì)顆粒度調(diào)度使用GPU,提高GPU資源利用率,從而來實(shí)現(xiàn)降本增效。
以往的研究中,業(yè)內(nèi)也有一些GPU共享方案,比如NVIDIA MPS、NVIDIA vGPU、rCUDA等。
但也存在了一些問題。
比如,在容器調(diào)度GPU的時(shí)候,不同線程中的容器應(yīng)用可能出現(xiàn)顯存資源爭搶和互相影響的現(xiàn)象,未能做到容器的完全隔離。
舉個(gè)例子,當(dāng)一個(gè)企業(yè)在兩個(gè)容器中分別運(yùn)行著GPU的推理應(yīng)用,一個(gè)已經(jīng)穩(wěn)定了,一個(gè)還在開發(fā)階段。
如果其中一個(gè)容器中的應(yīng)用出現(xiàn)故障,由于沒有實(shí)現(xiàn)很好的隔離技術(shù),往往導(dǎo)致另一容器中的應(yīng)用也會(huì)出現(xiàn)故障。
那么阿里云的這項(xiàng)技術(shù),就可以實(shí)現(xiàn)容器的「安全隔離」,業(yè)務(wù)之間不會(huì)相互干擾。
那么,這個(gè)作為業(yè)內(nèi)首創(chuàng)的「基于內(nèi)核虛擬GPU隔離」的GPU共享容器方案,具體是如何實(shí)現(xiàn)的?
通過一個(gè)內(nèi)核驅(qū)動(dòng),為容器提供了虛擬的GPU設(shè)備,從而實(shí)現(xiàn)了顯存和算力的隔離;
通過用戶態(tài)輕量的運(yùn)行庫,來對容器內(nèi)的虛擬GPU設(shè)備進(jìn)行配置。
此外,還做到了無需替換CUDA靜態(tài)庫或動(dòng)態(tài)庫;無需重新編譯CUDA應(yīng)用;CUDA,cuDNN等版本隨時(shí)升級無需適配等特性。
如何使用?
目前,阿里云容器服務(wù)已經(jīng)支持cGPU容器組件。
登錄容器服務(wù)Kubernetes版控制臺(tái),簡單的點(diǎn)擊幾下,為容器節(jié)點(diǎn)打標(biāo),就可以利用cGPU容器隔離,最大化的利用GPU的硬件能力了。
同時(shí),還可以通過Prometheus的監(jiān)控能力查看每個(gè)cGPU容器內(nèi)的顯存用量,在享受低成本的同時(shí),保障了應(yīng)用的可靠性。
此外,還開放了阿里云GPU實(shí)例上使用cGPU容器的能力。cGPU依賴Docker和NVIDIA Docker,在使用cGPU前,請確保環(huán)境可以正常創(chuàng)建帶GPU的容器服務(wù)。
性能分析
使用方式了解了,那么就是性能問題。
「cGPU容器方案會(huì)不會(huì)對性能有影響?有多少影響?」
以下有一組測試數(shù)據(jù),供你參考。
這是在常用的tensorflow框架下用benchmark工具分別測試了模型推理和訓(xùn)練性能。
首先是單cGPU容器VS單GPU直通性能比較,分別在cGPU容器內(nèi)部以及標(biāo)準(zhǔn)的Docker容器內(nèi)部跑測試。
為cGPU容器內(nèi)的GPU實(shí)例分配所有的顯存和算力,來顯示在不共享GPU的情況下的cGPU是否有性能損失。
這是ResNet50訓(xùn)練測試在不同精度和batch_size下的性能比較,綠色柱表示標(biāo)準(zhǔn)的容器性能,橙色柱表示cGPU容器內(nèi)的性能。
可以看到在不同的情況下,cGPU容器實(shí)例都幾乎沒有性能損失。
然后是ResNet50推理測試在不同精度和batch_size下的性能比較。
同樣的,在不同的情況下,cGPU容器實(shí)例都幾乎沒有性能損失。
還有cGPU容器VS MPS容器GPU共享性能比較。
依然采用了ResNet50的訓(xùn)練和推理benchmark作為測試用例,分別用兩個(gè)cGPU容器和兩個(gè)MPS容器共享一個(gè)GPU硬件。
這是ResNet50訓(xùn)練測試在不同batch_size下的性能比較。
綠色柱表示兩個(gè)MPS容器性能跑分的總和,橙色柱表示兩個(gè)cGPU容器跑分的總和。
可以看到,cGPU容器實(shí)例對比MPS容器幾乎沒有性能損失,在大的batch_size的情況下甚至跑分高于MPS容器。
接著,就是ResNet50推理測試在不同batch_size下的性能比較。
結(jié)果顯示,MPS容器和cGPU容器的性能差距不大,基本都在誤差范圍之內(nèi)。
你覺得這一技術(shù)如何?
感興趣的話,可戳下方鏈接去試試哦~
容器服務(wù)Kubernetes版控制臺(tái):
https://cs.console.aliyun.com/
詳細(xì)使用指南:
https://help.aliyun.com/document_detail/163994.html