首页 > 其他分享 >GPU训Llama 3.1疯狂崩溃,竟有大厂用CPU服务器跑千亿参数大模型?

GPU训Llama 3.1疯狂崩溃,竟有大厂用CPU服务器跑千亿参数大模型?

时间:2024-08-01 16:27:32浏览次数:9  
标签:AI 模型 参数 内存 Llama 3.1 GPU CPU

马斯克19天建成由10万块H100串联的世界最大超算,已全力投入Grok 3的训练中。

与此同时,外媒爆料称,OpenAI和微软联手打造的下一个超算集群,将由10万块GB200组成。

在这场AI争霸赛中,各大科技公司们卯足劲加大对GPU的投资,似乎在暗示着拥有更多、更强大的GPU,就能让自己立于不败之地。

然而,这种对高端GPU的狂热追求,并非在所有情况下,都是完美无缺的解决方案。

Pytorch之父表示,技术报告中暗藏了很多基础设施的有趣细节,包括如何并行化,如何让系统更可靠等等

就拿稳定性来说,在Llama 3.1训练的54天里,Meta的1.6万块H100集群总共遇到了419次意外中断,相当于平均每3小时发生一次。

而在这之中,有148次(30.1%)是由于各种GPU故障引起的。

相比之下,由CPU故障引发的中断,只有2次。

另一方面,想要把Llama 3.1 405B跑起来,还得搭配2台8×H100的DGX工作站才行——即1280GB的显存。

曾经有位勇士尝试用一张4090运行,结果等了30分钟,模型才缓缓吐出一个「The」。

完整的回复,花了整整20个小时

熟悉模型的训练和推理的朋友都知道,这些事情一点都不奇怪。

集群搭建(GPU配置、网络设计、轨道优化等)、集群管理(实时监控、故障排除等)……个个都是「拦路虎」。

对于缺乏相关经验和资金的公司来说,该怎么办?

最近,浪潮信息的研发工程师,仅靠4颗CPU,就让千亿参数的「源2.0」在通用服务器上跑起来了!

面对用Java编写程序的代码任务,「源2.0」非常迅速地给出了结果。

再给它上一道推理题——船边挂着软梯,离海面2米,海水每小时涨半米,几小时海水能淹没软梯?

同样,AI几乎0延迟给出了详细的解题步骤和答案。

用通用服务器运行千亿参数大模型,可谓是前无古人,这一领域的积累完全是空白,没有任何经验可借鉴。

浪潮信息,究竟是怎么做到的?

用4颗CPU,撬动千亿参数大模型

若要在单台服务器中,实现千亿参数大模型的推理,包含了2个主要阶段,均对计算能力提出了硬性需求。

首先,是预填充阶段,也叫做前向传播阶段。

这一阶段涉及到输入数据的处理、模型参数第一次读取。

比如,当你输入「给我写一篇有关AI的文章」提示,预填充阶段便会将问题中所有token、模型参数,一次性输入计算。

有时,这一输入可能是几个字,也可能是几千个字,或者是一本著作。

第一阶段的计算需求有多大,主要取决于我们输入的长度。

而在计算第一个token过程中,由于模型首次加载,会在内存中存放全部的权重参数,以及KV Cache等数据。

这是模型参数本身所占内存空间的2-3倍。

对于千亿参数模型来说,大量的参数和数据输入,需要在强大计算单元中处理。对此,它需要支持向量化指令集、矩阵计算指令集,来实现大量的矩阵乘法和张量运算。

其次,是解码阶段,即在问题全部输入之后,模型开始输出结果的阶段。

在这个阶段,对大模型唯一要求便是,输出尽可能快。同时,挑战不再是算力挑战,转而为「数据搬运」的挑战。

它包含了两部分「数据搬运」:

  • 预填充阶段生成的大量KV Cache,需要从显存/内存,搬运到计算单元中(工作量非常大)

  • 模型参数本身的搬运

这些搬运对大模型的计算和推理速度,起到了一个决定性的作用。数据搬运很快,LLM吐字的速度也会快。

LLM输出主要通过KV Catch,逐一生成token,并在每步生成后存储新词块的键值向量。

因此,千亿大模型的实时推理,服务器需要具备较高的计算能力,以及较高的存储单元到计算单元的数据搬运效率。

总而言之,在大模型推理的两阶段中,有着截然不同的计算特征,需要在软硬件方面去做协同优化。

GPU不是万能的

