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