一個完整的醫(yī)療影像推理流程一般包含數(shù)據(jù)的前處理、AI 推理以及數(shù)據(jù)后處理這幾部分。通常情況下,我們可以通過 TensorRT, TensorFlow 或者 PyTorch 這些框架來實現(xiàn) GPU 加速的 AI 推理部分,然而數(shù)據(jù)前后處理部分往往是放在 CPU 上執(zhí)行的。對于一些比較大的數(shù)據(jù),比如 CT 或者 MR 這種 3D 圖像,CPU 上的數(shù)據(jù)前后處理會成為整個推理流程的瓶頸,導致推理的時延變長,GPU 使用效率不高。醫(yī)療影像推理的另一個需要考慮的問題是如何實現(xiàn)高效的部署。我們往往需要部署多個醫(yī)療影像 AI 應用,那么如何去調(diào)度多個模型,如何并發(fā)處理多個請求,并充分利用 GPU 資源成為挑戰(zhàn)。
什么是 MONAI
MONAI 是一個專門針對醫(yī)療圖像的深度學習開源框架。MONAI 致力于:
發(fā)展一個學術(shù)界、工業(yè)界和臨床研究人員共同合作的社區(qū);
為醫(yī)療圖像創(chuàng)建最先進的端到端工作流;
為研究人員提供創(chuàng)建和評估深度學習模型的優(yōu)化和標準化的方法。
MONAI 中包含一系列的 transforms 對醫(yī)療圖像數(shù)據(jù)進行前后處理。在 MONAI 0.7 中,我們在 transforms 中引入基于 PyTorch Tensor 的計算,許多 transforms 既支持 NumPy array,也支持 PyTorch Tensor 作為輸入類型和計算后端。當以 PyTorch Tensor 作為輸入數(shù)據(jù)時,我們可以使用 GPU 來加速數(shù)據(jù)前后處理的計算。
什么是 NVIDIA Triton 推理服務器
Triton 推理服務器是一個開源的 AI 模型部署軟件,可以簡化深度學習推理的大規(guī)模部署。它能夠?qū)Χ喾N框架(TensorFlow、TensorRT、PyTorch、ONNX Runtime 或自定義框架),在任何基于 GPU 或 CPU 的環(huán)境上(云、數(shù)據(jù)中心、邊緣)大規(guī)模部署經(jīng)過訓練的 AI 模型。Triton 可提供高吞吐量推理,以實現(xiàn) GPU 使用率的最大化。
在較新的版本中,Triton 增加了 Python backend 這一新特性,Python backend 的目標是讓使用者可以更加容易的部署 Python 寫的模型,無需再去編寫任何 C++ 代碼。在一些場景下,我們的推理流程中可能會出現(xiàn)循環(huán)、條件判斷、依賴于運行時數(shù)據(jù)的控制流和其他自定義邏輯與模型混合執(zhí)行。使用 Triton Python backend,開發(fā)人員可以更加容易地在自己的推理流程中實現(xiàn)這些控制流,并且在 Python 模型中調(diào)用 Triton 部署的其他模型。
使用 MONAI 和 Triton 高效搭建和部署 GPU 加速的醫(yī)療影像推理流程
在本文介紹的例子中,我們將使用 MONAI 中 GPU 加速的數(shù)據(jù)處理以及 Triton 的 Python backend 來構(gòu)建一個 GPU 加速的醫(yī)療影像推理流程。通過這個例子,讀者可以了解到,在 GPU 上進行數(shù)據(jù)處理所帶來的性能增益,以及如何使用 Triton 進行高效的推理部署。
整個推理流程如下圖所示,包含數(shù)據(jù)預處理,AI 模型推理,和數(shù)據(jù)后處理三部分。
通過 EnsureType 這個 transform,我們將輸入數(shù)據(jù)轉(zhuǎn)換成 PyTorch Tensor 并放到 GPU 上,這樣之后的數(shù)據(jù)預處理操作都會在 GPU 上進行。我們使用 Triton 的 Torch backend 來作為 3DUnet 的推理后端,輸出的結(jié)果為 GPU 上的 Torch Tensor,并作為后處理模塊的輸入,在 GPU 上進行后處理計算。
使用 Triton 的 Python backend,我們可以非常容易的將整個流程串聯(lián)起來,即:按照 Triton Python backend 要求的模型結(jié)構(gòu)構(gòu)建前后處理的 Python 代碼,并在其中調(diào)用 3DUnet 的推理。以下是我們例子中的代碼片段。
以 MSD Spleen 3D 數(shù)據(jù)作為輸入,經(jīng)過整個推理流程,將得到分割后的脾臟區(qū)域以及其輪廓。
性能測試
我們在 RTX 8000 上對整個推理流程進行了性能測試,以了解 Triton 及 MONAI 不同特性對性能的影響。
HTTP vs. gRPC vs. shared memory
目前 Triton 支持 HTTP, gRPC 和共享內(nèi)存等方式進行數(shù)據(jù)通信。由于三維醫(yī)學圖像通常很大,通信帶來的開銷不容忽視。對于許多常見的醫(yī)學圖像人工智能應用,客戶端與服務器位于同一臺機器上,因此使用共享內(nèi)存是減少發(fā)送/接收開銷的一種可行方法。在測試中,我們比較了客戶端和服務器之間使用不同通信方式對性能的影響。所有過程(前/后處理和AI推理)都在 GPU 上。我們可以得出結(jié)論,當數(shù)據(jù)傳輸量很大時,使用共享內(nèi)存將大大減少延遲。
Pre/Post-processing on GPU vs. CPU
接著我們測試了分別在 GPU 和 CPU 進行前后數(shù)據(jù)處理時,整個推理流程的速度??梢钥吹?,當使用 GPU 進行數(shù)據(jù)處理時,可以實現(xiàn) 12 倍的加速。
-
服務器
+關(guān)注
關(guān)注
12文章
9335瀏覽量
86139 -
醫(yī)療
+關(guān)注
關(guān)注
8文章
1840瀏覽量
58984 -
數(shù)據(jù)通信
+關(guān)注
關(guān)注
2文章
434瀏覽量
33897 -
人工智能
+關(guān)注
關(guān)注
1796文章
47791瀏覽量
240578
發(fā)布評論請先 登錄
相關(guān)推薦
Nanopi深度學習之路(1)深度學習框架分析
通過對比深度學習各大框架的優(yōu)缺點尋找最優(yōu)
![通過對比<b class='flag-5'>深度</b><b class='flag-5'>學習</b>各大<b class='flag-5'>框架</b>的優(yōu)缺點尋找最優(yōu)](https://file1.elecfans.com//web2/M00/A6/E6/wKgZomUMQSOAH5hCAAAiJnvyYfE587.png)
你最看好哪個深度學習框架呢?
深度學習框架你了解多少
![<b class='flag-5'>深度</b><b class='flag-5'>學習</b><b class='flag-5'>框架</b>你了解多少](https://file.elecfans.com/web1/M00/9B/1C/pIYBAF0iqqSAdA46AAFooF2jUUA982.png)
曠視深度學習框架曠視天元宣布開源
深度學習框架大PK
深度學習技術(shù)在醫(yī)療圖像診斷中有什么樣的應用
![<b class='flag-5'>深度</b><b class='flag-5'>學習</b>技術(shù)在<b class='flag-5'>醫(yī)療</b><b class='flag-5'>圖像</b>診斷中有什么樣的應用](https://file.elecfans.com/web1/M00/D1/6F/pIYBAF-_KCeAG_nOAAHG5dTbYQU126.png)
評論