目录

Ollama 实战:在家用 Mac 跑起 GPT 级模型

为什么要本地跑

用 OpenAI API 每个月账单飞起。GPT-4o 跑多了肉疼,而且数据要经过第三方。

本地跑 LLM 的动机:

  • 成本:0 推理成本,只有电费
  • 隐私:数据不离开本机
  • 离线:没网也能用
  • 可控:模型、参数完全自己控制

但以前本地跑 LLM 的问题是:配置复杂,CUDA 驱动、NVIDIA 驱动、量化工具,每一步都可能踩坑。

Ollama 解决的就是这个问题。

安装

Mac:

brew install ollama

Linux:

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

Windows:官网下载安装包。

装完直接跑:

ollama run llama3.2

# 或者更小的模型
ollama run mistral
ollama run phi3

30 秒启动,不需要任何配置。

怎么选模型

Ollama library 有几百个模型。新手建议从这些开始:

模型 参数量 最低内存 适合场景
llama3.2 3B 8GB 日常对话、快速任务
mistral 7B 16GB 编程主力、通用任务
llama3.1 8B 16GB 比 Mistral 略强
codellama 7B 16GB 编程专用
phi3 3.8B 8GB 极轻量、CPU 可跑

Mac Studio M2 Max(我用的配置):

# 可以跑这些
ollama run llama3.1:70b  # 需要 64GB+ 内存,我没试过
ollama run mistral       # 流畅
ollama run codellama     # 流畅,编程推荐
ollama run llama3.2      # 极其流畅

编程实测:Codellama vs GPT-4

我测了 Codellama 7B 写代码的能力。任务:给一个 FastAPI 项目加完整的 CRUD endpoints。

Codellama 表现

ollama run codellama

# 输入:
# 为这个 FastAPI 项目写完整的 user CRUD:
# - GET /users/{id}
# - POST /users
# - PUT /users/{id}
# - DELETE /users/{id}
# 使用 SQLAlchemy,异步风格,包含 Pydantic models

Codellama 7B 输出了完整的代码:

# 正确生成了:
# 1. Pydantic models (UserCreate, UserUpdate, UserResponse)
# 2. SQLAlchemy model
# 3. CRUD functions (get_user, create_user, etc.)
# 4. Router with all endpoints

@router.get("/{user_id}", response_model=UserResponse)
async def read_user(user_id: int, db: Session = Depends(get_db)):
    user = get_user(db, user_id=user_id)
    if user is None:
        raise HTTPException(status_code=404, detail="User not found")
    return user

质量比 GPT-4 差一些,但可用。对于简单到中等复杂度的任务,Codellama 完全能完成。

什么时候用本地

本地模型不是万能的。判断标准:

适合用本地:

  • 简单到中等复杂度任务
  • 需要快速迭代(省 API 成本)
  • 代码库是公开的、不涉及敏感信息
  • 离线环境

不适合用本地:

  • 复杂架构决策(本地模型推理能力有限)
  • 需要最新知识(本地模型知识截止日期固定)
  • 长文本处理(context 窗口限制)

API 调用:接入现有代码

Ollama 跑起来后,可以当 API server 用:

ollama serve

然后用任何 OpenAI 兼容的 client 调用:

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:11434/v1",
    api_key="ollama"  # 不需要真实 key
)

response = client.chat.completions.create(
    model="llama3.2",
    messages=[
        {"role": "user", "content": "解释什么是 FastAPI dependency injection"}
    ]
)

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

这意味着 LangChain、Dify、任何 OpenAI 兼容的应用,都能无缝切换到本地模型。

高级:自定义 Model File

Ollama 支持自定义模型配置:

# Modelfile
FROM mistral
PARAMETER temperature 0.7
PARAMETER top_p 0.9
SYSTEM """
你是一个专业的 Python 程序员。
只输出代码,不要解释。
代码必须符合 PEP8。
"""
# 构建自定义模型
ollama create my-coder -f Modelfile

# 使用
ollama run my-coder

量化:降低内存占用

7B 模型通常需要 14GB+ 内存(fp16)。量化到 4-bit 可以降到 4GB 左右:

Ollama 默认已经做了量化(q4_0, q4_1, q5_0, q5_1, q8_0 等)。

手动指定量化级别:

OLLAMA_NUM_PARALLEL=1 ollama run mistral:7b-q4

实测:q4 量化后模型大小从 14GB 降到 4.1GB,性能损失大约 5-10%,对大多数任务影响不大。

总结

Ollama 是目前最简单本地跑 LLM 的方案:

  • 安装:一条命令
  • 运行:一条命令
  • API:OpenAI 兼容
  • 成本:$0

我的实际用法:

  • Codellama 7B 做日常编程主力(大部分任务够用)
  • GPT-4 做复杂架构决策和 code review
  • 数据敏感的项目用本地

Mac Studio + Ollama 足够跑一个私人编程助手了。

项目地址:ollama.com