讲师中心 微信公众号
AI工具推荐 视频效率加速

ShareGPT数据集的分片和并行加载:处理超大数据集时的性能优化方法

陌强大大_9095

陌强大大_9095

发布时间:2026-05-29 18:09:20

|

613人浏览过

|

来源于php中文网

原创

针对ShareGPT超大规模数据集,应采用分片与并行加载优化:一、JSONL按行切分+多进程读取;二、PyTorch DataLoader动态分片;三、mmap+换行符索引随机解析;四、HDFS/S3异步IO流水线;五、Arrow列式投影加速。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

sharegpt数据集的分片和并行加载:处理超大数据集时的性能优化方法

如果您需要处理ShareGPT数据集中的数百万条对话样本,但面临内存溢出、加载缓慢或单线程吞吐瓶颈,则可能是由于原始JSON/JSONL文件未被合理切分与并发读取。以下是针对超大规模ShareGPT数据集实施分片与并行加载的多种性能优化方法:

一、JSONL文件按行分片 + 多进程并行读取

JSONL格式天然适合分片——每行是一个独立JSON对象,可按字节偏移或行号切分为多个子文件,避免解析完整文件带来的内存压力,并利用CPU多核能力提升I/O吞吐。该方法适用于本地磁盘存储且无分布式环境的场景。

1、使用Python计算原始sharegpt.jsonl总行数:
运行命令:wc -l sharegpt.jsonl | awk '{print $1}',记录总行数N。

2、将文件按每50,000行切分为多个子文件:
执行命令:split -l 50000 --numeric-suffixes=1 sharegpt.jsonl sharegpt_part_

3、为每个子文件启动独立进程加载并预处理:
编写multiprocessing.Pool调用函数,对每个sharegpt_part_*文件执行:逐行json.loads()、过滤非法value字段、提取conversations长度≥2的样本。

4、各进程处理完毕后,将结果以pickle或arrow IPC格式暂存,主进程统一合并为Arrow Dataset以支持零拷贝迭代。

二、基于DataLoader的动态分片与分布式采样

当训练流程集成PyTorch时,可绕过静态文件切分,直接在DataLoader中实现逻辑分片与跨GPU节点负载均衡。该方式避免磁盘冗余存储,适配DDP(DistributedDataParallel)训练架构。

1、继承torch.utils.data.IterableDataset类,重写__iter__方法:
在__iter__中打开原始JSONL文件,根据torch.distributed.get_rank()与world_size计算当前进程应读取的起始行偏移与步长。

2、使用linecache.getline()跳转至指定行,避免全量加载:
确保每行JSON结构合法,对value字段含\u0000或嵌套过深的样本执行try-except跳过。

3、在__iter__内部构建生成器,每次yield一个标准化的ShareGPT样本字典:
包含id、conversations(已校验from/value键)、meta(若存在),并强制转换human/gpt角色为Unsloth兼容的user/assistant。

4、初始化DataLoader时设置num_workers=4、persistent_workers=True、prefetch_factor=2,使子进程预取缓冲区维持3–4个batch。

三、内存映射(mmap)+ 随机偏移解析

对于单机超大JSONL文件(如>100GB),传统readline()会因频繁系统调用引发I/O抖动。采用内存映射技术可将文件虚拟地址空间直接映射至用户态,配合预计算的换行符位置索引,实现毫秒级随机行定位。

1、首次扫描原始文件,记录所有换行符\n的字节偏移位置,保存为offsets.bin二进制索引文件:
使用mmap.ACCESS_READ打开文件,遍历字节流查找0x0A,写入64位整型数组。

宝塔Linux面板11.3.0
宝塔Linux面板11.3.0

宝塔面板11.3.0是一款针对Linux服务器设计的可视化管理工具,通过重构核心模块实现资源占用显著降低,尤其适合低配置服务器环境。它将复杂的命令行操作转化为直观的图形界面,帮助开发者快速完成网站部署、环境配置及日常运维工作,无需专业技术背景即可高效管理服务器。

下载

2、加载offsets.bin后,通过numpy.random.choice随机选取偏移,再用mmap[偏移:下一个偏移]截取单行字符串:
该操作不触发物理内存分配,仅建立页表映射。

3、对截取行调用json.loads(),捕获JSONDecodeError并丢弃该行;对conversations字段缺失或长度为0的样本执行continue跳过。

4、将解析后的样本送入torch.tensor缓存池,复用固定大小tensor buffer减少内存碎片,buffer容量设为batch_size × max_seq_len × sizeof(int64)。

四、分布式文件系统分片(HDFS/S3)+ 异步IO流水线

