引言

当企业需要将 LLM 能力引入内部系统时,数据安全和隐私合规成为首要考量。Ollama 作为最流行的本地大模型运行平台,以其零配置启动、多模型支持、OpenAI 兼容 API 的特性,成为开发者本地部署的首选工具。截至 2026 年中,Ollama 平台下载量已突破 8000 万次,支持超过 100,000 种模型变体。

Ollama 核心架构

Ollama 的设计哲学是「下载即运行」——用户无需关心 GPU 配置、CUDA 版本、模型格式转换等底层细节。

┌──────────────────────────────────────────────────────┐
│                    Ollama CLI / API                   │
├──────────────────────────────────────────────────────┤
│              REST API (OpenAI 兼容)  :11434          │
├──────────────────────────────────────────────────────┤
│                    Ollama Server                      │
│  ┌──────────┐  ┌──────────┐  ┌──────────────────────┐│
│  │ Model    │  │ Context  │  │  Inference Engine    ││
│  │ Loader   │  │ Manager  │  │  (llama.cpp / CUDA)  ││
│  └──────────┘  └──────────┘  └──────────────────────┘│
├──────────────────────────────────────────────────────┤
│           Hardware Layer (CPU / CUDA / Metal)        │
└──────────────────────────────────────────────────────┘

核心技术栈:

  • llama.cpp:基于 C/C++ 的高效推理内核,支持 CPU 和 GPU 推理
  • GOBO(Go + llama.cpp):Ollama 0.5+ 引入的新架构
  • Modelfile:声明式模型配置格式
  • 张量并行(Tensor Parallelism):多卡分布式推理

安装与配置

Windows 安装(PowerShell)

winget install Ollama.Ollama
# 或手动下载:https://ollama.com/download

安装后,Ollama 服务自动在 http://localhost:11434 启动。

macOS / Linux 安装

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

环境变量配置

# 设置模型存储路径(默认 ~/.ollama/models)
export OLLAMA_MODELS=/mnt/data/ollama/models

# 设置上下文窗口大小(默认 2048)
export OLLAMA_NUM_PARALLEL=4

# 设置 GPU 配置(自动检测)
export OLLAMA_GPU_OVERHEAD=0

# 允许跨域访问(开发环境)
export OLLAMA_ORIGINS="*"

模型管理

模型库概览

Ollama 维护了一个官方模型库,支持以下主要类别:

类别代表模型参数量显存需求适用场景
通用对话llama3.370B48GB复杂推理、代码生成
通用对话llama3.23B/1.3B2GB/1GB轻量级任务、边缘部署
代码专用codellama34B24GB代码补全、解释
多模态llava7B6GB图文理解
数学推理nomic-bert-math7B6GB数学公式识别
嵌入模型nomic-embed-text137M1GB文本向量化

模型拉取与运行

# 拉取模型
ollama pull llama3.3
ollama pull llava:7b
ollama pull nomic-embed-text

# 查看已下载模型
ollama list

# 运行模型(交互模式)
ollama run llama3.3

# 非交互模式:单次推理
ollama run llama3.3 "用 Python 写一个快速排序"

Modelfile:自定义模型配置

Modelfile 是 Ollama 的声明式配置格式,用于自定义模型行为:

# Modelfile 示例:创建一个 RAG 专用的 Llama3

# 基础模型
FROM llama3.3

# 设置系统提示词
SYSTEM """
你是一个专业的 RAG 助手。根据提供的上下文片段,
准确、简洁地回答用户问题。如果上下文中没有
相关信息,请明确告知。
"""

# 设置参数
PARAMETER temperature 0.3
PARAMETER top_p 0.9
PARAMETER num_ctx 8192
PARAMETER repeat_penalty 1.1

# 设置模板(用于 RAG 场景)
TEMPLATE """
<s>[INST] <<SYS>>
{{ .System }}
<</SYS>>

已知信息:
{{ .Prompt }}

请基于已知信息回答问题。[/INST]
"""
# 从 Modelfile 创建自定义模型
ollama create rag-assistant -f Modelfile

# 运行自定义模型
ollama run rag-assistant

API 调用

OpenAI 兼容 API

Ollama 提供了与 OpenAI API 完全兼容的接口,可直接替换现有代码中的 API 端点:

from openai import OpenAI

# 直接替换 OpenAI 的 base_url
client = OpenAI(
    base_url="http://localhost:11434/v1",
    api_key="ollama",  # Ollama 不需要真实 API key
)

response = client.chat.completions.create(
    model="llama3.3",  # 使用本地模型
    messages=[
        {"role": "system", "content": "你是一个有用的助手。"},
        {"role": "user", "content": "解释什么是 RAG"},
    ],
    temperature=0.7,
    max_tokens=500,
)

print(response.choices[0].message.content)

REST API(原生)

# 聊天完成
curl -X POST http://localhost:11434/api/chat \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama3.3",
    "messages": [
      {"role": "user", "content": "你好"}
    ],
    "stream": false
  }'

