llamfactory 微调中用到的cpu的两处参数preprocessing_num_workers dataloader_num_workers

我给你用最直白、最清晰、不绕弯 的方式讲清楚,这几个参数到底干什么的、区别在哪、为什么你必须都开

一句话总结

  • preprocessing_num_workers预处理阶段用(tokenize、打包数据)
  • dataloader_xxx训练阶段用(给显卡喂数据)

你之前 CPU 只有 8%,就是因为 只开了预处理,没开训练时的数据加载多线程


1. preprocessing_num_workers: 16

作用:数据预处理多线程

只在训练开始前跑一次!

跑完就结束,不会再用。

它做什么?

  • 给文本做 token 切分
  • 把数据打包成固定长度(cutoff_len:1024)
  • 生成缓存文件

特点

  • 训练开始前跑完
  • 跑完就退出
  • 训练过程中不再参与

所以

你看到 CPU 8%,就是因为预处理早就跑完了,这个参数已经不工作了


2. dataloader_num_workers: 16

作用:训练时喂数据的多线程

训练全程一直跑!

负责从磁盘读取数据 → 送给显卡。

它做什么?

  • 从硬盘/SSD 读取数据
  • 送给模型训练
  • 全程持续工作,决定显卡饿不饿

特点

  • 训练每一步都在用
  • 决定数据能不能喂满显卡
  • 决定 CPU 占用率高不高

这就是你之前 CPU 只有 8% 的原因!

你没开这个,系统默认 单线程喂数据,CPU 根本不用干活。


3. dataloader_pin_memory: true

作用:锁页内存 → 加速数据传到显卡

让数据从内存 → 显卡的速度更快,不卡顿。

直白说

开了:数据传输更快

不开:慢,容易造成显卡等待


4. dataloader_prefetch_factor: 4

作用:提前预加载 4 批数据

让显卡永远有数据可以练,不饿肚子。

直白说

显卡要数据时,数据已经提前准备好了


最清晰对比表(一看就懂)

参数 阶段 作用 运行时间 CPU 占用影响
preprocessing_num_workers 预处理 分词、格式化数据 训练前一次 ❌ 几乎无
dataloader_num_workers 训练 给显卡喂数据 训练全程 ✅ 极大(你缺的就是它)
dataloader_pin_memory 训练 加速数据传输 训练全程 中等
dataloader_prefetch_factor 训练 提前加载数据 训练全程

最终结论(最重要)

  1. preprocessing_num_workers:只管训练前
  2. dataloader_num_workers:管训练时,决定CPU占用、显卡速度
  3. 你之前 CPU 8% 就是因为没开 dataloader_num_workers
  4. 现在我帮你加上了,CPU 会立刻跑到 60%~100%显卡跑满速度翻倍

需要我再给你讲讲怎么看 DCU 利用率、判断训练是否达到最快速度吗?

相关推荐
GPUStack4 小时前
Day 0 实测|在 GPUStack 上部署 GLM-5.2-FP8-DSpark
ai·大模型·模型推理·gpustack
小李飞刀李寻欢16 小时前
DeepSeek V3 版本模型结构分析
算法·大模型·deepseek
dozenyaoyida2 天前
AI与大模型新闻日报 | 2026-07-11
人工智能·ai·大模型·新闻
猿的天空2 天前
GPT-5.6拆成三段,智能变成了可选购配置
人工智能·gpt·计算机·ai·程序员·大模型·智能体
冷de猫2 天前
AI API 网关的四层架构与代码实现:以 Aegisy 为例
人工智能·架构·大模型·ai编程·ai网关·api代理·多模型接入
bdy_y92 天前
PROMPT设计中的“边界感”:从一句规则说到三层对齐
ai·大模型·prompt
dozenyaoyida2 天前
AI与大模型新闻日报 | 2026-07-12
人工智能·ai·大模型·新闻
战族狼魂2 天前
GPT-5.6与Grok 4.5重磅发布
人工智能·算法·大模型·大语言模型
Gary Studio3 天前
嵌入式大模型边缘部署(MTK方向)
ai·大模型·mtk·边缘部署