国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

圖像預處理庫 CV-CUDA 開源了,打破預處理瓶頸,提升推理吞吐量 20 多倍

NVIDIA英偉達 ? 來源:未知 ? 2022-12-26 22:50 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文轉載自機器之心

CPU 圖像預處理成為視覺任務的瓶頸,最新開源的 CV-CUDA,將為圖像預處理算子提速百倍。

在如今信息化時代中,圖像或者說視覺內容早已成為日常生活中承載信息最主要的載體,深度學習模型憑借著對視覺內容強大的理解能力,能對其進行各種處理與優化。

然而在以往的視覺模型開發與應用中,我們更關注模型本身的優化,提升其速度與效果。相反,對于圖像的預處理與后處理階段,很少認真思考如何去優化它們。所以,當模型計算效率越來越高,反觀圖像的預處理與后處理,沒想到它們竟成了整個圖像任務的瓶頸。

為了解決這樣的瓶頸,NVIDIA 攜手字節跳動機器學習團隊開源眾多圖像預處理算子庫 CV-CUDA,它們能高效地運行在 GPU 上,算子速度能達到 OpenCV(運行在 CPU)的百倍左右。如果我們使用 CV-CUDA 作為后端替換 OpenCV 和 TorchVision,整個推理的吞吐量能達到原來的二十多倍。此外,不僅是速度的提升,同時在效果上 CV-CUDA 在計算精度上已經對齊了 OpenCV,因此訓練推理能無縫銜接,大大降低工程師的工作量。

feab39c2-852b-11ed-bfe3-dac502259ad0.png

以圖像背景模糊算法為例,將 CV-CUDA 替換 OpenCV 作為圖像預/后處理的后端,整個推理過程吞吐量能加 20多倍。

如果小伙伴們想試試更快、更好用的視覺預處理庫,可以試試這一開源工具。

開源地址:https://github.com/CVCUDA/CV-CUDA

圖像預/后處理已成為CV瓶頸

很多涉及到工程與產品的算法工程師都知道,雖然我們常常只討論模型結構和訓練任務這類「前沿研究」,但實際要做成一個可靠的產品,中間會遇到很多工程問題,反而模型訓練是最輕松的一環了。

圖像預處理就是這樣的工程難題,我們也許在實驗或者訓練中只是簡單地調用一些 API 對圖像進行幾何變換、濾波、色彩變換等等,很可能并不是特別在意。但是當我們重新思考整個推理流程時會發現,圖像預處理已經成為了性能瓶頸,尤其是對于預處理過程復雜的視覺任務。

這樣的性能瓶頸,主要體現在 CPU 上。一般而言,對于常規的圖像處理流程,我們都會先在 CPU 上進行預處理,再放到 GPU 運行模型,最后又會回到 CPU,并可能需要做一些后處理。

febdce84-852b-11ed-bfe3-dac502259ad0.png

以圖像背景模糊算法為例,常規的圖像處理流程中預后處理主要在 CPU 完成,占據整體 90% 的工作負載,其已經成為該任務的瓶頸。

因此對于視頻應用,或者 3D 圖像建模等復雜場景,因為圖像幀的數量或者圖像信息足夠大,預處理過程足夠復雜,并且延遲要求足夠低,優化預/后處理算子就已經迫在眉睫了。一個更好地做法,當然是替換掉 OpenCV,使用更快的解決方案。

為什么 OpenCV 仍不夠好?

在 CV 中,應用最廣泛的圖像處理庫當然就是長久維護的 OpenCV 了,它擁有非常廣泛的圖像處理操作,基本能滿足各種視覺任務的預/后處理所需。但是隨著圖像任務負載的加大,它的速度已經有點慢慢跟不上了,因為 OpenCV 絕大多數圖像操作都是 CPU 實現,缺少 GPU 實現,或者 GPU 實現本來就存在一些問題。

在 NVIDIA 與字節跳動算法同學的研發經驗中,他們發現 OpenCV 中那些少數有 GPU 實現的算子存在三大問題:

  1. 部分算子的 CPU 和 GPU 結果精度無法對齊;

  2. 部分算子 GPU 性能比 CPU 性能還弱;

  3. 同時存在各種 CPU 算子與各種GPU算子,當處理流程需要同時使用兩種,就額外增加了內存與顯存中的空間申請與數據遷移/數據拷貝


