LLaMA-Factory Streaming 模式
2025-07-30
LLaMA-Factory
00

目录

Streaming 模式的优势
1. 内存效率
2. 大数据集处理能力
3. 实时数据处理
4. 快速启动
Streaming 模式的限制和约束
1. 必须使用 --max_steps
2. 与 --max_samples 不兼容
3. 与 --tokenized_path 冲突
4. 验证集大小限制
核心参数详解
1. --streaming
2. --buffer_size
3. --max_steps
使用场景和最佳实践
1. 适用场景
大数据集训练
实时数据训练
内存受限环境
常见问题和解决方案
1. 错误:Please specify max_steps in streaming mode
2. 错误:max_samples is incompatible with streaming
3. 错误:Turn off streaming when saving dataset to disk
4. 性能问题:训练速度慢

llamafactory/hparams/data_args.py

个人感觉,不太好用,我还没到达使用这个的场景。随便看看Streaming 模式。

Streaming 模式的优势

1. 内存效率

  • 传统模式:整个数据集加载到内存,可能占用数GB内存
  • Streaming 模式:只加载当前批次的数据,内存占用恒定且可控

2. 大数据集处理能力

  • 支持TB级别的数据集训练

3. 实时数据处理

  • 支持动态更新的数据集
  • 适合在线学习和增量训练场景

4. 快速启动

  • 无需等待整个数据集加载完成
  • 训练可以立即开始

Streaming 模式的限制和约束

1. 必须使用 --max_steps

从代码验证逻辑可以看出:

python
展开代码
# src/llamafactory/hparams/parser.py 第 247 行 if training_args.max_steps == -1 and data_args.streaming: raise ValueError("Please specify `max_steps` in streaming mode.")

原因:Streaming 模式下无法预知数据集的总长度,因此无法基于 epoch 数量来控制训练时长。

2. 与 --max_samples 不兼容

python
展开代码
# src/llamafactory/hparams/data_args.py 第 175 行 if self.streaming and self.max_samples is not None: raise ValueError("`max_samples` is incompatible with `streaming`.")

原因max_samples 需要预先知道数据集大小来截取样本,而 streaming 模式下无法预知总大小。

3. 与 --tokenized_path 冲突

python
展开代码
# src/llamafactory/data/loader.py 第 350 行 if data_args.streaming: raise ValueError("Turn off `streaming` when saving dataset to disk.")

原因:保存预处理后的数据集需要完整的数据集,这与 streaming 的逐批处理理念冲突。

4. 验证集大小限制

python
展开代码
# src/llamafactory/hparams/data_args.py 第 173 行 if self.streaming and self.val_size > 1e-6 and self.val_size < 1: raise ValueError("Streaming mode should have an integer val size.")

原因:Streaming 模式下验证集大小必须是整数,不能是小数比例。

核心参数详解

1. --streaming

  • 类型:布尔值
  • 默认值False
  • 作用:启用流式数据处理模式

2. --buffer_size

  • 类型:整数
  • 默认值16384
  • 作用:控制数据流中的缓冲区大小,用于随机采样
python
展开代码
# src/llamafactory/data/data_utils.py 第 95 行 if data_args.streaming: dataset = dataset.shuffle(buffer_size=data_args.buffer_size, seed=seed)

3. --max_steps

  • 类型:整数
  • 默认值-1
  • 作用:在 streaming 模式下必须指定,控制训练步数

使用场景和最佳实践

1. 适用场景

大数据集训练

bash
展开代码
llamafactory-cli train \ --streaming \ --max_steps 50000 \ --dataset_dir /path/to/large/dataset \ --per_device_train_batch_size 4 \ --gradient_accumulation_steps 8

实时数据训练

bash
展开代码
llamafactory-cli train \ --streaming \ --max_steps 10000 \ --dataset_dir /path/to/streaming/data \ --buffer_size 8192

内存受限环境

bash
展开代码
llamafactory-cli train \ --streaming \ --max_steps 20000 \ --per_device_train_batch_size 2 \ --gradient_accumulation_steps 16

常见问题和解决方案

1. 错误:Please specify max_steps in streaming mode

解决方案:添加 --max_steps 参数

bash
展开代码
--streaming \ --max_steps 20000

2. 错误:max_samples is incompatible with streaming

解决方案:移除 --max_samples 参数,使用 --max_steps 控制训练时长

3. 错误:Turn off streaming when saving dataset to disk

解决方案:选择以下方案之一:

  • 移除 --streaming,保留 --tokenized_path
  • 移除 --tokenized_path,保留 --streaming

4. 性能问题:训练速度慢

解决方案

  • 增加 --per_device_train_batch_size
  • 减少 --gradient_accumulation_steps
  • 调整 --buffer_size
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!