LLama-Factory数据预处理
2025-08-02
深度学习
00

目录

训练Qwen2VL模型数据预处理过程分析
预处理过程在做什么
为什么这么慢
如何加速处理
1. 调整预处理参数
2. 预先处理数据
3. 优化图像参数
4. 使用更快的存储
5. 系统级优化
具体优化建议

训练Qwen2VL模型数据预处理过程分析

预处理过程在做什么

根据代码分析,Qwen2VL的数据预处理主要包含以下步骤:

  1. 数据加载与转换 (src/llamafactory/data/loader.py:307-313):

    • 使用HuggingFace的dataset.map()方法进行批处理
    • 默认批次大小:preprocessing_batch_size=1000
    • 使用多进程:num_proc=84(你的配置)
  2. 多模态内容处理 (src/llamafactory/data/mm_plugin.py:1485-1653):

    • 图像预处理

      • 图像尺寸调整(resize操作)
      • 最小像素约束:28x28
      • 宽高比限制:不超过200:1
      • 颜色空间转换为RGB
      • 像素数量控制:默认image_max_pixels=768*768
    • 视频处理(如果有):

      • 视频解码和帧提取
      • 帧数采样:默认2fps,最大128帧
      • 每帧作为图像处理
  3. 文本tokenization

    • 对话消息格式化
    • 特殊token处理(<|vision_start|>, <|vision_end|>等)
    • 序列长度截断

为什么这么慢

  1. 图像处理是CPU密集型操作

    python
    展开代码
    # 每张图像都需要执行这些操作 - Image.open() # 文件I/O - image.resize() # CPU计算 - image.convert("RGB") # 颜色空间转换
  2. 批处理效率不高

    • 默认批次大小1000可能不适合多模态数据
    • 图像处理无法有效利用批处理优化
  3. 多进程开销

    • 84个进程处理图像数据时,进程间通信和内存复制开销很大
    • 每个进程都需要重复加载图像处理库
  4. 内存访问模式

    • 图像数据通常比文本大得多
    • 频繁的内存分配和释放

如何加速处理

1. 调整预处理参数

bash
展开代码
# 在训练命令中添加这些参数 --preprocessing_batch_size 100 # 减小批次大小,适合多模态数据 --preprocessing_num_workers 16 # 减少进程数,避免过多开销

2. 预先处理数据

python
展开代码
# 使用LLaMA-Factory的数据预处理功能 llamafactory-cli train \ --stage sft \ --do_train false \ --tokenized_path ./preprocessed_data \ --overwrite_cache true \ # ... 其他参数

3. 优化图像参数

bash
展开代码
# 降低图像分辨率以加速处理 --image_max_pixels 196608 # 默认是589824 (768*768),降低到448*448 --video_max_pixels 65536 # 默认是65536 (256*256) --video_fps 1.0 # 默认2.0,降低采样率 --video_maxlen 64 # 默认128,减少最大帧数

4. 使用更快的存储

  • 确保数据存储在快速SSD上
  • 如果使用网络存储,考虑增加缓存

5. 系统级优化

bash
展开代码
# 设置更大的shared memory export CUDA_VISIBLE_DEVICES=0,1,2,3 export OMP_NUM_THREADS=8 # 如果使用多GPU,启用数据并行预处理 --dataloader_num_workers 4

具体优化建议

基于你的情况(显存80G只用了7G),建议按以下顺序尝试:

  1. 立即可尝试的

    bash
    展开代码
    --preprocessing_batch_size 50 --preprocessing_num_workers 32 --image_max_pixels 196608
  2. 如果仍然慢

    bash
    展开代码
    --preprocessing_batch_size 20 --preprocessing_num_workers 16 --image_max_pixels 147456 # 384*384
  3. 最激进的优化

    bash
    展开代码
    # 先预处理数据 --tokenized_path ./preprocessed_qwen2vl_data --overwrite_cache true # 然后使用预处理好的数据训练 --tokenized_path ./preprocessed_qwen2vl_data

预处理慢是多模态模型训练的常见问题,因为图像处理本身就是CPU密集型操作。通过调整这些参数,应该能显著提升预处理速度。

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

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