比如說第一個問題結果精度無法對齊,NVIDIA 與字節跳動算法同學會發現,當我們在訓練時 OpenCV 某個算子使用了 CPU,但是推理階段考慮到性能問題,換而使用 OpenCV 對應的 GPU 算子,也許 CPU 和 GPU 結果精度無法對齊,導致整個推理過程出現精度上的異常。當出現這樣的問題,要么換回 CPU 實現,要么需要費很多精力才有可能重新對齊精度,是個不好處理的難題。

既然 OpenCV 仍不夠好,可能有讀者會問,那 Torchvision 呢?它其實會面臨和 OpenCV 一樣的問題,除此之外,工程師部署模型為了效率更可能使用 C++ 實現推理過程,因此將沒辦法使用 Torchvision 而需要轉向 OpenCV 這樣的 C++視覺庫,這不就帶來了另一個難題:對齊 Torchvision 與 OpenCV 的精度。

總的來說,目前視覺任務在 CPU 上的預/后處理已經成為了瓶頸,然而當前 OpenCV 之類的傳統工具也沒辦法很好地處理。因此,將操作遷移到 GPU 上,完全基于 CUDA 實現的高效圖像處理算子庫 CV-CUDA,就成為了新的解決方案。

fed7073c-852b-11ed-bfe3-dac502259ad0.png

完全在 GPU 上進行預處理與后處理,將大大降低圖像處理部分的 CPU 瓶頸。

GPU 圖像處理加速庫:CV-CUDA

作為基于 CUDA 的預/后處理算子庫,算法工程師可能最期待的是三點:足夠快、足夠通用、足夠易用。NVIDIA 和字節跳動的機器學習團隊聯合開發的 CV-CUDA 正好能滿足這三點,利用 GPU 并行計算能力提升算子速度,對齊 OpenCV 操作結果足夠通用,對接 C++/Python 接口足夠易用。

CV-CUDA 的速度

CV-CUDA 的快,首先體現在高效的算子實現,畢竟是 NVIDIA 寫的,CUDA 并行計算代碼肯定經過大量的優化的。其次是它支持批量操作,這就能充分利用 GPU 設備的計算能力,相比 CPU 上一張張圖像串行執行,批量操作肯定是要快很多的。最后,還得益于 CV-CUDA 適配的 Volta、Turing、Ampere 等 GPU 架構,在各 GPU 的 CUDA kernel 層面進行了性能上的高度優化,從而獲得最好的效果。也就是說,用的 GPU 卡越好,其加速能力越夸張。

正如前文的背景模糊吞吐量加速比圖,如果采用 CV-CUDA 替代 OpenCV 和 TorchVision 的前后處理后,整個推理流程的吞吐率提升 20多倍。其中預處理對圖像做 Resize、Padding、Image2Tensor 等操作,后處理對預測結果做的 Tensor2Mask、Crop、Resize、Denoise 等操作。

fee96abc-852b-11ed-bfe3-dac502259ad0.png

在同一個計算節點上(2x Intel Xeon Platinum 8168 CPUs,1x NVIDIA A100 GPU),以 30fps 的幀率處理 1080p 視頻,采用不同 CV 庫所能支持的最大的并行流數。測試采用了 4 個進程,每個進程 batchSize 為 64。

對于單個算子的性能,NVIDIA 和字節跳動的小伙伴也做了性能測試,很多算子在 GPU 上的吞吐量能達到 CPU 的百倍。

ff0ce690-852b-11ed-bfe3-dac502259ad0.png

圖片大小為 480*360,CPU 選擇為 Intel(R) Core(TM) i9-7900X,BatchSize 大小為 1,進程數為 1

盡管預/后處理算子很多都不是單純的矩陣乘法等運算,為了達到上述高效的性能,CV-CUDA 其實做了很多算子層面的優化。例如采用大量的 kernel 融合策略,減少了 kernel launch 和 global memory 的訪問時間;優化訪存以提升數據讀寫效率;所有算子均采用異步處理的方式,以減少同步等待的耗時等等。

CV-CUDA 的通用與靈活

運算結果的穩定,對于實際的工程可太重要了,就比如常見的 Resize 操作,OpenCV、OpenCV-gpu 以及 Torchvision 的實現方式都不一樣,那從訓練到部署,就會多很多工作量以對齊結果。

CV-CUDA 在設計之初,就考慮到當前圖像處理庫中,很多工程師習慣使用 OpenCV 的 CPU 版本,因此在設計算子時,不管是函數參數還是圖像處理結果上,盡可能對齊 OpenCV CPU 版本的算子。因此從 OpenCV 遷移到 CV-CUDA,只需要少量改動就能獲得一致的運算結果,模型也就不必要重新訓練。

