问题描述
由于显卡性能不强,微调模型时会报以下错误,GPU 内存或系统内存不足,尤其在处理大规模数据或大模型时,子进程因内存溢出崩溃。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "G:\project\LLaMA-Factory\src\llamafactory\data\converter.py", line 420, in align_dataset return dataset.map(
^^^^^^^^^^^^^^^
File "C:\Python312\Lib\site-packages\datasets\arrow_dataset.py", line 557, in wrapper out: Union["Dataset", "DatasetDict"] = func(self, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python312\Lib\site-packages\datasets\arrow_dataset.py", line 3166, in map for rank, done, content in iflatmap_unordered(
File "C:\Python312\Lib\site-packages\datasets\utils\py_utils.py", line 713, in iflatmap_unordered raise RuntimeError(
RuntimeError: One of the subprocesses has abruptly died during map operation.To debug the error, disable multiprocessing.
解决思路
我们可以调整 LLaMA Factory 训练命令中 --preprocessing_num_workers。
该参数指定了数据预处理时使用的进程/线程数量。默认情况下为 0,意味着所有数据预处理工作都在主线程中串行执行;设置为正数时,框架会启动相应数量的 worker 进程/线程,同时对不同批次的数据集进行预处理,充分利用 CPU 多核资源。
实际效果:
- 加速数据预处理:对于大尺寸数据集,多 worker 并行处理能显著减少数据加载和预处理的耗时。
- 资源占用注意:worker 数量并非越多越好。如果设置的数值超过 CPU 核心数,会导致进程切换开销增大;过多的 worker 还会占用更多内存,可能引发 OOM(内存溢出)。
实用建议:
- 推荐设置值:通常设为你的 CPU 物理核心数,或核心数的 1-2 倍。
- 调试阶段:如果出现数据加载报错,可以先将该值设为 0(单线程)排查问题。
- 内存敏感场景:如果数据集样本长、内存紧张,适当降低该值(比如 8 或 4)。
解决办法
- 在 LLaMA Factory 界面点击'预览命令'查看当前命令,找到
--preprocessing_num_workers参数。 - 停止之前运行的网页版 llamafactory-cli webui 进程。
- 将命令复制到命令行工具(cmd)执行,并将
--preprocessing_num_workers的值改小(例如改为 1 或 4)。


