NVIDIA GPU Cloud加速醫(yī)學(xué)影像機(jī)器學(xué)習(xí)模型開發(fā)及應(yīng)用部署

從頭搭建機(jī)器學(xué)習(xí)平臺(tái)--費(fèi)時(shí)費(fèi)力

醫(yī)學(xué)影像是深度學(xué)習(xí)等人工智能相關(guān)技術(shù)在醫(yī)療健康領(lǐng)域應(yīng)用最為迅猛的方向,作為深耕醫(yī)學(xué)影像領(lǐng)域多年,長期關(guān)注技術(shù)趨勢的企業(yè),翼展在2016年也開始進(jìn)行醫(yī)學(xué)影像人工智能應(yīng)用的研發(fā)。當(dāng)時(shí)公有云廠商能夠提供GPU實(shí)例的還非常少,并且性價(jià)比不太高,于是我們又走了一遍自己采購硬件搭建服務(wù)器的老路。先是配置了一臺(tái)雙Titan X卡的工作站小試牛刀,按照網(wǎng)上的教程一步步安裝ubuntu,NVIDIA顯卡驅(qū)動(dòng)程序,CUDA,cuDNN,最后編譯Caffe的時(shí)候發(fā)現(xiàn)庫版本不對(duì),又折騰了一圈重來。差不多搗鼓了一個(gè)禮拜才開始正式訓(xùn)練模型。后來上一個(gè)8卡的服務(wù)器,不敢再自己折騰了,操作系統(tǒng)和底層驅(qū)動(dòng)都讓第三方廠商給配置好。然而隨著人員的增加,一方面機(jī)時(shí)分配不過來;另一方面機(jī)器學(xué)習(xí)框架的快速迭代,各種不同模型依賴的框架和庫版本都不太一樣,導(dǎo)致非常難于管理。尤其是2017年翼展開始布局醫(yī)學(xué)影像人工智能開放協(xié)作平臺(tái)后,我們需要部署的機(jī)器學(xué)習(xí)應(yīng)用越來越多,手工方式的落后管理必然要被工程化管理所取代。雖然這個(gè)時(shí)候工程團(tuán)隊(duì)已經(jīng)擁抱DevOps,有了Docker的運(yùn)維經(jīng)驗(yàn),不過管理GPU云上實(shí)例及各種機(jī)器學(xué)習(xí)框架不同版本仍然是一個(gè)噩夢----直到NGC(NVIDIA GPU Cloud)的出現(xiàn)。

為了更好地落地AI產(chǎn)品,貼近臨床,翼展醫(yī)療集團(tuán)打造了人工智能開放協(xié)作平臺(tái),為人工智能企業(yè)和創(chuàng)業(yè)團(tuán)隊(duì)提供人工智能產(chǎn)品的發(fā)布和搭建平臺(tái),在云診斷平臺(tái)集成各病種AI診斷工具,主要分為高端篩查及專項(xiàng)篩查兩個(gè)方向,目前平臺(tái)已上線十余種人工智能產(chǎn)品,包括用于血管壁分割及斑塊成分分析的磁共振斑塊成像解決方案、CT下肺結(jié)節(jié)篩查、DR胸肺常見疾病篩查、DR智能報(bào)告自動(dòng)生成系統(tǒng)等,為合作醫(yī)院及各類醫(yī)療機(jī)構(gòu)提供了強(qiáng)大的支撐,降本增效,促進(jìn)診斷能力極大提升。
同時(shí),通過建立人工智能開放協(xié)作平臺(tái)、在線云診斷平臺(tái)、翼展醫(yī)學(xué)影像診斷中心、影像醫(yī)生集團(tuán)、多病種早篩中心,打造了行業(yè)獨(dú)有的多維生態(tài)進(jìn)化體系,為人工智能產(chǎn)品提供了充足的落地應(yīng)用場景,使其更加貼近臨床,更好地服務(wù)于醫(yī)生和患者,使得高精度遠(yuǎn)程診療成為現(xiàn)實(shí),逐步幫助醫(yī)療資源均衡化。

醫(yī)學(xué)影像人工智能開放協(xié)作平臺(tái)架構(gòu)