此外,CV-CUDA 是從算子層面設計的,因此不論模型的預/后處理流程是什么樣的,其都能自由組合,具有很高的靈活性。

字節跳動機器學習團隊表示,在企業內部訓練的模型多,需要的預處理邏輯也多種多樣有許多定制的預處理邏輯需求。CV-CUDA 的靈活性能保證每個 OP 都支持 stream 對象和顯存對象(Buffer 和 Tensor 類,內部存儲了顯存指針)的傳入,從而能更加靈活地配置相應的 GPU 資源。每個 op 設計開發時,既兼顧了通用性,也能按需提供定制化接口,能夠覆蓋圖片類預處理的各種需求。

CV-CUDA 的易用

可能很多工程師會想著,CV-CUDA 涉及到底層 CUDA 算子,那用起來應該比較費勁?但其實不然,即使不依賴更上層的 API,CV-CUDA 本身底層也會提供 Image 等結構體,提供 Allocator 類,這樣在 C++ 上調起來也不麻煩。此外,往更上層,CV-CUDA 提供了 PyTorch、OpenCV 和 Pillow 的數據轉化接口,工程師能快速地以之前熟悉的方式進行算子替換與調用。

此外,因為 CV-CUDA 同時擁有 C++ 接口與 Python 接口,它能同時用于訓練與服務部署場景,在訓練時用 Python 接口跟快速地驗證模型能力,在部署時利用 C++ 接口進行更高效地預測。CV-CUDA 免于繁瑣的預處理結果對齊過程,提高了整體流程的效率。

ff25296c-852b-11ed-bfe3-dac502259ad0.png

CV-CUDA 進行Resize的C++ 接口

實戰,CV-CUDA 怎么用

如果我們在訓練過程中使用 CV-CUDA 的 Python 接口,那其實使用起來就會很簡單,只需要簡單幾步就能將原本在 CPU 上的預處理操作都遷移到 GPU 上。

以圖片分類為例,基本上我們在預處理階段需要將圖片解碼為張量,并進行裁切以符合模型輸入大小,裁切完后還要將像素值轉化為浮點數據類型并做歸一化,之后傳到深度學習模型就能進行前向傳播了。下面我們將從一些簡單的代碼塊,體驗一下 CV-CUDA 是如何對圖片進行預處理,如何與 Pytorch 進行交互。

ff349ea6-852b-11ed-bfe3-dac502259ad0.png

常規圖像識別的預處理流程,使用 CV-CUDA 將會把預處理過程與模型計算都統一放在 GPU 上運行。

如下在使用 torchvision 的 API 加載圖片到 GPU 之后,Torch Tensor 類型能直接通過 as_tensor 轉化為 CV-CUDA 對象 nvcvInputTensor,這樣就能直接調用 CV-CUDA 預處理操作的 API,在 GPU 中完成對圖像的各種變換。

ff5abb04-852b-11ed-bfe3-dac502259ad0.png

如下幾行代碼將借助 CV-CUDA 在 GPU 中完成圖像識別的預處理過程:裁剪圖像并對像素進行歸一化。其中 resize()將圖像張量轉化為模型的輸入張量尺寸;convertto() 將像素值轉化為單精度浮點值;normalize() 將歸一化像素值,以令取值范圍更適合模型進行訓練。

CV-CUDA 各種預處理操作的使用與 OpenCV 或 Torchvision 中的不會有太大區別,只不過簡單調個方法,其背后就已經在 GPU 上完成運算了。

ff877234-852b-11ed-bfe3-dac502259ad0.png

現在借助借助 CV-CUDA 的各種 API,圖像分類任務的預處理已經都做完了,其能高效地在 GPU 上完成并行計算,并很方便地融合到 PyTorch 這類主流深度學習框架的建模流程中。剩下的,只需要將 CV-CUDA 對象 nvcvPreprocessedTensor 轉化為 Torch Tensor 類型就能饋送到模型了,這一步同樣很簡單,轉換只需一行代碼:

ffc07412-852b-11ed-bfe3-dac502259ad0.png

通過這個簡單的例子,很容易發現 CV-CUDA 確實很容易就嵌入到正常的模型訓練邏輯中。如果讀者希望了解更多的使用細節,還是可以查閱前文 CV-CUDA 的開源地址。

CV-CUDA 對實際業務的提升

