以前最宝贵的资源是黄金,现在最宝贵的资源是算力。

9月13日凌晨,OpenAI官宣发布o1-preview,传说中的“草莓”既带来令人惊异的推理能力,也引起对算力的进一步关注。此前头部玩家已经把模型训练规模卷向10万卡级别,草莓的算力消耗可能还要大上好多倍。于是对有志于从大模型时代掘金的弄潮儿来说,算力问题更加凸显。

一方面,大家要想办法堆高算力资源,另一方面,还需要把有限的算力资源尽可能高效地利用。前者需要巨额的金钱投入,后者则需要精细把控算力调用的各个环节。

同在9月13日,百度做了一场有关大模型训练成本的技术分享,百度智能云AI计算部负责人王雁鹏对大模型时代的算力浪费难题做了一番拆解,并给出了百度百舸怎么把算力利用率提升的应对策略。大模型时代,算力成本是最大成本。即便1%的算力损耗,都会对应一大笔金钱上的损失。而据王雁鹏介绍,目前企业训练大模型的算力有效利用率不足 50%,大量算力被浪费了。

这种情形自然可惜。要怎么提升算力有效利用率,成为拦在大模型玩家面前的一道关卡。大家都要寻找自己的答案。

榨取大模型算力,百度想了一些招

图为百度智能云AI计算部负责人王雁鹏

把算力用起来,很难

大模型时代,“把算力用起来”本身就是一件很难的事。在这背后,是计算范式的变革和与之相伴的技术变迁。

王雁鹏介绍,在早先的CPU通用计算时代,因为CPU有非常复杂的结构,带来了软硬件的完全解耦,软件和硬件可以分别迭代演进。比如升级CPU后,不需要把应用重新适配。CPU性能提升一倍,应用的性能相应也会提升一倍。

之后到了GPU数值加速计算的时代,GPU相当于设计了很多简单粗暴的机械臂,个子小而力气大,但要想全部都用起来很不容易。于是催生了加速库生态,也就是针对不同的应用场景来写加速的软件库。这时候,发挥算力的复杂度从硬件转移到软件。没有软件上很好的配合,算力就不会有好的发挥。

而在当下的AI大集群超算时代,规模本身束缚了算力的发挥。王雁鹏指出,大模型的算法其实没有很多,难点在于,以前一个芯片已经搞定东西,现在需要1万张芯片、10万张芯片去做,当单机技术延展到10万卡的集群,就要有一个极致互连的集群架构。其中涉及高性能的网络、更好的并行策略等技术方案,也需要有更好的容错、恢复能力。

如何高效发挥大集群的算力,正是眼下业内最关注的事情。在王雁鹏看来,有效算力是能耗有效率、单卡算力有效率、并行扩展有效率、有效训练时间、资源利用率等五个环节共同作用的结果,只有在五个维度都作出改善,才能把算力利用率有效提升。

若细分来看,前三项主要涉及硬件本身性能的发挥,后两项则侧重于有限资源的更充分利用。

边降能耗,边提性能

“算力供给比拼的终局是能源供给”。解决算力浪费,首先要改善能耗损失。

这里涉及数据中心的能源效率,具体指标是 PUE(Power Usage Effectiveness)。其含义,可理解为整体电耗与花在芯片上的功耗的比值。PUE越低,意味着数据中心的能源效率就越高。目前业界平均水平大于 1.2,百度云自建数据中心的平均 PUE 则小于 1.1。

这有赖于百度百舸的液冷方案。王雁鹏提到,现在单个GPU的功耗已经超过1000瓦,如果按照传统机房的风冷方案设计,可能会有30%的电力浪费在散热上,并且散热会影响GPU的频率,进而限制其性能发挥。液冷相较于风冷实现一举三得,既减少电力损耗,还可以带来10%的性能提升,同时因为散热均匀、没有风扇震动,可以把机器故障率降低 60%到70%。

单卡算力涉及的指标是 MFU(Model FLOPS Utilization),可理解为有效算法算力与标称理论算力的比值。王雁鹏举例,在大模型上,即便把单机做极致优化,MFU也只能达到70%,也就是发挥七成算力。这受限于前文所说的GPU设计理念,而解决方案,需要在软件层面下功夫。就百度百舸来说,提升单卡算力利用的手段就是基于场景去做算子的加速库。对比英伟达的原生库,由此带来了10%加速库层面的提升。

