使用CV-CUDA提高基于計(jì)算機(jī)視覺的任務(wù)吞吐量
涉及基于 AI 的計(jì)算機(jī)視覺的實(shí)時(shí)云規(guī)模應(yīng)用程序正在迅速增長。 用例包括圖像理解、內(nèi)容創(chuàng)建、內(nèi)容審核、映射、推薦系統(tǒng)和視頻會(huì)議。
然而,由于對(duì)處理復(fù)雜性的需求增加,這些工作負(fù)載的計(jì)算成本也在增長。 從靜止圖像到視頻的轉(zhuǎn)變現(xiàn)在也正在成為消費(fèi)者互聯(lián)網(wǎng)流量的主要組成部分。 鑒于這些趨勢,迫切需要構(gòu)建高性能但具有成本效益的計(jì)算機(jī)視覺工作負(fù)載。
基于 AI 的計(jì)算機(jī)視覺流程通常涉及圍繞 AI 推理模型的數(shù)據(jù)預(yù)處理和后處理步驟,這可能占整個(gè)工作負(fù)載的 50-80%。 這些步驟中的常用運(yùn)算符包括:
- 調(diào)整大小
- 裁剪
- 歸一化
- 降噪
- 張量轉(zhuǎn)換
雖然開發(fā)人員可能會(huì)使用 NVIDIA GPU 來顯著加速其流程中的 AI 模型推理,但預(yù)處理和后處理仍然通常使用基于 CPU 的庫來實(shí)現(xiàn)。 這導(dǎo)致整個(gè) AI 流程的性能出現(xiàn)瓶頸。 通常作為 AI 圖像或視頻處理流程一部分的解碼和編碼過程也可能在 CPU 上成為瓶頸,從而影響整體性能。
CV-CUDA優(yōu)化
CV-CUDA 是一個(gè)開源庫,可讓您構(gòu)建高效的云級(jí) AI 計(jì)算機(jī)視覺流程。 該庫提供一組專門的 GPU 加速計(jì)算機(jī)視覺和圖像處理內(nèi)核作為獨(dú)立運(yùn)算符,以輕松實(shí)現(xiàn) AI 流程的高效預(yù)處理和后處理步驟。
CV-CUDA 可用于各種常見的計(jì)算機(jī)視覺流程,例如圖像分類、對(duì)象檢測、分割和圖像生成。 如需了解更多信息,請(qǐng)參閱 NVIDIA GTC 2022 秋季主題演講。
在這篇博文中,我們展示了使用 CV-CUDA 為典型的 AI 計(jì)算機(jī)視覺工作負(fù)載啟用端到端 GPU 加速的好處,可實(shí)現(xiàn)約 5 倍至高達(dá) 50 倍的整體吞吐量加速。 這可以導(dǎo)致每年節(jié)省數(shù)億美元的云成本,并在數(shù)據(jù)中心每年節(jié)省數(shù)百 GWh 的能源消耗。
GPU 加速解決了 CPU 瓶頸
CV-CUDA 提供高度優(yōu)化的 GPU 加速內(nèi)核作為計(jì)算機(jī)視覺處理的獨(dú)立運(yùn)算符。 這些內(nèi)核可以有效地實(shí)現(xiàn)預(yù)處理和后處理流程,從而顯著提高吞吐量。
編碼和解碼操作也可能是流程中的潛在瓶頸。 借助優(yōu)化的 NVIDIA 視頻處理框架 (VPF),您還可以高效地優(yōu)化和運(yùn)行它們。 VPF 是 NVIDIA 的一個(gè)開源庫,具有與 C++ 庫的 Python 綁定。 它為 GPU 上的視頻解碼和編碼提供完整的硬件加速。omniverse
要加速 GPU 上的整個(gè)端到端 AI 流程,請(qǐng)使用 CV-CUDA,以及用于解碼/編碼加速的 VPF 和用于進(jìn)一步推理優(yōu)化的 TensorRT。 與典型流程中基于 CPU 的實(shí)施相比,您可以使用四個(gè) NVIDIA L4 GPU 實(shí)現(xiàn)高達(dá) 50 倍的端到端吞吐量改進(jìn)。
改進(jìn)程度取決于推理 DNN 的復(fù)雜性、所需的預(yù)處理和后處理步驟以及硬件等因素。 對(duì)于多 GPU 節(jié)點(diǎn),您可以期望加速因子針對(duì)給定流程線性擴(kuò)展。
CV-CUDA如何實(shí)現(xiàn)高性能
CV-CUDA 利用 GPU 的強(qiáng)大功能來實(shí)現(xiàn)高性能:
- 預(yù)分配內(nèi)存池,避免在推理階段重復(fù)分配 GPU 內(nèi)存
- 異步操作
- 內(nèi)核融合——使用一個(gè) GPU 內(nèi)核實(shí)現(xiàn)運(yùn)算符組合,以最大限度地減少不必要的數(shù)據(jù)傳輸和內(nèi)核啟動(dòng)延遲
- 通過向量化全局內(nèi)存訪問和使用快速共享內(nèi)存來提高內(nèi)存訪問效率
- 計(jì)算效率、快速數(shù)學(xué)、扭曲減少/塊減少
案例研究:視頻分割流程的端到端加速
基于視頻的分割是一種常見的 AI 技術(shù),它根據(jù)屬性對(duì)視頻幀中的像素進(jìn)行分割。 例如,在視頻會(huì)議中的虛擬背景或背景模糊應(yīng)用中,它將前景人物或物體與背景分割開來。
在本研究中,我們討論了使用 AWS 上的 NVIDIA T4 Tensor Core GPU 實(shí)例部署在云中的 AI 視頻分割流程的性能評(píng)估,特別關(guān)注計(jì)算成本優(yōu)化。 連接到實(shí)例的 CPU 是 Intel Xeon Platinum 8362。
當(dāng)整個(gè)端到端 AI 流程在 GPU 上執(zhí)行時(shí),您可以預(yù)期顯著節(jié)省成本。 然后,我們討論相同工作負(fù)載的這種吞吐量性能加速對(duì)數(shù)據(jù)中心能耗的影響。
為了進(jìn)行實(shí)驗(yàn),我們將帶有 CV-CUDA AI 流程的 GPU 與帶有相同流程的 OpenCV 實(shí)現(xiàn)的 CPU 進(jìn)行了比較,假設(shè)兩種情況下的推理工作負(fù)載都在 GPU 上運(yùn)行。 具體來說,我們部署了 ResNet-101 視頻分割模型流程,以執(zhí)行 AI 背景模糊。
在這種情況下,我們測量了整個(gè)端到端流程中不同階段的延遲和最大吞吐量。 流程包含多個(gè)階段:
- 視頻解碼
- 使用 Downscale、Normalize 和 Reformat 等操作進(jìn)行預(yù)處理
- 使用 PyTorch 進(jìn)行推理
- 使用 Reformat、Upscale、BilateralFilter、Composition 和 Blur 等操作進(jìn)行后處理
- 視頻編碼
對(duì)于 CPU 和 GPU 流程,我們假設(shè)推理工作負(fù)載分別使用 PyTorch 和 TensorRT 在 GPU 上運(yùn)行。
傳統(tǒng)的流程是用 OpenCV 和 PyTorch (GPU) 構(gòu)建的,用 Python 實(shí)現(xiàn),因?yàn)檫@是客戶的典型模式。 輸入視頻的分辨率為 1080p,由 474 幀組成,批量大小為 1。在此流程中,由于 PyTorch,GPU 僅用于推理,而其余過程是基于 CPU 的:
- 這些幀使用 OpenCV/ffmpeg 解碼。
- 解碼后的圖像使用 OpenCV 進(jìn)行預(yù)處理,并送入 PyTorch 支持的 DNN 以檢測哪些像素屬于貓,生成掩碼。
- 在后處理階段,將前一階段的輸出掩碼與原始圖像及其模糊版本合成,導(dǎo)致前景中的貓和背景模糊。
對(duì)于基于 GPU 的流程,我們使用來自 CV-CUDA 庫的優(yōu)化運(yùn)算符實(shí)現(xiàn)了預(yù)處理和后處理階段,并使用 NVIDIA TensorRT 庫進(jìn)行了推理。 我們還使用 VPF 在 GPU 上加速了流程的解碼和編碼部分。
上圖顯示,單幀批處理的端到端時(shí)間從 132 毫秒減少到大約 10 毫秒,這表明 GPU 流程實(shí)現(xiàn)了令人印象深刻的延遲減少。 通過使用單個(gè) NVIDIA T4 GPU,CV-CUDA 流水線比 CPU 流水線快約 13 倍。
此結(jié)果是針對(duì)處理單個(gè)視頻的單個(gè)進(jìn)程獲得的。 通過部署多個(gè)進(jìn)程來同時(shí)處理多個(gè)視頻,這些優(yōu)化可以使用相同的硬件實(shí)現(xiàn)更高的吞吐量,從而顯著節(jié)省成本和能源。
為了更好地展示 CV-CUDA 帶來的好處,我們在不同的實(shí)例(一個(gè) T4 GPU、一個(gè) L4 GPU、四個(gè) T4 GPU 和四個(gè) L4 GPU)上執(zhí)行了 GPU 流水線。
新推出的 NVIDIA L4 Tensor Core GPU 由 NVIDIA Ada Lovelace 架構(gòu)提供支持,可為視頻、人工智能、視覺計(jì)算、圖形和虛擬化提供低成本、高能效的加速。
在上圖 中,與 CPU 基線相比,單個(gè) T4 GPU 上的端到端吞吐量加速約為 5 倍,新的 L4 GPU 上的加速進(jìn)一步提高至約 12 倍。 對(duì)于多個(gè) GPU 實(shí)例,性能幾乎呈線性擴(kuò)展,例如,在四個(gè) T4 GPU 和四個(gè) L4 GPU 上分別約為 19 倍和 48 倍。
為了計(jì)算每年的云成本和能源消耗,我們假設(shè)典型的視頻工作負(fù)載為每分鐘上傳到視頻流平臺(tái)的 500 個(gè)視頻小時(shí)。 對(duì)于每年的云成本,我們只考慮了 T4 GPU(L4 GPU 將在未來可用)并假設(shè) Amazon EC2 G4 實(shí)例的一年預(yù)留定價(jià)。
鑒于此,單個(gè) T4 GPU 上此示例視頻工作負(fù)載的年度成本將約為 CPU 流程的 1/5。 這預(yù)示著此類工作負(fù)載的典型云成本節(jié)省估計(jì)約為數(shù)億美元。
對(duì)于數(shù)據(jù)中心,除了與處理如此龐大的工作負(fù)載所需的硬件相關(guān)的成本外,能源效率對(duì)于降低能源成本和環(huán)境影響也至關(guān)重要。
在上圖中,年能耗(以 GWh 為單位)是根據(jù)服務(wù)器的平均小時(shí)功耗計(jì)算的,該服務(wù)器具有相應(yīng)硬件的相同視頻工作負(fù)載。 單個(gè) L4 系統(tǒng)的能耗約為 CPU 服務(wù)器的 1/12。 對(duì)于像示例視頻這樣的工作負(fù)載(每分鐘 500 小時(shí)的視頻),每年的節(jié)能估計(jì)約為數(shù)百 GWh。
這些節(jié)能效果非常顯著,因?yàn)檫@相當(dāng)于避免每年駕駛的數(shù)萬輛乘用車排放溫室氣體,每輛乘用車每年行駛約 11,000 英里。文章來源:http://www.zghlxwxcb.cn/news/detail-445005.html
CV-CUDA Beta v0.3.0 功能
現(xiàn)在您已經(jīng)看到使用 CV-CUDA 加速 AI 計(jì)算機(jī)視覺工作負(fù)載的好處,下面是一些關(guān)鍵特性:文章來源地址http://www.zghlxwxcb.cn/news/detail-445005.html
- 開源:GitHub 上的 Apache 2.0 許可開源軟件。
- 支持的運(yùn)算符:CV-CUDA 提供了 30 多個(gè)常用于 AI 計(jì)算機(jī)視覺工作負(fù)載的預(yù)處理和后處理步驟的專用運(yùn)算符。 這些無狀態(tài)、獨(dú)立的操作符很容易插入到現(xiàn)有的自定義處理框架中。 常見的運(yùn)算符包括 ConvertTo、Custom crop、Normalize、PadStack、Reformat 和 Resize。 有關(guān)詳細(xì)信息,請(qǐng)參閱 CV-CUDA 開發(fā)人員指南中的完整列表。
- 新運(yùn)算符:CV-CUDA Beta v0.3.0 提供了新的運(yùn)算符,例如重新映射、查找輪廓、非最大抑制、閾值處理和自適應(yīng)閾值處理。
- NVIDIA Triton 的自定義后端:您現(xiàn)在可以使用示例應(yīng)用程序在構(gòu)建計(jì)算機(jī)視覺管道時(shí)將 CV-CUDA 集成到自定義后端中。
- 多語言 API:CV-CUDA 包括用于 C/C++ 和 Python 的 API。
- 框架接口:對(duì)現(xiàn)有 DL 框架(如 PyTorch 和 TensorFlow)的易于使用和零復(fù)制接口。
- 批量支持:支持所有 CV-CUDA 算子,讓您獲得更高的 GPU 利用率和更好的性能。
- 統(tǒng)一和可變形狀批處理支持:CV-CUDA 接受具有相同或不同維度的張量。
- 示例應(yīng)用程序:端到端加速圖像分類、對(duì)象檢測和視頻分割示例應(yīng)用程序。
- PIP安裝。
- 安裝、入門和 API 參考指南。
到了這里,關(guān)于使用CV-CUDA提高基于計(jì)算機(jī)視覺的任務(wù)吞吐量的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!