CV-CUDA 實際上已經經過了實際業務上的檢驗。在視覺任務,尤其是圖像有比較復雜的預處理過程的任務,利用 GPU 龐大的算力進行預處理,能有效提神模型訓練與推理的效率。CV-CUDA 目前在抖音集團內部的多個線上線下場景得到了應用,比如搜索多模態,圖片分類等。

字節跳動機器學習團隊表示,CV-CUDA 在內部的使用能顯著提升訓練與推理的性能。例如在訓練方面,字節跳動一個視頻相關的多模態任務,其預處理部分既有多幀視頻的解碼,也有很多的數據增強,導致這部分邏輯很復雜。復雜的預處理邏輯導致 CPU 多核性能在訓練時仍然跟不上,因此采用 CV-CUDA 將所有 CPU 上的預處理邏輯遷移到 GPU,整體訓練速度上獲得了 90% 的加速。注意這可是整體訓練速度上的提升,而不只是預處理部分的提速。

ffe62bc6-852b-11ed-bfe3-dac502259ad0.png

在字節跳動 OCR 與視頻多模態任務上,通過使用 CV-CUDA,整體訓練速度能提升 1 到 2 倍(注意:是模型整體訓練速度的提升)

在推理過程也一樣,字節跳動機器學習團隊表示,在一個搜索多模態任務中使用 CV-CUDA 后,整體的上線吞吐量相比于用 CPU 做預處理時有了 2 倍多的提升。值得注意的是,這里的 CPU 基線結果本來就經過多核高度優化,并且該任務涉及到的預處理邏輯較簡單,但使用 CV-CUDA 之后加速效果依然非常明顯。

速度上足夠高效以打破視覺任務中的預處理瓶頸,再加上使用也簡單靈活,CV-CUDA 已經證明了在實際應用場景中能很大程度地提升模型推理與訓練效果,所以要是讀者們的視覺任務同樣受限于預處理效率,那就試試最新開源的 CV-CUDA 吧。


原文標題:圖像預處理庫 CV-CUDA 開源了,打破預處理瓶頸,提升推理吞吐量 20 多倍

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


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

    關注

    23

    文章

    4087

    瀏覽量

    99187

原文標題:圖像預處理庫 CV-CUDA 開源了,打破預處理瓶頸,提升推理吞吐量 20 多倍