当ShareGPT数据集部署于HDFS或S3等对象存储时,需规避单点NameNode瓶颈与HTTP延迟。通过将数据集预划分为固定前缀的分片路径(如s3://bucket/sharegpt/shard_00001.jsonl),结合异步IO与重叠调度,可实现近线性吞吐扩展。

1、使用fsspec.open_files()批量获取shard_*路径列表,传入aiobotocore或hdfs3异步客户端:
设置max_concurrency=32以控制并发连接数,防止S3限流。

2、为每个shard启动asyncio.create_task(),任务内使用aiofiles.open()以非阻塞模式读取内容:
读取后立即提交至asyncio.Queue,由独立消费者协程执行json.loads()与字段校验。

3、消费者协程将合格样本序列化为msgpack二进制,推入Redis Stream作为中间缓冲区:
设置XADD maxlen=1000000确保内存可控,下游训练进程通过XREADGROUP消费。

4、训练进程启用torch.cuda.Stream()绑定专用CUDA流,对从Redis解包的msgpack数据直接调用torch.frombuffer()转为GPU张量,消除主机内存拷贝。

五、Arrow Dataset分片 + 列式投影加速

将ShareGPT JSONL一次性转换为Apache Arrow IPC格式后,可利用其列式存储与零拷贝特性,在不反序列化整个JSON的前提下,仅投影所需字段(如conversations、id),大幅降低CPU与内存开销。

1、使用pyarrow.json.read_json()加载原始JSONL,自动推断schema:
指定use_threads=True、block_size=64*1024*1024以启用多块并行解析。

2、调用dataset.filter()剔除conversations为空或长度使用pyarrow.compute.list_length(ds.column('conversations')) > 1作为表达式,全程在C++层执行无需Python循环。

3、执行dataset.to_parquet()导出为分片Parquet文件,设置row_group_size=100000、compression='zstd':
zstd压缩比优于snappy且解压速度接近,适合SSD随机读取。

4、加载时使用pyarrow.dataset.dataset(),通过fragments筛选特定row group:
例如只读取conversations字段的第3–5个row group,调用ds.scanner(columns=['conversations'], use_threads=True)。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

相关专题

更多
大数据分析工具有哪四个
大数据分析工具有哪四个

大数据分析的四个工具分别是rapidminer、Hpcc、Hadoop和Pentaho bi。大数据分析用于从各种来源生成的原始数据中提取有价值的数据。这些数据帮助我们获得有意义的见解、隐藏的模式、未知的相关性、市场趋势等等,具体取决于行业。大数据分析的主要动机是提供有价值的见解,以便为未来做出更好的决策。php中文网为大家带来了大数据分析的相关教程、以及相关文章等内容,供大家免费下载使用。

5396

2023.06.21

Java 大数据处理基础(Hadoop 方向)
Java 大数据处理基础(Hadoop 方向)

本专题聚焦 Java 在大数据离线处理场景中的核心应用,系统讲解 Hadoop 生态的基本原理、HDFS 文件系统操作、MapReduce 编程模型、作业优化策略以及常见数据处理流程。通过实际示例(如日志分析、批处理任务),帮助学习者掌握使用 Java 构建高效大数据处理程序的完整方法。

1249

2025.12.08

大数据专业学习教程
大数据专业学习教程

本专题整合了大数据专业学习相关教程,阅读专题下面的文章了解更多详细内容。

243

2026.01.05

python处理大数据合集
python处理大数据合集

本专题整合了python处理大数据相关教程,阅读专题下面的文章了解更多详细内容。

486

2026.01.05

大数据分析工具有哪四个
大数据分析工具有哪四个

大数据分析的四个工具分别是rapidminer、Hpcc、Hadoop和Pentaho bi。大数据分析用于从各种来源生成的原始数据中提取有价值的数据。这些数据帮助我们获得有意义的见解、隐藏的模式、未知的相关性、市场趋势等等,具体取决于行业。大数据分析的主要动机是提供有价值的见解,以便为未来做出更好的决策。php中文网为大家带来了大数据分析的相关教程、以及相关文章等内容,供大家免费下载使用。

5396

2023.06.21

Java 大数据处理基础(Hadoop 方向)
Java 大数据处理基础(Hadoop 方向)

本专题聚焦 Java 在大数据离线处理场景中的核心应用,系统讲解 Hadoop 生态的基本原理、HDFS 文件系统操作、MapReduce 编程模型、作业优化策略以及常见数据处理流程。通过实际示例(如日志分析、批处理任务),帮助学习者掌握使用 Java 构建高效大数据处理程序的完整方法。

1249

2025.12.08

大数据专业学习教程
大数据专业学习教程

本专题整合了大数据专业学习相关教程,阅读专题下面的文章了解更多详细内容。

243

2026.01.05

python处理大数据合集
python处理大数据合集

本专题整合了python处理大数据相关教程,阅读专题下面的文章了解更多详细内容。

486

2026.01.05

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
传智播客AJAX视频教程
传智播客AJAX视频教程

共31课时 | 7.2万人学习

php ajax快速入门视频教程
php ajax快速入门视频教程

共6课时 | 1.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn