NVIDIA 資料載入庫 (DALI) 是一個 GPU 加速程式庫,用於資料載入和預處理,以加速深度學習應用程式。它提供了一系列高度優化的構建塊,用於加載和處理圖像、視訊和音訊資料。它可以用作流行深度學習框架中內建資料載入器和資料迭代器的便攜式直接替代品。
深度學習應用程式需要複雜的多階段資料處理管道,包括載入、解碼、裁剪、調整大小和許多其他增強功能。目前在CPU上執行的這些資料處理管道已經成為瓶頸,限制了訓練和推理的效能和可擴展性。
DALI 透過將資料預處理工作轉移到 GPU 來解決 CPU 瓶頸問題。此外,DALI 依賴自己的執行引擎,旨在最大限度地提高輸入管道的吞吐量。預取、平行執行和批次等功能對使用者來說是透明的。
此外,深度學習框架具有多種資料預處理實現,帶來了訓練和推理工作流程的可移植性以及程式碼可維護性等挑戰。使用 DALI 實現的資料處理管道是可移植的,因為它們可以輕鬆地重定向到 TensorFlow、PyTorch 和 PaddlePaddle。
大理在行動:
from nvidia.dali.pipeline import pipeline_defimport nvidia.dali.types as typesimport nvidia.dali.fn as fnfrom nvidia.dali.plugin.pytorch import DALIGenericIteratorimport os# 要使用不同的資料運行,請參閱gvidia.文件。 pred , y):passdef model(x):passdef向後(loss, model):pass@pipeline_def(num_threads=4, device_id=0)def get_dali_pipeline():images, labels = fn.readers.file(file_root=images_direls_ , random_shuffle =True, name="Reader")# 在GPU 上解碼資料images = fn.decoders.image_random_crop(images, device="mixed", output_type=types.RGB)# 其餘處理也發生在GPU 上.調整大小(圖像,resize_x = 256,resize_y = 256)圖像= fn.crop_mirror_normalize(圖像,crop_h = 224,crop_w = 224,平均值= [0.485 * 255,0.456 * 255,0.45],st. 0.229 * 255 , 0.224 * 255, 0.225 * 255],mirror=fn.random.coin_flip())回傳影像, labelstrain_data = DALIGenericIterator( [get_dali_pipeline(batch_size=16)], ['data', 'label'],reader_name='Reader')for i, enumerate(train_data)中的資料:x, y = data[0]['data'], data[0]['label'] pred = model(x)loss = loss_func(pred, y)backward(loss, model)
易於使用的函數式 Python API。
支援多種資料格式 - LMDB、RecordIO、TFRecord、COCO、JPEG、JPEG 2000、WAV、FLAC、OGG、H.264、VP9 和 HEVC。
可跨流行的深度學習框架移植:TensorFlow、PyTorch、PaddlePaddle、JAX。
支援CPU和GPU執行。
可跨多個 GPU 進行擴充。
靈活的圖表讓開發人員可以建立自訂管道。
可透過自訂運算子擴充以滿足使用者特定需求。
加速影像分類 (ResNet-50)、物件偵測 (SSD) 工作負載以及 ASR 模型(Jasper、RNN-T)。
允許使用 GPUDirect Storage 在儲存和 GPU 記憶體之間建立直接資料路徑。
透過 DALI TRITON 後端與 NVIDIA Triton 推理伺服器輕鬆整合。
開源。
Kaggle 電腦視覺比賽期間:“DALI 是我在本次比賽中學到的最好的東西之一”
Lightning Pose - 最先進的姿勢估計研究模型
提高先進運算基礎設施的資源利用率
MLPerf - 計算和深度學習硬體和軟體基準測試的行業標準
“我們使用 DALI 框架優化了 eBay 內部的主要模型”
下一期對我們的 2024 年計劃進行了高度概述。您應該注意,此路線圖可能隨時更改,並且其項目的順序並不反映任何類型的優先順序。
我們強烈鼓勵您對我們的路線圖發表評論,並向我們提供有關提到的 GitHub 問題的回饋。
若要安裝最新 CUDA 版本 (12.x) 的最新 DALI 版本:
pip 安裝 nvidia-dali-cuda120 # 或者 pip install --extra-index-url https://pypi.nvidia.com --upgrade nvidia-dali-cuda120
DALI 需要支援適當 CUDA 版本的 NVIDIA 驅動程式。如果是基於 CUDA 12 的 DALI,則需要安裝 CUDA Toolkit。
DALI 預先安裝在 NVIDIA GPU Cloud 上的 TensorFlow、PyTorch 和 PaddlePaddle 容器中。
其他安裝路徑(TensorFlow 外掛程式、較舊的 CUDA 版本、每晚和每週建置等)和特定要求,請參閱安裝指南。
若要從原始程式碼建置 DALI,請參閱編譯指南。
DALI 的介紹可以在入門頁面中找到。
更高級的範例可以在範例和教學頁面中找到。
有關範例的互動版本(Jupyter 筆記本),請前往 docs/examples 目錄。
注意:選擇最新版本文檔或夜間版本文檔,它們與主分支保持同步,具體取決於您的版本。
2024 年 GPU 技術大會;優化推理模型以實現 eBay 的最高效能;王以恆:事件
2023 年 GPU 技術大會;開發人員突破:利用 Triton Server 和 DALI 加速企業工作流程;布蘭登·塔特爾:事件。
2023 年 GPU 技術大會; GPU 加速端到端地理空間工作流程;凱文格林:事件。
2022 年 GPU 技術大會;有效的 NVIDIA DALI:加速現實生活中的深度學習應用; Rafał Banaś:事件。
2022 年 GPU 技術大會; NVIDIA DALI 簡介:GPU 加速資料預處理;華金·安東·吉勞:事件。
2021 年 GPU 技術大會; NVIDIA DALI:Krzysztof Łęcki 和 Michał Szołucha 的 GPU 驅動的資料預處理:活動。
2020年GPU技術大會;使用 NVIDIA 資料載入庫 (DALI) 進行快速資料預處理;艾伯特沃蘭特、華金安東吉拉奧:錄音。
2019年GPU技術大會;使用DALI快速進行AI資料預處理; Janusz Lisiecki、Michał Zientkiewicz:幻燈片、錄音。
2019年GPU技術大會; DALI 與 Xavier 上的 TensorRT 整合;喬許帕克和阿努拉格迪克西特:幻燈片、錄音。
2018年GPU技術大會;用於深度學習訓練的快速資料管道,T. Gale、S. Layton 和 P. Trędak:幻燈片、錄音。
開發者頁面。
部落格文章。
我們歡迎為 DALI 做出貢獻。若要為 DALI 做出貢獻並提出拉取請求,請遵循貢獻文件中概述的指南。
如果您正在尋找適合開始的任務,請檢查外部貢獻歡迎標籤中的任務。
我們感謝回饋、問題或錯誤回報。當您需要程式碼的協助時,請依照 Stack Overflow 文件中概述的流程進行操作。確保發布的範例是:
最小:使用盡可能少的程式碼仍然會產生相同的問題。
完整:提供重現問題所需的所有零件。檢查是否可以去除外部依賴並仍然顯示問題。我們花在重現問題上的時間越少,就能投入更多的時間來修復問題。
verificable :測試您將要提供的程式碼,以確保它能夠重現問題。刪除與您的請求無關的所有其他問題。
DALI 最初由 Trevor Gale、Przemek Tredak、Simon Layton、Andrei Ivanov 和 Serge Panev 等人做出了重大貢獻。