最近機(jī)緣巧合、莫名其妙迫摔,玩起了 GPU 的東西沐扳。算法同學(xué)要求又高,裸跑 GPU 是不可能的句占,要 K8s沪摄。被逼只好開(kāi)始研究這個(gè)高級(jí)東西,斷斷續(xù)續(xù)前前后后歷時(shí)半年的樣子纱烘,掌握了個(gè)大概杨拐。今天整理下下。
Device Plugin
K8s 的設(shè)計(jì)真的太美了凹炸,插件化 + Informer 簡(jiǎn)直就是完美的設(shè)計(jì)。只要兼容 API 接口協(xié)議昼弟,理論上均可接入 K8s 中(不推薦大家因?yàn)檩喿佣ピ燧喿悠∷鐓^(qū) & 默認(rèn)的組件已經(jīng)可以覆蓋很多公司的需求了)
Kubernetes provides a device plugin framework that you can use to advertise system hardware resources to the Kubelet. Instead of customizing the code for Kubernetes itself, vendors can implement a device plugin that you deploy either manually or as a DaemonSet .
device plugin 確實(shí)可以幫助插入很多設(shè)備,但是對(duì)于 GPU 來(lái)說(shuō)僅僅是是 K8s 可以識(shí)別設(shè)備舱痘,并完成如下兩件核心的事情
- 資源啟動(dòng)上報(bào) & 監(jiān)控
- 支持 Pod 的調(diào)度
如上顯而易見(jiàn)的優(yōu)勢(shì)明顯变骡,再?zèng)]有復(fù)雜的驅(qū)動(dòng)安裝,資源浪費(fèi)等問(wèn)題芭逝,全部基于 K8s 的管理 & 調(diào)度統(tǒng)一解決了這些問(wèn)題塌碌,算法工程師 or 算法科學(xué)家 跑 Job 即可。
Device Plugin 是否完美無(wú)缺
- GPU 資源的調(diào)度工作旬盯,實(shí)際上都是在 kubelet 上完成的
- 只能處理 GPU 數(shù)量
- 根據(jù)整個(gè)集群的設(shè)備進(jìn)行全局調(diào)度
- Allocate 和 ListAndWatch 的 API 去增加可擴(kuò)展的參數(shù)無(wú)效
是否需要 GPU 切分使用台妆、簡(jiǎn)單性能提升
- 其實(shí)如果業(yè)務(wù)使用翎猛,適當(dāng)切分確實(shí)可以提升資源利用率,但是帶來(lái)的性能是否會(huì)跌接剩,就有待考證了
- 多卡并行使用切厘,這個(gè)東西拉,需要算法工程師調(diào)整 Code & 使用姿勢(shì)的
- 顯存為優(yōu)化的根本懊缺,不管是推理還是訓(xùn)練疫稿,顯存越大能裝載的數(shù)據(jù)越多,對(duì)于單位時(shí)間里面可以完成的任務(wù)明顯就是越多鹃两,最最最簡(jiǎn)單的方案遗座,擴(kuò)顯存、調(diào)步長(zhǎng)瞬間肉眼可見(jiàn)的效率提升
工具推薦
參考文獻(xiàn)
寫(xiě)在最后
- 工具有些事情可以做做
- 調(diào)度方案太多途蒋,用好默認(rèn)的再去思考使用誰(shuí)家的
- 單卡、多卡拣度、虛擬化可以弄的
- 數(shù)據(jù)加載可以優(yōu)化
- 云上的話碎绎,Spot 用起來(lái)