|
在一个令人震惊的突发发展中,最强大的开源模型的头衔易主。 阿里云发布了Qwen 2.5模型,尤其是其72B版本,在人工智能领域设立了新的标杆。 该模型在MMLU、MATH和MBPP等大多数评估指标上超越了Llama3 405B,甚至在某些指标上超过了GPT-4。 
X.com 上到处都在热议Qwen 2.5,世界各地的用户都在不停地讨论这个新的AI巨头: 
今天,我正在接受一个大胆的挑战:在我的4GB显存的显卡上运行这个72B的大模型,而不进行量化或压缩。 挑战:我的4GB显卡能否胜任? 虽然A100和H100是不错的选择,但我的预算限制了我只能使用那块老旧的4GB显卡。  最初直接运行模型的结果如预期那样导致了内存不足的错误:
 理解规模 拥有720亿参数并在80层上使用18万亿tokens训练的Qwen模型,大约需要37块4GB的GPU才能完全加载。我们还缺少36块GPU——差距相当大!
解决方案:逐层推理 在有限硬件上运行如此大规模模型的关键在于逐层推理。与其将整个80层模型加载到VRAM中,我们每次只加载和处理一层: 将第一层加载到VRAM 通过这一层处理输入 将输出移动到CPU内存 清空GPU内存 加载下一层并重复上述过程
这种方法大大减少了最大VRAM使用量,使得在4GB GPU上运行模型成为可能。 
介绍AirLLM 为实现这一解决方案,我开发了一个名为AirLLM的开源项目。它不仅支持Qwen 2.5,还支持Llama3 400B、Mixtral以及其他大型模型。以下是一个简单的代码片段以演示其用法: from airllm import AutoModel
MAX_LENGTH = 128model = 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 还支持运行包括 Mixtral 和 Llama3 405B 在内的其他超大规模语言模型。你可以在 GitHub 仓库中找到 AirLLM (https://github.com/lyogavin/airllm)。 限制与应用场景 需要注意的是,虽然 4GB 的 GPU 可以运行该模型,但速度不会非常快。这种设置不适合实时聊天机器人场景,但非常适合异步数据处理任务。
|