用盡每一寸GPU,阿里云cGPU容器技術白皮書重磅發(fā)布!

來源: 云棲號
作者:云棲號
時間:2020-09-22
17787
近日,阿里云異構計算推出的cGPU(container GPU)容器技術,創(chuàng)新地提出了一種不同于以往的GPU容器方案,克服了業(yè)內主流方案的一些常見的缺陷,在保證性能的前提下,做到了容器之間的GPU顯存隔離和任務隔離,為客戶充分利用GPU硬件資源進行訓練和推理提供的有效保障。

背景

云原生已經(jīng)成為業(yè)內云服務的一個趨勢。在云原生上支持異構計算,這個功能在標準的Docker上已經(jīng)可以很好的支持了。為了進一步提高GPU的利用率、避免算力浪費,需要在單個GPU上可以運行多個容器,并且在多個容器間隔離GPU應用,這在標準的Docker上是無法做到的。為了滿足這一需求,業(yè)界也做了很多探索。NVIDIA vGPU,NVIDIA MPS,基于rCUDA的方案等,都為用戶更小顆粒度的使用GPU提供了可能。

近日,阿里云異構計算推出的cGPU(container GPU)容器技術,創(chuàng)新地提出了一種不同于以往的GPU容器方案,克服了業(yè)內主流方案的一些常見的缺陷,在保證性能的前提下,做到了容器之間的GPU顯存隔離和任務隔離,為客戶充分利用GPU硬件資源進行訓練和推理提供的有效保障。

業(yè)內常用方案簡介

在介紹阿里云異構計算cGPU計算技術前,我們先看看業(yè)內有哪些GPU共享方案吧:

NVIDIA MPS

NVIDIA MPS(NVIDIA Multi-Process Service)是NVIDIA公司為了進行GPU共享而推出的一套方案,由多個CUDA程序共享同一個GPU context,從而達到多個CUDA程序共享GPU的目的。同時,在Volta GPU上,用戶也可以通過CUDA_MPS_ACTIVE_THREAD_PERCENTAGE變量設定每個CUDA程序占用的GPU算力的比例。

然而由于多個CUDA程序共享了同一個GPU context,這樣引入的問題就是:當一個CUDA程序崩潰或者是觸發(fā)GPU錯誤的時候,其他所有CUDA程序的任務都無法繼續(xù)執(zhí)行下去了,而這對于容器服務是災難性的問題。

NVIDIA vGPU

NVIDIA vGPU方案是GPU虛擬化的方案,可以對多用戶的強GPU隔離方案。它主要應用于虛擬化平臺中,每個vGPU的顯存和算力都是固定的,無法靈活配置;另外vGPU的使用需要額外從NVIDIA公司購買license,這里我們就不再詳細討論。

rCUDA類似方案

業(yè)內還有一種常用方案是通過替換CUDA庫實現(xiàn)API層面的轉發(fā),然后通過修改顯存分配,任務提交等API函數(shù)來達到多個容器共享GPU的目的。這種方案的缺點是需要對靜態(tài)鏈接的程序重新編譯,同時在CUDA庫升級的時候也需要進行修改來適配新版本。

阿里云cGPU容器技術

阿里云異構計算GPU團隊推出了cGPU方案,相比其他方案,這是一個顛覆性的創(chuàng)新:通過一個內核驅動,為容器提供了虛擬的GPU設備,從而實現(xiàn)了顯存和算力的隔離;通過用戶態(tài)輕量的運行庫,來對容器內的虛擬GPU設備進行配置。阿里云異構計算cGPU在做到算力調度與顯存隔離的同時,也做到了無需替換CUDA靜態(tài)庫或動態(tài)庫;無需重新編譯CUDA應用;CUDA,cuDNN等版本隨時升級無需適配等特性。

ia_300000005.png

圖1.cGPU容器架構圖

cGPU內核驅動為一個自主研發(fā)的宿主機內核驅動。它的優(yōu)點在于:

適配開源標準的Kubernetes和NVIDIA Docker方案;

用戶側透明。AI應用無需重編譯,執(zhí)行無需CUDA庫替換;

針對NVIDIA GPU設備的底層操作更加穩(wěn)定和收斂;

同時支持GPU的顯存和算力隔離。

使用方式

1利用阿里云容器服務

阿里云容器服務已經(jīng)支持cGPU容器組件了,通過登錄容器服務Kubernetes版控制臺,只需要簡單的點擊幾下,為容器節(jié)點打標,就可以利用cGPU容器隔離,最大化的利用GPU的硬件能力了。同時,還可以通過Prometheus的監(jiān)控能力查看每個cGPU容器內的顯存用量,在享受低成本的同時,保障了應用的可靠性。

ia_300000006.png

