nvidia.dali.fn.readers.webdataset#

nvidia.dali.fn.readers.webdataset(*, bytes_per_sample_hint=[0], case_sensitive_extensions=True, dont_use_mmap=False, dtypes=None, ext, index_paths=[], initial_fill=1024, lazy_init=False, missing_component_behavior='', num_shards=1, pad_last_batch=False, paths, prefetch_queue_depth=1, preserve=False, random_shuffle=False, read_ahead=False, seed=-1, shard_id=0, skip_cached_images=False, stick_to_shard=False, tensor_init_bytes=1048576, device=None, name=None)#

Webdataset 格式的读取器。

Webdataset 格式是一种提供对存储在 tar 归档中的数据集进行高效访问的方法。

将数据存储在 POSIX tar 归档中,可以极大地加快机械存储设备和网络文件系统上的 I/O 操作,因为它允许操作系统减少 I/O 操作的数量并提前读取数据。

WebDataset 的功能类似于 Tensorflow 的 TFRecord/tf.Example 类,但更容易采用,因为它实际上不需要任何数据转换。数据以与磁盘上完全相同的格式存储在 tar 文件中,并且所有预处理和数据增强代码保持不变。

数据集由一个或多个 tar 归档组成,每个归档进一步拆分为样本。一个样本包含一个或多个组件,这些组件对应于归档中包含的实际文件。属于特定样本的组件按文件名(不带扩展名)聚合(有关扩展名的详细信息,请阅读下面 ext 参数的描述)。请注意,文件名以点开头以及不是常规文件的条目将不会被加载。

除了包含数据的 tar 归档之外,每个归档都应附带相应的索引文件。索引文件可以使用专用脚本生成

<path_to_dali>/tools/wds2idx.py <path_to_archive> <path_to_index_file>

如果未提供索引文件,则将自动从 tar 文件中推断出来。但请记住,这会为大型数据集增加相当多的启动时间。

索引文件的格式为

v1.2 <num_samples>
<component1_ext> <component1_data_offset> <component1_size> <component2_ext> <component2_data_offset> <component2_size> ...
...

基于 webdataset/webdataset

支持的后端
  • ‘cpu’

关键字参数:
  • bytes_per_sample_hint (int 或 int 列表, 可选, 默认值 = [0]) –

    输出大小提示,以字节/样本为单位。

    如果指定,则位于 GPU 或页锁定主机内存中的操作算子的输出将被预先分配,以容纳此大小的样本批次。

  • case_sensitive_extensions (bool, 可选, 默认值 = True) –

    确定通过 ext 提供的扩展名是否应区分大小写。

    允许在 ext 参数以及 webdataset 容器中混合大小写。例如,当关闭此选项时:jpg、JPG、jPG 应该都可以工作。

    如果扩展字符不能表示为 ASCI,则关闭此选项的结果是未定义的。

  • dont_use_mmap (bool, 可选, 默认值 = False) –

    如果设置为 True,则 Loader 将使用普通文件 I/O,而不是尝试将文件映射到内存中。

    当访问本地文件系统时,映射提供了一定的性能优势,但大多数网络文件系统不提供最佳性能。

  • dtypes (DALIDataTypeDALIDataType 列表,可选) –

    各个输出的数据类型。

    默认输出数据类型为 UINT8。但是,如果设置,则应指定每个输出数据类型。此外,应构造 tar 文件,使其仅输出字节大小可被数据类型大小整除的样本。

  • ext (strstr 列表) –

    为生成的每个输出设置扩展名。

    扩展名集的数量决定了读取器的输出数量。组件的扩展名被计算为文件中第一个点后的文本(不包括以点开头的样本)。不同的扩展名选项应以分号 (“;”) 分隔,并且可以包含点。

    示例:“left.png;right.jpg”

  • index_paths (str 或 str 列表, 可选, 默认值 = []) –

    与各个 webdataset 归档对应的索引文件列表。

    必须与 paths 参数的长度相同。如果未提供,则将自动从 webdataset 归档中推断出来。

  • initial_fill (int, 可选, 默认值 = 1024) –

    用于洗牌的缓冲区大小。

    如果 random_shuffle 为 False,则忽略此参数。

  • lazy_init (bool, 可选, 默认值 = False) – 仅在第一次运行时解析和准备数据集元数据,而不是在构造函数中。

  • missing_component_behavior (str, 可选, 默认值 = ‘’) –

    指定在样本中没有与特定输出对应的任何文件时该怎么做。

    可能的行为
    • “empty”(默认)- 在这种情况下,未设置的输出将只包含一个空张量

    • “skip” - 在这种情况下,将跳过整个样本(除了减少归档缓存外,对性能没有影响)

    • “error” - 在这种情况下,将引发异常并且执行停止

  • num_shards (int, 可选, 默认值 = 1) –

    将数据划分为指定数量的部分(分片)。

    这通常用于多 GPU 或多节点训练。

  • pad_last_batch (bool, 可选, 默认值 = False) –

    如果设置为 True,则通过重复最后一个样本来填充分片。

    注意

    如果各个分片之间的批次数量不同,则此选项可能会导致将一整批重复样本添加到数据集中。

  • paths (strstr 列表) –

    webdataset 归档的(一个或多个)路径列表。

    必须与 index_paths 参数的长度相同。

  • prefetch_queue_depth (int, 可选, 默认值 = 1) –

    指定内部 Loader 要预取的批次数量。

    当 pipeline 受 CPU 阶段限制时,应增加此值,以内存消耗换取与 Loader 线程更好的交错。

  • preserve (bool, 可选, 默认值 = False) – 即使操作算子的输出未使用,也阻止将其从图中删除。

  • random_shuffle (bool, 可选, 默认值 = False) –

    确定是否随机洗牌数据。

    使用大小等于 initial_fill 的预取缓冲区按顺序读取数据,然后随机选择样本以形成批次。

  • read_ahead (bool, 可选, 默认值 = False) –

    确定是否应预读访问的数据。

    对于 LMDB、RecordIO 或 TFRecord 等大型文件,此参数会减慢第一次访问速度,但会减少所有后续访问的时间。

  • seed (int, 可选, 默认值 = -1) – 随机种子;如果未设置,将自动分配一个。

  • shard_id (int, 可选, 默认值 = 0) – 要读取的分片索引。

  • skip_cached_images (bool, 可选, 默认值 = False) –

    如果设置为 True,则当样本在解码器缓存中时,将跳过加载数据。

    在这种情况下,加载器的输出将为空。

  • stick_to_shard (bool, 可选, 默认值 = False) –

    确定读取器是否应坚持数据分片而不是遍历整个数据集。

    如果使用解码器缓存,它可以显着减少要缓存的数据量,但可能会影响训练的准确性。

  • tensor_init_bytes (int, 可选, 默认值 = 1048576) – 每个图像要分配多少内存的提示。