[牛逼]在古老的 4GB GPU 上运行新的开源 LLM 之王 QWen2.5

文摘   2025-01-06 23:27   北京  

开源 LLM 新王者:QWen 2.5 72B

在令人惊叹的一夜之间开发中,最强大的开源模型的桂冠已经易手。

阿里巴巴发布的 Qwen 2.5 模型,尤其是其 72B 版本,在 AI 领域树立了新的标杆。

该模型在 MMLU、MATH 和 MBPP 等大多数评估指标上优于 Llama3 405B,甚至在某些指标上超过了 GPT-4。

QWen2.5 优于许多其他开源 LLM 模型

X.com 对 Qwen 2.5 的炒作如火如荼,因为全球用户都无法停止谈论这个新的 AI 强国:

X.com 上关于新 QWen2.5 的炒作

今天,我接受了一项大胆的挑战:在我不起眼的 4GB GPU 上运行这个 72B 庞然大物,无需量化或压缩。

挑战:我的 4GB GPU 能处理吗?

虽然 A100 和 H100 是不错的选择,但我的预算限制了我使用旧的 4GB GPU。

我的旧 4GB GPU

直接运行模型的初始尝试会导致预期的内存不足错误:

内存不足

了解规模

72B Qwen 模型在 80 层的 18T 令牌上进行了训练,需要大约 37 个 4GB GPU 才能完全加载。我们缺少 36 个 GPU,这是一个相当大的差距!

37 个 4GB

解决方案:逐层推理

在有限的硬件上运行如此大型模型的关键在于逐层推理。我们不是将整个 80 层模型加载到 VRAM 中,而是一次只加载和处理一个层:

  1. 将第一层加载到 VRAM 中
  2. 通过此层处理输入
  3. 将输出移动到 CPU 内存
  4. 清除 GPU 内存
  5. 加载下一层并重复

这种方法大大降低了最大 VRAM 使用率,从而可以在 4GB GPU 上运行模型。

逐层推理

AirLLM 简介

为了实现此解决方案,我开发了一个名为 AirLLM 的开源项目。它不仅支持 Qwen 2.5,还支持 Llama3 400B、Mixtral 等大型模型。下面是一个简单的代码片段来演示它的用法:

from airllm import AutoModel

MAX_LENGTH = 128
model = AutoModel.from_pretrained("Qwen/Qwen2.5-72B-Instruct")

input_text = [
    'What is the capital of United States?',
]

input_tokens = model.tokenizer(input_text,
    return_tensors="pt"
    return_attention_mask=False
    truncation=True
    max_length=MAX_LENGTH, 
    padding=False)

generation_output = model.generate(
    input_tokens['input_ids'].cuda(), 
    max_new_tokens=20,
    use_cache=True,
    return_dict_in_generate=True)

output = model.tokenizer.decode(generation_output.sequences[0])

print(output)

它是完全开源的。AirLLM 还支持运行其他超大型 LLM 模型,包括 Mixtral 和 Llama3 405B。您可以在 github repo 中找到 AirLLM。

限制和用例

需要注意的是,虽然 4GB GPU 可以运行模型,但速度不会很快。此设置不适用于实时聊天机器人场景,但非常适合异步数据处理任务。

开源 AI 的未来

作为一名 AI 企业家,我很高兴能分享这些深入的 AI 技术和对 AI 行业发展的见解。我将继续发布关于 AI 和创业的有趣观察和想法。

欢迎关注并参与讨论!请记住,AirLLM 的代码可在 GitHub 上找到。

无论您使用的是 Qwen 2.5 72B、Llama3 405B 还是 Mixtral,AirLLM 都可以帮助您在消费级硬件上运行这些模型。让我们继续突破 AI 的极限!


处芯积律
处芯积律,而后知所至。一个芯片人的技术和行业研究分享。
 最新文章