快速部署和使用的方式,可以參見阿里云開發(fā)者社區(qū)的文章:

https://developer.aliyun.com/article/762973

更詳細的使用文檔,可以參考阿里云的幫助文檔:

https://help.aliyun.com/document_detail/163994.html

2在阿里云GPU實例上使用cGPU容器

為了更靈活的支持各種客戶的需要,我們也開放了阿里云GPU實例上使用cGPU容器的能力。cGPU依賴Docker和NVIDIA Docker,在使用cGPU前,請確保環(huán)境可以正常創(chuàng)建帶GPU的容器服務。

安裝:

下載cGPU安裝包:

wget http://cgpu.oss-cn-hangzhou.aliyuncs.com/cgpu-0.8.tar.gz

解壓后執(zhí)行sh install.sh命令安裝。

安裝后使用lsmod|grep cgpu命令驗證是否按照成功:

lsmod|grep cgpu

cgpu_km 71355 0

配置:

cGPU組件會檢測以下docker的環(huán)境變量,進行相應操作:

ALIYUN_COM_GPU_MEM_DEV:為正整數(shù),表示為host上每張卡的總顯存大小。

ALIYUN_COM_GPU_MEM_CONTAINER:為正整數(shù),指定容器內可見的顯存容量。此參數(shù)同

ALIYUN_COM_GPU_MEM_DEV一起設定cGPU內可見的顯存大小。如在一張4G顯存的顯卡上,

我們可以通過-e ALIYUN_COM_GPU_MEM_DEV=4-e ALIYUN_COM_GPU_MEM_CONTAINER=1

的參數(shù)為容器分配1G顯存。如果不指定此參數(shù),則cGPU不會啟動,此時會默認使用NVIDIA容器。

ALIYUN_COM_GPU_VISIBLE_DEVICES:為正整數(shù)或uuid,指定容器內可見的GPU設備。如在一個有4張顯卡的機器上,我們可以通過-e ALIYUN_COM_GPU_VISIBLE_DEVICES=0,1來為容器分配第一和第二張顯卡。或是-e ALIYUN_COM_GPU_VISIBLE_DEVICES=uuid1,uuid2,uuid3為容器分配uuid為uuid1,uuid2,uuid3z的3張顯卡。

CGPU_DISABLE:總開關,用于禁用cGPU??梢越邮艿膮?shù)是-e CGPU_DISABLE=true或-e CGPU_DISABLE=1,此時cGPU將會被禁用,默認使用nvidia容器。

ALIYUN_COM_GPU_SCHD_WEIGHT為正整數(shù),有效值是1-min(max_inst,16),用來設定容器的算力權重。

c運行演示:

以GN6i單卡T4為例,實現(xiàn)2個容器共享使用1個顯卡。執(zhí)行如下命令,分別創(chuàng)建2個docker服務,設置顯存分別為6G和8G。

docker run-d-t--gpus all--privileged--name gpu_test1-e ALIYUN_COM_GPU_MEM_CONTAINER=6-e ALIYUN_COM_GPU_MEM_DEV=15 nvcr.io/nvidia/tensorflow:19.10-py3

docker run-d-t--gpus all--privileged--name gpu_test2-e ALIYUN_COM_GPU_MEM_CONTAINER=8-e ALIYUN_COM_GPU_MEM_DEV=15 nvcr.io/nvidia/tensorflow:19.10-py3

如下圖,進入Docker(gpu_test1)后,執(zhí)行nvidia-smi命令,可以看到T4顯卡的總內存為6043M

ia_300000007.png

如下圖,進入Docker(gpu_test2)后,執(zhí)行nvidia-smi命令,可以看到T4顯卡的總內存為8618M。

ia_300000008.png

之后,就可以在每個容器內運行GPU訓練或者推理的任務了。

性能分析

在使用過程中,用戶經(jīng)常關心的就是性能問題,cGPU容器方案會對性能有多少影響呢?下面是我們的一組測試數(shù)據(jù),在常用的tensorflow框架下用benchmark工具分別測試了模型推理和訓練性能。

以下數(shù)據(jù)的測試機為阿里云上的GPU型實例,具有8核CPU,32G內存,以及一張帶有16G顯存的NVIDIA T4顯卡。測試數(shù)據(jù)為單次測試結果,因此可能會帶有誤差。

1單cGPU容器VS單GPU直通性能比較

我們分別在cGPU容器內部以及標準的Docker容器內部跑測試,為cGPU容器內的GPU實例分配所有的顯存和算力,來顯示在不共享GPU的情況下的cGPU是否有性能損失。

下圖是ResNet50訓練測試在不同精度和batch_size下的性能比較,綠色柱表示標準的容器性能,橙色柱表示cGPU容器內的性能,可以看到在不同的情況下,cGPU容器實例都幾乎沒有性能損失。

