全部笔记All notes

大模型本地部署指南

阅读 7m 05s7m 05s read

本地部署指南

大模型本地部署的方案选择、工具使用和优化技巧。


为什么本地部署?

优势说明
数据隐私数据不出本地
成本控制无 API 调用费
低延迟无网络延迟
离线可用不依赖网络
定制化可微调优化

本地部署 vs 云端 API 详细对比:

方面本地部署云端 API
初始成本高(需要 GPU)低(按需付费)
长期成本低(固定硬件成本)高(持续调用费)
数据隐私完全控制数据上传到第三方
模型能力受硬件限制可用最强模型
维护成本需要自己维护无需维护
可用性取决于自己的基础设施通常 99.9%+
灵活性可微调、定制受限于 API 功能

适用场景

场景推荐原因
敏感数据处理✅ 本地部署数据不出本地
高频调用✅ 本地部署长期成本更低
离线环境✅ 本地部署无需网络
快速原型❌ 云端 API无需配置环境
最强性能❌ 云端 API云端有最强模型
小团队/个人⚠️ 视情况考虑维护成本

部署工具

flowchart TD
    A[本地部署工具] --> B[Ollama]
    A --> C[llama.cpp]
    A --> D[vLLM]
    A --> E[Text Generation WebUI]
    
    B --> F[最简单]
    C --> G[最轻量]
    D --> H[高性能]
    E --> I[功能全]

工具对比

工具易用性性能功能适用场景
Ollama⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐个人/开发
llama.cpp⭐⭐⭐⭐⭐⭐⭐⭐⭐嵌入式/边缘
vLLM⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐生产服务
LocalAI⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐OpenAI 兼容

选择建议:

需求推荐工具
快速体验Ollama
生产部署vLLM
资源受限llama.cpp
OpenAI 兼容Ollama / LocalAI
图形界面Text Generation WebUI

Ollama

最简单的本地部署方案,一行命令即可运行模型。

Ollama 的优势:

  • 安装简单,开箱即用
  • 自动下载和管理模型
  • 提供 OpenAI 兼容 API
  • 支持 macOS、Linux、Windows
  • 活跃的社区和模型库

安装

# macOS / Linux
curl -fsSL https://ollama.com/install.sh | sh

# 或 Homebrew (macOS)
brew install ollama

# Windows
# 下载安装包:https://ollama.com/download

基本使用

# 运行模型(自动下载)
ollama run llama3.2

# 拉取模型(只下载不运行)
ollama pull qwen2.5:7b

# 列出已下载的模型
ollama list

# 删除模型
ollama rm llama3.2

# 查看模型信息
ollama show llama3.2

交互模式:

$ ollama run llama3.2
>>> 你好
你好!有什么我可以帮助你的吗?

>>> /bye  # 退出

API 调用

Ollama 提供 OpenAI 兼容的 API,可以无缝替换 OpenAI:

# 启动服务(通常自动启动)
ollama serve

# 调用 API (OpenAI 兼容)
curl http://localhost:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama3.2",
    "messages": [{"role": "user", "content": "Hello"}]
  }'

Python 使用

由于 API 兼容 OpenAI,可以直接使用 OpenAI SDK:

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:11434/v1",
    api_key="ollama"  # 任意值,Ollama 不验证
)

response = client.chat.completions.create(
    model="llama3.2",
    messages=[{"role": "user", "content": "Hello"}]
)
print(response.choices[0].message.content)

流式输出:

stream = client.chat.completions.create(
    model="llama3.2",
    messages=[{"role": "user", "content": "写一首诗"}],
    stream=True
)

for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")

常用模型

模型大小说明
llama3.2:3b2GB轻量快速
llama3.2:7b4GB平衡之选
qwen2.5:7b4GB中文优秀
deepseek-coder:6.7b4GB代码专用
mistral:7b4GB通用能力强

llama.cpp

C++ 实现,极致轻量。

安装

# 克隆编译
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make

# 或使用预编译
brew install llama.cpp

运行

# 交互模式
./llama-cli -m model.gguf -p "Hello" -i

# 服务模式
./llama-server -m model.gguf --port 8080

量化格式

格式大小质量速度
Q8_0大最好慢
Q5_K_M中好中
Q4_K_M小一般快
Q2_K最小差最快

vLLM

高性能推理引擎,适合生产环境。

安装

pip install vllm

启动服务

python -m vllm.entrypoints.openai.api_server \
  --model Qwen/Qwen2.5-7B-Instruct \
  --port 8000

特性

特性说明
PagedAttention高效显存管理
Continuous Batching动态批处理
Tensor Parallelism多卡并行
OpenAI 兼容无缝切换

硬件需求

显存估算

显存需求取决于模型大小和精度:

模型大小FP16INT8INT4
7B14GB7GB4GB
13B26GB13GB7GB
70B140GB70GB35GB

估算公式:

  • FP16:参数量 × 2 字节
  • INT8:参数量 × 1 字节
  • INT4:参数量 × 0.5 字节
  • 还需额外 ~20% 用于 KV Cache 和激活值

推荐配置

场景配置可运行模型
入门体验8GB 显存7B Q4
日常使用16GB 显存7B FP16, 13B Q4
专业开发24GB 显存13B FP16, 70B Q4
生产部署48GB+ 显存70B FP16

