一 什么是 MIG
2020年5月,NVIDIA 發布(bu)了最新(xin)(xin)的(de)(de)(de)(de)(de) GPU 架(jia)構(gou): 安(an)培,以及(ji)基于安(an)培架(jia)構(gou)的(de)(de)(de)(de)(de)最新(xin)(xin)的(de)(de)(de)(de)(de) GPU : A100。安(an)培提(ti)供(gong)了許多新(xin)(xin)的(de)(de)(de)(de)(de)特性(xing),MIG 是其中(zhong)一項(xiang)(xiang)非(fei)常重(zhong)要的(de)(de)(de)(de)(de)新(xin)(xin)特性(xing)。MIG的(de)(de)(de)(de)(de)全名(ming)是 Multi-Instance GPU。 NVIDIA安(an)培架(jia)構(gou)中(zhong)的(de)(de)(de)(de)(de)MIG模式可(ke)以在(zai)A100 GPU上(shang)并行運(yun)行七(qi)個作業。多實例 GPU (MIG) 可(ke)提(ti)升每個 NVIDIA A100 Tensor 核心(xin) GPU 的(de)(de)(de)(de)(de)性(xing)能和(he)價值。MIG 可(ke)將 A100 GPU 劃分為(wei)多達七(qi)個實例,每個實例均(jun)與各自的(de)(de)(de)(de)(de)高帶寬顯存、緩存和(he)計(ji)算核心(xin)完全隔離。現在(zai),管(guan)理員可(ke)以支持(chi)從大到小的(de)(de)(de)(de)(de)各項(xiang)(xiang)工作負(fu)載,為(wei)每項(xiang)(xiang)工作提(ti)供(gong)規模適當(dang)的(de)(de)(de)(de)(de) GPU,而(er)且(qie)服務質(zhi)量 (QoS) 穩定可(ke)靠(kao),從而(er)優化利用率,讓(rang)每位(wei)用戶(hu)都能享用加(jia)速計(ji)算資源。

二 MIG技術分析
在(zai) MIG 推出之前,我(wo)們也能(neng)夠透過 CUDA MPS (Multi-Process Service) 來提高 GPU 使(shi)(shi)用(yong)(yong)(yong)(yong)率。但 MPS 的(de)缺點在(zai)于,多(duo)個(ge)使(shi)(shi)用(yong)(yong)(yong)(yong)者(zhe)(zhe)(zhe)會(hui)使(shi)(shi)用(yong)(yong)(yong)(yong)共同的(de)內存,因(yin)此使(shi)(shi)用(yong)(yong)(yong)(yong)者(zhe)(zhe)(zhe)的(de)程序(xu)會(hui)互相(xiang)(xiang)影響,除(chu)了無法保證(zheng)推理的(de)速(su)度和吞(tun)吐量之外,也有可能(neng)因(yin)為其中一位使(shi)(shi)用(yong)(yong)(yong)(yong)者(zhe)(zhe)(zhe)的(de)程序(xu)出錯而導致(zhi)其他使(shi)(shi)用(yong)(yong)(yong)(yong)者(zhe)(zhe)(zhe)受到(dao)干(gan)擾。而 MIG 克(ke)服了 MPS 面臨(lin)的(de)問題。MIG 藉由硬件上(shang)的(de)分(fen)離,保證(zheng)了使(shi)(shi)用(yong)(yong)(yong)(yong)者(zhe)(zhe)(zhe)的(de)程序(xu)不會(hui)互相(xiang)(xiang)干(gan)擾,進(jin)而能(neng)夠讓程序(xu)的(de)時延(yan)和吞(tun)吐量能(neng)符合預期(qi)。
在表格 1當中,我們比較了(le)多流 (multi-stream)、MPS 以及 MIG 的(de)(de)(de)(de)優缺(que)點。其中,多流的(de)(de)(de)(de)使(shi)用(yong)(yong)限制較少,同(tong)時(shi)也(ye)很靈活,但(dan)對代碼(ma)更動(dong)的(de)(de)(de)(de)需求(qiu)大,并且無法避(bi)免(mian)使(shi)用(yong)(yong)者(zhe)之間的(de)(de)(de)(de)互相干擾,使(shi)用(yong)(yong)者(zhe)必須小心的(de)(de)(de)(de)使(shi)用(yong)(yong)以避(bi)免(mian)產生(sheng)錯誤。MPS 則不(bu)需要更動(dong)代碼(ma)即可(ke)(ke)使(shi)用(yong)(yong),可(ke)(ke)以同(tong)時(shi)執行的(de)(de)(de)(de)程(cheng)序也(ye)較 MIG 多 (48 與(yu) 7),內(nei)存(cun)的(de)(de)(de)(de)使(shi)用(yong)(yong)與(yu)分配也(ye)是(shi)自動(dong)處理的(de)(de)(de)(de),不(bu)需要人工的(de)(de)(de)(de)介入。缺(que)點在于(yu),無法避(bi)免(mian)多個用(yong)(yong)戶對于(yu) GPU 資源(yuan)的(de)(de)(de)(de)競爭;最(zui)后,MIG 雖然可(ke)(ke)以同(tong)時(shi)執行的(de)(de)(de)(de)程(cheng)序數量最(zui)少,但(dan)和 MPS 一樣(yang)不(bu)需要使(shi)用(yong)(yong)者(zhe)另外更動(dong)代碼(ma),同(tong)時(shi)在安全性與(yu)可(ke)(ke)靠性上面也(ye)是(shi)三者(zhe)中最(zui)佳的(de)(de)(de)(de)。這三樣(yang)技(ji)術并不(bu)互相沖突,使(shi)用(yong)(yong)者(zhe)可(ke)(ke)以根(gen)據使(shi)用(yong)(yong)的(de)(de)(de)(de)情境與(yu)場景(jing)選擇與(yu)搭配使(shi)用(yong)(yong)。

