数据集动态加载服务支持在 DSW 或 DLC 训练过程中按需加载和自动汰换数据,无需将全量数据集存放在高性能存储中,从而降低存储成本并保持高效训练。
本功能目前处于邀测阶段,如需使用请联系您的客户经理(PDSA)。
背景介绍
大模型训练场景中,AI 数据规模已从 TB 级扩展至 PB 甚至数十 PB,带来存储成本与性能瓶颈的双重挑战。数据集动态加载服务的核心原理是:将全量数据集存放于低成本的对象存储 OSS,仅在训练需要时将数据子集动态拉取到高性能 CPFS 缓存中,在不牺牲性能的前提下大幅减少高性能存储的容量需求。
应用场景
-
超大规模数据集:数据集总大小超出 CPFS 存储容量(如 100 PB 数据集仅通过 10 PB CPFS 缓存训练)。
-
访问局部性明显:适用于视频、图像、音频等具有时空局部性访问模式的大文件数据。
-
开发体验要求高:无需修改现有数据读取逻辑,兼容原生文件 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 数据集动态加载服务免费使用,不会额外产生费用。