機(jī)器學(xué)習(xí)團(tuán)隊(duì)面臨的挑戰(zhàn)

  1. 第一個(gè)挑戰(zhàn)來自于團(tuán)隊(duì)內(nèi)部成員的以及項(xiàng)目的增加。開始時(shí),只有一個(gè)專職的深度學(xué)習(xí)科學(xué)家,可以在雙卡工作站做小批量數(shù)據(jù)預(yù)訓(xùn)練,然后上服務(wù)器做大規(guī)模訓(xùn)練。本地和遠(yuǎn)程的環(huán)境都設(shè)置成一樣就可以。后來隨著團(tuán)隊(duì)成員的增加,既有Kaggle比賽冠軍老手,又有剛?cè)腴T才做過MNIST的實(shí)習(xí)生,就開始需要分配訓(xùn)練機(jī)時(shí)了。由于每個(gè)人的項(xiàng)目不一樣,使用的模型不同,底層依賴的深度學(xué)習(xí)框架及庫版本也不一致,一個(gè)統(tǒng)一的完全沒有隔離的環(huán)境越來越不能滿足日常訓(xùn)練的要求。曾經(jīng)出現(xiàn)過的事故是,有模型需要將Python版本升級(jí),升級(jí)之后導(dǎo)致其他人的模型無法正常工作了。我們?cè)O(shè)定了嚴(yán)格的規(guī)章制度,劃分用戶空間,每個(gè)人需要的Python執(zhí)行環(huán)境、深度學(xué)習(xí)框架及第三方庫都自行安裝在自己的用戶空間。對(duì)于顯卡驅(qū)動(dòng)程序及CUDA這樣的底層庫,則只能由管理員來進(jìn)行安裝和升級(jí)。升級(jí)前還得做好兼容性測試,一旦不同用戶的模型有沖突則非常難解決。后來隨著開始租用公有云的GPU實(shí)例,情況得到了一定程度的好轉(zhuǎn),不過在公有云上安裝配置好環(huán)境依然費(fèi)時(shí)費(fèi)力。
  2. 2017年,翼展開始布局人工智能開放協(xié)作平臺(tái),為人工智能企業(yè)和創(chuàng)業(yè)團(tuán)隊(duì)提供醫(yī)學(xué)影像人工智能產(chǎn)品發(fā)布和運(yùn)行平臺(tái)。這個(gè)平臺(tái)需要接入不同產(chǎn)商的產(chǎn)品,有的產(chǎn)品是通過API接入的,后臺(tái)深度學(xué)習(xí)模型的運(yùn)行環(huán)境由產(chǎn)商自行維護(hù),我們的工作還比較輕松;有的產(chǎn)商是直接將模型發(fā)布給我們,由翼展提供運(yùn)行時(shí)環(huán)境,并且模型的迭代速度很快,新版本模型底層依賴版本也會(huì)相應(yīng)變化,每次升級(jí)的操作都不是簡單的部署一個(gè)新模型那么簡單,還需要同時(shí)將運(yùn)行時(shí)環(huán)境一并升級(jí)。而且工程團(tuán)隊(duì)通常至少需要同時(shí)維護(hù)一套測試環(huán)境和生產(chǎn)環(huán)境。由于在翼展云影遠(yuǎn)程診斷系統(tǒng)部署上了Docker的經(jīng)驗(yàn),我們自然想到了應(yīng)用nvidia-docker來進(jìn)行人工智能應(yīng)用的部署。


    醫(yī)學(xué)影像人工智能開放協(xié)作平臺(tái)應(yīng)用涉及疾病領(lǐng)域

NVIDIA GPU Cloud帶來簡單高效的解決方案

剛聽到NVIDIA GPU Cloud的時(shí)候可能會(huì)誤以為NVIDIA要賣公有云服務(wù)了。然而并不是:

NVIDIA GPU Cloud (NGC) 是針對(duì)深度學(xué)習(xí)和科學(xué)計(jì)算優(yōu)化的基于GPU加速的云平臺(tái)。在當(dāng)前的發(fā)行版本中,NGC包含了NGC容器,NGC容器注冊(cè),NGC網(wǎng)站,以及用以運(yùn)行深度學(xué)習(xí)容器的平臺(tái)軟件。

NGC容器

NGC容器旨在提供一個(gè)軟件平臺(tái),這個(gè)平臺(tái)基于最小的操作系統(tǒng)要求、安裝在服務(wù)器或工作站上Docker和驅(qū)動(dòng),通過NGC容器注冊(cè)里的NGC容器提供所有的應(yīng)用程序和SDK軟件。
NGC管理著一份目錄,包含了完全集成和優(yōu)化的深度學(xué)習(xí)框架容器,適用于單GPU以及多GPU配置環(huán)境。這些容器包括:CUDA 工具包,DIGITS工作流,以及以下深度學(xué)習(xí)框架:NVCaffe, Caffe2, Microsoft Cognitive Toolkit (CNTK), MXNet, PyTorch, TensorFlow, Theano 和 Torch。這些框架容器以開箱即可用的方式交付,包含了所有必須的依賴,比如CUDA運(yùn)行時(shí)環(huán)境、NVIDIA庫和運(yùn)行系統(tǒng)環(huán)境。
每個(gè)框架容器鏡像還包含了框架源代碼,以支持用戶自定義修改和增強(qiáng)功能,以及完整的軟件開發(fā)棧。
NVIDIA每月更新這些深度學(xué)習(xí)的容器,以確保提供最佳性能。
在深度學(xué)習(xí)框架容器的基礎(chǔ)上,NGC也提供了一系列高性能計(jì)算可視化應(yīng)用容器,采用支持業(yè)界領(lǐng)先的可視化工具,包括集成了NVIDIA Index 立體體渲染的ParaView, NVIDIA OptiX 光線追蹤庫和NVIDIA Holodeck,以實(shí)現(xiàn)高質(zhì)量可交互的實(shí)時(shí)視覺效果。這些容器目前處于公測階段。
NGC也提供流行常用的第三方兼容GPU、符合NGC標(biāo)準(zhǔn)和最佳實(shí)踐的高性能計(jì)算應(yīng)用容器,使用戶可以方便的在最短的時(shí)間內(nèi)啟動(dòng)和運(yùn)行起來。

