DataLoader2¶
一个新的轻量级 DataLoader2 被引入,以将过载的数据操作功能从 torch.utils.data.DataLoader 分离到 DataPipe 操作。此外,某些功能只能通过 DataLoader2 实现,例如快照和切换后端服务以执行高性能操作。
DataLoader2¶
- class torchdata.dataloader2.DataLoader2(datapipe: Optional[Union[IterDataPipe, MapDataPipe]], datapipe_adapter_fn: Optional[Union[Iterable[Adapter], Adapter]] = None, reading_service: Optional[ReadingServiceInterface] = None)¶
DataLoader2是用于优化和执行给定的DataPipe图形 基于ReadingService和Adapter函数,支持动态分片以实现多进程和分布式数据加载
多个后端
ReadingServicesDataPipe图像在内存中的局部修改,如重排控制、内存绑定等。截图数据预处理管道的状态(WIP)
- Parameters:
datapipe (
IterDataPipe或MapDataPipe) –DataPipe从其中加载数据。在初始化过程中将创建此 datapipe 的深拷贝,允许在不同的DataLoader2中重复使用输入而不会共享状态。只有在创建 DataLoader 后立即调用load_state_dict时,才可以使用输入None。datapipe_adapter_fn (
Iterable[Adapter]或Adapter, 可选) – 将应用于 DataPipe 的Adapter个函数(默认值:None)。reading_service (ReadingServiceInterface, 可选) – 定义了
DataLoader2如何在DataPipe上执行操作,例如多进程/分布式(默认:None)。将在初始化期间创建此对象的深拷贝,允许在不同的DataLoader2中重用 ReadingService,而不会共享状态。
注意
当将
MapDataPipe传递给DataLoader2时,为了遍历数据,DataLoader2将尝试通过iter(datapipe)创建一个迭代器。 如果对象具有非零索引的索引,则可能会失败。 考虑使用.shuffle()(它将MapDataPipe转换为IterDataPipe) 或datapipe.to_iter_datapipe(custom_indices)。- __iter__() DataLoader2Iterator[T_co]¶
返回一个单例迭代器,从
DataPipe适应的图中创建。DataPipe将在提供序列化状态以构造时恢复。DataLoader2和finalize_iterator将分别在迭代开始和结束时调用。
- classmethod from_state(state: Dict[str, Any], reading_service: CheckpointableReadingServiceInterface) DataLoader2[T_co]¶
创建新的
DataLoader2与DataPipe图形和ReadingService从序列化状态恢复
- load_state_dict(state_dict: Dict[str, Any]) None¶
对于现有的
DataLoader2,加载序列化状态以恢复DataPipe图表,并重置ReadingService的内部状态。
- seed(seed: int) None¶
为 DataLoader2 设置随机种子以控制确定性。
- Parameters:
seed – 随机 uint64 种子
- shutdown() None¶
关闭
ReadingService并清理迭代器。
- state_dict() Dict[str, Any]¶
返回一个字典来表示数据处理管道的状态,键为:
serialized_datapipe:序列化DataPipe之前ReadingService适应。reading_service_state: 当前状态的ReadingService和适应性DataPipe。
注意:
DataLoader2 不支持 torch.utils.data.Dataset 或 torch.utils.data.IterableDataset。请将它们中的每一个用对应的 DataPipe 包裹起来:
torchdata.datapipes.map.SequenceWrapper:torch.utils.data.Datasettorchdata.datapipes.iter.IterableWrapper:torch.utils.data.IterableDataset
ReadingService¶
ReadingService 指定了数据处理图的执行后端。TorchData 提供了三种类型的 ReadingServices:
|
|
默认的ReadingService用于在主进程中提供``DataPipe` 图,并将图设置(如确定性控制)应用到图中。 |
|
从 |
|
每个 ReadingServices 会获取 DataPipe 图并重写它以实现一些功能,如动态分片、共享随机种子和多进程/分布式进程的快照。有关这些功能的更多详细信息,请参阅 文档。
适配器¶
Adapter 用于配置、修改和扩展 DataPipe 图表在 DataLoader2 中。它允许就地修改或替换由 PyTorch 域提供的预组装 DataPipe 图表。例如,可以将 Shuffle(False) 提供给 DataLoader2,这将禁用 shuffle 操作在 DataPipes 图表中的任何操作。
- class torchdata.dataloader2.adapter.Adapter¶
遵循 Python Callable 协议的适配器基类。
- abstract __call__(datapipe: Union[IterDataPipe, MapDataPipe]) Union[IterDataPipe, MapDataPipe]¶
可调用函数,该函数要么对
DataPipe图进行原地修改,要么返回一个新的DataPipe图。- Parameters:
datapipe –
DataPipe需要进行调整。- Returns:
适应的
DataPipe或新的DataPipe。
以下是TorchData在torchdata.dataloader2.adapter中提供的Adapter列表:
Shuffle DataPipes适配器允许控制图表中所有现有的Shuffler( |
|
CacheTimeout DataPipes 适配器允许控制图中所有现有的 EndOnDiskCacheHolder ( |
并且,我们将提供更多 Adapters 以涵盖数据处理选项:
PinMemory: 在数据处理图的末尾附加一个DataPipe,将输出数据转换为torch.Tensor固定内存中的数据。FullSync: 附加一个DataPipe以确保分布式进程之间的数据处理图同步,防止挂起。ShardingPolicy: 如果sharding_filter出现在DataPipe图中,则修改分片策略。PrefetchPolicy,InvalidateCache,等等。
如果您对Adapters有功能请求,希望提供,请在GitHub上打开一个问题。对于特定需求,DataLoader2也接受任何自定义的Adapter,只要它继承自Adapter类。