疯狂挑战:在8GB显存的GPU上运行Llama 405B
2024/9/20 21:03:27
本文主要是介绍疯狂挑战:在8GB显存的GPU上运行Llama 405B,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
我接受了在只有8GB显存的GPU上运行Llama 3.1 405B模型的挑战。
Llama 405B 模型大小为 820GB!这相当于 103 倍 8GB 显存的容量!
它显然无法适应8GB的显存。那么我们该如何让它运行起来呢?
首先,我们使用4位量化技术将16位浮点数转换为4位,节省四倍的内存。
量化之后,所有浮点数将被分配到4位的16个桶中的一个。深度神经网络中的浮点数范围从 -3.40282347E+38 到 3.40282347E+38。仅使用16个桶能否表示如此广泛的浮点数范围?
是的,它可以。
最重要的事情是确保这些参数在16个桶中均匀分布。
通常,这几乎是不可能实现的。不均匀的分布会导致显著的精度损失。
幸运的是,深度神经网络的参数通常 服从正态分布。因此,简单的变换可以确保理论上均匀分布。
当然,遵循统计分布并不意味着没有 异常值。
我们只需要使用一些专用的存储空间来专门记录这些异常值。这被称为 异常值依赖的量化。
大量的实验表明,4位量化几乎不会影响大规模语言模型的准确性。(在某些情况下,准确性甚至更高!)
经过一轮广泛的4位量化后,Llama 405B模型的大小已经减少到230GB,这让我们更“接近”于在我的8GB GPU上加载它。
第二个魔术技巧是逐层推理。
实际上,变压器的推理过程只需要一层层地加载模型。不需要一次性将整个模型加载到内存中。
Llama 405B 模型有 126 层,层数增加了 50%。
然而,向量维度翻倍了,多头注意力头的数量也翻倍了,所以每层的参数数量大约是原来的四倍。
通过逐层加载和推理,最大VRAM使用量约为5GB。
挑战完成!
现在我可以在我8GB的GPU上成功运行Llama 405B了!
人工智能行业的各种大型模型之间的差距正在迅速缩小。模型之间的差异变得不那么显著了。
越来越多的公司愿意采用开源模型并自行部署大型模型,确保可以根据业务需求灵活控制和调整模型。
我也非常支持开源,并认为 人工智能的未来属于开源。
这种方法已经在我的开源项目AirLLM (https://github.com/lyogavin/airllm) 中分享。
pip install airllm
你只需要几行代码:
from airllm import AutoModel model = AutoModel.from_pretrained( "unsloth/Meta-Llama-3.1-405B-Instruct-bnb-4bit") 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=128, padding=False) generation_output = model.generate( input_tokens['input_ids'].cuda(), max_new_tokens=10, return_dict_in_generate=True) output = model.tokenizer.decode(generation_output.sequences[0]) print(output)
我们将继续关注最新和最酷的人工智能技术,并继续分享开源工作。欢迎关注我们,敬请期待!
这篇关于疯狂挑战:在8GB显存的GPU上运行Llama 405B的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-22程序员出海做 AI 工具:如何用 similarweb 找到最佳流量渠道?
- 2024-12-20自建AI入门:生成模型介绍——GAN和VAE浅析
- 2024-12-20游戏引擎的进化史——从手工编码到超真实画面和人工智能
- 2024-12-20利用大型语言模型构建文本中的知识图谱:从文本到结构化数据的转换指南
- 2024-12-20揭秘百年人工智能:从深度学习到可解释AI
- 2024-12-20复杂RAG(检索增强生成)的入门介绍
- 2024-12-20基于大型语言模型的积木堆叠任务研究
- 2024-12-20从原型到生产:提升大型语言模型准确性的实战经验
- 2024-12-20啥是大模型1
- 2024-12-20英特尔的 Lunar Lake 计划:一场未竟的承诺