开始之前
先了解这个项目的现状:ExLlamaV2 的 README 现在已把它标为归档,开发转到了 ExLlamaV3 及其 EXL3 格式;以前能加载 EXL2 的服务端 —— TabbyAPI 和 text-generation-webui —— 现在加载的是 EXL3。EXL2 仍然能跑,通过 ExLlamaV2 自带的脚本在本机运行,本指南就是这么做的;它已经没有仍在维护的 API 服务端。然后是硬件:一张 NVIDIA 显卡 —— ExLlamaV2 只支持 CUDA,没有 ROCm 也没有 Metal 路径,所以这是唯一一个「硬件问题在别的事情之前就已经定了」的运行时。推荐 Ampere 及更新架构。Python 3.10 或更高版本,以及编译扩展所需的 CUDA 工具包和编译器。请克隆仓库,而不只是 `pip install exllamav2`:PyPI 上的包是 JIT 版本的库,下面用到的 chat 脚本在仓库的 `examples/` 目录里。仓库在 `turboderp-org` 名下;旧的 `turboderp/exllamav2` 地址仍会重定向。
git clone https://github.com/turboderp-org/exllamav2
cd exllamav2
pip install -r requirements.txt
pip install .获取 EXL2 模型
EXL2 是一个目录,不是单个文件 —— 从 GGUF 过来、期待下载一个 `.gguf` 的人常在这里卡住。它的量化是逐层进行的,位宽是一个连续的旋钮而不是一份菜单,这正是这个格式「每比特精度更高」的来源。本索引收录了 21 个提供 EXL2 版本的模型,大多是 4.65bpw。
pip install -U huggingface_hub # provides the hf command
hf download turboderp/Llama-3.1-8B-Instruct-exl2 \
--revision 4.65bpw \
--local-dir ./models/Llama-3.1-8B-exl2-4.65bpw跑起来
自带的 chat 示例是验证安装最快的方式。`-mode` 选的是聊天模板,必须和模型匹配 —— Llama 3.x 用 `llama3`(`llama` 是 Llama 1/2 的格式,也能回答,只是答得很差),`-modes` 可以列出其他模板。`-gs auto` 会让它自己算出在你的显卡之间怎么切分,这是当前文档推荐的写法 —— 旧教程会手写每张卡多少 GB(比如 `-gs 16`),那种写法只有在你刻意要给某张卡留出显存时才值得用。
python examples/chat.py \
-m ./models/Llama-3.1-8B-exl2-4.65bpw \
-mode llama3 \
-gs auto确认它真的跑起来了
ExLlamaV2 没有 CPU 回退路径,所以不像 llama.cpp 那样会变慢,它会直接报错 —— 这其实很方便。真正要检查的是显存:加载模型时盯着显卡,把实际占用和应该占用的量对照一下。
nvidia-smi --query-gpu=memory.used --format=csv -l 1
# Llama 3.1 8B at 4.65bpw should settle around 5.4 GB at 4K context.
# Substantially more usually means the context length is larger than you think.数字大概该是什么样
Llama 3.1 8B 在 EXL2 4.65bpw 下权重 4.4 GB,4K 上下文合计 5.4 GB,32K 时升到 9.3 GB —— 到那时 KV 缓存几乎和权重一样大。本索引对这个配置有实测记录:**RTX 4090 上 235 tok/s**、**RTX 3090 上 175 tok/s**。那个 4090 的数字基本上就顶在这个文件体积对应的带宽上限上,这正是 ExLlamaV2 出名的地方,也是它在同一张卡上快过同模型 GGUF 版本的原因。
出问题时
报错提示某个编译扩展导入失败:说明 wheel 和你的 Python 或 CUDA 版本不匹配 —— 用 `pip install .` 从源码编译会针对你实际的环境构建,代价是编译时间很长。此前能加载的上下文长度现在爆显存:KV 缓存随窗口线性增长,在 32K 时这个模型的缓存几乎和权重一样大,所以该改的是上下文而不是量化档位。模型目录完全加载不了:确认它是 EXL2 转换版而不是原始权重 —— 两者的目录结构看起来很像,但只有一个含有量化后的张量。另外这里没有 CPU offload,这是设计使然,所以 llama.cpp 里那种「靠系统内存搭把手就装下了」在这里不成立。
常见问题
ExLlamaV2 比 llama.cpp 快吗?
在单张 NVIDIA 卡上,按本索引自己的实测数据,是的:RTX 4090 上 Llama 3.1 8B 用 ExLlamaV2 跑 EXL2 4.65bpw 实测 235 tok/s,而用 llama.cpp 跑 GGUF Q4_K_M 是 148 tok/s。代价是适用面 —— ExLlamaV2 只支持 CUDA,而 llama.cpp 还能跑在 CPU、AMD 和 Apple 芯片上。
EXL2 模型为什么是一个文件夹而不是一个文件?
因为它的量化是逐层进行、位宽连续的,所以这个格式保留了模型本身的结构,而不像 GGUF 那样把所有东西打包进一个容器。用 `--revision` 下载指定的位宽 —— 同一个仓库里通常有好几个,直接拉默认分支得到的是发布者设为主分支的那一个。
A 卡或者 Mac 能跑 EXL2 吗?
不能。ExLlamaV2 只支持 CUDA —— 没有 ROCm 构建,也没有 Metal 路径,所以不管你有多少显存,这个格式在 AMD 和 Apple 芯片上都用不了。什么硬件都能跑的格式是 GGUF,本索引的每个模型都提供它。
这篇指南用到了什么
- 格式
- EXL2
- 对应推荐
- 24GB 能跑的最好的本地大模型
接下来
看看 🟢 RTX 4090 还能跑哪些模型反向查询 —— 24GB、8192 上下文,按质量排序本文涉及的模型
它真的跑起来了吗?
复制命令并不等于它能用,所以站内只在这里问一次。除了你的这个回答之外,不收集任何东西。