消费级显卡参考:

显卡显存适合模型
RTX 306012GB7B Q4/Q8
RTX 3090/409024GB13B FP16
RTX 408016GB7B FP16, 13B Q4
Mac M1/M2/M3统一内存取决于内存大小

CPU 运行

无 GPU 也可运行,但速度较慢(约 1-5 tokens/秒):

# Ollama 自动使用 CPU(无 GPU 时)
ollama run llama3.2:3b

# llama.cpp 强制 CPU 模式
./llama-cli -m model.gguf -ngl 0

# 指定线程数
./llama-cli -m model.gguf -t 8

CPU 运行优化:

优化说明
使用 Q4 量化减少内存带宽需求
增加线程数利用多核
使用小模型3B 比 7B 快很多
减少上下文降低内存占用

性能优化

1. 量化

量化是最有效的优化手段:

# Ollama 使用量化版本
ollama pull llama3.2:7b-q4_0    # 4-bit 量化
ollama pull llama3.2:7b-q8_0    # 8-bit 量化

# 查看可用的量化版本
ollama show llama3.2 --modelfile

量化对比:

量化大小质量损失速度提升
FP16100%0%基准
Q8_050%~1%1.5x
Q5_K_M35%~2%2x
Q4_K_M25%~3%2.5x
Q2_K15%~10%3x

2. GPU 加速

# llama.cpp 指定 GPU 层数(越多越快,但需要更多显存)
./llama-cli -m model.gguf -ngl 35

# vLLM 指定 GPU
CUDA_VISIBLE_DEVICES=0 python -m vllm.entrypoints.openai.api_server ...

# 多 GPU
CUDA_VISIBLE_DEVICES=0,1 python -m vllm.entrypoints.openai.api_server \
  --tensor-parallel-size 2 ...

3. 批处理

批处理可以显著提高吞吐量:

# vLLM 批量推理
from vllm import LLM, SamplingParams

llm = LLM(model="model_path")
params = SamplingParams(temperature=0.7, max_tokens=100)

# 批量处理多个请求
prompts = ["问题1", "问题2", "问题3"]
outputs = llm.generate(prompts, params)

for output in outputs:
    print(output.outputs[0].text)

4. 上下文长度优化

参数说明建议
context_length上下文窗口大小按需设置,不要过大
max_tokens最大生成长度限制输出长度
# Ollama 限制上下文
ollama run llama3.2 --num-ctx 2048

# vLLM 设置
python -m vllm.entrypoints.openai.api_server \
  --max-model-len 4096 ...

模型获取

Hugging Face

# 安装 CLI
pip install huggingface_hub

# 下载模型
huggingface-cli download Qwen/Qwen2.5-7B-Instruct

ModelScope (国内)

pip install modelscope

# 下载
modelscope download --model qwen/Qwen2.5-7B-Instruct

常用模型源

平台地址说明
Hugging Facehuggingface.co最全
ModelScopemodelscope.cn国内快
Ollama Libraryollama.com/library即用

常见问题

显存不足

# 方案1:使用更小的量化版本
ollama pull llama3.2:7b-q4_0

# 方案2:减少上下文长度
ollama run llama3.2 --num-ctx 2048

# 方案3:使用更小的模型
ollama run llama3.2:3b

速度太慢

原因解决方案
CPU 运行使用 GPU 或 Apple Silicon
模型太大换小模型或使用量化
上下文太长减少上下文长度
显存不足导致 swap使用更小的模型

中文效果差

推荐中文优化模型:

模型说明
Qwen2.5 系列阿里,中文最佳
Yi 系列零一万物,中文好
DeepSeek 系列深度求索,代码+中文
ChatGLM 系列智谱,中文对话
# 推荐的中文模型
ollama pull qwen2.5:7b
ollama pull yi:6b

模型下载慢

# 使用国内镜像(ModelScope)
pip install modelscope
modelscope download --model qwen/Qwen2.5-7B-Instruct

# 或设置 Hugging Face 镜像
export HF_ENDPOINT=https://hf-mirror.com

Mac 上运行

Mac 使用 Metal 加速,统一内存架构有优势:

# Ollama 自动使用 Metal
ollama run llama3.2

# 查看是否使用 GPU
# 运行时会显示 "using Metal"

Mac 内存建议:

内存可运行模型
8GB3B 模型
16GB7B 模型
32GB13B 模型
64GB+70B 模型

生产部署建议

架构设计

flowchart TD
    A[负载均衡] --> B[推理服务 1]
    A --> C[推理服务 2]
    A --> D[推理服务 N]
    
    B --> E[GPU 1]
    C --> F[GPU 2]
    D --> G[GPU N]

部署清单

项目说明
健康检查定期检查服务状态
监控告警GPU 使用率、延迟、错误率
日志收集请求日志、错误日志
自动重启服务异常时自动恢复
限流防止过载

Docker 部署

# Ollama Docker
docker run -d --gpus all \
  -v ollama:/root/.ollama \
  -p 11434:11434 \
  --name ollama \
  ollama/ollama

# 进入容器拉取模型
docker exec -it ollama ollama pull llama3.2
# docker-compose.yml
version: '3'
services:
  ollama:
    image: ollama/ollama
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]

volumes:
  ollama_data:

相关文档