女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何實現高效的部署醫療影像推理

NVIDIA英偉達企業解決方案 ? 來源:NVIDIA英偉達企業解決方案 ? 作者:NVIDIA英偉達企業解 ? 2022-04-09 08:18 ? 次閱讀

一個完整的醫療影像推理流程一般包含數據的前處理、AI 推理以及數據后處理這幾部分。通常情況下,我們可以通過 TensorRT, TensorFlow 或者 PyTorch 這些框架來實現 GPU 加速的 AI 推理部分,然而數據前后處理部分往往是放在 CPU 上執行的。對于一些比較大的數據,比如 CT 或者 MR 這種 3D 圖像,CPU 上的數據前后處理會成為整個推理流程的瓶頸,導致推理的時延變長,GPU 使用效率不高。醫療影像推理的另一個需要考慮的問題是如何實現高效的部署。我們往往需要部署多個醫療影像 AI 應用,那么如何去調度多個模型,如何并發處理多個請求,并充分利用 GPU 資源成為挑戰。

什么是 MONAI

MONAI 是一個專門針對醫療圖像的深度學習開源框架。MONAI 致力于:

  • 發展一個學術界、工業界和臨床研究人員共同合作的社區;

  • 為醫療圖像創建最先進的端到端工作流;

  • 為研究人員提供創建和評估深度學習模型的優化和標準化的方法。

MONAI 中包含一系列的 transforms 對醫療圖像數據進行前后處理。在 MONAI 0.7 中,我們在 transforms 中引入基于 PyTorch Tensor 的計算,許多 transforms 既支持 NumPy array,也支持 PyTorch Tensor 作為輸入類型和計算后端。當以 PyTorch Tensor 作為輸入數據時,我們可以使用 GPU 來加速數據前后處理的計算。

什么是 NVIDIA Triton 推理服務器

Triton 推理服務器是一個開源的 AI 模型部署軟件,可以簡化深度學習推理的大規模部署。它能夠對多種框架(TensorFlow、TensorRT、PyTorch、ONNX Runtime 或自定義框架),在任何基于 GPU 或 CPU 的環境上(云、數據中心、邊緣)大規模部署經過訓練的 AI 模型。Triton 可提供高吞吐量推理,以實現 GPU 使用率的最大化。

在較新的版本中,Triton 增加了 Python backend 這一新特性,Python backend 的目標是讓使用者可以更加容易的部署 Python 寫的模型,無需再去編寫任何 C++ 代碼。在一些場景下,我們的推理流程中可能會出現循環、條件判斷、依賴于運行時數據的控制流和其他自定義邏輯與模型混合執行。使用 Triton Python backend,開發人員可以更加容易地在自己的推理流程中實現這些控制流,并且在 Python 模型中調用 Triton 部署的其他模型。

使用 MONAI 和 Triton 高效搭建和部署 GPU 加速的醫療影像推理流程

在本文介紹的例子中,我們將使用 MONAI 中 GPU 加速的數據處理以及 Triton 的 Python backend 來構建一個 GPU 加速的醫療影像推理流程。通過這個例子,讀者可以了解到,在 GPU 上進行數據處理所帶來的性能增益,以及如何使用 Triton 進行高效的推理部署。

整個推理流程如下圖所示,包含數據預處理,AI 模型推理,和數據后處理三部分。

如何實現高效的部署醫療影像推理

通過 EnsureType 這個 transform,我們將輸入數據轉換成 PyTorch Tensor 并放到 GPU 上,這樣之后的數據預處理操作都會在 GPU 上進行。我們使用 Triton 的 Torch backend 來作為 3DUnet 的推理后端,輸出的結果為 GPU 上的 Torch Tensor,并作為后處理模塊的輸入,在 GPU 上進行后處理計算。

使用 Triton 的 Python backend,我們可以非常容易的將整個流程串聯起來,即:按照 Triton Python backend 要求的模型結構構建前后處理的 Python 代碼,并在其中調用 3DUnet 的推理。以下是我們例子中的代碼片段。完整的代碼及復現步驟請見 Github:

