ExLlama 是一个针对 4 位 GPTQ 量化权重的 Llama 模型推理实现,采用 Python、C++ 和 CUDA 编写,作为 Hugging Face Transformers 中 Llama 实现的更节省内存的重写版本。该项目旨在在现代 GPU 上提供快速且内存高效的推理。
用途
ExLlama 主要用于运行经过 GPTQ 4 位量化的 Llama 系列模型,适用于需要在消费级 GPU 上高效推理大语言模型的场景。它通过优化内存使用和计算速度,使得在有限显存下运行较大模型成为可能。
主要能力
- 支持 4 位 GPTQ 量化权重,显著降低显存占用。
- 针对 NVIDIA 30 系列及更新 GPU(如 RTX 4090、RTX 3090-Ti)优化,提供高性能推理。
- 提供独立的 Python 模块,便于集成到其他项目。
- 包含简单的 Web UI,支持多机器人模式,会话默认存储在 ~/exllama_sessions/ 目录。
- 支持分片模型(sharded models),可处理多个 .safetensors 文件。
- 提供 Docker 支持,可在隔离容器中运行 Web UI(仅限 NVIDIA GPU),支持 rootless 模式。
- 已初步发布 ExLlamaV2,功能有所改进。
使用方式
环境要求
- Python 3.9 或更高版本。
- PyTorch 2.0.1 或 2.1.0(nightly),配合 cu118。
- safetensors 0.3.2。
- 仅 Web UI 需要额外依赖(Linux/WSL 或 Windows 前置条件)。
Windows 安装(非 WSL)
- 安装 MSVC 2022(Visual Studio 2022 IDE 或 Build Tools for Visual Studio 2022,确保勾选“使用 C++ 的桌面开发”)。
- 安装合适版本的 PyTorch,选择 CUDA 版本(稳定版 2.0.1 也可)。
- 安装 CUDA Toolkit(11.7 或 11.8 均可,需与 PyTorch 的 Compute Platform 版本匹配)。
- 为获得最佳性能,启用硬件加速 GPU 调度。
克隆与运行
- 克隆仓库,安装依赖,运行基准测试。
- CUDA 扩展在运行时加载,无需单独安装。首次运行时会编译并缓存到 ~/.cache/torch_extensions/,可能需要一些时间。
- 提供聊天机器人示例。
Web UI
- 可通过简单 Web UI 使用,支持多机器人模式。
- 会话默认存储在 ~/exllama_sessions/,可通过 -sd 更改位置。
- 可通过 Docker 容器隔离运行,需使用 NVIDIA Container Toolkit,推荐 rootless 模式。
- 使用 docker compose 构建镜像:设置 .env 文件中的 MODEL_PATH 和 SESSIONS_PATH 变量,然后运行 docker compose 命令。也可手动构建。
- 默认容器内服务以非 root 用户运行,会更改绑定挂载目录的所有权,可通过设置 RUN_UID=0 禁用。
- Web UI 可通过 http://localhost:5000 访问。
- 配置可在 docker-compose.yml 中查看,并通过 docker-compose.override.yml 修改。
适用场景
- 在本地 GPU 上运行 4 位量化的 Llama 模型进行推理和对话。
- 需要低显存占用、高推理速度的场景。
- 集成到其他 Python 项目中。
- 通过 Web UI 进行交互式对话,支持多机器人。
- 在 Docker 环境中部署以增强安全性和易部署性。
限制
- 项目仍在进行中,可能不完善。
- 仅支持 30 系列及更新的 NVIDIA GPU,Pascal 或更旧 GPU 性能不佳,建议使用 AutoGPTQ 或 GPTQ-for-LLaMa。
- ROCm(AMD GPU)理论上支持(通过 HIP),但作者没有 AMD 设备进行测试或优化。
- 无法在不发生 OOM 的情况下达到完整序列长度。
- 显存使用受 PyTorch 内部开销影响,难以精确预测,建议在 24 GB GPU 上优化模型显存占用至 20 GB 左右。
- 困惑度(Perplexity)测量仅用于验证模型工作,数据集为 WikiText 的小样本,分数不可与其他 Llama 基准直接比较。
- Docker 镜像目前仅支持 NVIDIA GPU。
- 模型支持列表和更新日志:2023-01-09 添加 rope_theta 参数支持 CodeLlama(部分),2023-08-09 支持分片模型,2023-08-12 初步发布 ExLlamaV2。
- 官方确认可用的模型列表在仓库中提供。
分类
根据其用途,ExLlama 属于 AI 开发平台(ai-frameworks),因为它是用于模型推理的框架/实现。