ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

第 4 篇:并行:4 个工人 ≠ 快 4 倍(零门槛入门系列)

第 4 篇:并行:4 个工人 ≠ 快 4 倍(零门槛入门系列) 上一篇第 3 篇《权重文件的解剖》 下一篇第 5 篇《为什么要量化》一句话导读把活分给 W 个人总时间由最慢的那块加上分配与收尾的固定开销决定所以人越多不一定越快。关键词并行、工人数、切块、固定开销、拐点前面三篇都在讲数字怎么放。可一个权重文件动辄几十亿个数一个人是搬不完的。这一篇算一算多叫几个人来这笔账为什么 4 个工人不等于快 4 倍。① 一句话概念总时间 最慢的那块 每次都要付的固定开销。② 起点四个人搬 100 箱货仓库里堆着 100 箱货你叫来 4 个朋友帮忙搬到另一头。开工前你得先把规矩讲清楚谁负责哪几箱、搬到哪、码成什么样。讲规矩这几分钟4 个人都站着听没人搬东西。讲完4 个人同时开干——但箱子没搬完之前谁也不能走。如果你的分法是每人 25 箱理论上应该同时结束可实际上总会有人分到的箱子更沉、走的路更远另外 3 个人就只能站在终点等他把最后一箱放好。等所有人都搬完你还得清点总数、签个字——这又是大家都得干等着的一段。那叫 8 个人会更快吗不一定规矩要多讲一会儿人一多还容易撞在一起互相让路。所以人越多越快只在人少的时候成立人一多反而变成人越多越乱。③ 伪代码切块 → 付开销 → 一起干 → 等齐函数 并行做(任务, 工人数 W) - 结果: 块 把任务切成 W 份 # 切不均时最大的一块说了算 付一次固定开销 # 派活、讲解、收尾都算在这里 同时 让 W 个工人在自己那块上干活 等所有人结束 # 谁也不能提前走 - 把 W 份结果拼起来 总时间 ≈ 最大块耗时 固定开销把四档工人数摊在同一张时间轴上就是如图 1 所示的对比。图 1W 个工人的时间条最慢的那块决定总时间竖着排了四行从上到下是 W 1、2、4、8每一行最左边是一段灰色的开销派活、讲解、收尾它随人数增加而变宽右边是彩色的工作块每行的开销 工作块总宽不变只是被切成的块数不同人越多每块越窄每行右端那块斜纹区域标着空闲——它在等最慢的那个人人越多剩得越多。逐行要点把任务切成 W 份切法是并行parallel的全部难点。切得平均大家同时收工切不平均结局由最慢的一块决定——快的人省下的时间不会退给你。付一次固定开销固定开销overhead是开始干活之前和干完之后的那部分花费派活、交代、对账。它不随任务变小而变小所以任务太小反而更慢。让 W 个工人在自己那块上干活这里的工人就是常说的线程thread。本篇不关心它叫什么只关心两件事几个人、干多少。等所有人结束这是并行的规矩——一轮里必须等齐。谁也不能先走否则拼回来的结果就是残的。总时间 ≈ 最大块耗时 固定开销这一行是全文的核心公式。想更快只有一条路让最大块更小。而固定开销是地板它决定再多人也快不过某个上限。④ 纸笔实验必做设定100 个任务每个任务耗时 1 个时间单位。请按 W 1、2、4、8、16、32 均分算出总时间并找出拐点。先只算固定开销 2总时间 向上取整(100 ÷ W)块大小 2。W每块任务数总时间110010225052425278131516793246你会发现没有拐点人越多永远越快。这说明固定开销是常数这个模型是假的——现实里开销会随着人数增长规矩要多讲几遍、人要互相让路、收尾要多对几笔账。换一个更真实的模型固定开销 2全队一起付的部分 每人 1各自听指令、各自对账。于是总时间 向上取整(100 ÷ W) 2 1 × WW每块任务数固定开销总时间11002 11032502 2544252 4318132 8231672 16253242 3238预期结果拐点在 W 8 附近。W 从 1 加到 8总时间从 103 降到 23再加到 16 反而升到 25加到 32 更差。这里要诚实一点W 8 只是我们采样的这 6 个点里的最低处换成连续模型去解真正的最小点还会更靠后一些。结论加速不是免费的它靠分摊工作换来却要按人数交固定开销——工作块变小带来的收益、与按人数交的开销两者相等的地方就是该停手的地方越过它多一个人就多亏一点。可选 REPL 版任意语言直接跑任务数, 全队开销, 每人开销 100, 2, 1 def 总时间(W): 块 向上取整(任务数 / W) 返回 块 全队开销 每人开销 * W 对每个 W 于 [1, 2, 4, 8, 16, 32]: 打印(W, 总时间(W))预期输出的最小值出现在 W 8 那一行23。⑤ 进阶锚点进阶锚点本篇概念在《30 天手搓推理引擎》Day 4里被真正实现——4-1 为什么换掉 OpenMP线程唤醒与亲和vllm_tp 设计/4-2 vllm_tp_parfor调用线程也干活/4-3 核绑定实验为什么工程文档叮嘱勿设 8 线程。入门版到这里就够了进阶版会多出自研线程池怎么把固定开销压下来唤醒方式与亲和性、为什么发起任务的那个线程自己也下场干活能少一份开销、以及真实的线程档位曲线读数来自仓库 docs 报告口径。想动手 → 仓库https://gitee.com/pei-xiaoguang/kestrel-llm从 Day 1 开始。本篇那个拐点在进阶 Day 4 会变成一张真实的实测曲线。下篇预告工人再多也得把要搬的数字先变小——否则大家的时间全花在搬运上。第 5 篇讲量化。
返回列表