Ollama 自托管本地大模型实战:模型部署、量化与 OpenAI 兼容 API 全解析


把 ChatGPT、Claude 这类"云端大模型"换成在自己 VPS 上跑一个开源模型,得到的是三样东西:隐私不出门、按需调用无计费焦虑、以及完全掌控模型与上下文。Ollama 把"拉模型、跑推理、暴露 API"这件事压缩成几条命令,是目前自托管大模型最低门槛的入口。这篇从选型、部署、量化、到 API 与 RAG,把整条链路讲清楚。

一、先想清楚:你的 VPS 能跑多大的模型

决定"跑多大的模型",核心约束是显存/内存和推理速度。大致的对应关系是:7B(70 亿参数)模型全精度约 14GB,13B 约 25GB,32B 约 65GB;用 4-bit 量化(Q4)可以把体积压到约四分之一,例如 7B 压到约 4GB。大多数 2C4G 的小 VPS 跑 7B 的量化版可行,跑 32B 就吃力——先量力而行,而不是先看榜单。

Ollama 会自动根据可用内存选量化;如果你 CPU 机上想更快,建议用 CPU 时优先小参数量化模型,GPU 机则看显存多寡。常见判断一句话:模型卡不卡,看的是每秒 token 数,用 ollama run 跑一个提问实测,比任何纸面参数都可靠。

二、最小部署:一行命令把服务跑起来

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

# 也可以容器化
docker run -d --name ollama \
  -v /opt/ollama:/root/.ollama \
  -p 11434:11434 \
  ollama/ollama

# 拉取一个模型并对话
ollama pull qwen2.5:7b
ollama run qwen2.5:7b

模型文件落在 /root/.ollama/models,这一步就决定了"这份模型资产有没有被备份"。和前面聊 Docker 一致:把该目录挂进命名卷并纳入备份,否则一次容器重建就会"顺带清掉你下载的几十 GB 模型"。Ollama 默认只监听本机 11434,供你本地调用;要给局域网或网关使用,再考虑把端口暴露或交给 Traefik,并务必加上认证(它的 API 本身没有鉴权)。

三、模型管理:加载、卸载、模板与并发

Ollama 会把已加载模型缓存在内存里,不用的模型要主动卸载,否则会挤占内存。常用操作:ollama list 看已拉模型,ollama rm 删除,ollama cp 复制出一个自定义实例。它支持 Modelfile 来定制参数(temperature、num_ctx 上下文长度、system prompt),把常用的"提示词 + 参数组合"固化成带名字的模型,比每次手拼参数省事。

并发是自托管常见瓶颈:模型显存占用与并发请求成正比,多用户同时用,可能出现排队。调整 OLLAMA_NUM_PARALLEL 与 OLLAMA_MAX_LOADED_MODELS 能控制行为,但要记住它受物理内存硬约束——并发拉满导致 OOM,比请求慢更糟。合理做法是先保守设置,监控内存再逐步放大。

四、把大模型喂给你的应用:标准 OpenAI 兼容 API

Ollama 暴露了一个与 OpenAI SDK 兼容的 /v1/chat/completions 接口,意味着你已有的用 OpenAI 写的代码,把 base_url 改成自己服务的地址就能无缝切到本地模型,而不需要改业务逻辑。这是它最有工程价值的一点:本地推理,API 兼容,零改写迁移。传参里注意 max_tokens、temperature 等在本地同样生效,但不同模型的默认行为差异明显,跨模型切换常要重调这两个值。

curl http://localhost:11434/v1/chat/completions \
  -d '{"model":"qwen2.5:7b","messages":[{"role":"user","content":"你好"}]}'

五、进阶硬件:GPU / Rockchip 与量化实战

有显卡的机器(NVIDIA 或 AMD ROCm)会让 Ollama 自动利用 GPU 加速,把推理从每秒几 token 拉到几十 token,体验是质变。没有独立显卡时,抠显存的办法是选更小参数 + 更高压缩的量化。Ollama 提供了 GGUF 量化路径:你可以 ollama create 用 Modelfile 指定 Q4_K_M、Q5_K_M 等量化等级。经验是:Q4 是性价比最高的一档,往下到 Q2 质量掉得快、往上到 Q8 收益小。真正想把性能榨干,查阅模型页提供的"最小 RAM/显存"说明比盲目拉大模型靠谱。

六、RAG 与文档问答:让模型"读"你自己的资料

裸模型只知道训练时的知识,不知道你仓库里的具体文档。RAG(检索增强生成)的正确姿势是:先把文档切块、用 embedding 模型向量化、存进向量库,回答问题时先检索相关片段再喂给生成模型。Ollama 提供 nomic-embed-text 这类 embedding 模型配合外部向量库(如 Qdrant、Milvus)做闭环。排障有个基本套路:先用 ollama ps 看模型是否已加载、再看当前进程的内存占用,别一慢就重启服务,通常问题出在并发或内存上而不是模型本身。

结语

Ollama 把"本地大模型"从"要会炼丹"变成"会跑两条命令"的事:先选好参数量与量化,一行启动服务、一行拉模型、一个兼容 API 接入业务,再接上 RAG 让它懂你的文档。它并不承诺替代云端大模型的全能,但在隐私敏感或低延迟场景,本地跑的高性价比是云上方案给不了的。把它当成自托管栈里"可对话的自有知识服务"来定位,而不是一味追求拉满参数,才是它真正该有的用法。


手机扫码阅读

微信或手机浏览器扫一扫,随时随地随心阅读与分享

Loki + Promtail 集中日志实战:给 VPS 全家桶容器装上一双排障的眼睛

Docker 资源限制与 OOM 治理:cgroups 如何让一个容器不拖垮整台服务器

评 论
更换验证码