此项目目前处于归档状态。开发工作已转移至 ExLlamaV3。
ExLlamaV2 是一个用于在现代消费级 GPU 上运行本地大语言模型的推理库。
ExLlamaV2 官方推荐的后端服务器是 TabbyAPI,它提供了与 OpenAI 兼容的 API,支持本地或远程推理,并扩展了功能,如 HF 模型下载、嵌入模型支持以及对 HF Jinja2 聊天模板的支持。
请参阅 wiki 获取入门帮助。

动态生成器整合了之前两个生成器的所有推理、采样和推测解码功能,统一为一个 API(FP8 缓存除外,但支持 Q4 缓存模式且性能更优,详见此处)。
生成器的详细说明见此处。
python
output = generator.generate(prompt = "Hello, my name is", max_new_tokens = 200)python
outputs = generator.generate(
prompt = [
"Hello, my name is",
"Once upon a time,",
"Large language models are",
],
max_new_tokens = 200
)asyncio 进行流式生成:python
job = ExLlamaV2DynamicJobAsync(
generator,
input_ids = tokenizer.encode("You can lead a horse to water"),
banned_strings = ["make it drink"],
gen_settings = ExLlamaV2Sampler.Settings.greedy(),
max_new_tokens = 200
)
async for result in job:
text = result.get("text", "")
print(text, end = "") 以下是与 ExLlama V1 性能对比的快速测试。未来可能会有更多性能优化,不同 GPU 上的速度会有所不同,慢速 CPU 仍可能成为瓶颈:
| 模型 | 模式 | 大小 | 组大小 | 激活顺序 | 3090Ti | 4090 |
|---|---|---|---|---|---|---|
| Llama | GPTQ | 7B | 128 | 否 | 181 t/s | 205 t/s |
| Llama | GPTQ | 13B | 128 | 否 | 110 t/s | 114 t/s |
| Llama | GPTQ | 33B | 128 | 是 | 44 t/s | 48 t/s |
| OpenLlama | GPTQ | 3B | 128 | 是 | 259 t/s | 296 t/s |
| CodeLlama | EXL2 4.0 bpw | 34B | - | - | 44 t/s | 50 t/s |
| Llama2 | EXL2 3.0 bpw | 7B | - | - | 217 t/s | 257 t/s |
| Llama2 | EXL2 4.0 bpw | 7B | - | - | 185 t/s | 211 t/s |
| Llama2 | EXL2 5.0 bpw | 7B | - | - | 164 t/s | 179 t/s |
| Llama2 | EXL2 2.5 bpw | 70B | - | - | 33 t/s | 38 t/s |
| TinyLlama | EXL2 3.0 bpw | 1.1B | - | - | 656 t/s | 770 t/s |
| TinyLlama | EXL2 4.0 bpw | 1.1B | - | - | 602 t/s | 700 t/s |
要从源码安装,你需要 CUDA 工具包以及 Linux 上的 gcc 或 Windows 上的(Build Tools for)Visual Studio。同时确保安装了合适版本的 PyTorch,然后运行:
git clone https://github.com/turboderp/exllamav2
cd exllamav2
pip install -r requirements.txt
pip install .
python test_inference.py -m <模型路径> -p "Once upon a time,"
# 对于多 GPU 推理,可附加 '--gpu_split auto' 标志
包含一个简单的控制台聊天机器人。运行方式:
python examples/chat.py -m <模型路径> -mode llama -gs auto
-mode 参数选择使用的提示词格式。raw 将产生适用于基础模型和各种微调模型的简单聊天记录式对话。使用 -modes 运行可查看所有可用的提示词格式列表。你也可以使用 -sp 提供自定义的系统提示词。
TabbyAPI 是一个基于 FastAPI 的服务器,提供与 SillyTavern 及其他前端兼容的 OpenAI 风格 Web API。
ExUI 是一个简单、独立的单用户 Web UI,直接服务于 ExLlamaV2 实例,提供聊天和笔记本模式。
text-generation-webui 通过 exllamav2 和 exllamav2_HF 加载器支持 ExLlamaV2。
lollms-webui 通过 exllamav2 绑定支持 ExLlamaV2。
要安装当前的开发版本,克隆仓库并运行安装脚本:
git clone https://github.com/turboderp/exllamav2
cd exllamav2
pip install -r requirements.txt
pip install .
默认情况下,这也会编译并安装库所依赖的 Torch C++ 扩展 (exllamav2_ext)。你可以通过设置 EXLLAMA_NOCOMPILE 环境变量跳过此步骤:
EXLLAMA_NOCOMPILE= pip install .
这将安装包的“JIT 版本”,即在不构建 C++ 扩展的情况下安装 Python 组件。相反,扩展将在首次使用库时构建,然后缓存在 ~/.cache/torch_extensions 中以供后续使用。
发布版本可在此处获取,其中包含扩展二进制文件的预构建 wheel 包。请确保下载与你的平台、Python 版本 (cp) 和 CUDA 版本匹配的正确版本。关键的是,你还必须将预构建的 wheel 包与你的 PyTorch 版本匹配,因为 Torch C++ 扩展 ABI 在每个新版本的 PyTorch 中都会破坏。
可以下载合适的 wheel 包,或直接从相应的 URL 安装:
pip install https://github.com/turboderp/exllamav2/releases/download/v0.0.12/exllamav2-0.0.12+cu121-cp311-cp311-linux_x86_64.whl
py3-none-any.whl 版本是 JIT 版本,将在首次启动时构建扩展。.tar.gz 文件也可以这样安装,它会在安装过程中构建扩展。
PyPI 上也提供了包。这与 JIT 版本相同(见上文)。可以通过以下方式安装:
pip install exllamav2
ExLlamaV2 支持与 V1 相同的 4 位 GPTQ 模型,但也支持新的“EXL2”格式。EXL2 基于与 GPTQ 相同的优化方法,支持 2、3、4、5、6 和 8 位量化。该格式允许在模型内混合量化级别,以实现每权重 2 到 8 位之间的任何平均比特率。
此外,可以对每个线性层应用多种量化级别,产生类似于稀疏量化的效果,其中更重要的权重(列)使用更多位进行量化。让 ExLlama 高效处理激活顺序模型的相同重映射技巧,使得这种格式混合对性能的影响微乎其微。
参数选择是自动完成的,通过对每个矩阵进行多次量化,针对每层的一系列可能设置,测量量化误差(相对于选定的校准数据)。最后,选择一个组合,在满足目标平均比特率的同时,最小化整个模型的最大量化误差。
在我的测试中,这种方案允许 Llama2 70B 在单个 24 GB GPU 上运行,支持 2048 个令牌的上下文,以每权重 2.55 位的比特率产生连贯且基本稳定的输出。13B 模型可以在 8 GB VRAM 内以 2.65 位运行,尽管目前它们都没有使用 GQA,这实际上将上下文大小限制在 2048。无论哪种情况,模型都不太可能与桌面环境同时运行。目前如此。
提供了一个脚本来量化模型。转换大型模型可能有些慢,请注意。转换脚本及其选项在此处详细说明。
提供了一些评估脚本。详情见此处。
测试社区地址:https://discord.gg/NSFwVuCjRq
在 #bot test 频道提供免费的量化服务。计算资源由 Lambda labs 慷慨提供,并由 The Bloke 支持。
我已上传了一些 EXL2 量化模型到 Hugging Face 供试用,地址在此。
LoneStriker 在 Hugging Face 上提供了大量 EXL2 模型。
bartowski 在 HF 上有更多 EXL2 模型。