传统上,GPU因其具备优越的并行处理能力,一举成为了AI训练和推理的首选。

成本

然而,高端GPU服务器在市场中经常出现供不应求,极难获取的现象。

仅有资金雄厚的科技巨头们,诸如微软、谷歌,才能够承担起这笔费用。

另一方面,不仅买不起,更是用不起。

基于GPU的云服务租用,在推理任务中的代价却是高昂的。对于科研人员和应用厂商来说,需要实现更高的成本效益,就得另谋他路。

显存

此外,GPU最大的劣势之一在于,显存容量受限。

当前业界LLM的网络架构,已从GPT逐渐走向MoE。通向AGI的大模型参数规模,只会呈指数级增长。

这意味着,闭源/开源主流模型的尺寸只会越来越大,千亿参数,甚至万亿参数模型将会成为主流。

对于百亿参数模型,20-30GB显存就够了。然而,若想跑千亿参数,大约需要200-300GB的显存空间。

目前主流的AI芯片,显存通常只有几十GB,显然放不下这么大的模型。(目前最强的AI芯片也没还没达到200GB)

被低估的通用服务器

GPU不行,那就从CPU入手。

虽然目前还搞不定模型的大规模训练,但通用服务器在推理任务上,却意外有着不小的优势。

在具体实践的过程中,浪潮信息的工程师们分别从硬件资源和算法层面入手,攻克了一个个「拦路虎」。

超大内存+高速带宽

**算力方面,**目前领先的服务器CPU都已经具备了AI加速功能。

类似于GPU的Tensor core,AMX高级矩阵扩展可以将低精度的计算做加速,编成指令集给CPU的核,利用专用的核做加速。

**算法方面,**浪潮信息的通用服务器可同时支持PyTorch、TensorFlow等主流AI框架,以及DeepSpeed等流行开发工具,满足了用户更成熟、易部署、更便捷的开放生态需求。

**通信方面,**全链路UPI(Ultra Path Interconnect)总线互连的设计,则实现了CPU之间高效的数据传输:

  1. 允许任意两个CPU之间直接进行数据传输,减少了通信延迟

  2. 提供了高传输速率,高达16GT/s(Giga Transfers per second)

此外,浪潮信息的研发工程师还优化了CPU之间、CPU和内存之间的走线路径和阻抗连续性。

依据三维仿真结果,他们调整了过孔排列方式,将信号串扰降低到-60dB以下,较上一代降低了50%。

并且,通过DOE矩阵式有源仿真,找到了通道所有corner的组合最优解,让算力性能可以得到充分发挥。

**内存方面,**可以说是通用服务器的最大优势了。

  • 容量

对于4路服务器来说,只需给每颗CPU插上8根32GB内存,就能轻松达到1TB。插满之后甚至可以扩展到16TB,最大可支持万亿参数的模型。

  • 带宽

搭配DDR5的内存,则可以实现4800MHz × 8bit × 8通道 × 4颗 ÷ 1024 = 1200GB/s的理论上带宽。

实测结果显示,读带宽为995GB/s、写带宽为423GB/s,以及读写带宽为437GB/s。

这个数据,对于一些搭载GDDR显存的GPU或加速卡,可以说是毫不逊色。

但仅靠硬件远远不够

仅仅依靠硬件创新,是远远不够的,CPU很难进行大模型算法的大规模并行计算。

正如开篇所述,大模型对通信带宽的要求是非常高的,无论是数据计算、计算单元之间,还是计算单元与内存之间。

如果按照BF16精度计算,想要让千亿大模型的运行时延小于100ms,内存和计算单元之间的通信带宽,就至少要达到2TB/s以上。

不仅如此,对于基于擅长大规模并行计算的加速卡设计的AI大模型,通用服务器的处理器与之并不适配。

原因很明显:后者虽然拥有高通用性和高性能的计算核心,但并没有并行工作的环境。

通常来说,通用服务器会将先将模型的权重传给一个CPU,然后再由它去串联其他CPU,实现权重数据的传输。

然而,由于大模型在运行时需要频繁地在内存和CPU之间搬运算法权重,这样造成的后果就是,CPU与内存之间的带宽利用率不高,通信开销极大。

如何解题?用算法创新

针对以上难题,浪潮信息提出了「张量并行」(Tensor Parallel)和「NF4量化」两项技术创新,成功实现了千亿大模型Yuan2.0-102B的实时推理。

