本项目已归档,不再继续开发。后续开发已移至 ExLlamaV3。
ExLlamaV2 是一个推理库,用于在主流消费级 GPU 上运行本地大语言模型(LLMs)。
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
)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 和 V2 的快速性能对比。未来可能还会有更多性能优化,且不同 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 上的 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 提供自定义系统提示。
克隆仓库并运行安装脚本:
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 版本",即只安装 Python 组件,而不在安装过程中构建 C++ 扩展。扩展将在首次使用库时构建,并缓存到 ~/.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 token,在 2.55 bits per weight 的情况下产生连贯且基本稳定的输出。13B 模型可以在 8 GB VRAM 内以 2.65 bits 运行,但目前它们都没有使用 GQA,这实际上将上下文大小限制为 2048。无论如何,模型与桌面环境同时运行的可能性不大。
提供了量化模型的脚本。转换大型模型可能较慢。转换脚本及其选项的详细说明请参考此处。
提供了多个评估脚本。详情请查看此处。
测试社区可在 https://discord.gg/NSFwVuCjRq 加入。