首页 科技周边 人工智能 不到1000行代码,PyTorch团队让Llama 7B提速10倍

不到1000行代码,PyTorch团队让Llama 7B提速10倍

Dec 05, 2023 pm 03:14 PM
入门 pytorch

PyTorch 团队亲自教你如何加速大模型推理。

在过去的一年里,生成式 AI 发展迅猛,在这当中,文本生成一直是一个特别受欢迎的领域,很多开源项目如 llama.cpp、vLLM 、 MLC-LLM 等,为了取得更好的效果,都在进行不停的优化。

作为机器学习社区中最受欢迎框架之一的 PyTorch,自然也是抓住了这一新的机遇,不断优化。为此让大家更好的了解这些创新,PyTorch 团队专门设置了系列博客,重点介绍如何使用纯原生 PyTorch 加速生成式 AI 模型。

不到1000行代码,PyTorch团队让Llama 7B提速10倍

代码地址:https://github.com/pytorch-labs/gpt-fast

在第一篇博客中,PyTorch 团队展示了仅使用纯原生 PyTorch 重写 Segment Anything(SAM)模型,比原始实现快 8 倍。在本博客中,他们又为我们带来了新的内容,即如何加快 LLM 推理。

我们先来看看结果,该团队重写 LLM,推理速度比基线足足快了 10 倍,并且没有损失准确率,只用了不到 1000 行的纯原生 PyTorch 代码!

不到1000行代码,PyTorch团队让Llama 7B提速10倍

所有基准测试都在 A100-80GB 上运行的,功率限制在 330W。

这些优化包括:

  • Torch.compile:PyTorch 模型编译器, PyTorch 2.0 加入了一个新的函数,叫做 torch.compile (),能够通过一行代码对已有的模型进行加速;
  • GPU 量化:通过降低运算精度来加速模型;
  • Speculative Decoding:一种大模型推理加速方法,使用一个小的「draft」模型来预测大的「目标」模型的输出;
  • 张量并行:通过在多个设备上运行模型来加速模型推理。

接下来,我们看看每一步都是如何实现的。

6 步加快大模型推理

该研究表示,在没有优化之前,大模型的推理性能为 25.5 tok/s,效果不是很好:

不到1000行代码,PyTorch团队让Llama 7B提速10倍

经过一番探索后终于找到了原因:CPU 开销过大。然后就有了下面的 6 步优化过程。

不到1000行代码,PyTorch团队让Llama 7B提速10倍

第一步:通过 Torch.compile 和静态 KV 缓存减少 CPU 开销,实现 107.0 TOK/S

torch.compile 允许用户将更大的区域捕获到单个编译区域中,特别是在 mode=”reduce-overhead” 时(参考下面的代码),这一功能对于减少 CPU 开销非常有效,除此以外,本文还指定 fullgraph=True,用来验证模型中没有「图形中断」(即 torch.compile 无法编译的部分)。

不到1000行代码,PyTorch团队让Llama 7B提速10倍

然而,即使有 torch.compile 的加持,还是会遇到一些障碍。

第一个障碍是 kv 缓存。即当用户生成更多的 token 时, kv 缓存的「逻辑长度(logical length)」会增长。出现这种问题有两个原因:一是每次缓存增长时重新分配(和复制)kv 缓存的成本非常高;其次,这种动态分配使得减少开销变得更加困难。

为了解决这个问题,本文使用静态 KV 缓存,静态分配 KV 缓存的大小,然后屏蔽掉注意力机制中未使用的值。

不到1000行代码,PyTorch团队让Llama 7B提速10倍

第二个障碍是 prefill 阶段。用 Transformer 进行文本生成可视为一个两阶段过程:1. 用来处理整个提示的 prefill 阶段 2. 解码 token.

尽管 kv 缓存被设置为静态化,但由于提示长度可变 ,prefill 阶段仍然需要更多的动态性。因此,需要使用单独的编译策略来编译这两个阶段。

不到1000行代码,PyTorch团队让Llama 7B提速10倍

虽然这些细节有点棘手,但实现起来并不困难,而且性能的提升是巨大的。这一通操作下来,性能提高了 4 倍多,从 25 tok/s 提高到 107 tok/s。

不到1000行代码,PyTorch团队让Llama 7B提速10倍

第二步:通过 int8 权重量化缓解内存带宽瓶颈,实现 157.4 tok /s

通过上文,我们已经看到应用 torch.compile 、静态 kv 缓存等带来的巨大加速,但 PyTorch 团队并不满足于此,他们又找了其他角度进行优化。

他们认为加速生成式 AI 训练的最大瓶颈是将权重从 GPU 全局内存加载到寄存器的代价。换句话说,每次前向传播都需要「接触(touch)」GPU 上的每个参数。那么,理论上我们能够以多快的速度「接触」模型中的每个参数?

不到1000行代码,PyTorch团队让Llama 7B提速10倍

为了衡量这一点,本文使用模型带宽利用率(MBU),计算它非常简单,如下所示:

不到1000行代码,PyTorch团队让Llama 7B提速10倍