根据性能分析结果,可以清晰地看到模型中不同部分的计算时间分布——

线性层运行时间占比50%,卷积运行时间占比20%,聚合通信时间占比20%,其它计算占比10%。

注意,在整个推理过程中,计算时间占比达到了80%!

跟使用多个PCIe的AI加速卡相比,这就形成了鲜明的对比——后者的通信开销可能高达50%,从而导致严重的算力浪费。

Yuan2.0-102B模型推理性能分析结果图

张量并行

所谓张量并行,就先将卷积算子进行张量切分,然后把大模型中的注意力层和前馈层的矩阵计算权重,分别输入到多个处理器的内存中。

如此一来,通用服务器中的4颗CPU便可同时获取算法权重,进行计算加速。

不过,张量并行对模型参数的切分粒度较细,要求CPU在每次张量计算后都要进行数据同步。

对于这个需求,前文提到的全链路UPI总线互连技术,完全可以满足(通信带宽高达16GT/s)。

最终,这种协同并行工作,直接让计算效率提升了4倍!

NF4量化

至于内存带宽不足的问题,则需要在不影响精度的情况下对模型进行「瘦身,也就是量化。

其优势在于,一方面可以将LLM参数量化成低比特数据,权重会变小。另一方面,权重缩小之后,在计算时传输的数据量也会变小。

这里,浪潮信息采用了一种并不多见的分位数量化方法——NF4(4位NormalFloat)。

NF4量化方法可将Yuan2.0-102B的尺寸压缩到原来的1/4

具体来说,NF4的核心思想是,确保量化区间内输入张量的值数量相等。

这个特点,恰恰非常适合呈现近似正态分布的LLM权重。

由于可以通过调整标准差来适配量化数据类型的范围,NF4相较于传统的4位整数或4位浮点数量化,可以获得更高的精度。

如此一来,量化之后的模型既能满足精度需求,又能大幅降低大规模并行计算的访存数据量,从而达到了实时推理的解码需求。

整数或浮点数量化方法的数据间隔通常是平均分布或指数分布的

为了进一步压缩模型的权重参数,团队还采用了嵌套量化(Double Quant)技术。

这是在NF4量化基础上,进行了二次量化。

因为NF4量化后会产生大量的scale参数,如果使用32位浮点数(FP32)存储,会占用大量内存。

对于一个千亿参数的LLM,若以每64个参数作为一个量化块(block size=64)来计算,仅存储scale参数就需要额外的6GB内存:(100B ÷ 64) × 4 = 6GB。

团队通过将这些scale参数量化到8位浮点数(FP8),显著减少了所需的存储空间。

在采用256为量化块大小(block size=256)的情况下,存储所有scale参数所需的额外空间仅为1.57GB:(100B ÷ 64 ÷ 256) × 4 + (100B ÷ 64) × 1 = 1.57GB.

通过嵌套量化,模型的每个权重参数最终仅占用4字节的内存空间,比原始FP32节省了大量的内存占用空间。

与此同时,它将从内存到CPU的数据搬运效率,提高了4倍。

这样的优化显著减轻了内存带宽对Yuan2.0-102B模型推理解码效率的限制,从而进一步提升了模型的推理性能。

所谓通用,就是让大家都用上

到这里,浪潮信息就成功交卷了!

通过系统优化,浪潮信息的NF8260G7,在业界首次实现了仅基于通用处理器,支持千亿参数大模型的运行。

至此,通用算力可支持的AI大模型,参数规模突破了千亿,彻底填补了行业空白,成为了企业拥有AI的新起点。

千亿参数AI的模型的部署,从此有了性能更强、成本更经济的选择;AI大模型应用,可以和云、大数据、数据库,实现更紧密的融合。

科技进步的最终目的,一定是落入凡间。

放眼当下,AIGC已经渗透进千行百业。AI已经以惊人的速度,渗透进了每一个计算设备。

2024年1-4月,国内大模型的中标数量,已经超越了2023全年总数,中标披露金额已经达到了2023年全年的77%。

在金融行业、医院门诊部,企业的IT部门,从业者都发现了这一点:传统行业的算力基础设施,已经不够用了!

如今,千亿参数大模型,是千行百业智能涌现的关键。而通用算力能否运行千亿参数大模型,正是衡量其能否支撑千行百业智能涌现的关键。

浪潮信息的创举,让互联网、金融、医疗等行业客户可实现高效部署,首次投入就可节约80%以上的建设成本。

