数据集动态加载服务

PAI推出的数据集动态加载服务,可以实现在DSWDLC训练过程中数据集的按需动态加载与自动汰换,提升资源利用率并保持高效训练。

说明

本功能目前处于邀测阶段,若需要使用该功能请联系您的客户经理(PDSA)。

背景介绍

在大模型训练场景中,AI 数据规模已从 TB 级别迅速扩展至 PB 甚至数十 PB,这带来的存储成本与性能瓶颈的多重挑战。为此,PAI 推出数据集动态加载服务,支持训练过程中数据集的按需动态加载与自动汰换,显著降低存储成本,提升资源利用率,同时保障高效稳定的训练体验。该功能的核心原理是将全量数据集存放于低成本的对象存储OSS,仅在训练需要时,将数据子集动态拉取到高性能CPFS缓存中,从而在不牺牲性能的前提下,极大减少了对高性能存储的容量需求。

应用场景

  • 超大规模数据集:数据集总大小超出 CPFS 存储容量(如 100PB 数据集仅通过 10PB CPFS 缓存训练)。

  • 访问局部性明显:适用于视频、图像、音频、Clip 等具有时空局部性访问模式的大文件或目录数据。

  • 开发体验要求高:无需修改现有数据读取逻辑,兼容原生文件 API,最小化代码改造与学习成本。

技术架构

系统组件

  • 对象存储 OSS:持久化存储原始全量数据集,提供低成本、高可靠的基础存储层。

  • 文件存储 CPFS:作为高性能缓存介质,承载训练任务实时所需的数据子集。

  • CPFS 数据流动组件:负责根据调度指令,从 OSS 按需拉取数据至 CPFS 缓存。

主要流程

image.png

项目代码集成步骤

DLC训练任务为例,通过数据集挂载的方式将CPFS挂载路径至/mnt/data/

1. 初始化数据集文件预加载客户端

在训练进程启动时,创建 DatasetFileLoaderClient 实例,完成上下文初始化:

import os
from dataset_file_loader import DatasetFileLoaderClient
from dataset_file_loader.model import DatasetFile

worker_id = int(os.environ.get('LOCAL_RANK', 0))  # 获取当前 Worker ID

client = DatasetFileLoaderClient(
    worker_id=worker_id,
    cpfs_mount_path="/mnt/data/",                   # 与训练任务一致的 CPFS 挂载路径
    persistence_file_path=".dataset_file_persistence/task_1/",  # 持久化元数据路径
    preload_request_buffer_size=20                  # 预加载缓冲区大小(建议 10–50)
)
说明
  • worker_id 需与分布式训练框架中的本地 rank 保持一致(如 PyTorch 的 LOCAL_RANK)。

  • cpfs_mount_path 和 persistence_file_path 必须与预加载服务配置完全一致。

2. 上报预加载需求(数据使用前)

在数据采样阶段,提前批量上报即将使用的文件路径,预加载数据文件:

# 查询当前可预加载的配额(避免过载)
quota = client.get_preload_dataset_files_quota(index)

for _ in range(quota):
    client.preload_dataset_file(
        DatasetFile(
            dataset_file_path=file_path, # 预加载的OSS文件夹(文件)相对路径
            sampler_index=index # 采样器索引
        )
    )

3. 标记数据使用状态(开始使用数据)

当实际读取某个数据集文件时,主动通知系统“开始使用”:

client.active_dataset_file(
    DatasetFile(
        dataset_file_path=file_path, # 预加载的OSS文件夹(文件)相对路径
        sampler_index=index # 采样器索引
    )
)

4. 释放数据资源(数据使用完毕)

完成数据读取后,立即释放对应资源,通知系统可安全清理缓存以腾出空间:

client.release_dataset_file(
    DatasetFile(
        dataset_file_path=file_path, # 预加载的OSS文件夹(文件)相对路径
        sampler_index=index # 采样器索引
    )
)

计费说明

当前PAI数据集动态加载服务可免费使用,不会额外产生费用。