PAI推出的数据集动态加载服务,可以实现在DSW或DLC训练过程中数据集的按需动态加载与自动汰换,提升资源利用率并保持高效训练。
本功能目前处于邀测阶段,若需要使用该功能请联系您的客户经理(PDSA)。
背景介绍
在大模型训练场景中,AI 数据规模已从 TB 级别迅速扩展至 PB 甚至数十 PB,这带来的存储成本与性能瓶颈的多重挑战。为此,PAI 推出数据集动态加载服务,支持训练过程中数据集的按需动态加载与自动汰换,显著降低存储成本,提升资源利用率,同时保障高效稳定的训练体验。该功能的核心原理是将全量数据集存放于低成本的对象存储OSS,仅在训练需要时,将数据子集动态拉取到高性能CPFS缓存中,从而在不牺牲性能的前提下,极大减少了对高性能存储的容量需求。
应用场景
超大规模数据集:数据集总大小超出 CPFS 存储容量(如 100PB 数据集仅通过 10PB CPFS 缓存训练)。
访问局部性明显:适用于视频、图像、音频、Clip 等具有时空局部性访问模式的大文件或目录数据。
开发体验要求高:无需修改现有数据读取逻辑,兼容原生文件 API,最小化代码改造与学习成本。
技术架构
系统组件
对象存储 OSS:持久化存储原始全量数据集,提供低成本、高可靠的基础存储层。
文件存储 CPFS:作为高性能缓存介质,承载训练任务实时所需的数据子集。
CPFS 数据流动组件:负责根据调度指令,从 OSS 按需拉取数据至 CPFS 缓存。
主要流程

项目代码集成步骤
以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数据集动态加载服务可免费使用,不会额外产生费用。