借(jie)助(zhu) MIG,工作可同(tong)時在不(bu)同(tong)的(de)實(shi)(shi)例上運行,每個實(shi)(shi)例都有專用(yong)的(de)計算、顯(xian)存和顯(xian)存帶寬(kuan)資源,從而實(shi)(shi)現可預測的(de)性能(neng),同(tong)時符合服務質(zhi)量(liang)并盡可能(neng)提升(sheng) GPU 利用(yong)率。
在(zai)MIG模(mo)式下的A100可以(yi)運行多達(da)7個不同大小的AI或(huo)HPC工作(zuo)負載的任意組合。這種能力對(dui)于(yu)通常(chang)不需(xu)要現代GPU所提供(gong)的所有(you)性能的AI推(tui)理工作(zuo)特別有(you)用。
例如(ru),用(yong)戶可(ke)以創建兩個MIG實例,每個實例的(de)(de)內存為20gb,三(san)個實例的(de)(de)內存為10gb,七(qi)個實例的(de)(de)內存為5gb。用(yong)戶創建適合(he)其(qi)工作負載的(de)(de)組合(he)。
如(ru)何計算最(zui)大可建實(shi)例(li)(li)的(de)數(shu)(shu)量(liang)呢?以A100 40GB顯(xian)(xian)存為(wei)例(li)(li),A100一張(zhang)卡的(de)SM單(dan)元(yuan)(yuan)(yuan)(streaming multiprocessor)數(shu)(shu)量(liang)(類似CPU的(de)核(he)心(xin)數(shu)(shu))為(wei)108,每(mei)14個(ge)SM單(dan)元(yuan)(yuan)(yuan)稱作一個(ge)Slice,每(mei)張(zhang)A100卡有7個(ge)Slice。一個(ge)GPU運(yun)算實(shi)例(li)(li)的(de)最(zui)小粒度(du)是(shi)14個(ge)SM單(dan)元(yuan)(yuan)(yuan),也就是(shi)說在(zai)分配GPU的(de)SM單(dan)元(yuan)(yuan)(yuan)數(shu)(shu)量(liang)時必須(xu)是(shi)14的(de)整數(shu)(shu)倍。如(ru)果申請規模為(wei)28 SM單(dan)元(yuan)(yuan)(yuan)數(shu)(shu),10GB顯(xian)(xian)存的(de)運(yun)算實(shi)例(li)(li),設在(zai)單(dan)張(zhang)A100上這樣(yang)的(de)實(shi)例(li)(li)個(ge)數(shu)(shu)最(zui)多為(wei)X個(ge),那么(me)必須(xu)滿足28 * X <= 108(SM單(dan)元(yuan)(yuan)(yuan)總數(shu)(shu)限制) 且 10 *X <= 40(GPU顯(xian)(xian)存限制),所(suo)以X最(zui)大為(wei)3。

MIG隔離(li)了(le)GPU實(shi)例(li)(li),所以它提(ti)供了(le)故障隔離(li),一個實(shi)例(li)(li)中的(de)問題不會影(ying)響在同一物理GPU上運行(xing)的(de)其他(ta)實(shi)例(li)(li)。每個實(shi)例(li)(li)都提(ti)供有保證的(de)QoS,確保用(yong)戶的(de)工作負載獲得他(ta)們(men)期望的(de)延遲和吞吐(tu)量。
表三比(bi)(bi)較了上一代(dai)(dai)旗艦產品V100與(yu)A100使用7個MIG GPU實例在(zai)FasterTransformer模型中不同batch size下的吞(tun)吐量(liang)與(yu)時延。我們可以看到在(zai)batch size為8的時候,A100的吞(tun)吐量(liang)已(yi)經(jing)很(hen)(hen)接近(jin)峰(feng)值(zhi),距(ju)(ju)離(li)(li)峰(feng)值(zhi)不到百(bai)分之十(shi);另一方面,V100在(zai)batch size 為8的時候,吞(tun)吐量(liang)距(ju)(ju)離(li)(li)峰(feng)值(zhi)還有百(bai)分之三十(shi)左(zuo)右(you),在(zai)batch size 為32時,吞(tun)吐量(liang)距(ju)(ju)離(li)(li)峰(feng)值(zhi)也還有百(bai)分之十(shi)左(zuo)右(you)。這代(dai)(dai)表和上一代(dai)(dai)的GPU相比(bi)(bi),MIG在(zai)提升(sheng)GPU的使用率上有很(hen)(hen)大的進步。

