OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  代码  ›  exllamav2 — 针对量化模型优化的高性能推理库

exllamav2 — 针对量化模型优化的高性能推理库

 
  seven ·  2026-02-13 19:17:43 · 6 次点击  · 0 条评论  

注意

此项目目前处于归档状态。开发工作已转移至 ExLlamaV3

ExLlamaV2

ExLlamaV2 是一个用于在现代消费级 GPU 上运行本地大语言模型的推理库。

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

请参阅 wiki 获取入门帮助。

v0.1.0+ 版本的新特性:

  • ExLlamaV2 现在通过 Flash Attention 2.5.7+ 支持分页注意力机制。
  • 新的生成器,具备动态批处理、智能提示词缓存、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 )
  • 使用 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 提供自定义的系统提示词。

集成与 API

  • TabbyAPI 是一个基于 FastAPI 的服务器,提供与 SillyTavern 及其他前端兼容的 OpenAI 风格 Web API。

  • ExUI 是一个简单、独立的单用户 Web UI,直接服务于 ExLlamaV2 实例,提供聊天和笔记本模式。

  • text-generation-webui 通过 exllamav2exllamav2_HF 加载器支持 ExLlamaV2。

  • lollms-webui 通过 exllamav2 绑定支持 ExLlamaV2。

安装

方法 1:从源码安装

要安装当前的开发版本,克隆仓库并运行安装脚本:

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 中以供后续使用。

方法 2:从发布版本安装(包含预构建扩展)

发布版本可在此处获取,其中包含扩展二进制文件的预构建 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 文件也可以这样安装,它会在安装过程中构建扩展。

方法 3:从 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 个令牌的上下文,以每权重 2.55 位的比特率产生连贯且基本稳定的输出。13B 模型可以在 8 GB VRAM 内以 2.65 位运行,尽管目前它们都没有使用 GQA,这实际上将上下文大小限制在 2048。无论哪种情况,模型都不太可能与桌面环境同时运行。目前如此。

聊天截图
聊天截图

转换

提供了一个脚本来量化模型。转换大型模型可能有些慢,请注意。转换脚本及其选项在此处详细说明

评估

提供了一些评估脚本。详情见此处

社区

测试社区地址:https://discord.gg/NSFwVuCjRq
在 #bot test 频道提供免费的量化服务。计算资源由 Lambda labs 慷慨提供,并由 The Bloke 支持。

HuggingFace 仓库

  • 我已上传了一些 EXL2 量化模型到 Hugging Face 供试用,地址在此

  • LoneStriker 在 Hugging Face 上提供了大量 EXL2 模型。

  • bartowski 在 HF 上有更多 EXL2 模型。

6 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私政策 ·  服务条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 19 ms
Developed with Cursor