ExLlama 概述
ExLlama:用于量化权重的内存高效 Llama 实现
ExLlama 是 Llama 的一个独立 Python/C++/CUDA 实现,专为在使用现代 GPU 上的 4 位 GPTQ 权重时实现速度和内存效率而设计。该项目旨在为 Hugging Face Transformers 实现提供更快、更节省内存的替代方案,特别是对于使用量化模型的用户。
什么是 ExLlama?
ExLlama 旨在成为 Llama 系列语言模型的高性能推理引擎。它利用 CUDA 进行 GPU 加速,并针对 4 位 GPTQ 量化权重进行了优化,使用户能够在内存有限的 GPU 上运行大型语言模型。
ExLlama 如何工作?
ExLlama 通过以下几种技术优化内存使用和推理速度:
- CUDA 实现: 利用 CUDA 实现高效的 GPU 计算。
- 量化支持: 专门为 4 位 GPTQ 量化权重设计。
- 内存效率: 与标准实现相比,减少了内存占用。
主要特性和优势:
- 高性能: 针对快速推理进行了优化。
- 内存效率: 允许在性能较低的 GPU 上运行大型模型。
- 独立实现: 无需 Hugging Face Transformers 库。
- Web UI: 包括一个简单的 Web UI,方便与模型交互(JavaScript 由 ChatGPT 编写,请注意!)。
- Docker 支持: 可以在 Docker 容器中运行,以便于部署和安全性。
如何使用 ExLlama?
安装:
- 克隆存储库:
git clone https://github.com/turboderp/exllama - 导航到目录:
cd exllama - 安装依赖项:
pip install -r requirements.txt
- 克隆存储库:
运行基准测试:
python test_benchmark_inference.py -d <path_to_model_files> -p -ppl
运行 Chatbot 示例:
python example_chatbot.py -d <path_to_model_files> -un "Jeff" -p prompt_chatbort.txt
Web UI:
- 安装其他依赖项:
pip install -r requirements-web.txt - 运行 Web UI:
python webui/app.py -d <path_to_model_files>
- 安装其他依赖项:
为什么选择 ExLlama?
ExLlama 具有以下几个优势:
- 性能: 与其他实现相比,提供更快的推理速度。
- 可访问性: 使 GPU 内存有限的用户能够运行大型语言模型。
- 灵活性: 可以通过 Python 模块集成到其他项目中。
- 易用性: 提供一个简单的 Web UI 用于与模型交互。
ExLlama 适用于哪些人?
ExLlama 适用于:
- 研究人员和开发人员使用大型语言模型。
- 使用 NVIDIA GPU 的用户(推荐 30 系列及更高版本)。
- 那些寻求内存高效和高性能推理解决方案的人。
- 任何有兴趣使用 4 位 GPTQ 量化运行 Llama 模型的人。
硬件要求:
- NVIDIA GPU(推荐 RTX 30 系列或更高版本)
- ROCm 支持在理论上可行,但未经测试
依赖项:
- Python 3.9+
- PyTorch(在 2.0.1 和 2.1.0 nightly 上测试)与 CUDA 11.8
- safetensors 0.3.2
- sentencepiece
- ninja
- flask 和 waitress(对于 Web UI)
Docker 支持:
ExLlama 可以在 Docker 容器中运行,以便于部署和安全性。Docker 镜像支持 NVIDIA GPU。
结果和基准:
ExLlama 与其他实现相比,在性能方面表现出显著的改进,尤其是在推理期间的每秒令牌数 (t/s) 方面。提供了针对不同 GPU 配置的各种 Llama 模型大小(7B、13B、33B、65B、70B)的基准。
使用示例
import torch
from exllama.model import ExLlama, ExLlamaCache, ExLlamaConfig
from exllama.tokenizer import ExLlamaTokenizer
## 初始化模型和 tokenizer
model_directory = "/path/to/your/model"
tokenizer_path = os.path.join(model_directory, "tokenizer.model")
model_config_path = os.path.join(model_directory, "config.json")
config = ExLlamaConfig(model_config_path)
config.model_path = os.path.join(model_directory, "model.safetensors")
tokenizer = ExLlamaTokenizer(tokenizer_path)
model = ExLlama(config)
cache = ExLlamaCache(model)
## 准备输入
prompt = "The quick brown fox jumps over the lazy"
input_ids = tokenizer.encode(prompt)
## 生成输出
model.forward(input_ids, cache)
token = model.sample(temperature = 0.7, top_k = 50, top_p = 0.7)
output = tokenizer.decode([token])
print(prompt + output)
兼容性和模型支持:
ExLlama 与一系列 Llama 模型兼容,包括 Llama 1 和 Llama 2。该项目不断更新以支持新模型和功能。
ExLlama 是任何希望高效运行 Llama 模型的人的强大工具。它专注于内存优化和速度,使其成为研究和实际应用的绝佳选择。
"ExLlama"的最佳替代工具
ChatLLaMA 是基于 LLaMA 模型的 LoRA 训练 AI 助手,可在本地 GPU 上运行自定义个人对话。提供桌面 GUI,使用 Anthropic 的 HH 数据集训练,支持 7B、13B 和 30B 模型。
使用 llama.cpp 实现高效的 LLM 推理,这是一个为各种硬件优化的 C/C++ 库,支持量化、CUDA 和 GGUF 模型。 非常适合本地和云部署。
Avian API为开源LLM提供最快的AI推理,在DeepSeek R1上实现351 TPS。使用兼容OpenAI的API以3-10倍的速度部署任何HuggingFace LLM。企业级性能和隐私。