开源AirLLM,单卡4GB显存跑70B大模型

超级欧派课程 2024-04-29 05:55:39

目标:在单个4GB显卡上运行LLama 3 70B模型 - 使用airllm和分层推理技术

分层推理基本上是“分而治之”的方法。

并且这是在不使用量化、裁剪或其他模型压缩技术的情况下实现的

大型语言模型之所以体积大并占用大量内存,主要是因为它们的结构包含许多“层”。

一个LLM(Large Language Model)从嵌入投影层开始,然后是许多相同的变换器层。

一个70B的模型可以有多达80层。但在推理过程中,每一层都是独立的,只依赖于前一层的输出。

因此,运行完一层后,其内存可以被释放,只保留该层的输出。基于这个概念,我们用AirLLM实现了分层推理。

怎么实现呢❓

在基于Transformer的LLM中进行推理时,层会依序执行。前一层的输出为下一层的输入。每次只执行一层。

因此,完全没有必要把所有的层都保留在GPU内存中。在执行某一层时,我们可以把需要的层从磁盘加载进来,完成所有的计算,然后完全释放内存。

这样一来,每层所需的GPU内存只有一个变换器层的参数大小,约为整个模型的1/80,大概1.6GB。

接着使用flash attention深度优化CUDA内存访问以实现多倍的速度提升

按层分割模型文件。

使用HuggingFace Accelerate提供的meta device特性。当你通过meta device加载模型时,模型数据实际上并未读入,只加载了代码。所需内存为0。

提供了一个`compression`参数,用于做量化。

`compression`:支持的选项:4bit, 8bit,进行4位或8位的块级量化。

0 阅读:0

超级欧派课程

简介:感谢大家的关注