內存遍歷工具源碼
A. PyTorch 源碼解讀之 torch.utils.data:解析數據處理全流程
文@233233
目錄
0 前言
1 Dataset
1.1 Map-style dataset
1.2 Iterable-style dataset
1.3 其他 dataset
2 Sampler
3 DataLoader
3.1 三者關系 (Dataset, Sampler, Dataloader)
3.2 批處理
3.2.1 自動批處理(默認)
3.2.2 關閉自動批處理
3.2.3 collate_fn
3.3 多進程處理 (multi-process)
4 單進程
5 多進程
6 鎖頁內存 (Memory Pinning)
7 預取 (prefetch)
8 代碼講解
0 前言
本文以 PyTorch 1.7 版本為例,解析 torch.utils.data 模塊在數據處理流程中的應用。
理解 Python 中的迭代器是解讀 PyTorch 數據處理邏輯的關鍵。Dataset、Sampler 和 DataLoader 三者共同構建數據處理流程。
迭代器通過實現 __iter__() 和 __next__() 方法,支持數據的循環訪問。Dataset 提供數據獲取介面,Sampler 控制遍歷順序,DataLoader 負責載入和批處理數據。
1 Dataset
Dataset 包括 Map-style 和 Iterable-style 兩種,分別用於索引訪問和迭代訪問數據。
Map-style dataset 通過實現 __getitem__() 和 __len__() 方法,支持通過索引獲取數據。
Iterable-style dataset 實現 __iter__() 方法,適用於隨機訪問且批次大小依賴於獲取數據的場景。
2 Sampler
Sampler 用於定義數據遍歷的順序,支持用戶自定義和 PyTorch 提供的內置實現。
3 DataLoader
DataLoader 是數據載入的核心,支持 Map-style 和 Iterable-style Dataset,提供單多進程處理和批處理等功能。
通過參數配置,如 batch_size、drop_last、collate_fn 等,DataLoader 實現了數據的自動和手動批處理。
4 批處理
3.2.1 自動批處理(默認)
DataLoader 默認使用自動批處理,通過參數控制批次生成和樣本整理。
3.2.2 關閉自動批處理
關閉自動批處理,允許用戶自定義批處理邏輯或處理單個樣本。
3.2.3 collate_fn
collate_fn 是手動批處理時的關鍵,用於整理單個樣本為批次。
5 多進程
多進程處理通過 num_workers 參數啟用,加速數據載入。
6 單進程
單進程模式下,數據載入可能影響計算流程,適用於數據量小且無需多進程的場景。
7 鎖頁內存 (Memory Pinning)
Memory Pinning 技術確保數據在 GPU 加速過程中快速傳輸,提高性能。
8 代碼講解
通過具體代碼分析,展示了 DataLoader 的初始化、迭代和數據獲取過程,涉及迭代器、Sampler 和 Dataset 的交互。