举例来说,对于一个 7B 参数模型,每个参数都存储在 fp16 中(每个参数 2 字节),可以实现 107 tokens/s。A100-80GB 理论上有 2 TB/s 的内存带宽。

如下图所示,将上述公式带入具体的数值,可以得到 MBU 为 72%!这个结果是相当不错的,因为很多研究很难突破 85%。

不到1000行代码,PyTorch团队让Llama 7B提速10倍

但 PyTorch 团队还想将这个数值在提高一些。他们发现无法改变模型中参数的数量,也无法改变 GPU 的内存带宽。但他们发现可以更改每个参数存储的字节数!

不到1000行代码,PyTorch团队让Llama 7B提速10倍

因此,他们打算用 int8 量化。 

不到1000行代码,PyTorch团队让Llama 7B提速10倍

请注意,这仅是量化权重,计算本身仍然在 bf16 中完成。此外,有了 torch.compile,可以轻松生成 int8 量化的高效代码。

不到1000行代码,PyTorch团队让Llama 7B提速10倍

不到1000行代码,PyTorch团队让Llama 7B提速10倍

就像上图所展示的,从深蓝色线(torch.compile + int8)可以看出,使用 torch.compile + int8 仅权重量化时,性能有显着提升。

将 int8 量化应用于 Llama-7B 模型,性能提高了约 50%,达到 157.4 tokens/s。

不到1000行代码,PyTorch团队让Llama 7B提速10倍

第三步:使用 Speculative Decoding

即使在使用了 int8 量化等技术之后,该团队仍然面临着另一个问题,即为了生成 100 个 token,必须加载权重 100 次。

不到1000行代码,PyTorch团队让Llama 7B提速10倍

即使权重被量化,一遍又一遍地加载权重也避免不了,这种问题该如何解决呢?事实证明,利用 speculative decoding 能够打破这种严格的串行依赖性并获得加速。

不到1000行代码,PyTorch团队让Llama 7B提速10倍

该研究使用草稿(draft)模型生成 8 个 token,然后使用验证器模型并行处理,丢弃不匹配的 token。这一过程打破了串行依赖。整个实现过程大约 50 行原生 PyTorch 代码。

不到1000行代码,PyTorch团队让Llama 7B提速10倍

第四步:使用 int4 量化和 GPTQ 方法进一步减小权重,实现 202.1 tok/s

本文发现,当权重为 4-bits 时,模型的准确率开始下降。

不到1000行代码,PyTorch团队让Llama 7B提速10倍

为了解决这个问题,本文使用两个技巧来解决:第一个是拥有更细粒度的缩放因子;另一种是使用更先进的量化策略。将这些操作组合在一起,得到如下:

不到1000行代码,PyTorch团队让Llama 7B提速10倍

第五步:将所有内容组合在一起,得到 244.7 tok/s

最后,将所有技术组合在一起以获得更好的性能,得到 244.7 tok/s。

不到1000行代码,PyTorch团队让Llama 7B提速10倍

第六步:张量并行性

到目前为止,本文一直是在单个 GPU 上最大限度地减少延迟。其实,使用多个 GPU 也是可以的,这样一来,延迟现象会得到进一步改善。

非常庆幸的是,PyTorch 团队提供了张量并行的低级工具,只需 150 行代码,并且不需要任何模型更改。

不到1000行代码,PyTorch团队让Llama 7B提速10倍

前面提到的所有优化都可以继续与张量并行性组合,将这些组合在一起,能以 55 tokens/s 的速度为 Llama-70B 模型提供 int8 量化。

不到1000行代码,PyTorch团队让Llama 7B提速10倍

最后,简单总结一下文章主要内容。在 Llama-7B 上,本文使用「compile + int4 quant + speculative decoding」这一套组合拳,实现 240+ tok/s。在 Llama-70B,本文还通过引入张量并行性以达到约 80 tok/s,这些都接近或超过 SOTA 性能。

原文链接:https://pytorch.org/blog/accelerating-generative-ai-2/

以上是不到1000行代码,PyTorch团队让Llama 7B提速10倍的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

值得你花时间看的扩散模型教程,来自普渡大学 值得你花时间看的扩散模型教程,来自普渡大学 Apr 07, 2024 am 09:01 AM

Diffusion不仅可以更好地模仿,而且可以进行「创作」。扩散模型(DiffusionModel)是一种图像生成模型。与此前AI领域大名鼎鼎的GAN、VAE等算法,扩散模型另辟蹊径,其主要思想是一种先对图像增加噪声,再逐步去噪的过程。其中如何去噪还原原图像是算法的核心部分。最终算法能够从一张随机的噪声图像中生成图像。近年来,生成式AI的惊人增长将文本转换为图像生成、视频生成等领域的许多令人兴奋的应用提供了支持。这些生成工具背后的基本原理是扩散的概念,这是一种特殊的采样机制,克服了以前的方法中被

一键生成PPT!Kimi :让「PPT民工」先浪起来 一键生成PPT!Kimi :让「PPT民工」先浪起来 Aug 01, 2024 pm 03:28 PM

