跳至内容
本地模型怎么跑:Ollama 适合开发,vLLM 适合并发

本地模型怎么跑:Ollama 适合开发,vLLM 适合并发

July 14, 2026

本地模型讨论里最大的误区,是把「电脑上能对话」当成「已经具备服务能力」。这是两阶段:

  1. 能用:下载、改 prompt、接应用
  2. 能扛:并发、鉴权、监控、升级

Ollama 和 vLLM 大致对应这两段。下面给可执行命令和与 Gateway 串联的方式。

Ollama 与 vLLM 分工

1. Ollama:开发机上的最短路径

# 安装后拉模型(在开发机 / 带 GPU 的机器上)
ollama pull qwen2.5:7b
ollama run qwen2.5:7b

OpenAI 兼容调用:

curl -s http://127.0.0.1:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen2.5:7b",
    "messages": [{"role":"user","content":"用三行解释 PagedAttention"}],
    "stream": false
  }' | jq '.choices[0].message.content'

Python:

from openai import OpenAI

c = OpenAI(base_url="http://127.0.0.1:11434/v1", api_key="ollama")
r = c.chat.completions.create(
    model="qwen2.5:7b",
    messages=[{"role": "user", "content": "写一个 bash 健康检查函数"}],
)
print(r.choices[0].message.content)

适合:单人、插件调试、离线草稿。不适合:多人同时打满、要严谨 SLA。

2. vLLM:把 GPU 吃成吞吐量

内存警告: vLLM + 7B/14B 需要独立 GPU 机。不要在 4G 内存的轻量云主机上尝试拉起——会直接把机器打崩。云主机只跑网关/反代即可。

# GPU 服务器示例(需 NVIDIA Container Toolkit)
docker run --runtime nvidia --gpus all \
  -p 8000:8000 \
  -v ~/.cache/huggingface:/root/.cache/huggingface \
  vllm/vllm-openai:latest \
  --model Qwen/Qwen2.5-7B-Instruct \
  --max-model-len 8192 \
  --gpu-memory-utilization 0.90 \
  --api-key sk-local-vllm

冒烟:

curl -s http://127.0.0.1:8000/v1/models \
  -H "Authorization: Bearer sk-local-vllm" | jq '.data[].id'

curl -s http://127.0.0.1:8000/v1/chat/completions \
  -H "Authorization: Bearer sk-local-vllm" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Qwen/Qwen2.5-7B-Instruct",
    "messages": [{"role":"user","content":"ping"}]
  }' | jq '.usage'

经验阈值:同时在线用户明显超过个位数、或要吃满多卡,再上 vLLM;否则 Ollama 更省心。

3. 用网关把两边统一起来

config.yaml 片段:

model_list:
  - model_name: local
    litellm_params:
      model: ollama/qwen2.5:7b
      api_base: http://192.168.1.20:11434
  - model_name: local-prod
    litellm_params:
      model: openai/Qwen/Qwen2.5-7B-Instruct
      api_base: http://10.0.0.8:8000/v1
      api_key: os.environ/VLLM_KEY
  - model_name: cloud
    litellm_params:
      model: openai/gpt-4o-mini
      api_key: os.environ/OPENAI_API_KEY

router_settings:
  fallbacks:
    - local: ["cloud"]
    - local-prod: ["cloud"]

客户端始终:

client = OpenAI(base_url="https://api.example.com/v1", api_key="sk-virtual")
client.chat.completions.create(model="local", messages=[...])

换机器、换 Ollama→vLLM,只改网关配置。

4. 案例:团队内网「文档问答」从笔记本迁到 GPU 盒

时间线:

  1. Week 1:同事笔记本 Ollama + Web UI,能用但开会时一卡全卡
  2. Week 2:把模型迁到工位 GPU 小主机,vLLM 提供 /v1,前面 Nginx 加 Basic/Token
  3. Week 3:公司应用改 base_url 到内网网关,逻辑模型名仍叫 docs-rag
  4. 结果:开发体验不变,高峰不再互抢显存上下文

关键变更其实只有部署拓扑,不是业务重写。

5. 上线前检查清单

# 1) 健康检查
curl -fsS "$BASE/v1/models" -H "Authorization: Bearer $KEY" >/dev/null

# 2) 简单压一下(不要在小机器上加太大并发)
# brew/apt 安装 hey 或用 ab
hey -n 50 -c 5 -m POST \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"qwen2.5:7b","messages":[{"role":"user","content":"hi"}]}' \
  "$BASE/v1/chat/completions"

清单:

  1. 鉴权:端口不对公网裸奔
  2. 限流:防脚本打爆
  3. 监控:显存、队列、p95
  4. 模型版本钉死
  5. 电费 / 占卡也算成本

本地模型的意义是延迟、隐私和可控;选对服务层,比天天换模型名更重要。