OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  代码  ›  ExLlamaV2 — 针对量化 LLM 推理优化的高效本地引擎

ExLlamaV2 — 针对量化 LLM 推理优化的高效本地引擎

 
  spark ·  2026-05-27 11:00:27 · 1 次点击  · 0 条评论  

注意

本项目已归档,不再继续开发。后续开发已移至 ExLlamaV3

ExLlamaV2

ExLlamaV2 是一个推理库,用于在主流消费级 GPU 上运行本地大语言模型(LLMs)。

ExLlamaV2 官方推荐的后端服务器是 TabbyAPI,它提供了兼容 OpenAI 的 API,支持本地或远程推理,并具备 HF 模型下载、嵌入模型支持以及 HF Jinja2 聊天模板等扩展功能。

请参阅 Wiki 以获取入门帮助。

v0.1.0+ 新特性

  • ExLlamaV2 现在通过 Flash Attention 2.5.7+ 支持分页注意力(Paged Attention)。
  • 新增动态批处理、智能提示缓存、K/V 缓存去重以及简化 API 的全新生成器。

动态生成演示

动态生成器

动态生成器整合了前两个生成器的所有推理、采样和推测解码功能,统一在一个 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 提供自定义系统提示。

集成与 API

  • TabbyAPI:基于 FastAPI 的服务器,提供兼容 OpenAI 风格的 Web API,可与 SillyTavern 等前端配合使用。
  • ExUI:简单、独立的单用户 Web UI,直接提供 ExLlamaV2 实例的聊天和笔记本模式。
  • text-generation-webui:通过 exllamav2exllamav2_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 版本",即只安装 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 安装

PyPI 上也提供了相应的包。这与 JIT 版本相同。安装方法如下:

pip install exllamav2

EXL2 量化

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 加入。

bot test 中免费提供量化服务。计算资源由 Bloke 慷慨提供,并由 Lambda labs 支持。

HuggingFace 仓库

  • 我在 Hugging Face 上传了一些 EXL2 量化模型供体验,请点击此处
  • LoneStriker 在 Hugging Face 上提供了大量 EXL2 模型。
  • bartowski 也在 HF 上提供了一些 EXL2 模型。
1 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私 ·  条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 18 ms
Developed with Cursor