大模型混合云部署:从零搭建本地与云上推理环境
大模型混合云部署是指把模型推理服务同时放在本地服务器和公有云上,用本地资源承载日常稳定流量,用云资源应对突发高峰。
本文按零基础可操作的方式,讲清准备条件、部署步骤和验证方法,适合已有本地 GPU 服务器、希望补充云上弹性的运维人员。
先确认你的场景与前置条件
混合云部署不是所有情况都适合。
如果模型只做内部低频调用,单台本地服务器通常够用;
当出现以下情况时,混合云才有明显价值:本地 GPU 显存不足以支撑并发、业务有明显波峰波谷、需要对核心数据做本地隔离。
动手前先核对这几项:
- 本地服务器已安装 Linux(下文以 Ubuntu 22.04 为例),并确认
nvidia-smi能正常输出 GPU 信息。 - 本地与云上服务器之间网络互通,安全组放行所需端口。
- 准备一个统一的模型版本目录,例如本地
/data/models/qwen,云上保持相同模型名,避免路由混乱。 - 确定一个入口域名,例如
llm.example.internal,所有请求先到本地 Nginx,再按策略转发。
本地推理服务先跑通
本地节点承担主力推理,推荐用 vLLM 启动 OpenAI 兼容接口。
先创建 Python 环境并安装依赖:
python3 -m venv /opt/vllm-env
source /opt/vllm-env/bin/activate
pip install vllm
启动服务时绑定内网地址,不要直接暴露公网:
python -m vllm.entrypoints.openai.api_server \
--model /data/models/qwen \
--host 127.0.0.1 \
--port 8000 \
--tensor-parallel-size 1
执行后观察日志出现 Uvicorn running on http://127.0.0.1:8000 即表示启动成功。
接着在本机验证:
curl http://127.0.0.1:8000/v1/models
返回 JSON 中包含模型名称,说明本地推理链路正常。
如果报显存不足,先降低 --gpu-memory-utilization(例如 0.85),再检查是否有其他进程占用 GPU。
云上节点与本地如何协同
云上节点不需要和本地完全相同的硬件,但模型版本和接口协议要保持一致。
在云服务器上重复上述 vLLM 启动步骤,监听端口改为内网地址,并通过安全组只允许本地 Nginx 所在 IP 访问。
本地 Nginx 作为统一入口,按权重或健康检查结果分流。
示例配置片段:
upstream llm_backend {
server 127.0.0.1:8000 weight=8 max_fails=2 fail_timeout=30s;
server 10.0.0.12:8000 weight=2 max_fails=2 fail_timeout=30s;
}
server {
listen 80;
server_name llm.example.internal;
location /v1/ {
proxy_pass http://llm_backend;
proxy_set_header Host $host;
}
}
修改后执行 nginx -t 检查语法,再 systemctl reload nginx 生效。
权重 8:2 表示本地承担大部分流量,云上只做补充,具体比例按实测调整。
容易踩坑的几个地方
- 模型版本不一致:本地和云上加载不同版本的模型文件,会导致同一请求返回格式或效果有差异,务必用同一份模型目录或校验哈希。
- 云上端口暴露公网:vLLM 默认无鉴权,直接开放公网有被滥用的风险。务必通过安全组限制来源 IP,或在 Nginx 层加访问控制。
- 显存估算不足:并发上来后云上节点可能先于本地触发 OOM,建议在 Nginx 中启用
max_fails和健康检查,让故障节点自动摘除。 - 日志分散:本地和云上日志分开存放,排错时容易漏看。建议统一收集到本地日志目录,至少保留请求 ID 便于对照。
验证部署是否真正可用
完成配置后,从客户端发起一次请求,确认返回正常:
curl http://llm.example.internal/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"qwen","messages":[{"role":"user","content":"你好"}]}'
然后停掉本地 vLLM 进程,再次请求,观察是否自动切到云上节点并返回结果。
这一步能验证故障转移是否生效。
最后检查 Nginx 错误日志 tail -f /var/log/nginx/error.log,确认没有持续的上游超时。
混合云部署的关键不是堆资源,而是让本地和云上节点在模型版本、接口协议和监控方式上保持一致。
按本文步骤跑通后,再根据实际并发调整权重和云上实例数量,逐步稳定下来。
常见疑问
本地和云上模型必须完全一样吗? 建议一致。
如果确实要用不同规格,至少保证接口返回结构兼容,并在路由层按模型名区分。
没有公网 IP 的本地服务器能接入吗? 可以,由本地主动向云上建立隧道或反向连接,避免在云上暴露本地入口。
如何判断该加云节点还是加本地显卡? 看峰谷比。
波峰持续时间短、频率低,优先用云上弹性;
长期高负载则本地扩容更可控。