https://github.com/Project-MONAI/tutorials/tree/master/full_gpu_inference_pipeline

class TritonPythonModel:      """     Your Python model must use the same class name. Every Python model     that is created must have "TritonPythonModel" as the class name.     """        def initialize(self, args):          """         `initialize` is called only once when the model is being loaded.         Implementing `initialize` function is optional. This function allows         the model to intialize any state associated with this model.         """          self.inference_device_id = args.get("model_instance_device_id", "0")          infer_transforms = []          infer_transforms.append(EnsureType(device=torch.device(f"cuda:{self.inference_device_id}")))          infer_transforms.append(AddChannel())          infer_transforms.append(ScaleIntensityRange(a_min=-57, a_max=164, b_min=0.0, b_max=1.0, clip=True))          infer_transforms.append(CropForeground())          infer_transforms.append(Resize(spatial_size=(224, 224, 224)))          self.pre_transforms = Compose(infer_transforms)        def execute(self, requests):          """         `execute` must be implemented in every Python model. `execute`         function receives a list of pb_utils.InferenceRequest as the only         argument. This function is called when an inference is requested         for this model. Depending on the batching configuration (e.g. Dynamic         Batching) used, `requests` may contain multiple requests. Every         Python model, must create one pb_utils.InferenceResponse for every         pb_utils.InferenceRequest in `requests`. If there is an error, you can         set the error argument when creating a pb_utils.InferenceResponse.         """          responses = []            for request in requests:              # get the input by name (as configured in config.pbtxt)              input_triton_tensor = pb_utils.get_input_tensor_by_name(request, "INPUT0")              # convert the triton tensor to torch tensor              input_torch_tensor = from_dlpack(input_triton_tensor.to_dlpack())              transform_output = self.pre_transforms(input_torch_tensor[0])              transform_output_batched = transform_output.unsqueeze(0)              # convert the torch tensor to triton tensor              transform_tensor = pb_utils.Tensor.from_dlpack("INPUT__0", to_dlpack(transform_output_batched))              # send inference request to 3DUnet served by Triton. The name of the model is "segmentation_3d"              inference_request = pb_utils.InferenceRequest(                  model_name="3dunet", requested_output_names=["OUTPUT__0"], inputs=[transform_tensor]              )                infer_response = inference_request.exec()              output1 = pb_utils.get_output_tensor_by_name(infer_response, "OUTPUT__0")              # convert the triton tensor to torch tensor              output_tensor = from_dlpack(output1.to_dlpack())                # do the post process              argmax = AsDiscrete(argmax=True)(output_tensor[0])              largest = KeepLargestConnectedComponent(applied_labels=1)(argmax)              contour = LabelToContour()(largest)              out_tensor_0 = pb_utils.Tensor.from_dlpack("MASK", to_dlpack(largest.unsqueeze(0)))              out_tensor_1 = pb_utils.Tensor.from_dlpack("CONTOUR", to_dlpack(contour.unsqueeze(0)))              inference_response = pb_utils.InferenceResponse(output_tensors=[out_tensor_0, out_tensor_1])              responses.append(inference_response)          return responses        def finalize(self):          """         `finalize` is called only once when the model is being unloaded.         Implementing `finalize` function is optional. This function allows         the model to perform any necessary clean ups before exit.         """  pass

以 MSD Spleen 3D 數據作為輸入,經過整個推理流程,將得到分割后的脾臟區域以及其輪廓。

如何實現高效的部署醫療影像推理

性能測試

我們在 RTX 8000 上對整個推理流程進行了性能測試,以了解 Triton 及 MONAI 不同特性對性能的影響。

HTTP vs. gRPC vs. shared memory

目前 Triton 支持 HTTP, gRPC 和共享內存等方式進行數據通信。由于三維醫學圖像通常很大,通信帶來的開銷不容忽視。對于許多常見的醫學圖像人工智能應用,客戶端與服務器位于同一臺機器上,因此使用共享內存是減少發送/接收開銷的一種可行方法。在測試中,我們比較了客戶端和服務器之間使用不同通信方式對性能的影響。所有過程(前/后處理和AI推理)都在 GPU 上。我們可以得出結論,當數據傳輸量很大時,使用共享內存將大大減少延遲。