文章出處:【微信號:NVIDIA_China,微信公眾號:NVIDIA英偉達】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    用“分區”來面對超大數據集和超大吞吐量

    分區(partitions) 也被稱為 分片(sharding),通常采用對數據進行分區的方式來增加系統的 可伸縮性,以此來面對非常大的數據集或非常高的吞吐量,避免出現熱點。
    的頭像 發表于 12-30 16:40 ?205次閱讀
    用“分區”來面對超大數據集和超大<b class='flag-5'>吞吐量</b>

    Sandisk閃迪公司發布全新開源工具,突破數據存儲測試瓶頸

    Sandisk閃迪公司日前正式推出一款創新的開源工具SPRandom,旨在解決SSD基準測試中的重大技術瓶頸。簡而言之,預處理是基于實際工作負載對SSD進行測試的關鍵步驟,以確保性能表現準確且可重復
    的頭像 發表于 12-22 17:41 ?518次閱讀

    數據預處理軟核加速模塊設計

    數據拼接操作,其預處理模塊結構框圖如下圖 模塊最后得到的信號為ddr_q、ddr_clk和ddr_wrreq。ddr_q是并行128bits圖像數據,ddr_clk是RAM的出口時鐘,同時引出作為下一模塊的數據時鐘,ddr_wrreq置高時代表有效數據。
    發表于 10-29 08:09

    使用羅德與施瓦茨CMX500的吞吐量應用層測試方案

    5G NR(New Radio)吞吐量應用層測試是評估5G網絡性能的一個重要方面,它主要關注的是在實際應用條件下,用戶能夠體驗到的數據傳輸速率。這種測試通常包括對下行鏈路和上行鏈路的吞吐量進行測量,以確保網絡可以滿足各種應用場
    的頭像 發表于 09-02 13:56 ?7953次閱讀
    使用羅德與施瓦茨CMX500的<b class='flag-5'>吞吐量</b>應用層測試方案

    友思特方案 | FPGA 加持,友思特圖像采集卡高速預處理助力視覺系統運行提速增效

    圖像預處理圖像處理關鍵中間環節,通過優化傳感器到主機的數據傳輸處理為后續減負。其算法依托硬件執行,搭載?FPGA?的友思特
    的頭像 發表于 08-20 09:18 ?1015次閱讀
    友思特方案 | FPGA 加持,友思特<b class='flag-5'>圖像</b>采集卡高速<b class='flag-5'>預處理</b>助力視覺系統運行提速增效

    NVMe高速傳輸之擺脫XDMA設計22:PCIe的TLP讀優化處理

    。并且當大量不同的讀請求交叉處理時,讀處理模塊的并行處理結構更能夠充分利用PCIe的亂序傳輸能力來提高吞吐量。為了清晰的說明讀處理模塊對
    發表于 08-19 08:48

    基于米爾MYC-YM90X安路飛龍DR1開發板儀表圖像識別系統開發

    預處理和特征提取等功能進行 FPGA 硬件設計,生成比特流文件;在 FD 環境中開發 ARM 側的應用程序,實現系統整體控制與圖像識別算法的高層執行。 2.2.2 驅動與支持 官方提供
    發表于 08-17 21:29

    FPGA 加持,友思特圖像采集卡高速預處理助力視覺系統運行提速增效

    圖像預處理圖像處理關鍵環節,可優化數據傳輸、減輕主機負擔,其算法可在FPGA等硬件上執行。友思特FPGA圖像采集卡憑借FPGA特性,能縮短
    的頭像 發表于 08-13 17:41 ?1120次閱讀
    FPGA 加持,友思特<b class='flag-5'>圖像</b>采集卡高速<b class='flag-5'>預處理</b>助力視覺系統運行提速增效

    鋰電池制造 | 電芯預處理工藝的步驟詳解

    電芯預處理是鋰電池包制造的首要工序,無論是新能源汽車的續航穩定性,還是儲能系統的循環壽命,其根基都可追溯至預處理工序對電芯一致性的把控,其核心在于通過系統檢測與篩選消除量產電芯的性能差異,為后續組裝
    的頭像 發表于 08-11 14:53 ?1530次閱讀
    鋰電池制造 | 電芯<b class='flag-5'>預處理</b>工藝的步驟詳解

    信而泰×DeepSeek:AI推理引擎驅動網絡智能診斷邁向 “自愈”時代

    故障)”的自動化推理鏈條。3.預測性防御:智能基線洞察,防患于未然l 基于先進的時序分解算法,為每個關鍵業務終端/鏈路動態構建多維性能基線(吞吐量、時延、丟包率)。l 主動預警潛在風險,如帶寬瓶頸
    發表于 07-16 15:29

    【正點原子STM32MP257開發板試用】基于 DeepLab 模型的圖像分割

    前方的合適位置,可在板載 LCD 屏幕獲取識別效果如下 圖像分割的優化 介紹使用 USB 攝像頭實現動態畫面的實時圖像分割測試、本地圖片的靜態板端推理測試的主要流程。 動態
    發表于 06-21 21:11

    如何在Visual Studio 2022中運行FX3吞吐量基準測試工具?

    我正在嘗試運行 John Hyde 的書“SuperSpeed by Design”中的 FX3 吞吐量基準測試工具。 但是,我面臨一些困難,希望得到任何指導。 具體來說,我正在使用 Visual
    發表于 05-13 08:05

    FPGA Verilog HDL語法之編譯預處理

    Verilog HDL語言和C語言一樣也提供編譯預處理的功能?!熬幾g預處理”是Verilog HDL編譯系統的一個組成部分。Verilog HDL語言允許在程序中使用幾種特殊的命令(它們不是一般
    的頭像 發表于 03-27 13:30 ?1437次閱讀
    FPGA Verilog HDL語法之編譯<b class='flag-5'>預處理</b>

    英偉達GTC25亮點:NVIDIA Dynamo開源加速并擴展AI推理模型

    DeepSeek-R1 上的吞吐量提高了 30 倍 NVIDIA 發布開源推理軟件 NVIDIA Dynamo,旨在以高效率、低成本加速并擴展 AI 工廠中的 AI
    的頭像 發表于 03-20 15:03 ?1235次閱讀

    基于嵌入式人工智能的高速圖像處理的微處理器RZ/A2M數據手冊

    RZ/A2M MPU設計用于需要高速e-AI圖像處理的智能電器,網絡攝像機,服務機器人,掃描儀產品和工業機械。它采用獨特的圖像識別和機器視覺混合方法,結合專有的DRP技術,對
    的頭像 發表于 03-11 15:54 ?1022次閱讀
    基于嵌入式人工智能的高速<b class='flag-5'>圖像</b><b class='flag-5'>處理</b>的微<b class='flag-5'>處理</b>器RZ/A2M數據手冊