日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

在NVIDIA A100 GPU中使用DALI和新的硬件JPEG解码器快速加载数据

發布時間:2023/11/28 生活经验 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在NVIDIA A100 GPU中使用DALI和新的硬件JPEG解码器快速加载数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在NVIDIA A100 GPU中使用DALI和新的硬件JPEG解碼器快速加載數據
如今,最流行的拍照設備智能手機可以捕獲高達4K UHD的圖像(3840×2160圖像),原始數據超過25 MB。即使考慮到令人尷尬的低HD分辨率(1280×720),原始圖像也需要超過2.5 MB的存儲空間。存儲少至100張UHD圖像將需要近3 GB的可用空間。
顯然,如果以這種方式存儲數據,則會很快耗盡空間。這是圖像壓縮派上用場的地方。眾所周知的JPEG格式可以將圖像大小從30 MB縮小到3 MB。
對于深度學習的計算機視覺應用程序(其中有數百萬個樣本的訓練數據集是通用的),壓縮和有效存儲圖像數據比以往任何時候都更為重要。行業標準的數據集(例如ImageNet和COCO)使用JPEG格式存儲數據。因此,ImageNet僅占用150 GB的空間,而不是驚人的32 TB的未壓縮數據。
壓縮效果很好-它可以節省大量磁盤空間。不幸的是,它突出了另一項挑戰,在與計算機視覺相關的深度學習應用程序中尤為明顯:圖像解壓縮是一項計算密集型任務。實際上,這是數據處理管道中最耗時的任務,直到JPEG解碼在GPU上運行的訓練變得空缺。
面對這一問題,開發了NVIDIA數據加載庫(DALI)來加速圖像解碼,增強和管道預處理。它緩解了此CPU瓶頸。DALI通過利用nvJPEG(用于JPEG解碼的CUDA庫)來加速圖像解碼。不僅如此,還可以采用數據處理管道,從解碼到擴充再到訓練,再到更高的性能水平。
最近,推出了基于NVIDIA Ampere架構的A100 GPU。它添加了硬件JPEG解碼器以進一步提高性能。它是負責解碼JPEG圖像的專用硬件模塊。
先前的架構沒有這種硬件單元,并且JPEG解碼是使用CPU和GPU可編程SM單元的純軟件(CUDA)解決方案。利用專用的硬件單元,解碼不再與CUDA核心競爭其它計算密集型任務,例如在神經網絡訓練期間進行正向和反向饋送。
它通過CUDA工具包的一部分nvJPEG庫公開。有關更多信息,請參閱在NVIDIA A100 GPU上利用硬件JPEG解碼器和NVIDIA nvJPEG庫。作為DALI用戶,隨著DALI和NVJPEG集成的抽象化,將自動受益于硬件加速的解碼,而無需更改任何代碼。
通過將JPEG硬件解碼器與DALI配合使用,可以輕松地為深度學習應用程序訪問此JPEG硬件解碼器功能。如果將DALI ImageDecoder與后端混合使用,則無需更改代碼。獲取CUDA 11的最新DALI版本,并享受NVIDIA Ampere架構支持的,硬件加速的JPEG解碼。
以下代碼示例顯示了DALI管道,該管道可加載圖像并使用GPU對其進行解碼:
class SimplePipeline(Pipeline): def init(self, batch_size, num_threads, device_id): super().init(batch_size, num_threads, device_id, seed = 12) self.input = ops.FileReader(file_root = image_dir) self.decode = ops.ImageDecoder(device = ‘mixed’, output_type = types.RGB) def define_graph(self): jpegs, labels = self.input() images = self.decode(jpegs) return images, labels
混合GPU解碼器
借助DALI,可以更進一步,并將基于硬件,軟件和基于CUDA的方法結合起來進行JPEG解碼,并行運行它們以獲得更高的吞吐量。圖1顯示了這樣一種管道如何工作。

圖1:采用軟件/ CUDA和硬件加速JPEG圖像解碼并行使用的DALI管線圖。
可以通過調整hw_decoder_load參數來決定工作量,以決定將多少解碼負載分配給硬件解碼器,以及通過GPU加速的CUDA方法同時完成多少負載。
結果取決于現有的GPU工作負載(GPU必須完成的工作量),并且可以根據經驗進行調整以最大程度地提高每種用例的吞吐量。

圖2提供了比例為75:25的數字。但是,當GPU已被其它工作(例如正向傳播和反向傳播)占用時,可能會通過將較大一部分圖像解碼任務卸載到硬件解碼器(例如80%甚至更多)來找到最佳位置。
以下代碼示例顯示了將75%的圖像解碼任務卸載到硬件解碼器的管道:
class SimplePipeline(Pipeline): def init(self, batch_size, num_threads, device_id): super().init(batch_size, num_threads, device_id, seed = 12) self.input = ops.FileReader(file_root = image_dir) self.decode = ops.ImageDecoder(device = ‘mixed’, output_type = types.RGB, hw_decoder_load=0.75) def define_graph(self): jpegs, labels = self.input() images = self.decode(jpegs) return images, labels
圖2顯示了將DALI解碼從CPU切換到各種基于GPU的方法時可以期望的性能提升。針對不同的批處理大小,CPU libjpeg-turbo解決方案,Volta CUDA解碼,A100硬件JPEG解碼器以及A100雙硬件和CUDA解碼器執行了測試。
圖2:用于ImageNet訓練數據集的CPU,CUDA,A100硬件以及雙CUDA和硬件JPEG圖像解碼之間的解碼速度比較。批次樣品均分。
圖2和4的測試配置:
? NVIDIA V100 GPU: CPU – E5-2698 v4@2GHz 3.6GHz Turbo (Broadwell) HT On, GPU – Tesla V100-SXM2-16GB(GV100) 116160 MiB 180 SM, GPU Video Clock 1312, 4 threads used in DALI pipeline
? NVIDIA A100 GPU: CPU – Platinum 8168@2GHz 3.7GHz Turbo (Skylake) HT On, GPU – A100-SXM4-40GB(GA100) 140557 MiB 1108 SM, GPU Video Clock 1095, 4 threads used in DALI pipeline
? CPU: CPU – Platinum 8168@2GHz 3.7GHz Turbo (Skylake) HT On, Dataset – training set of ImageNet, 4 threads used in DALI pipeline
圖3顯示了典型的類似ResNet50的圖像分類管道。

圖3.類似ResNet50的圖像分類管道。

圖4顯示了ResNet-50模型的端到端數據管道加速。總體管線加速看起來與前面圖2中的解碼加速相同。
圖4:針對類似ResNet50的圖像分類模型,CPU,CUDA,A100硬件加速以及雙CUDA和硬件加速JPEG圖像解碼之間的端到端數據處理管道吞吐量比較。
以下是一些要點:
? 對于基于圖像的工作負載,解碼是數據預處理管道中計算最密集的方面。通過加快速度,整個管道都能看到好處。
? 端到端的訓練吞吐量在很大程度上取決于可以為GPU提供數據的速度(管道的輸出)。DALI專門用于確保GPU不斷獲得數據。有關如何確定的數據管道是否受CPU瓶頸以及DALI如何提供幫助的信息,請參閱案例研究:帶有DALI的ResNet50。

總結

以上是生活随笔為你收集整理的在NVIDIA A100 GPU中使用DALI和新的硬件JPEG解码器快速加载数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。