无论是金融防欺诈、财务数据分析、企业CRM营销洞察、医疗智能诊断、个性化诊疗方案、教育培训等等,都将见证AI的广泛应用。

从此,一切计算皆AI。

参考资料:

https://mp.weixin.qq.com/s/1wYt7dfoVy2J1FFkOJjRTg

那么,如何系统的去学习大模型LLM?

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包》,扫码获取~
在这里插入图片描述

篇幅有限,部分资料如下:

标签:AI,模型,参数,内存,Llama,3.1,GPU,CPU
From: https://blog.csdn.net/2401_85375298/article/details/140850835

相关文章

  • python llama_index.indices.list.retrievers 导入错误
    fromllama_indeximportGPTListIndexfromllama_index.indices.list.retrieversimportListIndexLLMRetrieverdocuments=SimpleDirectoryReader('./data').load_data()index=GPTListIndex.from_documents(documents,service_context=service_context)r......
  • NVIDIA GPU MIG多实例&Multi-Instance GPU-中文用户指南
    目录第一章、介绍第二章、支持的GPU卡第三章、支持的配置 第四章、虚拟化 第五章、概念 5.1术语5.2 分区(Partitioning) 5.3 CUDA并发机制第六章、部署考虑事项6.2 应用考虑事项 第七章、MIG设备名称7.1  设备枚举7.2 CUDA设备枚举第八章、支持的MIG......
  • 在 Python Langchain 应用程序的 Docker 文件中运行 Ollama
    背景信息我有一个使用langchain和Ollama的Python应用程序。在本地运行这个程序效果非常好,因为我的机器上运行着Ollama客户端。我想要做的是在无服务器平台(例如GCR)上托管这个应用程序,为了做到这一点,我需要容器化应用程序。这对于应用程序的python端来说很容......
  • bash: llamafactory-cli: command not found解决方案
      大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学......
  • 什么?在本地使用LLaMA大模型
    LLaMA是什么?LLaMA3.1是Meta公司开发的最新大型语言模型(LLM)系列,具有多种规格和显著改进。LLaMA3.1版本包含8B、70B和405B参数模型,专为各种复杂任务设计,包括多语言支持、翻译、对话生成和文本总结。其中LLaMA3.1405B是迄今为止最大和最强大的版本,具有显著......
  • fpc 3.3.1使用rtti
    生产不建议使用fpc3.3.1(Trunk)近日QQ群的SunGod和啊D等发现fpc3.3.1(Trunk)添加了和delphi一样的rtti功能,但fpc默认是没启用的。启用RTTI的条件:1、编译FPC时添加-dENABLE_DELPHI_RTTI2、在fpc.cfg最后一行添加-dENABLE_DELPHI_RTTI因编译fpc对我来说还是太麻烦,我喜欢用fpcudelu......
  • LLAMA3.1 8B 本地部署并配合Obsidian建立本地AI知识管理系统
    目前,LLAMA3.1模型分为8B、70B、405B三个版本,其中70B和405B对于显存的要求均已超过了一般家用电脑的配置(或者换个说法,用一张4090也是带不起来的),所以运行8B即可。LLAMA3.18B的性能约相当于ChatGPT3.5。经过我的测试4080、2080、intelultra9185H(无独立显卡,其能力约相当于1060)......
  • 为什么 string.maketrans 在 Python 3.1 中不起作用?
    我是Python新手。怎么了这个在Python3.1中不起作用?fromstringimportmaketrans#Requiredtocallmaketransfunction.intab="aeiou"outtab="12345"trantab=maketrans(intab,outtab)str="thisisstringexample....wow!......
  • Llama 3.1是如何炼成的
    Llama3.1是一个虚构的模型,因此这里提供的内容将是关于如何一般性地训练和开发类似的大规模语言模型,如GPT-4或其他先进的语言模型。以下是一般步骤:1.数据收集与预处理数据收集:从互联网上收集海量的数据,包括书籍、文章、论坛、代码等多种文本形式。数据清洗:去除不相关或低质......
  • [个人理解] llama.cpp之sample策略
    最近有点时间看了几天llama.cpp的code,有几个点,想记录一下,不对的地方,欢迎大家指正。话说本该去年就看,奈何这个领域变的太快,索性积累到今年,当openAI也开始挤牙膏的时候一并看了。Summary-llama是跟chatpgt一样,基于transformer架构的decodeonly的一挂,这一系列的模型擅长文字接......