优化 Mac 和 Ubuntu 上的 LLM 性能

在使用配备 Apple M1 或 M2 芯片的 MacBook Pro 或配备双 NVIDIA 2080 Ti GPU 的 Ubuntu 进行大型语言模型 (LLMs) 的工作时,优化性能和有效利用 GPU 加速至关重要。本文将探讨如何安装和使用带有 GPU 支持的 Ollama,以及其他提供 OpenAI API 兼容性的类似工具。
1. macOS 上带有 GPU 加速的 Ollama
Ollama 利用 llama.cpp 库,该库支持 macOS 上的 Metal API 以实现 GPU 加速。以下是启用和验证 Ollama GPU 加速的方法:
启用 GPU 加速
Ollama 会自动检测您的硬件并默认使用 GPU 加速。因此,不需要额外的配置。如果您的 MacBook 配备了 M1 或 M2 芯片,它将使用 Metal 框架来提升性能。
验证 GPU 加速
要检查 GPU 加速是否已激活,可以运行一个推理任务并将其性能与仅使用 CPU 的执行进行比较。您还可以分析日志以查找 Metal 使用的迹象。
性能优化
- 使用量化模型:Ollama 支持加载量化版本的模型(例如,4 位、8 位),这可以进一步提高 GPU 加速的效率。
- 选择较小的模型:选择较小的变体(如
llama-7b)以减少硬件负载。
2. 类似的工具和平台
如果您正在寻找支持本地执行和 GPU 加速且与 OpenAI API 兼容的 Ollama 替代品,请考虑以下选项:
(1) 文本生成 Web UI
- 描述:一个用于运行 LLaMA、GPT-J 等模型的开源 Web 界面。
- 特点:
- OpenAI API 兼容性。
- macOS Metal GPU 加速。
- 安装:
git clone https://github.com/oobabooga/text-generation-webui.git
cd text-generation-webui
pip install -r requirements.txt
python server.py
(2) GPT4All
- 描述:一个支持多种模型的本地 LLM 项目。
- 特点:
- macOS Metal 加速。
- 易于使用的 CLI 和 GUI。
- 安装:
brew install gpt4all
gpt4all
(3) LocalAI
- 描述:一个与 OpenAI 兼容的 LLaMA 模型 API 服务。
- 特点:
- macOS Metal 加速。
- 支持 REST API。
- 安装:
curl -LO https://github.com/go-skynet/LocalAI/releases/download/v1.0.0/local-ai-darwin-arm64
chmod +x local-ai-darwin-arm64
./local-ai-darwin-arm64
(4) MLC LLM
- 描述:一个针对 macOS 和移动设备优化的框架。
- 特点:
- 通过 Apple Metal 实现 GPU 加速。
- 支持多种模型。
- 安装: 下载预编译的二进制文件并加载模型以运行。
(5) llama.cpp
- 描述:一个用于高效运行 LLaMA 模型的框架。
- 特点:
- 支持 Metal API。
- 安装:
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
make
./main -m path/to/llama/model
3. 在 Ubuntu 上使用多个 NVIDIA GPU
要在 Ubuntu 上使用两个 NVIDIA 2080 Ti GPU 为大型模型提供 OpenAI 兼容的 API 服务时,请遵循以下步骤:
系统和环境准备
- 安装 NVIDIA 驱动程序:
sudo apt update
sudo apt install -y nvidia-driver-530
reboot
-
安装 CUDA 和 cuDNN:确保与您的驱动程序版本兼容。
-
安装 Python 和依赖项:
sudo apt install -y python3 python3-pip
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
使用分布式推理框架
利用 DeepSpeed 或 Hugging Face Accelerate 等框架高效利用两个 GPU:
DeepSpeed
- 安装:
pip install deepspeed
- 推理示例:
import deepspeed
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "EleutherAI/gpt-neo-2.7B"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
ds_engine = deepspeed.init_inference(model=model, mp_size=2)
Hugging Face Accelerate
- 安装:
pip install accelerate
- 配置:
accelerate config
- 推理示例:
from transformers import AutoModelForCausalLM, AutoTokenizer
from accelerate import infer_auto_device_map
model_name = "EleutherAI/gpt-neo-2.7B"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
device_map = infer_auto_device_map(model)
4. 提供 OpenAI 兼容的 API
要提供 OpenAI 兼容的 API,可以考虑使用 FastAPI 或 LocalAI:
FastAPI + Uvicorn
- 安装:
pip install fastapi uvicorn
- API 服务代码:
from fastapi import FastAPI
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
app = FastAPI()
model_name = "EleutherAI/gpt-neo-2.7B"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
@app.post("/v1/completions")
async def completions(request: CompletionRequest):
inputs = tokenizer(request.prompt, return_tensors="pt").to("cuda:0")
outputs = model.generate(**inputs)
return {"choices": [{"text": outputs[0]}]}
- 运行:
uvicorn serve:app --host 0.0.0.0 --port 8000
LocalAI
- 安装:请按照前面描述的类似步骤进行。
- 运行:
localai --models-path /models --api-port 8080
结论
本指南概述了如何使用 Ollama 和其他 OpenAI 兼容工具高效利用 GPU 加速进行本地 LLM 推理。对于 MacBook 用户,Ollama 通过 Metal API 集成提供了无缝体验,而 Ubuntu 用户则可以通过 DeepSpeed 和 Hugging Face Accelerate 等分布式框架优化其双 GPU 设置。通过遵循建议的配置,开发人员可以在提供强大的 API 服务的同时最大化其硬件的潜力。


