本地部署大模型实战:Ollama 指南
AI 导读
本地部署大模型实战:Ollama 指南 在你自己的电脑上运行大语言模型,无需 API Key,完全离线可用 Maurice | 灵阙学院 前置准备 macOS (Apple Silicon 推荐) / Linux / Windows 至少 8GB 内存(运行 7B 模型) 推荐 16GB+ 内存(运行 13B+ 模型) 一、安装 Ollama macOS / Linux 一键安装: curl...
本地部署大模型实战:Ollama 指南
在你自己的电脑上运行大语言模型,无需 API Key,完全离线可用 Maurice | 灵阙学院
前置准备
- macOS (Apple Silicon 推荐) / Linux / Windows
- 至少 8GB 内存(运行 7B 模型)
- 推荐 16GB+ 内存(运行 13B+ 模型)
一、安装 Ollama
macOS / Linux 一键安装:
curl -fsSL https://ollama.com/install.sh | sh
macOS 也可以从 ollama.com 下载桌面客户端(.dmg 安装包)。
验证安装:
ollama --version
预期输出:
ollama version is 0.6.x
启动 Ollama 服务(如果未自动启动):
ollama serve
服务默认监听 http://localhost:11434。
二、下载并运行模型
Ollama 内置模型仓库,一条命令即可下载并运行。
2.1 下载主流开源模型
# Llama 3.1 8B -- Meta 出品,英文能力强
ollama pull llama3.1
# Qwen2.5 7B -- 阿里出品,中文能力优秀
ollama pull qwen2.5
# DeepSeek-R1 -- 推理能力出色
ollama pull deepseek-r1:8b
# 查看已下载的模型列表
ollama list
预期输出:
NAME ID SIZE MODIFIED
llama3.1:latest 62fbcbcb12e4 4.7 GB 2 minutes ago
qwen2.5:latest 845dbda0ea48 4.7 GB 1 minute ago
deepseek-r1:8b 28f8fd6cdc67 4.9 GB just now
2.2 交互式对话
ollama run qwen2.5
进入对话模式:
>>> 用三句话介绍你自己
我是通义千问,由阿里云开发的大语言模型。我擅长中英文理解和生成,可以帮你
回答问题、写作、编程和翻译。我的目标是成为你有用的 AI 助手。
>>> /bye
2.3 单次调用(不进入交互模式)
echo "什么是 RAG?" | ollama run qwen2.5
三、通过 API 调用模型
Ollama 提供兼容 OpenAI 格式的 REST API。
3.1 基础调用
curl http://localhost:11434/api/chat -d '{
"model": "qwen2.5",
"messages": [{"role": "user", "content": "什么是向量数据库?"}],
"stream": false
}'
预期输出(JSON):
{
"model": "qwen2.5",
"message": {
"role": "assistant",
"content": "向量数据库是专门用于存储和检索高维向量的数据库系统..."
},
"done": true
}
3.2 OpenAI 兼容接口
Ollama 同时提供 /v1/chat/completions 端点,可以直接使用 OpenAI SDK:
curl http://localhost:11434/v1/chat/completions -d '{
"model": "qwen2.5",
"messages": [{"role": "user", "content": "你好"}]
}'
四、Python 客户端集成
4.1 使用 OpenAI SDK(推荐,通用性强)
pip install openai
from openai import OpenAI
# 指向本地 Ollama 服务
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama" # Ollama 不校验 key,填任意值
)
response = client.chat.completions.create(
model="qwen2.5",
messages=[
{"role": "system", "content": "你是一个专业的技术顾问。"},
{"role": "user", "content": "对比 PostgreSQL 和 MySQL 的适用场景。"}
]
)
print(response.choices[0].message.content)
4.2 使用官方 ollama-python 库
pip install ollama
import ollama
response = ollama.chat(
model="qwen2.5",
messages=[
{"role": "user", "content": "用 Python 写一个快速排序"}
]
)
print(response["message"]["content"])
流式输出:
import ollama
stream = ollama.chat(
model="qwen2.5",
messages=[{"role": "user", "content": "解释递归的概念"}],
stream=True
)
for chunk in stream:
print(chunk["message"]["content"], end="", flush=True)
print()
五、自定义 Modelfile
Modelfile 类似 Dockerfile,用于定制模型行为。
创建 Modelfile:
FROM qwen2.5
# 系统提示词
SYSTEM """
你是灵阙学院的教学助手。回答风格:简洁、准确、举例说明。
对于技术问题,先给出一句话结论,再展开解释。
"""
# 调整参数
PARAMETER temperature 0.7
PARAMETER top_p 0.9
PARAMETER num_ctx 8192
构建并运行自定义模型:
ollama create lingque-tutor -f Modelfile
ollama run lingque-tutor
预期输出:
>>> 什么是 Transformer?
一句话结论:Transformer 是一种基于自注意力机制的神经网络架构,是当前所有
主流大语言模型的基础。
具体来说...
查看模型详情:
ollama show lingque-tutor
六、性能调优
6.1 GPU 加速
Ollama 自动检测并使用可用 GPU:
# 查看 GPU 使用情况
ollama ps
预期输出:
NAME ID SIZE PROCESSOR UNTIL
qwen2.5:latest 845dbda0ea48 5.1 GB 100% GPU 4 minutes from now
Apple Silicon 的 Metal GPU 默认自动启用,无需额外配置。
NVIDIA GPU 需要安装 CUDA 驱动。
6.2 关键环境变量
# 并行请求数(默认 1)
export OLLAMA_NUM_PARALLEL=4
# 最大加载模型数(默认 1)
export OLLAMA_MAX_LOADED_MODELS=2
# 模型存储路径(默认 ~/.ollama/models)
export OLLAMA_MODELS=/path/to/models
# GPU 层数(0 = 纯 CPU)
export OLLAMA_GPU_LAYERS=999
6.3 模型量化选择
# 不同量化级别对比
ollama pull qwen2.5:7b-instruct-q4_0 # 4-bit,最小,速度最快
ollama pull qwen2.5:7b-instruct-q5_1 # 5-bit,质量/速度均衡
ollama pull qwen2.5:7b-instruct-fp16 # 全精度,质量最好,最占资源
| 量化级别 | 模型大小 | 内存占用 | 质量 | 推荐场景 |
|---|---|---|---|---|
| Q4_0 | ~4 GB | ~5 GB | 可用 | 8GB 内存设备 |
| Q5_1 | ~5 GB | ~6 GB | 良好 | 16GB 推荐 |
| FP16 | ~14 GB | ~16 GB | 最优 | 32GB+ 开发 |
七、Ollama 与同类工具对比
| 特性 | Ollama | llama.cpp | vLLM |
|---|---|---|---|
| 安装难度 | 一键安装 | 需编译 | 需 CUDA 环境 |
| API 兼容 | OpenAI 格式 | 自有格式 | OpenAI 格式 |
| GPU 支持 | 自动检测 | 手动配置 | NVIDIA 必须 |
| 多模型管理 | 内置仓库 | 手动管理 | 手动管理 |
| 并发能力 | 中等 | 低 | 高(生产级) |
| 适用场景 | 开发/原型 | 嵌入式/边缘 | 生产部署 |
选型建议:
- 个人开发/学习:Ollama(开箱即用)
- 嵌入式/极致性能:llama.cpp(C++ 原生)
- 生产环境高并发:vLLM(吞吐量优先)
八、实际使用场景
8.1 隐私敏感场景
企业内部文档处理,数据不出内网:
import ollama
# 处理机密文档,数据不经过任何第三方
with open("internal_report.txt", "r") as f:
content = f.read()
response = ollama.chat(
model="qwen2.5",
messages=[{
"role": "user",
"content": f"总结以下报告的要点:\n\n{content}"
}]
)
print(response["message"]["content"])
8.2 离线开发环境
在没有网络的环境中使用 AI 辅助编程:
# 提前下载好模型
ollama pull deepseek-coder-v2:16b
# 离线时直接使用
ollama run deepseek-coder-v2:16b "写一个 Python HTTP 服务器"
8.3 本地 RAG 搭配
Ollama + ChromaDB 构建完全本地化的知识问答:
import ollama
import chromadb
# 1. 构建向量库(同样使用 Ollama 的 embedding 模型)
chroma = chromadb.Client()
collection = chroma.create_collection("docs")
docs = ["Ollama 支持 Llama 3", "Qwen2.5 中文能力强", "DeepSeek 推理出色"]
for i, doc in enumerate(docs):
embedding = ollama.embed(model="nomic-embed-text", input=doc)
collection.add(ids=[str(i)], documents=[doc],
embeddings=[embedding["embeddings"][0]])
# 2. 检索 + 生成
query = "哪个模型中文好?"
q_emb = ollama.embed(model="nomic-embed-text", input=query)
results = collection.query(query_embeddings=[q_emb["embeddings"][0]], n_results=2)
context = "\n".join(results["documents"][0])
response = ollama.chat(
model="qwen2.5",
messages=[{
"role": "user",
"content": f"根据以下信息回答问题:\n{context}\n\n问题:{query}"
}]
)
print(response["message"]["content"])
常见问题
Q1: 下载模型时速度很慢?
设置镜像源或使用代理。Ollama 模型存储在 ~/.ollama/models,也可以手动复制已下载的模型文件。
Q2: 运行时报错 out of memory?
选择更小的量化版本(如 q4_0),或使用更小的模型(如 3B 参数)。也可以设置 OLLAMA_GPU_LAYERS=0 强制使用 CPU。
Q3: 如何让 Ollama 监听非 localhost?
设置环境变量 OLLAMA_HOST=0.0.0.0:11434,然后重启服务。注意安全风险。
Q4: 模型上下文窗口不够长?
在 Modelfile 中设置 PARAMETER num_ctx 32768,或运行时指定 ollama run qwen2.5 --num-ctx 32768。注意上下文越长,内存占用越高。
Q5: 如何删除不需要的模型?
ollama rm llama3.1 即可删除模型文件并释放磁盘空间。
Maurice | maurice_wen@proton.me