Kimi:一句话,十几秒钟,一份PPT就新鲜出炉了。PPT这玩意儿,可太招人烦了!开个碰头会,要有PPT;写个周报,要做PPT;拉个投资,要展示PPT;就连控诉出轨,都得发个PPT。大学更像是学了个PPT专业,上课看PPT,下课做PPT。或许,37年前丹尼斯・奥斯汀发明PPT时也没想到,有一天PPT竟如此泛滥成灾。吗喽们做PPT的苦逼经历,说起来都是泪。「一份二十多页的PPT花了三个月,改了几十遍,看到PPT都想吐」;「最巅峰的时候,一天做了五个PPT,连呼吸都是PPT」;「临时开个会,都要做个

PyCharm与PyTorch完美结合:安装配置步骤详解 PyCharm与PyTorch完美结合:安装配置步骤详解 Feb 21, 2024 pm 12:00 PM

PyCharm是一款强大的集成开发环境(IDE),而PyTorch是深度学习领域备受欢迎的开源框架。在机器学习和深度学习领域,使用PyCharm和PyTorch进行开发可以极大地提高开发效率和代码质量。本文将详细介绍如何在PyCharm中安装配置PyTorch,并附上具体的代码示例,帮助读者更好地利用这两者的强大功能。第一步:安装PyCharm和Python

自然语言生成任务中的五种采样方法介绍和Pytorch代码实现 自然语言生成任务中的五种采样方法介绍和Pytorch代码实现 Feb 20, 2024 am 08:50 AM

在自然语言生成任务中,采样方法是从生成模型中获得文本输出的一种技术。这篇文章将讨论5种常用方法,并使用PyTorch进行实现。1、GreedyDecoding在贪婪解码中,生成模型根据输入序列逐个时间步地预测输出序列的单词。在每个时间步,模型会计算每个单词的条件概率分布,然后选择具有最高条件概率的单词作为当前时间步的输出。这个单词成为下一个时间步的输入,生成过程会持续直到满足某种终止条件,比如生成了指定长度的序列或者生成了特殊的结束标记。GreedyDecoding的特点是每次选择当前条件概率最

安装PyTorch的PyCharm教程 安装PyTorch的PyCharm教程 Feb 24, 2024 am 10:09 AM

PyTorch作为一款功能强大的深度学习框架,被广泛应用于各类机器学习项目中。PyCharm作为一款强大的Python集成开发环境,在实现深度学习任务时也能提供很好的支持。本文将详细介绍如何在PyCharm中安装PyTorch,并提供具体的代码示例,帮助读者快速上手使用PyTorch进行深度学习任务。第一步:安装PyCharm首先,我们需要确保已经在计算机上

CVPR 2024全部奖项公布!近万人线下参会,谷歌华人研究员获最佳论文奖 CVPR 2024全部奖项公布!近万人线下参会,谷歌华人研究员获最佳论文奖 Jun 20, 2024 pm 05:43 PM

北京时间6月20日凌晨,在西雅图举办的国际计算机视觉顶会CVPR2024正式公布了最佳论文等奖项。今年共有10篇论文获奖,其中2篇最佳论文,2篇最佳学生论文,另外还有2篇最佳论文提名和4篇最佳学生论文提名。计算机视觉(CV)领域的顶级会议是CVPR,每年都会吸引大量研究机构和高校参会。据统计,今年共提交了11532份论文,2719篇被接收,录用率为23.6%。根据佐治亚理工学院对CVPR2024的数据统计分析,从研究主题来看,论文数量最多的是图像和视频合成与生成(Imageandvideosyn

入门学习C语言的五款编程软件 入门学习C语言的五款编程软件 Feb 19, 2024 pm 04:51 PM

C语言作为一门广泛应用的编程语言,对于想从事计算机编程的人来说是必学的基础语言之一。然而,对于初学者来说,学习一门新的编程语言可能会有些困难,尤其是缺乏相关的学习工具和教材。在本文中,我将介绍五款帮助初学者入门C语言的编程软件,帮助你快速上手。第一款编程软件是Code::Blocks。Code::Blocks是一个免费的开源集成开发环境(IDE),适用于

真快!几分钟就把视频语音识别为文本了,不到10行代码 真快!几分钟就把视频语音识别为文本了,不到10行代码 Feb 27, 2024 pm 01:55 PM

大家好,我是风筝两年前,将音视频文件转换为文字内容的需求难以实现,但是如今只需几分钟便可轻松解决。据说一些公司为了获取训练数据,已经对抖音、快手等短视频平台上的视频进行了全面爬取,然后将视频中的音频提取出来转换成文本形式,用作大数据模型的训练语料。如果您需要将视频或音频文件转换为文字,可以尝试今天提供的这个开源解决方案。例如,可以搜索影视节目的对话出现的具体时间点。话不多说,进入正题。Whisper这个方案就是OpenAI开源的Whisper,当然是用Python写的了,只需要简单安装几个包,然

See all articles