适用场景
想在本机或内网服务器上运行开源大模型,又不想从零配置 Python 环境、CUDA 和推理框架,Ollama 是一个省事的入口。它把模型下载、量化推理、GPU 调度和 HTTP API 打包成一条命令,适合个人开发者做本地问答、代码补全、RAG 原型验证,也适合小团队在内网搭一个不依赖外部网络的模型服务。下面以 Linux 为主,兼顾 macOS 和 Windows,说明从安装到对外提供 API 的完整流程。
环境与前置条件
- 操作系统:Linux(常见发行版即可)、macOS、Windows。Linux 服务器建议使用 systemd 管理服务。
- 运行时:Ollama 自带推理运行时,不需要单独安装 Python、PyTorch。若使用 Docker 部署,需要先装好 Docker,镜像标签以官方文档当前版本为准。
- 硬件:
- 内存:建议 16GB 起步;跑 7B 左右模型,8GB 内存会比较紧张。
- 显存:4-bit 量化下,7B 模型通常需要 4-6GB 显存,13B 模型约 8-10GB,70B 模型通常需要 40GB 以上。具体占用取决于量化方式、上下文长度和并行请求数。显存不足时,Ollama 会把部分层放到 CPU 和内存,速度下降。
- 磁盘:模型文件从几 GB 到几十 GB,建议预留 50GB 以上。
- GPU 驱动:NVIDIA 显卡需要安装匹配的驱动,Ollama 会调用 CUDA;AMD 显卡走 ROCm;Apple Silicon 使用 Metal。驱动版本以显卡厂商和 Ollama 官方文档为准。
- 网络:首次拉取模型需要能访问 Ollama 模型库。内网机器可以通过代理或离线导入模型。
分步骤部署
步骤 1:安装 Ollama
Linux 使用官方安装脚本:
```bash
curl -fsSL https://ollama.com/install.sh | sh
```
脚本会下载对应架构的二进制文件并注册 systemd 服务。安装完成后,通常会看到 Created symlink ... ollama.service 之类的输出。
macOS 可以用 Homebrew:
```bash
brew install ollama
```
也可以从 Ollama 官网下载 .dmg 安装包。Windows 从官网下载安装包,双击安装,安装后托盘会出现 Ollama 图标。具体安装包名称和版本以官方页面为准。
步骤 2:启动服务并检查状态
Linux 安装脚本一般会自动启动服务:
```bash
sudo systemctl status ollama
```
看到 active (running) 表示服务已运行。如果没有启动:
```bash
sudo systemctl start ollama
sudo systemctl enable ollama
```
也可以在前台手动启动,便于看日志:
```bash
ollama serve
```
默认监听 127.0.0.1:11434。如果端口被占用,会提示 bind: address already in use。
步骤 3:拉取模型
先查看官方模型库,复制需要的模型名称。以下用 llama3 作为示例,实际名称以 Ollama 官方模型库当前提供为准:
```bash
ollama pull llama3
```
下载时会显示进度。完成后列出本地模型:
```bash
ollama list
```
输出包含 NAME、ID、SIZE、MODIFIED 等列,说明模型已保存到本地。模型默认存放在 ~/.ollama/models;Linux systemd 服务使用的目录可能是 /usr/share/ollama/.ollama/models。可以通过 OLLAMA_MODELS 环境变量修改存储路径。
步骤 4:运行模型做交互测试
```bash
ollama run llama3
```
进入交互界面后输入一句话,例如“用一句话解释什么是容器”,能收到回复即可。输入 /bye 退出。也可以直接执行一次性问答:
```bash
ollama run llama3 "用一句话解释什么是容器"
```
如果模型较大,第一次加载会等待一段时间,之后会常驻内存或显存,直到空闲超时。
步骤 5:配置对外提供 API
Ollama 默认只监听本机。要让局域网其他机器访问,需要设置 OLLAMA_HOST。Linux 使用 systemd 时:
```bash
sudo systemctl edit ollama
```
在打开的编辑器中加入:
```ini
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
```
保存后重载并重启:
```bash
sudo systemctl daemon-reload
sudo systemctl restart ollama
```
临时测试也可以直接:
```bash
OLLAMA_HOST=0.0.0.0:11434 ollama serve
```
检查监听地址:
```bash
ss -tlnp | grep 11434
```
看到 0.0.0.0:11434 或 *:11434 表示已对外监听。注意:Ollama API 默认没有认证,不建议直接暴露到公网。生产环境应放在反向代理后面,加认证、TLS 和访问控制;也可以只允许内网网段访问:
```bash
sudo ufw allow from 192.168.1.0/24 to any port 11434
```
步骤 6:调用 API
Ollama 提供原生 REST API 和 OpenAI 兼容接口。原生生成接口:
```bash
curl http://127.0.0.1:11434/api/generate -d '{
"model": "llama3",
"prompt": "用一句话解释什么是容器",
"stream": false
}'
```
OpenAI 兼容聊天接口:
```bash
curl http://127.0.0.1:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "llama3",
"messages": [
{"role": "user", "content": "你好,请自我介绍"}
]
}'
```
很多支持 OpenAI 接口的客户端,只要把 base_url 改成 http://<服务器IP>:11434/v1,API Key 随便填一个非空值,就能连接。
验证部署是否成功
1. 检查服务状态:
```bash
systemctl status ollama --no-pager
```
预期:active (running)。
2. 检查模型列表:
```bash
curl http://127.0.0.1:11434/api/tags
```
预期:返回 JSON,models 数组里有刚拉取的模型。
3. 检查生成接口:
```bash
curl http://127.0.0.1:11434/api/generate -d '{
"model": "llama3",
"prompt": "回复:部署成功",
"stream": false
}'
```
预期:返回 JSON,response 字段包含模型输出。
4. 检查外部访问。在另一台同网段机器上执行:
```bash
curl http://<Ollama服务器IP>:11434/api/tags
```
预期:同样返回模型列表。如果连接失败,检查防火墙、安全组和 OLLAMA_HOST 设置。
5. 检查 GPU 是否被使用:
```bash
nvidia-smi
```
预期:能看到 ollama 相关进程占用显存。Apple Silicon 可以在活动监视器里查看 GPU 使用情况。
常见报错与解决
报错 1:Error: could not connect to ollama app, is it running? 或 curl: (7) Failed to connect
原因:Ollama 服务没有启动,或者监听地址不是当前访问的地址。
解决:
```bash
sudo systemctl start ollama
sudo systemctl status ollama
```
如果是手动启动,确认 ollama serve 仍在运行。再检查:
```bash
curl http://127.0.0.1:11434/api/tags
```
报错 2:Error: pull model manifest: file not found 或 model not found
原因:模型名称写错,或者官方模型库中不存在该名称。
解决:先查看本地已有模型:
```bash
ollama list
```
再到 Ollama 官方模型库复制准确名称,重新拉取:
```bash
ollama pull <正确模型名>
```
如果网络受限,配置代理后重试:
```bash
export HTTPS_PROXY=http://<代理地址>:<端口>
ollama pull <模型名>
```
报错 3:CUDA error: out of memory 或 ggml_cuda_init: failed to initialize CUDA
原因:显存不足,或者 GPU 驱动与 Ollama 运行时不匹配。
解决:查看显存占用:
```bash
nvidia-smi
```
关闭其他占用显存的进程;换更小参数量或更高量化等级的模型;降低并发:
```bash
export OLLAMA_NUM_PARALLEL=1
```
如果仍然失败,可以先让模型走 CPU 运行,或升级显卡驱动。驱动与 CUDA 兼容性以 NVIDIA 和 Ollama 官方文档为准。
报错 4:bind: address already in use
原因:11434 端口已被其他进程占用。
解决:
```bash
ss -tlnp | grep 11434
```
找到占用进程后停止它,或者换端口启动:
```bash
OLLAMA_HOST=0.0.0.0:11435 ollama serve
```
同时记得修改客户端里的 API 地址。
报错 5:permission denied 访问模型目录或服务
原因:当前用户没有权限读写模型目录,或不在 ollama 用户组。
解决:
```bash
sudo usermod -aG ollama $USER
```
重新登录后生效。也可以直接使用 systemd 服务运行,避免手动读写目录。
后续维护
- 备份:模型文件较大,备份前确认磁盘空间。Linux 上常见目录是
/usr/share/ollama/.ollama/models,用户手动安装时在~/.ollama/models。可以用rsync同步到备份盘:
```bash
sudo rsync -av /usr/share/ollama/.ollama/models/ /backup/ollama-models/
```
- 升级:Linux 重新运行官方安装脚本即可;macOS 使用
brew upgrade ollama;Windows 下载新安装包覆盖安装。升级前建议备份模型目录和自定义 systemd 配置。版本变化以官方文档当前版本为准。 - 日志:Linux 查看 systemd 日志:
```bash
journalctl -u ollama -f
```
关注显存不足、模型加载失败、端口冲突等信息。
- 监控:
ollama ps查看当前加载的模型;nvidia-smi查看 GPU 显存;API/api/tags查看模型列表。生产环境可把日志接入现有监控系统。 - 安全:对外提供 API 时,不要直接暴露公网。建议用 Nginx 或 Caddy 反向代理,开启 TLS 和认证,限制来源 IP。定期清理不用的模型:
```bash
ollama rm <模型名>
```
这样一套流程下来,本地或内网就能稳定运行开源模型,并通过标准 HTTP API 接入自己的应用。
