目录

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 图形 基于 ReadingServiceAdapter 函数,支持

  • 动态分片以实现多进程和分布式数据加载

  • 多个后端 ReadingServices

  • DataPipe 图像在内存中的局部修改,如重排控制、内存绑定等。

  • 截图数据预处理管道的状态(WIP)

Parameters:
  • datapipe (IterDataPipeMapDataPipe) – 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 将在提供序列化状态以构造时恢复。 DataLoader2finalize_iterator 将分别在迭代开始和结束时调用。

classmethod from_state(state: Dict[str, Any], reading_service: CheckpointableReadingServiceInterface) DataLoader2[T_co]

创建新的 DataLoader2DataPipe 图形和 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.Datasettorch.utils.data.IterableDataset。请将它们中的每一个用对应的 DataPipe 包裹起来:

ReadingService

ReadingService 指定了数据处理图的执行后端。TorchData 提供了三种类型的 ReadingServices

DistributedReadingService

DistributedReadingSerivceDataPipe的图上处理分布式分片,并通过在分布式进程中共享相同的种子来保证随机性。

InProcessReadingService

默认的ReadingService用于在主进程中提供``DataPipe` 图,并将图设置(如确定性控制)应用到图中。

MultiProcessingReadingService

DataPipe图中加载数据,生成多个工作进程。

SequentialReadingService

每个 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:

datapipeDataPipe 需要进行调整。

Returns:

适应的 DataPipe 或新的 DataPipe

以下是TorchData在torchdata.dataloader2.adapter中提供的Adapter列表:

Shuffle

Shuffle DataPipes适配器允许控制图表中所有现有的Shuffler(shuffle)DataPipes。

CacheTimeout

CacheTimeout DataPipes 适配器允许控制图中所有现有的 EndOnDiskCacheHolder (end_caching) 的超时。

并且,我们将提供更多 Adapters 以涵盖数据处理选项:

  • PinMemory: 在数据处理图的末尾附加一个DataPipe,将输出数据转换为torch.Tensor固定内存中的数据。

  • FullSync: 附加一个 DataPipe 以确保分布式进程之间的数据处理图同步,防止挂起。

  • ShardingPolicy: 如果sharding_filter出现在DataPipe图中,则修改分片策略。

  • PrefetchPolicy, InvalidateCache,等等。

如果您对Adapters有功能请求,希望提供,请在GitHub上打开一个问题。对于特定需求,DataLoader2也接受任何自定义的Adapter,只要它继承自Adapter类。

文档

访问 PyTorch 的全面开发人员文档

查看文档

教程

获取面向初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并解答您的问题

查看资源