在古老的4GB显卡上运行新一代开源LLM之王QWen2.5
LLM在低配GPU运行
开源LLM新王者:QWen 2.5 72B
在一夜之间的惊人发展中,最强大的开源模型的王冠易主。
阿里巴巴发布的Qwen 2.5模型,尤其是72B版本,在AI领域树立了新的标杆。
该模型在大多数评估指标上,如MMLU、MATH和MBPP,均超越了Llama3 405B,甚至在某些指标上超越了GPT-4。

某美国知名社交媒体上关于 Qwen 2.5 的讨论爆炸式增长,全球用户对这个全新的 AI 强者赞不绝口:

今天,我将迎接一个大胆的挑战:在我那普通的4GB显卡上运行这个72B的巨兽,且不使用量化或压缩。
挑战:我的4GB显卡能承受得住吗?
虽然A100和H100是更好的选择,但我的预算限制让我只能依赖这块旧的4GB显卡。

最初尝试直接运行该模型时,结果如预期般出现了内存不足错误。

理解规模(Scale)
这个72B的Qwen模型经过18万亿个token的训练,拥有80层结构,加载完整模型大约需要37块像我这样的4GB显卡。我们还差36块显卡——差距相当大!
解决方案:逐层推理 (Layer-by-Layer Inference)
在有限硬件上运行如此庞大的模型的关键在于逐层推理。与其将整个80层的模型一次性加载到显存中,不如一次只加载和处理一层:
- 将第一层加载到显存中
- 将输入通过这一层处理
- 将输出移动到CPU内存
- 清空显存
- 加载下一层并重复此过程
这种方法显著减少了显存的最大使用量,从而使得在4GB显卡上运行模型成为可能。
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。您可以在这里找到 AirLLM 的 GitHub 仓库。
限制和使用案例
重要的是要注意,虽然4GB显卡可以运行该模型,但速度不会非常快。这种设置不适合实时聊天机器人场景,但非常适合异步数据处理任务。
开源AI的未来
作为一名AI企业家,我很高兴分享这些深层次的AI技术和对AI行业发展的见解。我会继续发布有关AI和创业的有趣观察和思考。
欢迎随时关注并参与讨论!记住,AirLLM的代码可以在G家上找到。
无论您是在使用Qwen 2.5 72B、Llama3 405B还是Mixtral,AirLLM都能帮助您在消费级硬件上运行这些模型。让我们继续推动AI的可能性边界!