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 分钟

其他推荐模型:

模型 命令 大小 场景 推荐配置 Qwen2.5:7B ollama pull qwen2.5:7b ~4.7GB 通用对话、中文写作 8GB+ 内存 Llama 3.1:8B ollama pull llama3.1:8b ~4.9GB 英文任务、代码生成 8GB+ 内存 Qwen2.5:14B ollama pull qwen2.5:14b ~9GB 复杂推理、专业问答 16GB+ 内存 DeepSeek-R1:7B ollama pull deepseek-r1:7b ~4.7GB 推理、数学、编程 8GB+ 内存 Gemma 2:9B ollama pull gemma2:9b ~5.5GB 轻量级、速度快 8GB+ 内存 Phi-3:3.8B ollama pull phi3:3.8b ~2.3GB 极低配置也能跑 4GB+ 内存

大叔的建议:第一次玩别贪大。从 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 多个文档,零故障。这就是本地部署最大的价值——稳定、可控、不限次数。


八、总结

场景 推荐配置 推荐模型 日常问答、写作 8GB 内存 / 4GB 显存 Qwen2.5:7B 代码生成、翻译 8GB 内存 / 6GB 显存 DeepSeek-Coder:6.7B 复杂推理、论文分析 16GB+ 内存 / 8GB 显存 Qwen2.5:14B 极低配置(旧电脑) 4GB 内存 Phi-3:3.8B 生产环境多用户 32GB+ 内存 / 多 GPU vLLM + 量化模型

本地部署大模型的门槛已经比两年前低了十倍。如果你手头有一台闲置的服务器,或者哪怕是一台配置还行的旧电脑,花半小时装上 Ollama,你会发现本地 AI 的世界远比想象中大。

下周我计划写一篇 Ollama + Open WebUI 搭建局域网 AI 助手,几个人的小团队共用一台模型服务器,每人一个浏览器就能用上大模型。有需要的朋友可以关注。


以上就是我这几个月折腾 Ollama 的真实经验。有疑问欢迎留言,每一条我都会回复。

关注 IT大叔的工具箱,每周分享实用技术干货。

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注