NVIDIA GPU Cloud

這不正是我們一直在尋找的東西嗎?看到這個(gè)介紹的時(shí)候,我們第一時(shí)間在NGC網(wǎng)站進(jìn)行了注冊(cè),并且很快在自己的服務(wù)器上pull了一個(gè)NGC容器試用:

docker pull nvcr.io/nvidia/pytorch:18.04-py3
nvidia-docker run -it --rm -v local_dir:container_dir nvcr.io/nvidia/pytorch:18.04-py3

真的如NVIDIA GPU Cloud官方廣告所說,“幾分鐘內(nèi)即可開始創(chuàng)新,不需要數(shù)周時(shí)間”。當(dāng)然首次下載鏡像還是需要消耗一點(diǎn)時(shí)間,不過接下來的事情就變得非常輕松了,復(fù)雜的軟件安裝和配置ngc容器都幫你搞定,可以迅速啟動(dòng)你的訓(xùn)練任務(wù)。NVIDIA深度學(xué)習(xí)框架容器每月都會(huì)進(jìn)行更新,想嘗鮮的話pull一個(gè)新版本的鏡像并且啟動(dòng)容器即可,無需擔(dān)心安裝新版本的軟件會(huì)造成以前模型跑不起來的嚴(yán)重后果,更徹底擺脫了不同軟件底層依賴庫版本沖突(如果你擔(dān)任過系統(tǒng)管理員,你一定知道我在說什么)。最重要的是,NGC可以在自建服務(wù)器上使用,也可以在阿里云等公有云上使用。

現(xiàn)在,有新的小伙伴加入要申請(qǐng)機(jī)器學(xué)習(xí)訓(xùn)練環(huán)境,或者有新的項(xiàng)目要啟動(dòng),亦或有新的模型要部署,運(yùn)維工程師只需要對(duì)方將深度學(xué)習(xí)框架的版本告知,然后在ngc網(wǎng)站找到對(duì)應(yīng)的鏡像,運(yùn)行一個(gè)docker pull命令,然后就可以悠閑的去喝杯咖啡了。

將深度學(xué)習(xí)應(yīng)用打包成nvidia-docker鏡像

我們正在做的事情,是利用NGC的自定義容器功能,將自研的深度學(xué)習(xí)應(yīng)用發(fā)布為nvidia-docker鏡像,這樣可以進(jìn)一步簡化應(yīng)用部署,同時(shí)可以與工程團(tuán)隊(duì)其他項(xiàng)目共用一套持續(xù)集成及運(yùn)維的流程。自己探路成功以后,亦會(huì)建議我們的合作伙伴將其應(yīng)用發(fā)布為NGC自定義容器鏡像,共同利用NGC這一平臺(tái)加速醫(yī)學(xué)影像人工智能應(yīng)用的開發(fā)及部署。

一點(diǎn)局限

可以說NGC將深度學(xué)習(xí)開發(fā)運(yùn)行環(huán)境所需要的一切軟件依賴都通過一個(gè)nvidia-docker鏡像打包在一起了,除了----NVIDIA顯卡驅(qū)動(dòng)。這是唯一還需要手動(dòng)安裝在宿主機(jī)上的組件。我們?cè)谑褂肗GC的過程中曾經(jīng)遇到的一個(gè)問題是,某個(gè)鏡像是會(huì)依賴一個(gè)指定版本的NVIDIA驅(qū)動(dòng)程序的。當(dāng)我們?cè)噲D升級(jí)PyTorch鏡像到18.11以便體驗(yàn)一下即將發(fā)布的PyTorch v1.0的新特性時(shí),發(fā)現(xiàn)需要安裝410.xx版本的驅(qū)動(dòng)程序,而這個(gè)版本的驅(qū)動(dòng)程序還沒有針對(duì)Linux平臺(tái)的發(fā)布(2018年11月底,目前已經(jīng)提供了),這就尷尬??了。
另外由于眾所不知的原因,建議nvidia官網(wǎng)、nvidia開發(fā)者網(wǎng)站和ngc網(wǎng)站盡量不引入第三方網(wǎng)站的資源,或者做降級(jí)處理,不然會(huì)給國內(nèi)開發(fā)者帶來可訪問性方面的問題。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容