ia_300000009.png

圖2.單容器獨占GPU--Resnet50訓練結果對比

下圖是ResNet50推理測試在不同精度和batch_size下的性能比較,同樣的在不同的情況下,cGPU容器實例都幾乎沒有性能損失。

ia_300000010.png

圖3.單容器獨占GPU--Resnet50推理結果對比

2 cGPU容器VS MPS容器GPU共享性能比較

如前文所述,標準的Docker容器不支持共享,為了測試多容器共享單個GPU的性能,我們采用了MPS容器作為基準來進行性能比較。同樣的,我們采用了ResNet50的訓練和推理benchmark作為測試用例,分別用兩個cGPU容器和兩個MPS容器共享一個GPU硬件。

下圖是ResNet50訓練測試在不同batch_size下的性能比較,綠色柱表示兩個MPS容器性能跑分的總和,橙色柱表示兩個cGPU容器跑分的總和,可以看到,cGPU容器實例對比MPS容器幾乎沒有性能損失,在大的batch_size的情況下甚至跑分高于MPS容器。

ia_300000011.png

圖4.多容器共享GPU--Resnet50訓練結果對比

下圖是ResNet50推理測試在不同batch_size下的性能比較,MPS容器和cGPU容器的性能差距不大,基本都在誤差范圍之內。

ia_300000012.png

圖5.多容器共享GPU--Resnet50推理結果對比

總結

阿里云cGPU容器技術,作為業(yè)內首創(chuàng)的基于內核虛擬GPU隔離的GPU共享容器方案,在保證性能的前提下,做到了容器之間的GPU顯存隔離和任務隔離,為客戶充分利用GPU硬件資源進行訓練和推理提供的有效保障。

同時,cGPU方案具有多種輸出方式:客戶既可以選擇阿里云GPU容器服務,簡單便捷的實現(xiàn)GPU容器服務的共享、調度和監(jiān)控;又可以選擇在阿里云ECS GPU實例上進行手動安裝配置,靈活可控,方便的和已有GPU容器進行整合。

立即登錄,閱讀全文
版權說明:
本文內容來自于云棲號,本站不擁有所有權,不承擔相關法律責任。文章內容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權,請聯(lián)系管理員(zzx@kchuhai.com)刪除!
相關文章
AI時代云安全新范式,阿里云安全能力全線升級!
AI時代云安全新范式,阿里云安全能力全線升級!
AI時代,云安全面臨著新的挑戰(zhàn),不僅要持續(xù)面對以往的傳統(tǒng)問題,更需要全新理念落地于產(chǎn)品設計、技術演進、架構設計,才能實現(xiàn)效果、性能、和成本的最優(yōu)解。
AI
阿里云
云服務
2024-09-272024-09-27
連續(xù)四年!阿里云領跑中國公有云大數(shù)據(jù)平臺
連續(xù)四年!阿里云領跑中國公有云大數(shù)據(jù)平臺
近日,國際數(shù)據(jù)公司(IDC)發(fā)布《中國大數(shù)據(jù)平臺市場份額,2023:數(shù)智融合時代的真正到來》報告——2023年中國大數(shù)據(jù)平臺公有云服務市場規(guī)模達72.2億元人民幣,其中阿里巴巴市場份額保持領先,占比達40.2%,連續(xù)四年排名第一。
阿里云
云服務
2024-09-182024-09-18
直降算力成本!阿里云容器計算服務ACS正式商業(yè)化
直降算力成本!阿里云容器計算服務ACS正式商業(yè)化
今日,阿里云容器計算服務ACS正式商業(yè)化,綜合算力成本最高可降55%。
阿里云
云服務
2024-08-242024-08-24
驕傲!全球一半人口看奧運,阿里云成功支撐史上最大規(guī)模電視網(wǎng)絡轉播
驕傲!全球一半人口看奧運,阿里云成功支撐史上最大規(guī)模電視網(wǎng)絡轉播
今年,云上轉播將正式超越衛(wèi)星轉播,成為奧運賽事走向全球數(shù)十億觀眾的主要轉播方式。巴黎奧運會11000小時的賽事直播畫面,通過阿里云向全球分發(fā)。這是1964年奧運會開始衛(wèi)星電視轉播以來,又一次重大技術進步。
阿里云
2024-08-152024-08-15
優(yōu)質服務商推薦
更多
掃碼登錄
打開掃一掃, 關注公眾號后即可登錄/注冊
加載中
二維碼已失效 請重試
刷新
賬號登錄/注冊
個人VIP
小程序
快出海小程序
公眾號
快出海公眾號
商務合作
商務合作
投稿采訪
投稿采訪
出海管家
出海管家