技术博客

Ollama 本地大模型部署完全指南:从安装到 API 调用

详细讲解 Ollama 的安装配置、主流模型(DeepSeek/Qwen3/Llama)的下载运行、REST API 和 OpenAI 兼容接口使用,以及多 GPU、自定义 Modelfile、模型量化选择等实用技巧,帮助团队快速搭建私有化 AI 推理服务。

Ollama本地大模型LLMDeepSeekQwen3私有化部署

大模型落地的第一个门槛是“能不能在自己的机器上跑”。Ollama 解决的就是这个问题:一行命令下载并运行主流开源模型,提供 OpenAI 兼容 API,支持从 MacBook 到多 GPU 服务器的全场景部署。本文从安装到生产级配置,完整讲解 Ollama 的使用。

Ollama 是什么

Ollama 是一个开源的本地大模型运行时,核心价值:

支持的主流模型(2026 年 7 月):

模型 参数量 最低显存需求(4-bit) 推荐场景
DeepSeek-R1 1.5B-671B 1.5GB-400GB 推理/数学/代码
Qwen3 0.6B-235B 0.5GB-130GB 中文/多语言
Llama 3.1 8B-70B 5GB-40GB 通用对话
Gemma 3 1B-27B 0.8GB-16GB 轻量/嵌入
Phi-4 14B 8GB 推理/代码
Mistral 7B-24B 4GB-14GB 通用对话

安装 Ollama

Linux(推荐生产)

# 一键安装脚本
curl -fsSL https://ollama.com/install.sh | sh

# 验证安装
ollama --version
# ollama version is 0.7.2

# 查看 systemd 服务状态
systemctl status ollama
# ● ollama.service - Ollama Service
#    Loaded: loaded (/etc/systemd/system/ollama.service)
#    Active: active (running)

# 服务日志
journalctl -u ollama -f

手动安装(无 root 权限或离线环境)

# 下载 ollama 二进制
curl -L https://ollama.com/download/ollama-linux-amd64 -o /usr/local/bin/ollama
chmod +x /usr/local/bin/ollama

# 创建 systemd 服务(可选,推荐生产使用)
useradd -r -s /bin/false -m -d /usr/share/ollama ollama

cat > /etc/systemd/system/ollama.service << 'EOF'
[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/usr/local/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="HOME=/usr/share/ollama"
# 自定义模型存储路径
Environment="OLLAMA_MODELS=/data/ollama/models"
# 监听所有网卡(允许其他机器访问)
Environment="OLLAMA_HOST=0.0.0.0:11434"
# 并发请求数(默认1,生产建议增大)
Environment="OLLAMA_NUM_PARALLEL=4"

[Install]
WantedBy=default.target
EOF

systemctl daemon-reload
systemctl enable --now ollama

验证 GPU 识别

# 检查 Ollama 识别的 GPU
ollama info
# Host:
#   System RAM:   62.5 GiB
#   Free RAM:     45.2 GiB
# GPU(s):
#   NVIDIA GeForce RTX 4090 (24 GiB)
#   NVIDIA GeForce RTX 4090 (24 GiB)

下载和运行模型

基本操作

# 运行模型(如果本地没有会自动下载)
ollama run qwen3:7b

# 交互式对话
>>> 你好,介绍一下自己
你好!我是 Qwen3,一款由阿里云研发的大语言模型...
>>> /bye  (退出对话)

# 仅下载不运行
ollama pull deepseek-r1:8b

# 查看已下载的模型
ollama list
# NAME                    ID            SIZE    MODIFIED
# qwen3:7b                f3b81e...     4.9 GB  2 hours ago
# deepseek-r1:8b          abc123...     4.9 GB  1 day ago

# 删除模型
ollama rm qwen3:7b

# 查看模型详情
ollama show qwen3:7b
# Model
#   architecture    qwen3
#   parameters      7.6B
#   context length  40960
#   embedding length 3584
#   quantization    Q4_K_M

选择量化版本

同一模型有多个量化精度版本,按显存排序:

# Qwen3-14B 各量化版本(显存需求递增,质量递增)
ollama pull qwen3:14b-q4_K_M    # ~8GB VRAM,最常用,质量/体积平衡最佳
ollama pull qwen3:14b-q6_K      # ~11GB VRAM,质量更好
ollama pull qwen3:14b-q8_0      # ~14GB VRAM,接近原始精度
ollama pull qwen3:14b-fp16      # ~28GB VRAM,完整精度(需要大显存)
ollama pull qwen3:14b           # 默认版本(通常是 q4_K_M)

# 命名规则:
# q4_K_M  = 4-bit 量化,K-quant,Medium(推荐)
# q6_K    = 6-bit 量化,K-quant
# q8_0    = 8-bit 量化(接近原精度,体积大)
# fp16    = 半精度浮点(不压缩,最高质量)

REST API 使用

Ollama 启动后自动开启 HTTP API,默认地址 http://localhost:11434

原生 API

# 生成(非流式)
curl http://localhost:11434/api/generate \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3:7b",
    "prompt": "用 Python 写一个快速排序",
    "stream": false
  }'

# 流式生成(实时输出)
curl http://localhost:11434/api/generate \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3:7b",
    "prompt": "讲解 eBPF 的工作原理",
    "stream": true,
    "options": {
      "temperature": 0.7,
      "top_p": 0.9,
      "num_predict": 2048,
      "num_ctx": 8192
    }
  }'

