LLaMA Factory 微调时报 disable multiprocessing 错误解决
问题描述
由于显卡性能不足,微调模型时可能报错,提示 GPU 内存或系统内存不足。尤其在处理大规模数据或大模型时,子进程因内存溢出崩溃。
File "G:\project\LLaMA-Factory\src\llamafactory\data\converter.py", line 420, in align_dataset
return dataset.map(
...
RuntimeError: One of the subprocesses has abruptly died during map operation. To debug the error, disable multiprocessing.
解决思路
可通过调整 LLaMA Factory 训练命令中的 --preprocessing_num_workers 参数解决。
--preprocessing_num_workers 是 LLaMA Factory(以及基于 Hugging Face 生态的大模型训练框架)中用于数据预处理阶段的核心参数。
- 核心定义:指定数据预处理时使用的进程/线程数量。默认值为 0,意味着所有数据预处理工作都在主线程中串行执行;设置为 N 时,框架会启动 N 个独立的 worker 进程/线程,同时对不同批次的数据集进行预处理。
- 具体工作机制:充分利用 CPU 多核资源,并行处理训练数据(如加载数据集、分词、格式化、生成 attention mask 等操作)。
- 实际效果:
- ✅ 加速数据预处理:对于大尺寸数据集,多 worker 并行处理能显著减少数据加载和预处理的耗时,避免训练过程中出现'GPU 等数据'的空闲情况。
- ⚠️ 资源占用注意:worker 数量并非越多越好。如果设置的数值超过 CPU 核心数,会导致进程切换开销增大,反而变慢;过多的 worker 还会占用更多内存,可能引发 OOM(内存溢出)。
- 适用场景:仅作用于训练前的数据预处理阶段,训练过程中的计算(如前向/反向传播)仍由 GPU 负责。
- 实用建议:
- 推荐设置值:通常设为 CPU 物理核心数,或核心数的 1-2 倍。
- 调试阶段:如果出现数据加载报错(如 BrokenPipeError),可以先将该值设为 0(单线程)排查问题。
- 内存敏感场景:如果数据集样本长、内存紧张,适当降低该值(比如 8 或 4)。
操作步骤
- 停止当前运行的 WebUI 进程。
- 查看训练命令,找到
--preprocessing_num_workers参数。 - 将参数值改小(例如从 16 改为 4 或 8),以适配当前硬件资源。
- 在命令行中执行修改后的命令。
- 训练完成后,可恢复 WebUI 进程并查看训练参数导出。


