本地部署大模型实战: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