# 生成补全
curl -X POST http://localhost:11434/api/generate \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama3.3",
    "prompt": "写一个 Python 的 Hello World",
    "stream": false
  }'

# 嵌入向量
curl -X POST http://localhost:11434/api/embeddings \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nomic-embed-text",
    "prompt": "要嵌入的文本内容"
  }'

API 高级参数

参数说明默认值
model模型名称必需
messages对话消息列表必需
stream是否流式输出true
temperature采样温度(0-2)0.8
top_p核采样阈值0.9
num_ctx上下文窗口大小2048
repeat_penalty重复惩罚(1.0-2.0)1.1
stop停止序列null
seed随机种子(固定输出)null

Ollama 与 LangChain / LlamaIndex 集成

LangChain 集成

from langchain_ollama import ChatOllama, OllamaEmbeddings
from langchain_community.vectorstores import Chroma

# 配置 LLM
llm = ChatOllama(
    model="llama3.3",
    temperature=0.3,
    base_url="http://localhost:11434",
)

# 配置嵌入
embeddings = OllamaEmbeddings(
    model="nomic-embed-text",
    base_url="http://localhost:11434",
)

# 构建向量存储
vectorstore = Chroma(
    client=Chroma(persist_directory="./chroma_db")),
    embedding_function=embeddings,
)

LlamaIndex 集成

from llama_index.llms.ollama import Ollama
from llama_index.embeddings.ollama import OllamaEmbedding
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.core import Settings

# 配置 LLM
Settings.llm = Ollama(
    model="llama3.3",
    base_url="http://localhost:11434",
    request_timeout=120,
)

# 配置嵌入
Settings.embed_model = OllamaEmbedding(
    model_name="nomic-embed-text",
    base_url="http://localhost:11434",
)

# 构建 RAG 索引
documents = SimpleDirectoryReader("./docs").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()

性能优化

GPU 加速配置

Ollama 自动检测并使用 GPU 加速。确认 GPU 可用:

# 查看 GPU 状态
ollama show llama3.3

# 手动指定 GPU layers
OLLAMA_GPU_OVERHEAD=0 ollama run llama3.3

量化级别对比

Ollama 支持多种量化级别,在模型精度与资源消耗之间做权衡:

量化级别精度损失显存节省适用场景
FP160%最高精度需求
Q8_0极小~50%生产环境推荐
Q5_1较小~60%中等资源
Q4_0可接受~65%资源受限环境
Q3_1明显~70%最低资源
# 运行特定量化版本
ollama run llama3.3:Q5_1

并发处理

# 设置并发请求数
export OLLAMA_NUM_PARALLEL=4

# 设置上下文缓存大小
export OLLAMA_MAX_LOADED_MODELS=2

推理吞吐量基准

测试环境:RTX 4090(24GB),llama3.3 模型,batch_size=512:

量化级别tokens/s首次响应延迟内存占用
FP16182.3s48GB
Q8_0351.2s24GB
Q5_1420.9s18GB
Q4_0480.7s14GB

Ollama 生态工具

Ollama + Open WebUI

# 安装 Open WebUI
pip install open-webui

# 启动(会自动连接本地 Ollama)
open-webui serve

Ollama + Docker

# docker-compose.yml
version: '3.8'
services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

volumes:
  ollama_data:
docker compose up -d
docker exec -it ollama ollama pull llama3.3

Ollama + Kubernetes

Ollama Operator 已进入 CNCF 沙箱,适合大规模部署:

apiVersion: v1
kind: ConfigMap
metadata:
  name: ollama-model-config
data:
  MODELS: "llama3.3,codellama,llava"
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ollama-server
spec:
  replicas: 3
  template:
    spec:
      containers:
      - name: ollama
        image: ollama/ollama:latest
        resources:
          limits:
            nvidia.com/gpu: 1

常见问题排查

问题原因解决方案
模型拉取失败网络问题配置镜像或代理
显存不足模型太大切换量化版本
API 超时并发过高减少并发数
GPU 未识别CUDA 驱动升级 NVIDIA 驱动
# 调试模式
OLLAMA_DEBUG=1 ollama run llama3.3

# 查看日志
journalctl -u ollama -f

总结

Ollama 以其极简的使用体验和强大的本地推理能力,已成为 LLM 本地部署的事实标准。它与 llama.cpp 的深度集成确保了在不同硬件上的一致性能,而 OpenAI 兼容 API 则让现有应用可以零成本迁移。对于数据隐私敏感的企业和希望实验大模型的个人开发者,Ollama 提供了最佳起点。

下一步建议:结合 Open WebUI 体验可视化对话界面,或通过 LangChain/LlamaIndex 将本地模型接入 RAG 应用,构建完整的本地 AI 知识库系统。

加入讨论

这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。

碳基与硅基的智慧碰撞,认知差异创造无限可能。