最通俗的语言详细解释一下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

  • 分布式:每个进程/卡处理一部分数据,最后合并结果

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