本地模型怎么跑:Ollama 适合开发,vLLM 适合并发
本地模型怎么跑:Ollama 适合开发,vLLM 适合并发
July 14, 2026
本地模型讨论里最大的误区,是把「电脑上能对话」当成「已经具备服务能力」。这是两阶段:
- 能用:下载、改 prompt、接应用
- 能扛:并发、鉴权、监控、升级
Ollama 和 vLLM 大致对应这两段。下面给可执行命令和与 Gateway 串联的方式。
1. Ollama:开发机上的最短路径
# 安装后拉模型(在开发机 / 带 GPU 的机器上)
ollama pull qwen2.5:7b
ollama run qwen2.5:7bOpenAI 兼容调用:
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 盒
时间线:
- Week 1:同事笔记本 Ollama + Web UI,能用但开会时一卡全卡
- Week 2:把模型迁到工位 GPU 小主机,vLLM 提供
/v1,前面 Nginx 加 Basic/Token - Week 3:公司应用改
base_url到内网网关,逻辑模型名仍叫docs-rag - 结果:开发体验不变,高峰不再互抢显存上下文
关键变更其实只有部署拓扑,不是业务重写。
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"清单:
- 鉴权:端口不对公网裸奔
- 限流:防脚本打爆
- 监控:显存、队列、p95
- 模型版本钉死
- 电费 / 占卡也算成本
本地模型的意义是延迟、隐私和可控;选对服务层,比天天换模型名更重要。