这两年企业里聊大模型部署的人明显多了,前阵子同事还在问:公司内网想跑一个开源模型给业务提供接口,到底用 vLLM 还是直接上 Ollama?我给的回答是,你先想清楚这个服务是要做开发 demo,还是要扛线上流量,再谈框架选型。大模型服务器部署这件事,最大的误区就是拿着社区里“能跑起来”的教程直接搬进生产环境,结果模型调度、显存管理、并发控制全是问题。这篇指南我按 2026 年我实际用下来的方案写,覆盖框架选型、云服务对比,以及一条能落地的生产级部署流程。适合两类人看:一类是第一次把开源模型部署到服务器上的后端或算法工程师,另一类是要给团队搭建内部模型服务、但没太多 AI 基础设施经验的技术负责人。看完你会知道主流框架各自的边界、云平台上怎么选配置不踩坑,以及从裸机到稳定提供 API 服务的完整步骤。
1. 内容整体设计与思路拆解
1.1 为什么“能跑起来”和“生产可用”是两件事
大模型部署的本质,是在有限的显存和算力里,把一个动辄几十 GB 的权重文件跑起来,同时让多个用户请求都能快速拿到结果。但“能跑起来”只是第一步:直接加载模型然后用最简单的脚本转发请求,推理速度可能很慢,显存利用率不到一半,并发一上来就 OOM,更不用说模型热更新、请求排队、超时控制这些生产环境绕不开的问题。
我见过太多团队因为一开始只求“能 demo”,最后被迫推倒重来。所以这篇指南的核心思路是:先把框架选型和硬件/云资源放在一起考虑,再用一套标准化的部署流程把它固化成服务。选型不只看性能,还要看你的业务场景、团队维护能力和预算。生产级部署也不等于“用最贵的机器”,而是让资源利用率、响应延迟和稳定性达到一个可接受的平衡点。
1.2 2026 年部署方案的核心变化
经过这一年多的实践,我明显感觉开源推理框架的成熟度已经到“拿来即用”的阶段,几个关键变化值得注意:
- 推理引擎从“能跑”走向“极致压榨硬件”:vLLM、SGLang 这类框架通过连续批处理、PagedAttention 等机制,把单卡吞吐提升了数倍,已经是生产环境的首选,而不是靠手写优化脚本。
- 微调与推理的边界越来越模糊:LoRA/QLoRA 微调后的权重可以直接和推理框架集成,团队不再需要维护两套环境。
- 云服务商把“模型即服务”做成了标准品:国内国外主流平台都支持一键部署 Llama、Qwen、DeepSeek 等开源模型,按量计费或包年租卡,自己造轮子的必要性大幅降低。
但选择变多不等于决策变简单:自己租裸金属用 vLLM,还是在云平台上一键部署?这本质上是在“可控性”和“运维成本”之间做取舍。接下来我把框架选型的细节先讲透,这是整个部署流程的地基。
2. 核心细节解析与实操要点:主流推理框架怎么选
2.1 六款主流推理框架的优缺点对比
我把 2026 年比较活跃的推理框架整理成了对比表,按照“是否适合生产”和“上手难度”排序,方便你快速定位:
| 框架 | 核心优势 | 主要短板 | 适用场景 |
|---|---|---|---|
| vLLM | 兼容性最好、吞吐高、社区生态最强 | 对特定模型架构的极端优化不如专用引擎 | 绝大多数生产场景的首选 |
| SGLang | 复杂 prompt 和高并发下延迟稳定 | 相对年轻,使用习惯和文档不如 vLLM 丰富 | 高并发、复杂结构化输出场景 |
| Hugging Face TGI | 与 HF 生态无缝衔接,部署简单 | 吞吐表现通常微低于 vLLM | 已经在用 HF 体系、追求省事的团队 |
| TensorRT-LLM | NVIDIA 专用,单卡延迟和吞吐极限最高 | 用起来繁琐,模型转换复杂,锁定 NVIDIA | 对延迟和吞吐要求极致的重度推理 |
| LMDeploy | 国内团队维护,对中文模型支持好 | 生态和社区小于 vLLM | 需要中文优化、想用国产框架的场景 |
| Ollama | 安装极简,适合个人和开发环境 | 高并发和生产级管理能力偏弱 | 本地体验、开发调试、小规模内网 |
这张表里我想特别强调 vLLM 的“兼容性”优势:它几乎支持所有主流开源模型架构,你不需要为某个模型单独写适配代码。而 SGLang 的“高并发延迟稳定”并不是玄学,它通过 RadixAttention 机制做了 prefix chunk 缓存,当多个请求共用相同的前缀(比如系统提示词、Few-shot 示例)时,推理耗时能明显下降。
2.2 vLLM 核心机制解析:为什么它生产表现好
vLLM 最大的两个技术亮点是 PagedAttention 和 Continuous Batching。
PagedAttention 解决的问题是显存碎片化。以前部署模型,KV Cache(每一轮生成时都要保留的 Key-Value 缓存)是预先分配一整块显存,但实际用多少并不确定,多轮对话时浪费尤其严重。PagedAttention 把这个缓存切成固定大小的块,按需分配,类似操作系统的分页机制,显存利用率大幅提升。这带来的直接好处是:同样的显存,你能容纳更大的并发数。
Continuous Batching 解决的则是 GPU 空转问题。传统做法是等一个批次的所有序列都生成完,再统一释放资源,这会让快的请求等慢的请求,GPU 波浪式空转。vLLM 的 Continuous Batching 会在一个 batch 里某个序列生成结束后立刻插入新请求,让 GPU 始终处于满载状态。生产环境实测下来,同一块 A100 上,开启 vLLM 后的吞吐往往能达到常规部署的 2~4 倍。这就是为什么选型时框架不是“锦上添花”,而是直接影响硬件成本的核心变量。
2.3 量化格式怎么选:FP8、INT4 还是 BF16
很多刚接触部署的同学会问:模型文件有 BF16、FP8、INT4 不同的版本,应该下哪一个?这里给一个实用经验法则:
- BF16(约 16GB/7B 模型):精度最高,显存占用最大,是生产环境首选,尤其是代码生成、数学推理这类对精度敏感的任务。
- FP8(约 8GB/7B 模型):精度损失很小,显存减半,如果显存紧张可以优先考虑。
- INT4 / AWQ / GPTQ(约 4GB~5GB/7B 模型):显存占用极低,但精度损失比较明显,且部分复杂推理任务的输出质量波动大。适合个人电脑运行,但放在生产 API 上我建议慎用,尤其是做 Agent 或长文本推理时,量化误差会被放大。
关于“下哪个文件”,还要看后缀:GGUF 格式主要给 llama.cpp 系用(比如 Ollama 背后就是 llama.cpp),AWQ 和 GPTQ 是给 vLLM、SGLang 这类框架用的。虽然现在 vLLM 也兼容一部分 GGUF,但最佳实践是:用 vLLM 就下 AWQ/GPTQ 版本,用 Ollama 就下 GGUF 版本。
3. 生产级部署全流程:从硬件准备到 API 上线
3.1 硬件与显存规划公式
部署前的第一件事不是装环境,而是算清楚你需要多少显存。经验和公式如下:
- 模型权重显存:参数量(以B为单位) × 精度字节数。7B 模型 BF16 精度大约是 7 × 2 = 14GB,FP8 则约 7GB,INT4 约 3.5GB。
- KV Cache 显存:与并发数、序列长度、模型层数、注意力头数相关。粗略估算时,可按“每并发每千 token 约占用 0.5GB~1GB(7B 模型)”来粗算,实际以框架日志为准。
- 总需求:权重显存 + KV Cache 显存 + 预留余量(建议 20% 以上)。
举个例子,7B 模型用 BF16 精度,想支持 32 并发、平均每请求生成 2000 token,粗略估算显存需求:14GB(权重) + 32 × 2GB(KV Cache) ≈ 78GB。这样你就能理解为什么很多人用 2 张 40GB 的 A100/L40S,或者 4 张 24GB 的 3090/4090。单卡 24GB 在同等并发下会非常勉强。
3.2 环境准备:驱动、CUDA、Python 环境
硬件到位后,环境准备阶段我建议严格按以下顺序操作,避免装完发现版本冲突:
- 安装 NVIDIA 驱动,用
nvidia-smi确认驱动版本和所支持的 CUDA 版本。 - 安装 CUDA Toolkit 和 cuDNN,注意这里的 CUDA 版本不一定要追新,以 PyTorch 官方支持列表为准。2026 年主流组合是 CUDA 12.1 或 12.4。
- 创建 Python 虚拟环境,推荐 Python 3.10 或 3.11。别直接用系统 Python,后面依赖冲突会很难受。
- 安装 PyTorch,优先用官方源安装 GPU 版,装完在 Python 里用
torch.cuda.is_available()验证。
这个流程里最容易翻车的点是:用pip install vllm时它自动拉取最新版 PyTorch,可能和你手动装的版本不一致。解决方法是直接用 vLLM 官方镜像(Docker),或者先安装 vLLM 再根据它解析出的 PyTorch 版本进行对齐。
3.3 模型启动的核心参数演示
这里我用 vLLM 部署 Qwen2.5-7B-Instruct 作为示例,model_path换成你实际下载模型的路径:
python -m vllm.entrypoints.openai.api_server \ --model /data/models/Qwen2.5-7B-Instruct \ --served-model-name qwen7b \ --tensor-parallel-size 1 \ --gpu-memory-utilization 0.9 \ --max-model-len 8192 \ --host 0.0.0.0 \ --port 8000这些参数不是随便填的,逐一说下我的经验:
--gpu-memory-utilization 0.9:表示最多用 90% 显存,留 10% 给 CUDA context 和临时缓冲。设成 0.99 看起来激进,但遇到长文本生成时容易 OOM,不稳定。--max-model-len 8192:这是模型能处理的最大 token 长度(输入+输出)。设太短,长文档请求会被直接拒绝;设太长,KV Cache 预留变大,并发能力下降。需要按业务场景调。--tensor-parallel-size 1:单卡部署保持 1;跨卡推理时设为卡数。注意:跨卡推理要求多张卡之间带宽足够,消费级主板上的 PCIe 带宽可能成为瓶颈,不如单卡省心。--served-model-name qwen7b:这是对外暴露的模型名,客户端请求时model字段必须传这个值。如果不设置,默认是模型路径里的名字,客户端容易写错。
启动成功后,你会看到一个 OpenAI 兼容的接口地址http://your_server_ip:8000/v1。这意味着你可以直接用openaiPython 库来调用,代码几乎不用改。
3.4 模型下载:Hugging Face 与 ModelScope 避坑指南
国内服务器下载 Hugging Face 模型经常超时,这个问题很好解决:如果机器在国内,优先用 ModelScope 下载,然后在启动 vLLM 时把--model指向你下载好的本地路径。或者设置环境变量HF_ENDPOINT=https://hf-mirror.com来加速 Hugging Face 下载。
另一个经验是:下载时先明确要哪个版本文件。比如模型仓库里常有一堆.bin和.safetensors文件,优先选safetensors格式,它带校验信息,不容易出现文件损坏后静默加载失败的问题。下载完最好核对文件完整性,特别是大模型文件动辄几十 GB,网络中断导致的文件缺失很隐蔽,运行时才报错。
3.5 接入 API 网关:Nginx 反向代理与鉴权
直接用 vLLM 开放的 8000 端口服务公网流量是生产环境的大忌,至少要在前面加一层 Nginx 反向代理。这里给一个最小可用配置:
upstream vllm_backend { server 127.0.0.1:8000; keepalive 32; } server { listen 80; server_name your-domain.com; location /v1/ { proxy_pass http://vllm_backend; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_read_timeout 300; } }配置里有三个关键点:keepalive开启连接的复用,避免每次请求都重建 TCP 连接;proxy_read_timeout 300是因为大模型生成速度慢,超过默认 60 秒没返回就会被 Nginx 掐断;proxy_set_header Connection ""是为了让上游 vLLM 能正确处理长连接。
鉴权方面,最简单的方式是在 Nginx 里加一层 API Key 检查,或者用网关产品统一管理。千万不要把没有任何鉴权的模型服务直接暴露到公网,这类端口很容易被扫描到,然后被薅算力。能用网关就用网关,一个小失误可能变成账单炸弹。
3.6 可观测性与压力测试:上线前必须做的验证
上线前至少要监控这几个指标:QPS(每秒请求数)、TTFT(首 token 延迟)、ITL(每 token 生成间隔)、显存利用率。vLLM 自带/metrics端点,可以接入 Prometheus + Grafana,这个组合是目前社区最通用的方案。
压力测试我推荐用 wrk 先做粗测,脚本可以简单点:
wrk -t 4 -c 32 -d 60s --script post.lua http://your-api/v1/chat/completionspost.lua里写好固定的请求体。注意:压力测试时要看的是“延迟的 p50 / p95”和“错误率”,而不是平均 QPS 数字。平均 QPS 高但 p95 延迟爆炸,说明框架的排队机制已经撑不住了。如果你发现 p95 持续超过业务要求,优先调小并发上限,或者增加实例,而不是盲目调大gpu-memory-utilization。
3.7 生产环境安全与合规清单
部署大模型服务不只是技术问题,还要考虑安全合规。几个最容易忽略的点:
- 内容和输出审核:如果服务面向外部用户,建议在 API 网关后面接一层内容安全审核服务,对输入和输出都做检测,防止模型生成违规内容。
- 数据合规:私有化部署时,要确认模型所见的业务数据是否包含敏感个人信息,建议做脱敏处理后再进入模型。
- 模型的许可证:开源模型不等于完全免费商用,务必核对模型仓库里的 License。部分模型有商用限制,这是生产环境合规的大坑。
4. 云服务对比:租卡、平台部署还是自建机房
4.1 三类云方案的核心差异
部署大模型不一定非要买物理服务器。2026 年主流的云上方案分成三类,我整理了一个快速对比表:
| 方案 | 典型形态 | 优势 | 劣势 | 适用场景 |
|---|---|---|---|---|
| 公有云 GPU 实例 | 阿里云 ECS GPU、腾讯云 GPU 服务器等 | 弹性强、按小时计费、基础设施完善 | 长期跑比包年贵 | 临时测试、业务波动大 |
| 托管推理平台 | 阿里云 PAI-EAS、腾讯云 TI 平台等 | 免运维、自带监控和弹性伸缩 | 定制化能力受限 | 想快速上线、不想维护推理框架 |
| 裸金属 GPU 服务器 | 各大云厂商的裸金属实例或自购 | 性能极致、完全可控 | 成本高、运维重 | 大规模生产、高并发推理 |
先说裸金属和普通 GPU 云主机的区别:裸金属没有虚拟化层损耗,GPU 直通,性能更高,适合训练和大规模推理。普通 GPU 云主机更灵活,但 2026 年的主流虚拟化方案下,性能损耗已经很小,大部分推理场景用云主机即可。
托管推理平台的优势是省事。比如你想在 PAI-EAS 上部署 Qwen,只需要上传模型或在模型市场选一个,平台会自动帮你完成资源申请、镜像构建和弹性伸缩。对于不想维护 vLLM 配置的团队,托管平台确实省心。但注意这类平台有平台绑定风险:你很难在上面跑定制化的推理逻辑、自定义算子或复杂的后处理脚本。如果模型逻辑经常要改、或者要接很多内部系统,我建议选 vLLM 自建。
4.2 关于“免费大模型 API”的自建成本估算
很多团队会纠结:既然有那么多免费的大模型 API 可供调用,为什么还要自己部署?我的判断是:做产品原型和验证想法,用现成 API 完全没有问题,但一旦进入高频调用或者数据需要出境的场景,自建或私有化部署的性价比优势就出来了。
算一笔账:假设你的业务每天调用百万次,每次输入输出合计约 2000 token。用主流商业 API,按市场价格折算,一个月的调用成本可能够租好几张 A100 或 L40S 一个月。而自建部署后,除了电费和带宽,边际成本几乎为零。更重要的是,私有化部署意味着模型请求不出内网,对数据敏感的业务来说是刚需。
这里还要提一个容易被忽略的问题:免费 API 的限流、排队和内容安全策略都不受你控制。有的平台并发上限很低,高峰时段排队严重;有的平台会主动对某些内容做拦截。如果你做的是 To B 服务,这种不可控性是很致命的。自己部署虽然前期辛苦,但稳定性完全握在自己手里。
4.3 服务器规格选型的实操经验
我帮不同团队做过不下十次服务器选型,几个规律分享给你:
- 7B 模型推理:单张 24GB 显存(如 RTX 3090/4090、L4、A10)够用,并发不高的情况下体验不错。预算充足优先上 L40S 或 A100。
- 14B~32B 模型推理:推荐 2 张 40GB 及以上的卡(如 A100、L40S、H800)做张量并行,或者直接上 80GB 单卡 A100/H100。这里单卡大显存比多卡拼接更省心。
- 70B 模型推理:80GB × 2 起步,或者用多卡配合量化。没有 H 系列的话,4×4090 也不是不行,但 PCIe 互联会成为瓶颈,延迟会比 A100/H100 高不少。
采购服务器时还要算上 CPU 和内存:CPU 核数建议不低于 16 核,内存不低于 128GB,因为模型加载时要把权重从磁盘读到内存再进显存。磁盘建议上 NVMe SSD,几 GB/s 的读取速度直接决定冷启动时间。这些配置在云平台选择实例规格时很容易被忽略,不要只盯着 GPU 型号看。
5. 开源微调与推理的一体化实战:LoRA/QLoRA 的部署链路
5.1 微调框架怎么选:一张表看懂
很多团队最终都要走到微调这一步,毕竟通用模型没办法完全贴合业务数据。2026 年主流的开源微调框架选型逻辑我总结成下面这张表:
| 框架 | 主要特点 | 适合对象 |
|---|---|---|
| LLaMA-Factory | 集成了 LoRA/QLoRA/全参微调,WebUI 操作友好 | 中小团队快速微调首选 |
| Axolotl | YAML 配置文件驱动,可复现性强 | 需要精细调参和批量化实验的团队 |
| TRL | Hugging Face 官方生态,支持 RLHF 全流程 | 需要做偏好对齐的团队 |
| DeepSpeed | ZeRO 优化,支持大规模分布式训练 | 多机多卡训练大模型 |
| Megatron-LM | 大规模并行训练基础设施 | 追求极致训练效率的团队 |
对于大多数做业务微调、而不是研究训练算法的团队,我的选择是 LLaMA-Factory。它的 WebUI 可以让你在浏览器里上传数据、配置参数、启动训练,对算法能力要求不高。它的 QLoRA 功能让一张 24GB 显卡也能微调 7B 模型,大大降低了门槛。
5.2 微调显存估算与 LoRA 机制的通俗解释
QLoRA 的原理是在原始模型权重上增加少量低秩矩阵(A 和 B),固定原模型不动,只训练新增的低秩参数。形象地说,相当于你在一本已经写好的书里贴了很多便利贴,只修改便利贴上的内容,不重写整本书。这就能解释为什么 LoRA 显存占用远低于全参微调:因为它只需要保存优化器的梯度状态给新增的小矩阵,而不是给全部权重。
实操中 QLoRA 微调 7B 模型显存估算大概是:基础占比约为原模型权重的 2~3 倍(因为同时要保留原始权重、LoRA 参数、梯度和优化器状态), 7B 模型用 24GB 显卡能跑,用 40GB 会更从容。
微调完成后,LoRA 权重可以合并回原模型导出。在 LLaMA-Factory 里选择“导出合并”,然后直接把合并后的模型路径替换到 vLLM 的--model参数即可。这里我也踩过坑:不要直接在推理框架里动态加载 LoRA adapter 并期望零成本切换,多 adapter 切换在高并发下会引发显存抖动,不如直接合并后重启服务。
6. 快速决策:根据你的实际情况选择部署方案
6.1 四类典型场景的推荐方案
基于前面的选型分析,最后用决策矩阵帮你对号入座:
| 你的场景 | 推荐的部署方案 | 理由 |
|---|---|---|
| 个人开发者,想在本地或小机器上跑 | Ollama + 消费级 GPU | 安装最快,模型管理简单,适合快速验证 |
| 研发团队内部工具,调用量不大 | vLLM/Docker + 单张数据中心级 GPU | 兼容 OpenAI API 风格,方便集成现有代码 |
| 对外提供高并发 API,延迟敏感 | SGLang/vLLM + 多卡张量并行 | 高吞吐、延迟稳定,能支撑商业级流量 |
| 数据敏感的企业私有化场景 | vLLM + 裸金属 GPU + 内网网关 | 完全内网闭环,满足数据不出域的要求 |
注意这几个方案不是互斥的:你可以先在 Ollama 里做功能验证,确定模型效果后,再用 vLLM 部署到生产环境;也可以先用云平台的托管推理做小流量,跑通后再迁移到自建。模型推理框架的 API 风格已经高度统一,迁移成本比想象中低很多。
6.2 部署核对清单:照着做避坑
分享一个我每次上线前都会过一遍的清单:
- 模型文件本地路径完整,优先用 safetensors 格式
- 显存预留至少 20% 余量,gpu-memory-utilization 不高于 0.92
- 确认 max-model-len 是否覆盖业务最大输入长度
- Nginx 开启了 keepalive 且 read timeout 至少 300s
- API Key 鉴权已生效,公网端口不裸奔
- 对公网服务已接内容安全审核
- 接入 Prometheus 监控,检查 /metrics 有数据
- 压测 p95 延迟和错误率达标
- 确认模型 License 允许商用
- 冷启动时间已测试,服务重启后能在预期时间内恢复
这份清单是我踩过不少坑之后沉淀下来的,照着做一遍能规避绝大多数常见的生产事故。
7. 实操心得与最后提醒
最后聊几个纯经验层面的东西。我在实际部署中最大的一个体会是:框架选型不必追求“最新最热”,而要把“团队能不能维护”放在第一位。vLLM 之所以能成为社区默认选择,不只是因为快,更因为它出问题时随便一搜就有解决方案。SGLang 和 TensorRT-LLM 各有长处,但对一个没有专职推理优化工程师的团队来说,踩坑成本可能比省下的那点 GPU 时间更贵。
另一个经验是:所有配置改动尽量走声明式管理,不要直接在服务器上手工改参数。用 Docker Compose 或者 Kubernetes 管理部署,模型版本、启动参数、环境变量都写进配置里,这样出问题可以快速回滚,而不是在一台服务器上“盲调”。我自己曾经因为手工改了某个参数,一周后才发现新部署的实例没有生效,这种低级失误其实很常见。
如果你准备从零开始,我的建议是:先买一台便宜的 24GB 显卡机器,用 Ollama 体验完整流程,再用 vLLM 部署同一个模型感受两者差异,最后再上生产配置。这个循序渐进的路径,比直接照着大型企业的方案搭一套宏大架构要靠谱得多。跑通一次完整链路后,你对框架选型、云资源规划、生产级部署流程的理解都会完全不同。