Prompt 语宙Prompt 语宙
  • 首页
  • AIGC 资讯
    • AIGC 早报Hot
    • 最新趋势
    • AI 工具
    • 热门资源
  • AI 绘图
    • Prompt 实战
    • AI 绘画教程
    • 模型精选
  • 强化 AI 学习
  • AI 图库
    • 人物
    • 展台场景
    • Banner
    • 游戏
    • 动物
    • 食物
    • 自然
    • 背景
    • 海报
    • 建筑
    • 室内设计
  • Remaker AI
    • Free Image Splitter
    • AIGC 工具
    • Prompt 咒语生成器
  • 社区
    • 知识星球
    • 公众号
Search
  • Contact
  • Blog
  • Complaint
  • Advertise
© 2024 Prompt 语宙. HalfPX. All Rights Reserved.
阅读: 令人难以置信!用这项新技术在仅有 4GB GPU 的设备上运行 70B 大语言模型推理 [译]
Share
登陆
通知 阅读更多
Font Resizer字体
Font Resizer字体
Prompt 语宙Prompt 语宙
Search
  • 首页
  • AIGC 资讯
    • AIGC 早报Hot
    • 最新趋势
    • AI 工具
    • 热门资源
  • AI 绘图
    • Prompt 实战
    • AI 绘画教程
    • 模型精选
  • 强化 AI 学习
  • AI 图库
    • 人物
    • 展台场景
    • Banner
    • 游戏
    • 动物
    • 食物
    • 自然
    • 背景
    • 海报
    • 建筑
    • 室内设计
  • Remaker AI
    • Free Image Splitter
    • AIGC 工具
    • Prompt 咒语生成器
  • 社区
    • 知识星球
    • 公众号
已有帐户? 登陆
  • Contact
  • Blog
  • Complaint
  • Advertise
© 2023 Prompt 语宙. Paooo.com. All Rights Reserved.
Prompt 语宙 > 强化 AI 学习 > 令人难以置信!用这项新技术在仅有 4GB GPU 的设备上运行 70B 大语言模型推理 [译]
强化 AI 学习

令人难以置信!用这项新技术在仅有 4GB GPU 的设备上运行 70B 大语言模型推理 [译]

宝玉的分享
最近更新: 2024年2月21日 下午12:16
SHARE

Gavin Li,11 月 18 日

通常,大语言模型需要大量的 GPU 内存才能运行。但是,有没有可能仅用单个 GPU 来进行推理计算呢?如果可以,最少需要多少 GPU 内存呢?

比如说,一个拥有 70B 参数的大语言模型,其大小达到了惊人的 130GB。光是要把这个模型加载到 GPU 上,就需要两个各有 100GB 内存的 A100 GPU。

而在实际进行推理计算时,整个输入序列还需要被加载进内存中,以便进行复杂的“注意力”运算。而这种注意力机制对内存的需求是随着输入长度成二次方增长的。这意味着除了本来的 130GB 模型大小之外,还需要更多额外的内存。

那么,有什么技术可以在仅有 4GB GPU 内存的情况下,节约如此巨大的内存需求,实现推理计算呢?

值得注意的是,这里所说的内存优化技术并不涉及任何可能损害模型性能的模型压缩手段,比如量化、蒸馏或剪枝等。

今天我们将为您揭秘这些用于大型模型的极端内存优化的关键技术。

文章的最后,我们还将分享一个开源库,您可以通过简单几行代码就能实现这一切!

01

分层推理技术

其中最关键的技术是分层推理。这实际上是计算机科学中经典的分而治之策略。

让我们先来看看大语言模型的架构。如今的大语言模型都是基于谷歌在“Attention is all you need”一文中提出的多头自我注意力结构,这就是后来大家熟知的 Transformer 结构。

一个典型的大语言模型,其起始是一个嵌入投影层,接着是 80 个结构完全一致的 Transformer 层,最后是一个用于预测 Token ID 概率的规范化层和全连接层。

在推理过程中,这些层会依序执行,每一层的输出都会成为下一层的输入。在任何时刻,只有一个层在执行。

因此,实际上没有必要把所有层都保留在 GPU 内存中。我们可以根据需要从磁盘加载相应的层进行计算,并在计算完成后立即释放内存。

在这种情况下,每层 GPU 所需的内存仅约为一个 Transformer 层的参数大小,大约占整个模型的 1/80,大约为 1.6GB。

除此之外,GPU 内存中还存储了一些输出缓存,其中最大的是为了避免重复计算而设的 KV 缓存。

以 70B 模型为例,我们简单算一下这个 KV 缓存的大小:

