内存遍历工具源码
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 的交互。