如何實現高效的部署醫療影像推理

Pre/Post-processing on GPU vs. CPU

接著我們測試了分別在 GPU 和 CPU 進行前后數據處理時,整個推理流程的速度。可以看到,當使用 GPU 進行數據處理時,可以實現 12 倍的加速。

如何實現高效的部署醫療影像推理

想要了解更多 Triton 和 MONAI 的特性與使用方法,請關注以下鏈接。同時,Triton 和 MONAI 均已在 Github 開源,歡迎開發者踴躍參與開源社區建設。

原文標題:使用 MONAI 和 Triton 高效構建和部署 GPU 加速的醫療影像推理流程

文章出處:【微信公眾號:NVIDIA英偉達企業解決方案】歡迎添加關注!文章轉載請注明出處。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • NVIDIA
    +關注

    關注

    14

    文章

    5242

    瀏覽量

    105768
  • gpu
    gpu
    +關注

    關注

    28

    文章

    4910

    瀏覽量

    130656
  • 醫療
    +關注

    關注

    8

    文章

    1880

    瀏覽量

    59624

原文標題:使用 MONAI 和 Triton 高效構建和部署 GPU 加速的醫療影像推理流程

文章出處:【微信號:NVIDIA-Enterprise,微信公眾號:NVIDIA英偉達企業解決方案】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    從內窺鏡到閱片中心:AI一體機如何重塑醫療影像全鏈路

    MSC-2401是一款專為醫療影像領域打造的AI電腦一體機。定位于醫療影像設備的核心配套單元,它嚴格遵循醫療行業標準,聚焦高性能計算與精準顯
    的頭像 發表于 06-04 15:51 ?57次閱讀
    從內窺鏡到閱片中心:AI一體機如何重塑<b class='flag-5'>醫療</b><b class='flag-5'>影像</b>全鏈路

    如何利用RAKsmart服務器實現高效多站點部署方案

    利用RAKsmart服務器實現高效多站點部署方案,需結合其網絡優勢、彈性資源管理和合理的架構設計。以下是分步實施方案,涵蓋網絡優化、資源分配、數據管理及監控等核心環節,主機推薦小編為您整理發布如何利用RAKsmart服務器
    的頭像 發表于 05-19 10:38 ?87次閱讀

    使用MicroPython部署中的ocrrec_image.py推理得到的輸出結果很差,如何解決呢?

    使用在線平臺訓練OCR識別任務,測試結果表現很好。 期待結果和實際結果 實際的推理結果很差,推理不出任何信息。
    發表于 04-29 06:54

    研華科技攜手萬東醫療推進醫療影像數智升級

    研華科技受邀出席萬東醫療在CMEF醫療展上舉辦的“超能矩陣戰略簽約儀式”,聯合發布“全球首個面向磁共振設備的全鏈路AI智算平臺”,攜手推進醫療影像數智升級。
    的頭像 發表于 04-10 11:45 ?1043次閱讀

    中科億海微SoM模組——AI圖像推理解決方案

    精準、高效的圖像分析支持。極大提高了醫療影像、自動駕駛、智能安防、農業智能、無人機、人形機器人、物流管理等領域圖像處理的效率和質量。本文介紹的中科億海微基于FPGA
    的頭像 發表于 03-27 13:48 ?270次閱讀
    中科億海微SoM模組——AI圖像<b class='flag-5'>推理</b>解決方案

    醫療設備工業成像采集卡:提升醫療影像診斷水平的關鍵組件

    醫療設備工業成像采集卡,作為現代醫療設備中不可或缺的核心組件,正日益發揮著關鍵作用。它連接著圖像傳感器與計算機系統,負責將復雜的生物信息轉化為清晰、可處理的數字圖像,進而為醫生提供精準、高效的診斷
    的頭像 發表于 03-19 15:55 ?250次閱讀
    <b class='flag-5'>醫療</b>設備工業成像采集卡:提升<b class='flag-5'>醫療</b><b class='flag-5'>影像</b>診斷水平的關鍵組件

    探討DeepSeek-R1滿血版的推理部署與優化策略

    TL;DR 春節假期開始, 好像很多人都在開始卷DeepSeek-R1的推理了. 渣B也被兄弟團隊帶著一起卷了一陣, 其實推理中還有很多約束, 比較認同的是章老師的一個觀點: “推理框架很有可能就此
    的頭像 發表于 02-14 10:19 ?1222次閱讀
    探討DeepSeek-R1滿血版的<b class='flag-5'>推理</b><b class='flag-5'>部署</b>與優化策略

    摩爾線程宣布成功部署DeepSeek蒸餾模型推理服務

    近日,摩爾線程智能科技(北京)有限責任公司在其官方渠道發布了一則重要消息,宣布公司已經成功實現了對DeepSeek蒸餾模型推理服務的部署。這一技術突破,標志著摩爾線程在人工智能領域邁出了堅實的一步
    的頭像 發表于 02-06 13:49 ?716次閱讀

    如何開啟Stable Diffusion WebUI模型推理部署

    如何開啟Stable Diffusion WebUI模型推理部署
    的頭像 發表于 12-11 20:13 ?464次閱讀
    如何開啟Stable Diffusion WebUI模型<b class='flag-5'>推理</b><b class='flag-5'>部署</b>

    高效大模型的推理綜述

    大模型由于其在各種任務中的出色表現而引起了廣泛的關注。然而,大模型推理的大量計算和內存需求對其在資源受限場景的部署提出了挑戰。業內一直在努力開發旨在提高大模型推理效率的技術。本文對現有的關于
    的頭像 發表于 11-15 11:45 ?1298次閱讀
    <b class='flag-5'>高效</b>大模型的<b class='flag-5'>推理</b>綜述

    YOLOv6在LabVIEW中的推理部署(含源碼)

    相關介紹文章,所以筆者在實現YOLOv6 ONNX 在LabVIEW中的部署推理后,決定和各位讀者分享一下如何使用LabVIEW實現YOLOv6的目標檢測。
    的頭像 發表于 11-06 16:07 ?818次閱讀
    YOLOv6在LabVIEW中的<b class='flag-5'>推理</b><b class='flag-5'>部署</b>(含源碼)

    英特爾?至強?可擴展處理器助力智慧醫療的數字化轉型

    醫療機構實現數據的收集、分析和輔助決策,從而提升醫療服務質量與效率。 ? 這一處理器內置的AI加速器顯著提升了AI推理性能,特別是在處理多個AI工作負載時,性能提升可高達30%。這一點
    發表于 09-29 11:13 ?6286次閱讀
    英特爾?至強?可擴展處理器助力智慧<b class='flag-5'>醫療</b>的數字化轉型

    基于分布式存儲系統醫療影像數據存儲解決方案

    基于分布式存儲系統醫療影像數據存儲解決方案
    的頭像 發表于 09-14 09:53 ?620次閱讀
    基于分布式存儲系統<b class='flag-5'>醫療</b><b class='flag-5'>影像</b>數據存儲解決方案

    高清醫療影像解決方案:索尼FCB-EW9500H模組引領醫療進步

    醫療領域,高清影像的獲取與分析對于疾病的早期診斷、精準治療及術后評估至關重要。隨著科技的飛速發展,高清醫療影像解決方案正逐步成為提升醫療
    的頭像 發表于 09-03 10:07 ?463次閱讀

    醫療PACS影像數據的極速分布式塊存儲解決方案

    醫療PACS影像數據的極速分布式塊存儲解決方案
    的頭像 發表于 08-23 10:13 ?629次閱讀
    <b class='flag-5'>醫療</b>PACS<b class='flag-5'>影像</b>數據的極速分布式塊存儲解決方案