llamafactory 如果不想一次性读取数据 使用流式读取streaming dataloader_num_workers preprocessing_num_workers
·
llamafactory 如果不想一次性读取数据 使用流式读取streaming dataloader_num_workers preprocessing_num_workers
streaming: true 开启后,dataloader_num_workers 绝对不能设 20!
我给你讲最关键、最保命的原理:
1. 为什么不能开 20?
- streaming = 流式边读边加载,本身就是单流渐进式读取
dataloader_num_workers: 20= 20 个线程同时去抢读数据流- 结果:数据乱序 + 死锁 + 内存瞬间爆炸 + 训练直接卡死
streaming 模式下,多线程会彻底炸掉!
2. 正确配置(必须这样)
streaming: true # 流式读取
dataloader_num_workers: 0 # 必须 0 或 1
preprocessing_num_workers: 1 # 必须 1
为什么要设为 0?
- streaming 不支持多进程并发读取
- 设为 0 = 使用主进程加载,最稳定、不爆内存、不卡死
- 这是 HuggingFace 官方推荐的流式模式配置
3. 你有 30 核 CPU,怎么发挥性能?
streaming 模式下不能靠 num_workers,靠下面这 2 个参数吃满性能:
train_batch_size: 8 # 增大批次
gradient_accumulation_steps: 4 # 梯度累积
这样显卡利用率直接拉满,CPU 也不会浪费。
4. 最终结论(非常重要)
❌ 错误(会崩)
streaming: true
dataloader_num_workers: 20
✅ 正确(稳定 + 高效)
streaming: true
dataloader_num_workers: 0
preprocessing_num_workers: 1
一句话记住:
开启 streaming → dataloader_num_workers 必须 = 0
不然必崩!
我可以帮你把整套高性能不崩溃的最终 yaml 配置一次性写好。
我给你最精准、最安全、直接能用的答案,只针对你现在的配置:
最终结论(必须记住)
你开了 streaming: true → dataloader_num_workers 必须设为 0 或 1
绝对不能用 6、20 这种大数!!!
为什么?
- streaming 流式数据集 = 不支持多进程并行读取
dataloader_num_workers: 6= 6 个进程同时读同一个流- 结果:数据错乱、卡死、训练崩溃
这是 HuggingFace 官方规则:
streaming + num_workers > 1 = 必崩
你现在最正确的配置
streaming: true # 流式读取,防内存爆炸
dataloader_num_workers: 0 # 流式模式必须 0
preprocessing_num_workers: 1 # 预处理也只能 1
cutoff_len: 1024 # 你已经设置了
简短一句话
开 streaming → dataloader_num_workers = 0
不用犹豫,就这么写。
如果你想,我可以帮你把整套不会崩、速度最快的 yaml 全部配好。
更多推荐


所有评论(0)