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

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

宝玉的分享
最近更新: 2026年5月23日 下午6:31
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 社区的卓越贡献表示感谢!

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

八位 Google 员工开创了现代 AI 的新纪元,揭秘他们的故事 [译]
代码并非技术债 [译]
知识工具:从有限到无限 [译]
Voyager:结合大语言模型的创新虚拟智能体 [译]
如工程师般探究复杂性——以 Ladybird 浏览器为例 [译]
分享
Email 复制链接 打印
Share
上一篇 通用型基础模型是否能在医疗领域胜过专门的调优策略?一个医学案例研究 [译]
下一篇 智能的进化之路 [译]
发表评价

发表评价 取消回复

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

Please select a rating!

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

最近更新

12岁孩童用眉笔画胡子破解AI年龄验证:轻量级模型的技术漏洞引发行业警示
AIGC 资讯 最新趋势
MiniMax M3大模型重磅发布:首创MSA架构,1M上下文全面开源,性能对标GPT-5.5
AI 工具 AIGC 资讯
流光脑波AI大脑占位特色图
谷歌 DeepMind CEO:AGI 将至,关键三年窗口期人类准备好了吗?
AIGC 资讯 最新趋势
机器人告别逐帧学动作!全球首个事件级具身智能世界模型WALL-WM重磅发布
AIGC 资讯 最新趋势

相关推荐

强化 AI 学习

揭穿号称首位人工智能软件工程师 Devin 能在 Upwork 接活的谎言![译]

宝玉的分享

7 个帮助最小化 RAG 模型风险的指标 [译]

宝玉的分享
左图:检查 FunSearch 生成的代码揭示了更多可操作的洞察(我们添加了高亮部分)。右图:利用左侧程序(更短)构建的原始“可接受”集合。
强化 AI 学习

FunSearch:利用大语言模型在数学科学领域探索新奇发现 [译]

宝玉的分享
强化 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

标签

Agent AGI AI AI Agent AIGC AI商业化 AI大模型 AI安全 AI工具 AI搜索 AI智能体 AI生成内容 AI监管 AI绘画 AI编程 AI编程工具 AI编程智能体 AI芯片 AI视频 AI视频生成 AI设计 Anthropic chatgpt Claude Claude Code Claude Mythos Claude Opus 4.8 DeepSeek DuckDuckGo Gemini GPT-5.5 MCP协议 meta Midjourney MiniMax MoE MoE架构 NVIDIA openai OpenRouter Pika prompt SpaceX stable diffusion SWE-Bench xAI 世界模型 丛林 人工智能 人物 企业级AI 具身智能 命令行工具 图像生成模型 多模态 多模态大模型 大模型 大模型API 大模型应用 大语言模型 字节跳动 家居 小米 展台 建筑 开源 开源大模型 开源工具 开源框架 开源模型 强化学习 微软 支付宝 教程 早报 智能体 智能体编程 智谱AI 月之暗面 本地AI 海报设计 生成式AI 科大讯飞 科幻 端侧AI 端侧大模型 网络安全 腾讯混元 英伟达 苹果 视频生成模型 语音合成 谷歌 谷歌AI 赛博朋克 长上下文 阶跃星辰 阿里通义 阿里通义千问 风景
Prompt 语宙Prompt 语宙
Follow US
© 2009-2026 Prompt 语宙. Paooo.com. All Rights Reserved.