當在A100上配置(zhi)MIG mode的時候,需要(yao)考慮(lv)如下限制:
1)MIG只(zhi)支持Linux操作(zuo)系統, CUDA11/ R450 or更(geng)高(gao)版(ban)本(ben)。(推薦(jian)至少要使(shi)用過450.80.02或(huo)更(geng)高(gao)版(ban)本(ben))
2)支持bare-metal (包(bao)括容器); 支持Linux guest通過hypervisor進(jin)行GPU pass-through 可視(shi)化;支持vGPU模(mo)式;
3)在A100上設置(zhi)MIG,需(xu)要GPU reset和超級(ji)用戶(hu)權限(super-user privileges)。一旦(dan)A100設置(zhi)了MIG后,instance的(de)管理(li)就可以(yi)是(shi)動態的(de)了(無需(xu)再進行GPU reset).需(xu)要注意(yi)這(zhe)一點是(shi)針對單(dan)個(ge)GPU而言(yan),不(bu)是(shi)對單(dan)個(ge)機器而言(yan);
4)類似于ECC mode,MIG 設置(zhi)是persistent的,即(ji)使(shi)reboot也不會(hui)影響。直(zhi)到用(yong)戶顯(xian)式地切(qie)換(huan)。
5)在起用MIG之前,所有hold driver modules handles的(de)進程必須(xu)被停(ting)掉。
6)切換 MIG 模式需(xu)要(yao) CAP_SYS_ADMIN 功(gong)能。其(qi)他(ta) MIG 管理(例(li)如創建和銷毀實例(li))默認需(xu)要(yao)超級用(yong)戶(hu),但可以通過在 /proc/ 中調整對 MIG 功(gong)能的權限來委托給非特權用(yong)戶(hu)。
三 優勢
更多用戶享受到 GPU 加速能力
借(jie)助 MIG技術(shu),用(yong)戶可以在單(dan)個 A100 GPU 上獲得多(duo)達原來 7 倍的 GPU 資(zi)源。MIG 為研發人員提(ti)供(gong)了更多(duo)的資(zi)源和更高(gao)的靈活性。
優化 GPU 利用率
MIG 允(yun)許用戶靈活選(xuan)擇(ze)許多不同的實例(li)大小(xiao),從而為每項工作(zuo)負載提供適(shi)當(dang)規模(mo)的 GPU 實例(li),最(zui)終優化利(li)用率并使數(shu)據中心投資充分發揮(hui)成效。
同時運行混合工作負載
憑借 MIG,能(neng)以(yi)確定性延遲和吞(tun)吐量,在(zai)單個 GPU 上同時運(yun)行推理、訓練和高性能(neng)計(ji)算 (HPC) 工(gong)作負載。
編程模型沒有變化
NVIDIA通過它為其A100提供的軟件啟用MIG。其中包括GPU驅動程序、NVIDIA的CUDA11軟件,使得每個 MIG 實例對于應用程序都像獨立 GPU 一樣運行,使其編程模型沒有改變,對開發者友好。
提供出色的服務質量
每個(ge) MIG 實例(li)都有(you)一(yi)(yi)套專用(yong)(yong)(yong)于(yu)計(ji)算、內存和緩存的(de)硬(ying)件資源,從(cong)而(er)能(neng)為工(gong)作負載提(ti)供(gong)穩定可(ke)靠(kao)的(de)服務(wu)質量(liang) (QoS) 和有(you)效(xiao)的(de)故障(zhang)(zhang)隔(ge)離。這(zhe)樣一(yi)(yi)來,如果某個(ge)實例(li)上(shang)運(yun)(yun)行(xing)的(de)應(ying)用(yong)(yong)(yong)程(cheng)序(xu)發(fa)生故障(zhang)(zhang),并不(bu)會(hui)影響其他實例(li)上(shang)運(yun)(yun)行(xing)的(de)應(ying)用(yong)(yong)(yong)程(cheng)序(xu)。而(er)且,不(bu)同的(de)實例(li)可(ke)以運(yun)(yun)行(xing)不(bu)同類(lei)型的(de)工(gong)作負載,包括交互式模型開發(fa)、深度學(xue)習(xi)訓練(lian)、AI 推理或(huo)高性能(neng)計(ji)算應(ying)用(yong)(yong)(yong)程(cheng)序(xu)等。由(you)于(yu)這(zhe)些實例(li)并行(xing)運(yun)(yun)行(xing),因(yin)此(ci)工(gong)作負載也在(zai)同一(yi)(yi)個(ge)物理 A100 GPU 上(shang)同時運(yun)(yun)行(xing),但它們彼此(ci)相(xiang)互獨立、隔(ge)離。