矿工的云 书架

第 02 章 / 共 14 章

第二章 · 老牌云为什么不够用

先记住一件事:AWS 是为"一百万个小房客"造的

你去 AWS、Azure、GCP 租机器,本质上是在租一间公寓里的一个房间。这三朵老牌云(hyperscaler,指亚马逊 AWS、微软 Azure、谷歌 GCP 这三家规模最大的通用云),从第一天起就不是为"训练大模型"设计的。它们的设计目标是:让几百万个互不认识的租户,同时在同一批物理服务器上跑各自的小活儿,谁也别撞到谁,账单还得算得清清楚楚。

这批小活儿是什么?是一个卖鞋的网站、一个记账 App 的后端、一段定时跑的报表脚本、一个公司内网的文件服务。它们有三个共同点:单个用得不多、来的时候一阵一阵、而且彼此毫无关系。AWS 这套架构里的每一个聪明设计,都是冲着"伺候好这一百万个小房客"去的。可一旦你把它拿来跑一个要几千张卡拧成一台超级计算机的训练任务,这些聪明设计就一条条变成了绊脚石。这一章就把这几条绊脚石一根根拆开看。

绊脚石一:它把机器"切碎了卖"

老牌云的核心生意,是虚拟机(virtual machine,简称 VM,指用软件把一台物理服务器切成好几台"假装独立"的电脑,每台跑不同租户的活儿)。一台物理服务器有 128 个 CPU 核、几百 GB 内存,云厂商用一层叫虚拟化管理器(hypervisor,夹在真实硬件和虚拟机之间的一层软件,负责把一台真机切成好几台假机、并分配谁用多少)的软件,把它切成十几台、几十台小虚拟机,分给不同的人。

说人话:一栋楼,房东不整栋租,而是隔成一间间小卧室分开租。这样房子不会空着,每间都能收租,房东赚得最多。云厂商干的就是这个——把大铁块切小,卖给尽量多的人。

这层切分不是免费的。每一次虚拟机里的程序想碰一下真实硬件——读网卡、写硬盘、访问显卡——都要经过 hypervisor 这个中间人翻译一道。对跑网站来说,这点开销无所谓,网站本来就慢。但训练大模型时,成千上万张卡每秒要交换海量数据,中间多一道软件翻译,就是实打实的税。所以后来连 AWS 自己都不得不推出裸金属(bare metal,指不切虚拟机、把整台物理服务器原封不动租给你一个人,中间没有 hypervisor 这层)机型——等于承认:"这活儿,我那套切分帮倒忙。"

绊脚石二:它默认"超卖"

老牌云还有一个赚钱法宝叫超卖(overcommit / oversubscription,指卖出去的资源总量比实际拥有的还多,赌大家不会同时全用满)。这跟航空公司超售机票、健身房卖出远超容量的会员卡是同一个道理:因为绝大多数房客大部分时间是闲着的。

你租了 4 个 CPU 核,但你的网站半夜没人访问,这 4 个核就闲着。云厂商精得很,它把这些闲着的核偷偷匀给别的租户用。100 个租户各买 4 核,物理上可能只配了 200 核而不是 400 核——赌的就是没人会同时满载。对跑网站的人来说这没被察觉,因为你要用的时候通常刚好有空闲核可借。

可这套赌博碰上 AI 训练就崩了。训练任务的特征恰恰是"所有卡、所有核,从头到尾 100% 满载,一跑就是好几周。"它没有"闲着的时候"可供偷借。更糟的是,它会撞上吵闹的邻居(noisy neighbor,指跟你共用同一台物理机的另一个租户突然大量占用资源,把你的性能拖慢)——你旁边那个租户一使劲,你的任务就卡一下。对网站,卡一下就是页面慢半秒,没人在意;对一个几千张卡的训练,任何一张卡慢一拍,整台超算都得停下来等它。

为什么"等最慢那一个"是致命的