第三个维度是提升并行扩展有效率,这涉及百度为万卡场景设计的RDMA网络,以及自动并行策略。

在万卡场景,第一个瓶颈点就是网络连接问题。以往备受推崇的IB网络是为HPC(高性能计算)设计,对AI集群并不合适。前者以延迟为第一导向,但AI重视的是吞吐,需要大量数据同步传输。而RDMA网络的优势之一正是高吞吐和高效率。更进一步,百度通过自适应路由等优化,把RDMA网络的带宽有效率从60%提升到95%以上,借此带动大模型性能提升5%到10%。

至于自动并行策略,王雁鹏称其为百度AI大集群最重要的演进范式,其原理是通过自动分析计算任务和计算资源,实现任务在多个计算单元上的合理分配并行执行。这一定程度实现了大模型层面的软硬件解耦。也就是说,在大模型的硬件升级后,模型不需要再做很多适配,就可以直接利用硬件升级带来的好处。

有限硬件的充分利用

优化了单卡性能,提升了集群效能,之后的挑战是,怎么保证AI训练的稳定运行。随着算力规模的提升,故障时间也会变长。

举例而来,如果在千卡规模,AI训练能够在99%的时间稳定运行,只有1%时间浪费。到了万卡规模,有效时间比值就会降低到90%。到了十万卡规模,有效时间可能就会变成0。为了更好地利用算力资源,就需要尽量减少无效训练时间。

拆解来看,既要想办法缩短故障定位的时间,也要要缩短任务恢复时间。关于前者,因为AI训练是同步任务,如果只是某一张卡发生故障,用传统方法很难定位到具体的故障卡。百度的经验是,在通讯库层面加强hang检测、慢节点检测,实现秒级定位。关于后者,百度通过缩减checkpoint时间等,也实现了更快的任务恢复。这些措施结合起来,百度百舸万卡规模的AI训练有效时间提升到了99%以上。

再往后看,算力资源有效利用还涉及一道难关,就是能否用同一集群来支撑多任务的处理。这又可以拆解成多方面的问题。比如,大量微调模型会导致冷热不均,需求是否可以用离线推理来满足,怎么应付从单卡到万卡的不同量级的任务,等等。

百度的应对措施主要有三项,首先,以弹性队列为核心,去设计每一个任务的配合和分配策略。其次,在单机实现多推理混布。此外,为训练任务设置弹性伸缩机制。这样,百度百舸对内对外的资源利用率基本都做到了90%以上。

还是得谈卡脖子

最后,国内大模型还要面对更普遍也更现实的一项挑战,就是算力卡脖子。如果没有足够的芯片资源,那么谈论算力浪费也就失去了意义。

要拿英伟达的卡会面临各种限制,国产卡有各种不同的规格和参数。在算力受限的情况下,大模型厂商要想办法把有限的卡聚合起来,充分利用。

百度的解法是,在大模型套件中设置能够抽象的层,以便把各种芯片用起来。然后在这个基础上用跨芯通讯库的设计,解决不同芯片的通信问题。再之后借助一种异构并行切分策略,让芯片性能可以在复杂的互连条件下发挥出来。

最终的效果是,千卡的性能损失可以控制在3%左右,万卡控制在5%左右。同时,当需要翻倍算力训练模型的时候,可以把存量的上一代芯片和增量芯片集纳到一起,进而大幅减少开支——“省钱”,是百度种种探索的另一个重点。

总的来说,大模型的算力之争很快就要升级。据王雁鹏介绍,今年大家的训练基本都是万卡规模,10万卡的竞争马上就要到来。百度为榨取算力性能所想的办法,既是技术层面“少花钱多办事”的探索,也呼应了当下国内算力受限的局面。

更大规模的算力之争,需要早做准备。

文章来自于“硅星人Pro”,作者“李楠”。

榨取大模型算力,百度想了一些招

关联网址

关联标签

文章目录

发评论,每天都得现金奖励!超多礼品等你来拿

后,在评论区留言并审核通过后,即可获得现金奖励,奖励规则可见: 查看奖励规则
暂无评论...