# 对话(Chat)
curl http://localhost:11434/api/chat \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3:7b",
    "messages": [
      {"role": "system", "content": "你是一个 Linux 运维专家。"},
      {"role": "user", "content": "Kubernetes Pod 一直 CrashLoopBackOff 怎么排查?"}
    ],
    "stream": false
  }'

OpenAI 兼容 API(推荐,复用现有代码)

# 完全兼容 OpenAI /v1/chat/completions
curl http://localhost:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ollama" \
  -d '{
    "model": "qwen3:7b",
    "messages": [
      {"role": "user", "content": "What is the capital of China?"}
    ]
  }'
# Python 代码:只需修改 base_url,其他与 OpenAI 相同
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:11434/v1",
    api_key="ollama"   # 任意字符串,Ollama 不验证
)

response = client.chat.completions.create(
    model="qwen3:7b",
    messages=[
        {"role": "system", "content": "你是一个 Linux 运维专家。"},
        {"role": "user", "content": "如何排查 Nginx 502 错误?"}
    ],
    temperature=0.7,
    max_tokens=2048,
    stream=True   # 流式输出
)

for chunk in response:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
# 使用 Langchain 接入 Ollama
from langchain_ollama import ChatOllama

llm = ChatOllama(
    model="qwen3:7b",
    base_url="http://localhost:11434",
    temperature=0.7
)

response = llm.invoke("解释一下 Kubernetes 的 Operator 模式")
print(response.content)

自定义 Modelfile

Modelfile 类似 Dockerfile,可以自定义模型行为:

# Modelfile:创建专门用于运维的 Qwen3 角色
FROM qwen3:14b

# 设置系统提示词
SYSTEM """
你是一位资深 Linux 系统运维工程师,工作经验 10 年以上。
专长:Kubernetes、Linux 故障排查、性能优化、自动化运维。

回答规则:
1. 优先给出可直接执行的命令
2. 解释命令含义,而不只是给结果
3. 指出常见坑和注意事项
4. 必要时给出完整脚本而非代码片段
"""

# 调整参数
PARAMETER temperature 0.3      # 运维场景降低随机性
PARAMETER top_p 0.9
PARAMETER num_ctx 16384        # 支持长上下文(查看长日志)
PARAMETER num_predict 4096     # 最大输出长度

# 设置停止词
PARAMETER stop "<|im_end|>"
PARAMETER stop "<|endoftext|>"
# 从 Modelfile 创建自定义模型
ollama create ops-expert -f Modelfile

# 运行自定义模型
ollama run ops-expert
>>> 我的 Pod 状态是 OOMKilled,怎么处理?
# 会给出专业的运维角度回答,包含 kubectl 命令

多 GPU 配置

Ollama 默认自动使用所有可用 GPU:

# 环境变量控制 GPU 使用
# 指定使用哪几块 GPU(按 nvidia-smi 中的 GPU 编号)
export CUDA_VISIBLE_DEVICES=0,1  # 只使用 GPU 0 和 1

# 模型自动分布在多卡(tensor parallelism)
# 48GB 显存(2×24GB)可运行 qwen3:32b(需要约 20GB)
ollama run qwen3:32b

# 检查模型在哪些 GPU 上运行
ollama ps
# NAME           ID        SIZE    PROCESSOR          UNTIL
# qwen3:32b      abc123    19 GB   100% GPU           4 minutes from now
# 查看具体哪块 GPU:
nvidia-smi  # 查看显存占用分布

常用配置环境变量

# /etc/systemd/system/ollama.service 中的 Environment 配置

# 监听地址(默认 127.0.0.1:11434,生产改为 0.0.0.0)
OLLAMA_HOST=0.0.0.0:11434

# 模型存储路径(默认 ~/.ollama/models)
OLLAMA_MODELS=/data/llm/models

# 并发请求数(默认 1)
OLLAMA_NUM_PARALLEL=4

# 模型空闲后卸载时间(默认 5m,0 表示永不卸载)
OLLAMA_KEEP_ALIVE=10m

# 调试日志
OLLAMA_DEBUG=1

# Flash Attention(默认开启,某些旧 GPU 需要关闭)
OLLAMA_FLASH_ATTENTION=1

# KV Cache 量化(节省显存,略有质量损失)
OLLAMA_KV_CACHE_TYPE=q8_0   # 或 q4_0

# 最大并发模型数(默认 1,多模型同时加载)
OLLAMA_MAX_LOADED_MODELS=2

离线环境部署

在没有公网访问的服务器上部署:

# 方法1:在有网络的机器上下载,再传输
# 在有网络的机器
ollama pull qwen3:7b
# 模型文件位于 ~/.ollama/models/

# 打包传输
tar -czf qwen3-7b.tar.gz ~/.ollama/models/blobs/ ~/.ollama/models/manifests/

# 在目标机器解压
tar -xzf qwen3-7b.tar.gz -C ~/.ollama/

# 方法2:使用 GGUF 文件直接导入
# 从 HuggingFace 或 ModelScope 下载 GGUF 文件

cat > Modelfile << 'EOF'
FROM /data/models/qwen3-7b-q4_k_m.gguf
SYSTEM "你是一个运维助手"
EOF

ollama create qwen3-local -f Modelfile
ollama run qwen3-local

小结

Ollama 将“本地运行大模型”的门槛从“需要 ML 工程师配置复杂环境”降低到“运维工程师一行命令”。对于企业内网 AI 需求(不能把数据发给公有云 AI 接口),或者需要定制化系统提示词的场景,Ollama 是最简单的起点。下一篇将讲解如何用 Open WebUI 在 Ollama 之上搭建一个完整的私有 ChatGPT 替代品。