为了账号安全,请及时绑定邮箱和手机立即绑定

疯狂挑战:在8GB显存的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%。

然而,向量维度翻倍了,多头注意力头的数量也翻倍了,所以每层的参数数量大约是原来的四倍

通过逐层加载和推理,最大VRAM使用量约为5GB

挑战完成!

现在我可以在我8GB的GPU上成功运行Llama 405B了!

开源项目 AirLLM

人工智能行业的各种大型模型之间的差距正在迅速缩小。模型之间的差异变得不那么显著了。

越来越多的公司愿意采用开源模型并自行部署大型模型,确保可以根据业务需求灵活控制和调整模型。

我也非常支持开源,并认为 人工智能的未来属于开源。

这种方法已经在我的开源项目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)

我们将继续关注最新和最酷的人工智能技术,并继续分享开源工作。欢迎关注我们,敬请期待!

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消