这里要讲清楚训练和跑网站在数学上的根本区别,这是全章最关键的一点。

跑网站是各干各的:一百万个用户的请求互不相干,这个慢了不影响那个,整体快慢是"平均值"。而训练大模型是一起干一件事:几千张 GPU 算的是同一个模型,每算完一小步,所有卡都要停下来,把各自算出的结果凑到一起对一遍账,再一起走下一步。这个"对账"动作叫全归约(all-reduce,指把成千上万张卡各自算出的梯度数字加总平均、再发回每张卡,让大家保持同一个模型),它每秒要发生成千上万次。

打个比方:一千个人抬一根巨长的钢梁走路,必须齐步。每走一步就要喊一次"预备——起",所有人同时迈脚。只要有一个人慢半拍,整根钢梁就得停下来等他。一千个人的速度,不取决于最快的人,也不取决于平均速度,而取决于最慢的那一个

工程上这叫"被长尾拖死":整个训练的节奏,由最慢的那张卡、最慢的那一次数据传输决定。老牌云那套"平均够用就行、偶尔卡一下没关系"的哲学,在这里是灾难——因为你不是要平均快,你是要没有任何一次慢。超卖、共享、多租户,每一个都在给"最慢的那一次"添概率。

绊脚石三:它的网络是为"发消息"造的,不是为"抬钢梁"造的

让几千张卡齐步,最吃的是卡与卡之间的网络。老牌云的机房网络,是按互联网的思路建的以太网(Ethernet,我们平时上网用的那套网络技术,靠一层层软件打包、转发数据):它的设计目标是"让海量互不相干的小消息各自找到路",容忍偶尔堵车和重发,因为网页慢一下无所谓。

训练要的是另一种东西:InfiniBand(一种专为超级计算机设计的高速网络,让一张卡能几乎不经过 CPU、直接把数据塞进另一张卡的内存里)。差别有多大?在满负载、大家同时抢路的最坏情况下,InfiniBand 能把延迟稳定压在大约 1 微秒(百万分之一秒)级别;而普通以太网一旦堵车,延迟可能从 1 微秒飙到 50 微秒以上——差的不是一两倍,是几十上百倍。回到抬钢梁:喊口令的人如果偶尔卡壳几十倍时间,一千个人根本没法齐步。

老牌云不是造不出 InfiniBand,而是它整个机房的物理布局、布线、交换机,都是围绕"多租户、按虚拟机切、灵活调度"这套逻辑铺的。要把成千上万张卡用 InfiniBand 拧成一整台机器,你得从机柜怎么摆、线怎么走、电怎么供,全部重来一遍。这不是打个补丁能解决的,是地基问题。

于是就"又慢、又贵、又别扭"

把上面几条合起来,就明白为什么老牌云在这波算力荒里显得笨重:

这里有个反直觉的点值得强调:不是老牌云技术不行,恰恰是它们太成功了。正因为把"多租户、超卖、按虚拟机切"这套打磨到了极致、赚得盆满钵满,它们的每一寸设计都长成了那个形状。而 AI 训练要的是几乎相反的形状:单租户独占、绝不超卖、整机裸金属、用超算网络焊成一台机器。让一个为"一百万个小房客"优化到骨子里的系统,回头去伺候"一个要独占整栋楼的巨人",不是调个参数的事,是逆着它十几年的肌肉记忆来。

缝隙就在这里裂开了。有人需要"一整台超算",而老牌云只会卖"一间间小卧室"。谁能把裸金属整机、InfiniBand、独占不超卖这套东西直接做成产品端上来,谁就接得住这波需求——那是下一章的主角,一种和老牌云长得完全不一样的新动物。至于它凭什么长成那样、又是谁最先练出了这身本事,后面几章再说。

矿工的云 · sissi
面向对世界有好奇心的人 · 费曼式写法 · 由多个 AI 代理撰写与互相审校