根据代码分析,Qwen2VL的数据预处理主要包含以下步骤:
数据加载与转换 (src/llamafactory/data/loader.py:307-313
):
dataset.map()
方法进行批处理preprocessing_batch_size=1000
num_proc=84
(你的配置)多模态内容处理 (src/llamafactory/data/mm_plugin.py:1485-1653
):
图像预处理:
image_max_pixels=768*768
视频处理(如果有):
文本tokenization:
<|vision_start|>
, <|vision_end|>
等)图像处理是CPU密集型操作:
python展开代码# 每张图像都需要执行这些操作
- Image.open() # 文件I/O
- image.resize() # CPU计算
- image.convert("RGB") # 颜色空间转换
批处理效率不高:
多进程开销:
内存访问模式:
bash展开代码# 在训练命令中添加这些参数
--preprocessing_batch_size 100 # 减小批次大小,适合多模态数据
--preprocessing_num_workers 16 # 减少进程数,避免过多开销
python展开代码# 使用LLaMA-Factory的数据预处理功能
llamafactory-cli train \
--stage sft \
--do_train false \
--tokenized_path ./preprocessed_data \
--overwrite_cache true \
# ... 其他参数
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,减少最大帧数
bash展开代码# 设置更大的shared memory
export CUDA_VISIBLE_DEVICES=0,1,2,3
export OMP_NUM_THREADS=8
# 如果使用多GPU,启用数据并行预处理
--dataloader_num_workers 4
基于你的情况(显存80G只用了7G),建议按以下顺序尝试:
立即可尝试的:
bash展开代码--preprocessing_batch_size 50 --preprocessing_num_workers 32 --image_max_pixels 196608
如果仍然慢:
bash展开代码--preprocessing_batch_size 20
--preprocessing_num_workers 16
--image_max_pixels 147456 # 384*384
最激进的优化:
bash展开代码# 先预处理数据
--tokenized_path ./preprocessed_qwen2vl_data
--overwrite_cache true
# 然后使用预处理好的数据训练
--tokenized_path ./preprocessed_qwen2vl_data
预处理慢是多模态模型训练的常见问题,因为图像处理本身就是CPU密集型操作。通过调整这些参数,应该能显著提升预处理速度。
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!