2 * 输入长度 * 层数 * 头数 * 向量维度 * 4

假设输入长度为 100,这个缓存的大小就是 2 * 100 * 80 * 8 * 128 * 4,也就是 30MB 的 GPU 内存。

根据我们的监测数据显示,整个推理过程中 GPU 内存的使用量不超过 4GB!

02

单层优化 — 闪电注意力(Flash Attention)

在当今大语言模型的发展中,闪电注意力技术可谓是一项至关重要且关键的优化手段。

市面上的各种大语言模型基本上都是基于相同的底层代码构建的,而闪电注意力则是其中最显著的提升。

闪电注意力的概念虽不全新,但我们不得不提及另一篇研究论文《自我注意力不需要 O(n²) 的内存》。

传统的自我注意力机制需要 O(n²) 的内存(其中 n 是序列长度)。

而这篇论文则提出,我们实际上不需要保留这些 O(n²) 的中间结果。我们可以顺序计算这些结果,持续更新一个中间结果,并丢弃其余所有。这样做将内存复杂度降至 O(logn)。

闪电注意力在本质上与此相似,尽管其内存复杂度略高,为 O(n),但 它通过深度优化 cuda 内存访问,大幅提升了推理和训练的速度。

如图所示,传统的自我注意力会计算并存储 O(n²) 的中间结果。而闪电注意力则将这一过程划分为多个小块,逐块计算,从而将所需内存减少到一个块的大小。

03

模型文件分片处理

一般来说,原始的模型文件会被分成多个部分,每部分大约为 10GB。

我们的处理方式是按层逐步进行。每一层仅需 1.6GB。如果按照原始的 10GB 分片来加载,每执行一层就需要重新加载整个 10GB 的文件,而实际上只用到了其中的 1.6GB。

这样会导致大量内存和磁盘读取资源的浪费。事实上,磁盘读取速度是整个推理过程中最大的瓶颈,因此我们尽可能地减少这一过程。

首先,我们对原始的 HuggingFace 模型文件进行了预处理,将其按照不同的层级进行分片。

