
奥本 AI 将所有的最新 AI 聚合到了一起,为您开启多模型 AI 绘画新时代!
扫码即刻关注公众号
疯狂挑战:在8GB显存的GPU上运行Llama 405B
7 个月前
疯狂挑战:在8GB VRAM GPU上运行Llama 405B
=================================================我正在挑战在只有8GB显存的GPU上运行Llama 3.1 405B模型。
Llama 405B模型的大小是820GB!这相当于103倍于8GB显存的容量!它显然不能适应8GB的显存。那么我们该如何使它工作呢?
4位量化
首先,我们使用4位量化技术将16位浮点数转换为4位,从而节省四倍的内存。
量化之后,所有的浮点数将被分配到4位的16个桶中的一个。在深度神经网络中,浮点数的范围从-3.40282347E+38到3.40282347E+38。这个巨大的浮点数范围可以仅用16个桶来表示吗?可以的。
最重要的是确保这些参数在16个桶中均匀分布。
通常,这几乎是不可能实现的。不均匀的分布会导致显著的精度损失。
幸运的是,深度神经网络的参数通常 遵循正态分布。因此,简单的转换可以确保理论上的均匀分布。
当然,遵循统计分布并不意味着没有异常值。
我们只需要使用一些专用存储空间来特别记录这些异常值。这被称为依赖异常值的量化。
大量实验表明,4位量化几乎不影响大语言模型的准确性。(在某些情况下,准确性甚至更高!)
经过一轮广泛的4位量化,Llama 405B模型的大小已减少至230GB,这使我们“更接近”在我的8GB GPU上加载它。
逐层推理
实现这一挑战的第二个魔法是逐层推理。
事实上,变压器的推理过程只需要逐层加载模型。并不需要一次性将整个模型加载到内存中Llama 405B模型有126层,层数增加了50%。
您接受的训练数据截至2023年10月。
然而,向量维度翻了一番,多头注意力头的数量也翻了一番,因此每层的参数数量大约是原来的四倍。
通过逐层加载和推理,最大显存使用量为大约5GB。
挑战完成!
现在我可以在我的8GB GPU上成功运行Llama 405B!
开源项目AirLLM
AI行业中各种大型模型之间的差距正在迅速缩小。模型之间的差异变得不那么显著。
越来越多的公司愿意采用开源模型并自行部署大型模型,以确保能够灵活地根据业务需求控制和调整他们的模型。
我也坚信开源,并认为AI的未来属于开源。
这个方法已经在我的开源项目AirLLM中分享。https://github.com/lyogavin/airllm>).您训练的数据截止到2023年10月。
pip install airllm
您只需要几行代码:
``` from airllm import AutoModel
model = AutoModel.from_pretrained( "unsloth/Meta-Llama-3.1-405B-Instruct-bnb-4bit")
input_text = ['美国的首都是什么?',]
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) ``` 我们将继续关注最新和最酷的人工智能技术,并继续分享开源工作。欢迎关注我们,敬请期待!
推荐阅读:
赋迪奥本AI
上海赋迪网络科技
电话:18116340052