Ollama 本地部署完全指南:在自己的服务器上跑大模型
Ollama 本地部署完全指南:在自己的服务…
Ollama 本地部署完全指南:在自己的服务器上跑大模型,告别 API 焦虑
三周前我干了一件蠢事:接了一个自动化文档处理的活,全部基于某国产大模型的 API。上线第三天,API 服务挂了八小时。客户的 5000 份合同卡在队列里,我的手机被夺命连环 call 打爆。那天晚上我翻来覆去就一个念头——再也不把命脉拴在别人的 API 上。
第二天我把所有流程切到了本地部署的模型上。到今天跑了三周,一次没出过问题。这篇文章就把我本地部署大模型的整套经验完整写出来,从零开始的每一步都带命令。
一、Ollama 是什么?为什么选它?
先说人话:Ollama 是一个让你在本地运行大语言模型的工具,不需要配置 CUDA、不需要搞虚拟环境、不用管 PyTorch 版本兼容问题。下载、安装、跑模型,三条命令的事。
市面上跑本地模型的选择不少:
- llama.cpp:纯 C++ 实现,性能好,但配置全靠命令行参数,新手直接劝退
- Transformers + Hugging Face:功能最强,但环境依赖地狱,换个显卡要重配一遍
- LM Studio:有 GUI,但后台更新频繁,服务器上不好用
- Ollama:一套 REST API 搞定所有操作,命令行简洁,Docker 部署也成熟
我选 Ollama 的核心理由:
1. 一条命令装完,不污染系统环境
2. 自带模型管理,ollama pull 直接下载
3. 原生 REST API,任何程序都能调
4. 容器化部署,迁移成本为零
5. GPU 加速自动识别,不用手动配
二、安装 Ollama(两种方式)
方式一:Linux 一键安装(推荐)
curl -fsSL https://ollama.com/install.sh | sh
装完验证:
ollama --version
看到版本号就成功了。整个过程不超过 30 秒。
方式二:Docker 部署(适合已有容器环境的)
docker run -d \
--name ollama \
-p 11434:11434 \
-v ollama_data:/root/.ollama \
--gpus all \
ollama/ollama
注意:
--gpus all只在有 NVIDIA GPU 的机器上有效。纯 CPU 环境去掉这个参数即可。
验证服务是否运行
# 默认 REST API 端口是 11434
curl http://localhost:11434/api/tags
返回一个 JSON 列表,说明服务正常。如果返回空数组也别紧张——还没有下载模型而已,下一步就来。
三、下载并运行你的第一个模型
下载模型
# 拉取 Qwen2.5(通义千问最新版),7B 参数,中英文都很强
ollama pull qwen2.5:7b
根据网速不同,7B 模型大约 4-5GB,下载时间 5-20 分钟。
其他推荐模型:
ollama pull qwen2.5:7bollama pull llama3.1:8bollama pull qwen2.5:14bollama pull deepseek-r1:7bollama pull gemma2:9bollama pull phi3:3.8b大叔的建议:第一次玩别贪大。从 7B 模型开始,跑通了再上更大的。很多人上来就拉 70B 模型,等了一小时下载完才发现显存不够——血压直接拉满。
运行并对话
# 直接交互模式
ollama run qwen2.5:7b
# 看到 >>> 提示符后直接输入问题
>>> 帮我写一个 Python 函数,读取 CSV 文件并统计每列的空值数量
退出交互模式:输入 /bye 或按 Ctrl+D。
非交互式调用(脚本中使用)
# 单次问答
ollama run qwen2.5:7b "用一句话解释什么是 Docker"
实际输出示例:
Docker 是一种容器化技术,将应用及其依赖打包在轻量级、可移植的容器中运行,确保不同环境下的运行一致性。
四、REST API 调用(这才是真正有用的部分)
Ollama 最强大的地方是它开箱即用的 REST API。你在任何语言里都能调用本地模型,就像调用 OpenAI 一样。
最简单的测试
curl http://localhost:11434/api/generate -d '{
"model": "qwen2.5:7b",
"prompt": "用三句话解释什么是反向代理",
"stream": false
}'
返回 JSON,其中 response 字段就是模型的回答。
Python 调用示例
import requests
response = requests.post("http://localhost:11434/api/generate", json={
"model": "qwen2.5:7b",
"prompt": "Python 中 list 和 tuple 的区别是什么?",
"stream": False
})
print(response.json()["response"])
流式输出(实时打字效果)
import requests
response = requests.post("http://localhost:11434/api/generate", json={
"model": "qwen2.5:7b",
"prompt": "写一首关于夏天的五言绝句",
"stream": True
}, stream=True)
for line in response.iter_lines():
if line:
print(line.decode().split('"response":"')[1].split('"')[0], end="", flush=True)
关键点:stream: true 时,API 会一行一行吐出 token,适合做聊天效果。
OpenAI 兼容接口(新功能)
Ollama 从 0.4.x 版本开始支持 OpenAI 兼容格式:
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama" # 随便填,Ollama 不校验
)
response = client.chat.completions.create(
model="qwen2.5:7b",
messages=[{"role": "user", "content": "讲个程序员笑话"}]
)
print(response.choices[0].message.content)
这意味着:所有兼容 OpenAI SDK 的工具(如 LangChain、Dify、NextChat)都可以直接对接你的本地模型,只需要改一下 base_url。
五、模型管理与优化技巧
查看已下载的模型
ollama list
删除不再需要的模型
ollama rm qwen2.5:7b
自定义模型参数(温度、上下文长度等)
创建一个 Modelfile:
FROM qwen2.5:7b
# 调低随机性,让输出更精准
PARAMETER temperature 0.3
# 增大上下文窗口
PARAMETER num_ctx 8192
# 系统提示词
SYSTEM """你是一个专业的 Linux 运维工程师。
回答问题时只给出准确的命令和解释,不要多余的内容。
"""
构建并运行:
ollama create my-qwen-sysadmin -f ./Modelfile
ollama run my-qwen-sysadmin
GPU 加速确认
# 查看 Ollama 日志
journalctl -u ollama -n 50 | grep -i gpu
如果看到类似 NVIDIA GPU detected 的信息,说明 GPU 加速生效了。没 GPU 也没关系,CPU 也能跑,就是慢一些。
六、避坑指南(大叔的血泪经验)
坑 1:模型占满磁盘?
Ollama 的模型默认存在 ~/.ollama/models。7B 模型大约 4-5GB,14B 约 9-10GB。部署前先 df -h 看一下磁盘剩余空间。
# 查看模型存储路径大小
du -sh ~/.ollama/models
坑 2:内存不够怎么办?
大模型是吃内存/显存大户。实在不够可以调小上下文窗口:
ollama run qwen2.5:7b --num-ctx 2048
默认是 4096,调小到 2048 能省约 1GB 内存,但模型能记住的对话历史也少了。
坑 3:服务自启动
用一键脚本安装的 Ollama 默认已经配置了 systemd 服务:
# 确认服务状态
systemctl status ollama
# 如果没启用,手动开启
sudo systemctl enable --now ollama
坑 4:外网如何访问?
绝对不要直接把 11434 端口暴露到公网! Ollama 没有任何认证机制,谁都能调你的模型。
正确做法:用 Nginx 反代加密码认证,或者只在内网用。
# /etc/nginx/sites-available/ollama-proxy
server {
listen 11435 ssl;
server_name your-domain.com;
# SSL 配置...
location / {
proxy_pass http://127.0.0.1:11434;
proxy_set_header Host $host;
# 加简单认证
auth_basic "Ollama API";
auth_basic_user_file /etc/nginx/.ollama-passwd;
}
}
坑 5:并发请求导致 OOM
Ollama 默认一个模型只能处理一个请求。并发请求会排队。如果有多用户需求,建议用 vLLM 或开多个 Ollama 实例,每个挂不同的模型。
七、实用场景:用本地模型做文档批量处理
最后分享一个我实际在用的脚本——用本地模型批量处理 Markdown 文件,自动生成摘要和标签:
#!/usr/bin/env python3
"""批量处理 Markdown 文件,用本地模型生成摘要和标签"""
import os
import json
import requests
from pathlib import Path
OLLAMA_URL = "http://localhost:11434/api/generate"
MODEL = "qwen2.5:7b"
DOCS_DIR = Path("./docs")
def process_md(file_path):
with open(file_path, "r") as f:
content = f.read()[:2000] # 截取前 2000 字
prompt = f"""分析以下文档,输出 JSON:
{{
"summary": "一句话摘要(不超过 30 字)",
"tags": ["标签1", "标签2", "标签3"]
}}
文档内容:
{content}"""
resp = requests.post(OLLAMA_URL, json={
"model": MODEL,
"prompt": prompt,
"stream": False,
"options": {"temperature": 0.3}
})
return resp.json().get("response", "")
# 批量处理
for md_file in DOCS_DIR.glob("*.md"):
print(f"处理: {md_file.name}")
result = process_md(md_file)
print(f" 结果: {result[:100]}...")
这个脚本跑了三周,处理了 2000 多个文档,零故障。这就是本地部署最大的价值——稳定、可控、不限次数。
八、总结
本地部署大模型的门槛已经比两年前低了十倍。如果你手头有一台闲置的服务器,或者哪怕是一台配置还行的旧电脑,花半小时装上 Ollama,你会发现本地 AI 的世界远比想象中大。
下周我计划写一篇 Ollama + Open WebUI 搭建局域网 AI 助手,几个人的小团队共用一台模型服务器,每人一个浏览器就能用上大模型。有需要的朋友可以关注。
以上就是我这几个月折腾 Ollama 的真实经验。有疑问欢迎留言,每一条我都会回复。
关注 IT大叔的工具箱,每周分享实用技术干货。