在存储方面,我们采用了 safetensor 技术(https://github.com/huggingface/safetensors),它确保了存储格式与内存格式的紧密匹配,并利用内存映射技术来加载数据,以此来提高速度。

04

Meta Device(元设备)

在实现过程中,我们利用了 HuggingFace Accelerate 提供的元设备特性(https://huggingface.co/docs/accelerate/usage_guides/big_modeling)。元设备是一个专为运行超大型模型设计的虚拟设备。通过元设备加载模型时,并不会实际读取模型数据,只加载代码,因此内存的使用量为零。

在执行过程中,您可以将模型的部分内容从元设备动态转移到真实的设备,如 CPU 或 GPU,此时数据才会真正加载到内存中。

使用 init_empty_weights() 函数,可以通过元设备来加载模型。

from accelerate import init_empty_weights
with init_empty_weights():
my_model = ModelClass(...)

05

开源库

我们将所有相关代码开源 —— AirLLM。这使您能够通过几行代码来实现上述功能。

相关代码可在 Anima 的 GitHub 页面找到:https://github.com/lyogavin/Anima/tree/main/air_llm。

使用过程非常简单。首先,您需要安装相关软件包:

pip install airllm

之后,您就可以像操作普通 Transformer 模型那样进行分层推理。

from airllm import AirLLMLlama2
MAX_LENGTH =128
# 我们可以使用 hugging face 提供的模型仓库 id 来加载模型:
model = AirLLMLlama2("garage-bAInd/Platypus2-70B-instruct")
# 或者直接使用本地路径加载模型...
#model = AirLLMLlama2("/home/ubuntu/.cache/huggingface/hub/models--garage-bAInd--Platypus2-70B-instruct/snapshots/b585e74bcaae02e52665d9ac6d23f4d0dbc81a0f")
input_text =[
'美国的首都是哪里?',
]
input_tokens = model.tokenizer(input_text,
返回张量="pt",
不返回注意力掩码=True,
截断=True,
最大长度=MAX_LENGTH,
填充=True)
generation_output = model.generate(
input_tokens['input_ids'].cuda(),
最大新增令牌=20,
使用缓存=True,
返回生成字典=True)
output = model.tokenizer.decode(generation_output.sequences[0])
print(output)

我们在一块 16GB Nvidia T4 GPU 上进行了代码测试。整个生成过程只使用了不到 4GB 的 GPU 内存。

需要注意的是,像 T4 这样的低端 GPU 在处理生成任务时速度会较慢。它并不适合需要实时交互的场景,例如聊天机器人,更适合进行一些离线数据分析,比如文档分析或 PDF 处理等。

目前,我们只支持基于 Llam2 的模型。如果您需要其他模型的支持,请告诉我们!

06

70B 大小的训练数据能否在单个 GPU 上完成?

尽管我们可以通过分层技术优化生成任务,但训练任务是否能在单个 GPU 上以类似方式进行呢?

在生成任务中,只需要使用前一层的输出来执行下一层的 Transformer,所以在数据有限的情况下是可以进行分层执行的。

但训练任务需要处理更多数据。它首先执行前向传播,以获得每个层和张量的输出,然后执行反向传播,计算每个张量的梯度。

由于梯度计算需要保存前向层的结果,所以分层执行并不会减少内存使用。

当然,还有一些其他技术,如梯度检查点,可以达到减少内存使用的效果。

如果您对梯度检查点如何显著降低训练内存需求感兴趣,请告诉我们!

07

在编写我们的代码时,我们广泛借鉴了 SIMJEG 在 Kaggle 平台上的成果:https://www.kaggle.com/code/simjeg/platypus2-70b-with-wikipedia-rag/notebook。在此,我们要向 Kaggle 社区的卓越贡献表示感谢!

我们会持续分享最新、最有效的人工智能技术和发展动态,致力于为开源社区贡献力量。敬请关注我们的最新动态。

向 OpenGPTs 注入长效记忆功能 [译]
我听过的最棒的调试故事 [译]
可解释语言模型:探索传统与创新方法 [译]
苹果新推出的设备内及云端服务器基础模型介绍 [译]
木龙年,机会正等待那些勇往直前的人 [译]
分享
Email 复制链接 打印
Share
上一篇 通用型基础模型是否能在医疗领域胜过专门的调优策略?一个医学案例研究 [译]
下一篇 智能的进化之路 [译]
发表评价

发表评价 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Please select a rating!

Ad image
- 入群领取知识星球折扣卷, 仅剩99份 -
Ad imageAd image

最近更新

OpenAI GPT-4.5 系统卡
强化 AI 学习
如何像人类一样进行代码评审(第二部分)
强化 AI 学习
模型即产品(The Model is the Product)
强化 AI 学习
使用大语言模型 (LLMs) 构建产品一年后的经验总结 [译]
强化 AI 学习

相关推荐

图 1. - 描述“软件质量”如何分解为四个组成部分的理论。箭头表示影响的方向,例如认为过程质量会影响代码质量。
强化 AI 学习

针对人类开发者的生产力提升,第 7 部分:软件质量 [译]

宝玉的分享
1925 年费城的 Atwater Kent 无线电装配线。照片来源:国会图书馆
强化 AI 学习

利用工具和技术,减少工作时间,提升生活质量 [译]

宝玉的分享
强化 AI 学习

EmotionPrompt:运用心理学知识通过情感激发提升大语言模型的能力[译]

宝玉的分享
摄影师 Cmichel67
强化 AI 学习

专访:凯文·凯利,多面才子,未来学思想领袖 [译]

宝玉的分享
/ Prompt 语宙 /

Experience the limitless creative possibilities of generative AI and unlock new levels of innovation.

Quick Link

  • Remaker AI
  • BGRemaker 抠图Hot
  • AIGC 工具
  • Prompt 咒语生成器
  • 去水印工具

Support

  • Contact
  • Blog
  • Complaint
  • Advertise

标签

3D AI AIGC AI人像 AI创作小助手 AI工具 AI换脸 AI海报设计 AI生成视频 AI绘画 AI视频 AI设计 app图标 chatgpt DALL-E3 excel GPT meta Midjourney openai Pika prompt runway SDXL stable diffusion UI设计 专业 丛林 乐高 人像 人物 光晕 动物 吉卜力 咒语 图标设计 圣诞 壁纸 女性 奶牛 实验室 宠物 客厅 室内设计 家居 局部重绘 展台 山景 帅哥 建筑 建筑设计 影谱科技 微摄影 怪物 提示词 摄影 教程 新闻 日本排放核污水 早报 星光 枯木 植物 模特 水果 泳池 海报 海报设计 清华大学 温馨的家 游戏 游戏美术 炫光 炫彩 玻璃 白茶花 矢量插画 研究报告 破碎 科幻 穿搭 窗 美食 背景 节日 芭比 花 花卉 茶园一角 草原 荷兰奶源 表情包 赛博朋克 超现实主义 软件 运动 金毛 风景 食物 香水
Prompt 语宙Prompt 语宙
Follow US
© 2009-2023 Prompt 语宙. Paooo.com. All Rights Reserved.
Welcome Back!

Sign in to your account

Username or Email Address
Password

忘记密码