【LLM】终于搞懂了!world_size、batch_size、num_workers、多卡分布式训练...
最通俗的语言详细解释一下world size、batch size、GPU数量等概念之间的关系
1. world size
-
定义:world size 就是参与分布式训练/推理的总进程数,通常等于你用的总GPU数。
-
举例:如果你有2台机器,一台4张GPU,一台3张GPU,总共7张GPU,那么 world size = 7。
2. num workers
-
定义:是指数据加载(DataLoader)时使用的工作线程(worker)数量,主要用于加速数据读取和预处
-
举例:num_workers: 3 表示会有3个子进程同时负责从硬盘读取图片、做预处理、送到主进程。
- 和world size区别
- world size 是总的分布式进程数,通常等于总GPU数
- num_workers 是每个GPU的数据加载子进程数。
3. batch size
-
定义:batch size 是每次送入模型计算的样本数。
有两种情况
-
单卡训练:batch size 就是每次送入这张卡的样本数。
-
多卡分布式训练:有两种说法:
-
local batch size(本地batch size):每张卡/每个进程的batch size。
-
global batch size(全局batch size):所有卡加起来的总batch size。
-
公式:global batch size = local batch size × world size
-
-
4. GPU数量
-
定义:你实际用的物理GPU数量,通常和 world size 一致(每个进程绑定一张GPU)。
-
分布式训练/推理:每个进程负责一部分数据,多个进程/卡并行工作。
5. 它们之间的关系
举例说明
假设你有4张GPU,想用分布式方式做推理或训练:
-
world size = 4(4个进程,每个进程1张卡)
-
local batch size = 32(每张卡每次处理32个样本)
-
global batch size = 32 × 4 = 128(4张卡一共每次处理128个样本)
每个主进程只负责自己那一份数据,最后再把结果合并。
- 每个进程可以再启动多个数据加载子进程(num_workers),这些子进程只负责搬运数据,不负责模型计算。
- 所以:主进程负责模型和GPU,子进程负责数据加载
5. 代码和命令中的体现
假如你用如下命令启动分布式:
torchrun --nproc_per_node=4 your_script.py --batch_size 32
-
这里
--nproc_per_node=4表示 world size = 4 -
--batch_size 32通常指 local batch size -
实际每次全局处理的数据量是 32 × 4 = 128
6. 直观图示

7. 总结
-
num workers:处理数据的子进程数
-
world size:总进程/总GPU数
-
local batch size:每卡/每进程的batch size
-
global batch size:所有卡加起来的总batch size
-
分布式:每个进程/卡处理一部分数据,最后合并结果
更多推荐



所有评论(0)