社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

杀疯了!4GB 显存跑 70B 大模型,不量化不剪枝,GitHub 狂揽 2.8 万 Star

极客之家 • 2 周前 • 73 次点击  

 

 

本地跑大模型的人,绕不开量化这个词。模型装不下显存,就压成 8bit、4bit,效果差一点也得接受,不然根本跑不起来。我自己的显卡 8G,不量化的话,14B 以上的模型想都不用想。

前阵子翻到 AirLLM 这个项目,它做的事情刚好相反:不量化,不蒸馏,不剪枝,跑原始权重,然后告诉你 4GB 显存就能跑 70B 的模型,140GB 的东西塞进 4GB 显存里,听着就不太对劲。我把 README 和社区的实测帖都翻了一遍,确认它不是吹牛,觉得值得写一篇。

这项目 2023 年底就有了,一直在更新,最近支持的模型越来越多,热度又起来了。

简介

AirLLM 是一个 Python 库,Apache 2.0 协议开源,GitHub 上 2.8万 Star。它的用途就一个:让显存不大的显卡也能跑大模型。

官方给的数字是这样的:

模型
参数量
需要的显存
Llama 3.x 70B
70B
约 4GB
Llama 3.1 405B
405B
约 8GB
DeepSeek-V3
671B
约 12GB
Kimi K3(MoE)
2.8T
实测 3.72GB

这些数字说的都是原始权重,没有经过量化,也就是说跑出来的效果,就是模型本来的效果。

先把话说在前面,它跑得很慢,慢到什么程度我在使用场景那节讲,能接受这一点再往下看。

它能做什么

4GB 显存跑 70B 模型

大模型推理的时候,不是整个模型同时干活,是一层一层往下算的。AirLLM 的做法就是显存里只放当前这一层,算完挪走,再读下一层进来。模型权重整个放在硬盘上,用到哪层读哪层。

所以显存占用只取决于单层多大,跟模型总大小没关系。70B 的模型一层大概 1.6GB,4GB 显存够用。

MoE 架构的模型还更省,DeepSeek-V3、Kimi K3 这种,每次推理只激活一部分专家,AirLLM 只把当前用到的那个专家读进来,所以 2.8T 的模型,显存占用也不高。

主流开源模型基本都支持

用法就是传一个模型 ID,一行代码的事。支持的模型列表很长:Llama 2/3/3.1/4、Qwen 全系列、DeepSeek V2/V3/R1、Mistral、Mixtral、Phi、Gemma、ChatGLM、百川、InternLM、Yi。官方说新出的热门模型基本发布当天就能用。

想快一点,可以开压缩

默认是不压缩的,想快一点的话,它给了 4bit 和 8bit 两种压缩选项,官方说最多快 3 倍。README 里有张对比图,同样一段推理,不压缩 449 秒,8bit 是 237 秒,4bit 是 157 秒。代价是精度有一点损失,官方的说法是可以忽略。

开压缩之前要先装 bitsandbytes,快速开始那节有命令。

Mac 和纯 CPU 也能跑

没有 N 卡也能用。Mac 只支持 M 系列芯片,装好 mlx 和 torch,代码跟在 Linux 上写的一样。它还支持纯 CPU 推理,速度更慢,但能把流程跑通,适合手头什么卡都没有的情况。

预取机制,默认开着

GPU 算当前这一层的时候,下一层已经在后台从硬盘往内存里读了,两件事同时进行,官方数据是能快 10% 左右。这个功能默认就是开的,我们不用做任何配置。

快速开始

装库就一行:

pip install airllm

想用压缩加速的话,再装一个:

pip install -U bitsandbytes

代码跟平时用 transformers 差不多:

from airllm import AutoModel

model = AutoModel.from_pretrained("Qwen/Qwen3-32B")

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=20,
    use_cache=True,
    return_dict_in_generate=True)

print
(model.tokenizer.decode(generation_output.sequences[0]))

想跑更大的模型,改一行模型名就行。Qwen3-235B 大概占 3GB 显存,DeepSeek-V3 大概占 12GB。

有几个坑提前说一下:

1、第一次跑的时候,它会先把模型整个下载下来,再一层一层拆开存到磁盘,所以磁盘空间一定要够。70B 的模型光下载就要 130GB 上下,拆分还会再占一份。磁盘不够的话,报错信息很迷惑,官方 FAQ 专门写了这一条。

2、模型文件最好放 SSD 上,它大部分时间都花在从硬盘读权重,机械硬盘会慢到离谱。硬盘实在紧张的话,可以传  delete_original=True,拆完之后把原始模型文件删掉,能省一半空间。

3、Llama 这类需要申请权限的模型,要传 Hugging Face 的 token 才能下载。Qwen、DeepSeek 这些没有这道门槛,直接下。

使用场景

先说适合的

1、离线批量任务: 比如本地有一批文档要总结、一批数据要打标,扔给它慢慢跑,跑一晚上出结果,这种场景速度不重要,能跑完就行。

2、本地实验和学习: 想看看 70B 的模型到底什么水平,又不想租云上的卡,用它在自己机器上就能试。跑的是原始权重,我们看到的效果就是模型真实的效果,没有被量化坑过一遍。

3、数据不能出本地的场合: 有些行业的数据没法传到外面的服务上,本地部署是硬要求,显存又不够,这种时候它是少数几个能走通的方案。

再说不适合的

任何要实时交互的场景都不行。 在线聊天、客服、代码补全,这些等不起,它的速度瓶颈在硬盘读数据上,快的时候一两秒出一个字,慢的时候几十秒出一个字都有可能。

社区里有人在 RTX 6000 Ada 上实测,跑出过将近 300 秒一个字的成绩,它就不是干这个的。

想本地跑聊天助手的话,用 llama.cpp 或者 Ollama 加载量化模型,体验好得多。

我的看法

我对这个项目的定位是:它解决的是能不能跑的问题,不是跑得快不快的问题。

Hacker News 上有人拿速度说事,说一分钟出不了几个字。速度确实是它的短板,这个没什么好争的,但反过来想,手里只有消费级显卡的人,以前根本没机会在自己机器上碰 70B、671B 这个量级的模型,现在至少能跑了。批量任务挂一晚上,早上起来看结果,我觉得是可以接受的。

我做 Java 出身,早几年用大模型就是调接口,接口后面怎么跑的跟我没关系。这两年自己折腾本地模型,才发现显存是最现实的一道坎,多大的模型、多少钱的卡,先过这一关再说。AirLLM 把这关的门槛拉得很低,这是我介绍它的理由之一。

最后强调,如果你的需求是本地跑个助手聊天,不要用这个,等一个字几十秒谁也受不了。它适合的就是批量任务和本地实验这两类事。


开源地址:

https://github.com/lyogavin/airllm

 

这个公众号曾分享过许多有趣的开源项目。如果你不想逐篇翻阅历史文章,也可以直接关注微信公众号“极客之家”,通过后台留言与我们互动交流

图片

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/199487