大模型服务器部署这事儿,2026年再回头看,跟三年前完全是两个世界。早年间大家还在折腾“能不能跑起来”,如今开源社区的生态已经卷到“选哪个框架更划算、哪家云服务商更匹配、上线之后怎么稳”这个层面了。我前后在自建机房和主流云平台上部署过不少 7B 到 70B 的开源模型,从单卡试跑到对外提供 API 的完整流程都走了一遍。这篇指南就围绕大模型服务器部署这个主题,把框架选型、云服务对比、生产级流程这三件事按实操顺序讲清楚。目标读者是准备把模型真正接到业务系统里的工程师,或者一个人要扛整个部署链路的小团队负责人,刚入门的朋友也能从中找到一条清晰的路线。
很多人上来就急着装环境,我不一样,我会先算几笔账。因为部署这个动作本身不难,难的是你算错了账之后,后面每一步都在为错误买单。
1. 部署前先算三笔账:为什么要自建、模型走哪条路、流量到底有多大
1.1 第一笔账:自己部署还是调别人的 API
先说个反直觉的结论:大多数场景下,你不该自己部署大模型,调商业 API 更快更省。我见过太多团队,为了“拥有模型”而自建,最后 GPU 的账单比 API 贵一倍,运维还占用大量人力。
那什么情况下自建是合理的?核心就三条:
一是数据合规和私有化要求。金融、医疗、政企项目经常明确要求数据不出内网,你总不能把客户数据发到第三方的 API 上,这个没得商量,只能自建。
二是深度定制。你需要把模型接入特定的知识库、走特定的提示词链路、让输出格式完全贴合内部系统,这些在 API 的“黑盒”里做起来很别扭,自己部署以后你能控制采样参数、接入工具调用、甚至改模型权重。
三是长期高频调用的成本优势。如果你的业务是每天上百万 token 的稳定调用量,自建的边际成本会明显下降。但注意,这里说的是“稳定调用量”,如果业务量忽大忽小,自建的闲置成本反而比按量付费的 API 更浪费。
1.2 第二笔账:直接部署开源模型,还是微调之后部署
2026 年的开源模型能力已经相当强了,通用对话、代码生成、文档解析这些任务,直接拿 Qwen、Llama 系列跑都能用。但如果你要的是“懂你们公司语料的客服”“能按你家资产命名规则生成代码的助手”,那通用模型不一定达标,需要考虑微调。
这里要提醒一个关键点:微调后的模型,部署流程和直接部署差不多,但你得提前确认推理框架支持你的微调产物。比如你现在微调主流用的是 LoRA、QLoRA 这类低秩适配方案,那部署时候要么把 LoRA 权重合并回基座模型节省推理耗时,要么用支持动态 LoRA 加载的推理框架。这直接关系到选型,我在第三章会展开。
1.3 第三笔账:流量和延迟预期决定你买什么规模的 GPU
算一算你预期的并发数、上下文长度和响应延迟。这三个数一旦确定,GPU 选型范围基本就锁死了。
举个例子:你要对外提供 7B 模型的 API,目标 8 并发,单请求上下文不超过 8K,响应希望秒级返回。那 7B 模型 FP16 权重约 14GB,算上 KV Cache 和激活值,单张 24GB 显存的卡刚好够,但几乎没余量;想稳一点就上 48GB 或者干脆两张 24GB 的卡做张量并行。这就是第三笔账的意义——它把“用什么型号的卡”从拍脑袋变成了一道算术题。
2. 显存预算是部署的第一道门槛:权重、KV Cache 与并发余量
2.1 权重账:参数和精度决定了模型“本身”占多少显存
大模型显存占用分三块:权重、KV Cache、激活值和框架开销。其中权重是最直观的,公式很简单——显存占用约等于“参数量 × 每个参数占用的字节数”。
FP16 或 BF16 下每个参数占 2 字节,INT8 占 1 字节,INT4 大概占 0.5 字节。我整理了一个常用尺寸的参照表,方便你直接对照:
| 模型参数量 | FP16/BF16 | INT8 量化 | INT4 量化 |
|---|---|---|---|
| 7B | 约 14GB | 约 7GB | 约 4GB |
| 13B | 约 26GB | 约 13GB | 约 7GB |
| 32B | 约 64GB | 约 32GB | 约 16GB |
| 70B | 约 140GB | 约 70GB | 约 35GB |
注意这是纯权重大小,不是完整部署需求。70B 的 FP16 权重就要 140GB,一张 80GB 的 H100 也装不下,要么多卡张量并行,要么上量化。所以很多团队部署 70B 级别的模型,首选方案就是 INT8 或 INT4 量化配合多卡。
2.2 KV Cache 账:第二个“隐形房东”
权重只是基础,真正吃显存的大头往往是 KV Cache,这东西新手特别容易忽略。
简单解释一下 KV Cache 是什么:模型生成每个 token 的时候,都要参考之前所有 token 的 Key 和 Value 信息。为了不重复计算,框架会把它们缓存下来,缓存占用的显存就是 KV Cache。上下文越长、并发请求越多,这部分就越大。
我拿常见的 7B 模型举个例子,假设它是传统的 MHA(Multi-Head Attention)架构:每个 token 的 KV Cache 大约 0.5MB。你感受一下这个数字的杀伤力:
| 上下文长度 | 单并发 KV Cache | 4 并发 | 8 并发 |
|---|---|---|---|
| 2K | 约 1GB | 约 4GB | 约 8GB |
| 4K | 约 2GB | 约 8GB | 约 16GB |
| 8K | 约 4GB | 约 16GB | 约 32GB |
同样是 7B 模型,FP16 权重才 14GB,8 并发 + 8K 上下文,KV Cache 比权重还大。这就是为什么我老说“部署大模型本质上是部署显存预算”,而不是部署模型文件。新一代模型用 GQA(Grouped Query Attention)后 KV Cache 会小一些,但数量级还是这个水平。
2.3 余量账:激活值、CUDA 上下文和框架本身都别漏
除了权重和 KV Cache,还有些“不起眼”的开销:激活值(前向计算过程的临时变量)、CUDA 上下文、推理框架自身的缓冲。这些加起来通常要预留权重的 20% 到 30%。
所以实际部署的时候,配置里有个参数叫gpu-memory-utilization,vLLM 默认 0.9,意思是只使用显卡 90% 的显存,剩下 10% 留给临时开销。我自己的习惯是设置 0.85 到 0.9,别贪心顶满。显存这玩意儿,算账的时候不留余量,线上就会用 OOM 告诉你什么叫现实。
3. 推理框架选型:vLLM、SGLang、TGI、Ollama 的真实差异
3.1 一张表看懂现在的推理框架格局
2026 年的推理框架主流就是下面这几位,各有个性,简单先过一遍:
| 框架 | 核心优势 | 典型场景 | 上手难度 |
|---|---|---|---|
| vLLM | 吞吐高、生态好、OpenAI 风格兼容 | 生产环境 API、高并发推理 | 低 |
| SGLang | 前缀缓存、结构化输出极强 | Agent 多轮、复杂模板、工具调用 | 中 |
| TGI | Hugging Face 官方、部署简单 | 快速接入 Hugging Face 生态 | 低 |
| Ollama | 一条命令跑本地模型 | 个人电脑、内网试验、边缘设备 | 极低 |
| TensorRT-LLM | 性能压榨极致 | 固定架构、投入优化预算的场景 | 高 |
3.2 vLLM 为什么是生产环境的首选
如果你只打算部署一个模型对外提供推理服务,没有太多花活,我的第一个推荐永远是 vLLM。理由不是它跑得最快,而是它最“均衡”。
vLLM 有两个核心技术:PagedAttention 和 Continuous Batching。PagedAttention 把 KV Cache 按页管理,显存利用率大幅提升;Continuous Batching 让不同请求不必等一个批次完整结束,而是动态塞进新请求,吞吐量在并发场景下优势非常明显。另外它兼容 OpenAI 风格的 API 接口,这意味着你从商业 API 迁移到自建服务,只需要改一下 base_url,业务代码几乎不用动。
vLLM 对量化、LoRA、多卡部署、流式输出的支持也都很成熟,社区活跃度最高,遇到问题搜一搜基本都有答案。对于大多数团队,vLLM 不是在几个选项里挑出来的,而是不需要思考的默认项。
3.3 SGLang 的时候到了:前缀缓存和时间敏感型 Agent
SGLang 这几年势头很猛,它最大的招牌是 RadixAttention,也就是前缀缓存。如果你的请求共享同一个系统提示词、工具定义或长对话上下文,SGLang 可以复用这些前缀的计算结果,显著降低首个 token 的生成延迟。
这一点在 Agent 场景特别吃香。比如你写了个 Agent,每次请求都带一大段“你是某某领域的专家,你有这些工具可用……”的 system prompt,用 vLLM 每个请求都得完整走一遍 prefill,用 SGLang 就能直接命中缓存,省掉大量重复计算。
另外 SGLang 对结构化输出(JSON 模式)和多模态模型的支持也很激进,适合做复杂业务逻辑的团队。但代价是生态和周边工具比 vLLM 稍弱,遇到冷门问题要自己多摸索。
我的建议是:纯对话、高并发 API 用 vLLM;Agent 密集、共享前缀多的场景认真评估 SGLang。两个框架不冲突,甚至可以按模型分开部署。
3.4 TGI 和 Ollama 各自的生态位
TGI 是 Hugging Face 自家的服务框架,优势是跟 HF 生态无缝衔接,从 HF Hub 拉模型就能直接跑,配置简单,历史也久。吞吐表现在同级别模型下通常不如 vLLM,但如果你的团队对 HF 生态特别熟,想快速上线一个内部工具,TGI 是稳妥的过渡方案。
Ollama 则是另一条路线。它把“本地跑大模型”做成了和 Docker 一样简单的事情,一条命令拉模型、一条命令起服务,还自带一个兼容 OpenAI 的接口。但它对并发控制、Deep 调优能力弱,不适合生产级高负载 API。我把它定位成“笔记本上的试验场”——先在 Ollama 上确认模型效果和价值,再迁移到 vLLM 做生产部署。这个流程能省不少早期阶段的时间。
4. 云服务器怎么选:算力规格、计费方式与网络拓扑
4.1 选卡不能只看显存:算力、带宽和互联都要看
一旦确定要自建,选云服务器这事马上摆到面前。很多新手选 GPU 只看显存大小,结果发现 4090 虽然 24GB 显存,但和 A100 的算力、显存带宽差出好几个身位。
推理场景要看三个指标:
一是显存容量,决定你能装多大的模型和多少 KV Cache,这个前面算过账了。
二是算力和显存带宽,决定生成速度。大模型推理特别依赖显存带宽,因为每个 token 的生成都要把权重读一遍,带宽不够 GPU 利用率再高也是空转。
三是卡间互联和网络拓扑。如果你要部署 70B 模型或者走张量并行,多张卡之间的通信频率非常高。同一台物理机内的卡间通信走 NVLink 或 PCIe,速度快;跨机通信要走高速网络(InfiniBand 或 RoCE),成本和复杂度直接上升。我的经验是:能单机多卡,绝不跨机分布式。跨机分布式部署一套下来,网络调试和故障排查的时间成本够你加好几次班。
4.2 计费方式的取舍:按量、包月还是竞价
云 GPU 的计费渠道通常有几种:按量付费、包月包年、竞价实例(Spot)。没有哪种绝对好,取决于你的业务形态。
验证和测试阶段,用按量付费最划算。我习惯的做法是:先用按量付费的实例把整套流程跑通,压测数据出来之后再决定要不要转包月。因为按量付费可以随时释放,避免“买了个包月卡结果发现规格不够用”的尴尬。
稳定期对外提供服务,包月或包年更适合。GPU 资源是不折不扣的“硬件税”,省钱空间不大,包月能换来稳定性,至少不会被平台随时回收。
竞价实例适合离线任务或容错业务。价格便宜很多,但机器可能被随时回收,不适合当在线服务的底座。如果你只是跑批处理、做实验、批量评测,竞价实例是性价比之王。
4.3 最容易忽略的成本项和运维项
选云服务商时,很多人盯着 GPU 时薪,却忽略了几个隐性成本。一是网络流量费,大模型请求的输入输出动态很大,流式输出一个长回答可能好几 KB,量大了之后流量费不是小数目。二是磁盘和快照费用,模型权重动辄几十 GB,镜像和快照占用的存储空间也会产生持续费用。三是数据迁移费,不同云之间的迁移带宽贵且慢,上云之前想清楚长期绑定关系。
运维层面,我最看重的功能是:GPU 健康监控、实例自动故障替换、镜像加速和自动扩缩容。前两个能力直接决定你能不能半夜睡个好觉,后两个决定你最忙的时候要不要盯着控制台手动加机器。
4.4 不同场景下的选型参考
我最终会把云服务商的选择落到一张场景匹配表上,不看品牌,看需求:
| 业务场景 | 推荐规格 | 计费方式 | 关键注意事项 |
|---|---|---|---|
| 技术验证/实验 | 单卡 24GB-48GB | 按量付费 | 用完立即释放,防遗忘 |
| 对外稳定 API 服务 | 多卡高配 + 至少 2 个副本 | 包月/包年 + 弹性 | 配置健康检查与自动扩容 |
| 成本敏感型长期离线任务 | 竞价实例或算力平台 | 按小时竞价 | 任务要支持断点续跑 |
| 数据合规/私有化 | 物理隔离或专有云 | 定制合同 | 确认数据出口和审计能力 |
5. 生产级部署全流程:模型准备、容器化服务与高可用接入
5.1 模型获取与完整性校验
流程第一步,先把模型文件拿到手。现在主流渠道还是从 Hugging Face 拉取,网络受限的团队可以用hf-mirror这类镜像站拉模型,国内速度更快。
下载命令很简单:
# 安装 huggingface CLI pip install -U "huggingface_hub[cli]" # 下载模型到本地(示例:Qwen2.5-7B-Instruct) huggingface-cli download Qwen/Qwen2.5-7B-Instruct \ --local-dir ./models/Qwen2.5-7B-Instruct下载完成后我强烈建议做一次文件校验。大模型文件动辄几十 GB,传输过程中损坏一个分片,加载时大概率直接启动失败,或者更糟——输出乱码但服务不报错。校验方式看 Hub 页面上给每个文件提供的 SHA256 值,下载后逐一对一下,花钱花时间都花了,不差这一步。
5.2 容器化启动:vLLM 生产参数不是瞎填的
推荐用官方镜像直接起服务,减少环境依赖问题。宿主机要提前装好 NVIDIA 驱动和nvidia-container-toolkit,这样容器才能访问 GPU。
一条典型的 vLLM 启动命令长这样:
docker run -d --gpus all \ -v ~/.cache/huggingface:/root/.cache/huggingface \ -p 8000:8000 \ --shm-size 2g \ vllm/vllm-openai:latest \ --model Qwen/Qwen2.5-7B-Instruct \ --served-model-name my-llm \ --gpu-memory-utilization 0.9 \ --max-model-len 8192 \ --max-num-seqs 8 \ --host 0.0.0.0 \ --port 8000逐个说下关键的几个参数:
--served-model-name是暴露给客户端的模型名,你可以改成业务自己的名字,不必和原始模型名一致。
--max-model-len是模型支持的最大上下文长度,这里设置了 8192。注意这个值和 KV Cache 强相关,开太大可能直接内存不足导致启动失败,开太小又浪费了卡的容量。建议根据你的业务需求设定,而不是一味开最大。
--max-num-seqs控制单实例最大并发请求数。设置 8 意味着多余请求会排队等待。生产环境不要把这个值拉太高,因为 vLLM 的动态批处理会把多个请求打包计算,批越大单请求的等待时间越长,时延会变差而不是变好。
--shm-size 2g是容器共享内存大小,这个参数不写,容器默认只有 64MB,vLLM 多进程协作时会莫名其妙崩溃。这是新手最容易踩的坑,我后面专门展开讲。
5.3 验证服务:别急着接业务
服务起来之后,先用 curl 做一轮基础验证,确认模型能正常对话、流式输出、参数生效:
curl http://localhost:8000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "my-llm", "messages": [{"role": "user", "content": "用一句话介绍你自己"}], "max_tokens": 256 }'返回结果里有choices、usage字段,说明基础链路通了。我建议多测几组不同 prompt,覆盖长文本、多轮对话、特殊符号这些边界场景,确认输出稳定之后再往下走。
5.4 网关、鉴权与高可用:把服务真正暴露出去
单机单服务只能算通了,还不能算生产可用。对外提供 API 至少要过四道关:
第一道是网关。业务方通常不希望直接面对你的裸端口,用 Nginx 做反向代理和负载均衡是最常见的做法。注意两个细节:proxy_connect_timeout要设短,后端健康才能快速失败;proxy_read_timeout要设长,大模型流式输出可能持续几十秒甚至几分钟,默认 60 秒会直接切断连接。
第二道是鉴权。vLLM 自带的多租户方案里做开了可以用--api-key开启,每请求校验一个 key。生产上建议在这个基础上再做一层业务鉴权,比如转发前校验 JWT,把模型服务的 key 留作内部凭据。
第三道是健康检查。vLLM 自带/health健康端点,Nginx 里的后端池可以配置主动健康检查,把负载均衡和故障摘除做自动联动。
第四道是容量预案。单实例总会遇到流量高峰,最直接的方案是部署两个副本挂在 Nginx 后面,达到 CPU 或并发阈值再水平扩展。
高可用这块我的建议很简单:先保证有两个副本能切换,再谈自动扩缩容。很多事故不是机器不够,而是挂了没人知道,备份主机也没准备。
5.5 发布与灰度:模型上线也要走流程
模型更新不是把新权重挂上去就完事,尤其是替换行为上可能有差异的新版本。我习惯的发布流程是:在新的一组 GPU 实例上启动新版本模型,用一批业务真实请求在灰度环境里跑对比测试,重点观察输出质量和时延变化,确认没有回退再让 Nginx 切换流量。如果发现新模型在特定场景下变笨了,能立刻切回旧版本。
这套流程在 Kubernetes 环境里可以用多个 Deployment 加 Service 权重切换实现,没有 K8s 的团队用 Nginx 手动切换也行。核心思想是——任何模型上线都必须可回滚。
6. 上线之后必踩的坑:监控指标、压测与故障复盘
6.1 共享内存不足:最常见的“莫名其妙崩溃”
先说最容易踩的坑,容器里跑 vLLM,启动后一切正常,压力稍微上来一点进程直接崩掉。很多人的第一反应是显存不够,但看日志才发现在/dev/shm空间不足。我前面提到了--shm-size 2g,这个参数必须加,原因在于 vLLM 多进程协作依赖共享内存传递数据,默认的 64MB 根本不够。
经验教训:所有部署 GPU 推理容器的同学,--shm-size起步给 2G,别问为什么。
6.2 max-model-len 设置过大导致的启动失败
如果你启动 vLLM 时看到类似 “Not enough memory” 的日志,最可能的原因不是权重太大,而是max-model-len开太高,KV Cache 预估直接把显存撑爆了。
框架在启动阶段会先根据权重、max-model-len和并发上限估算 KV Cache 需求,如果超过剩余显存,就直接拒绝启动。解决办法不是硬调显存利用率,而是砍max-model-len或者换更大的卡。给你个思路:把max-model-len从 32768 砍到 8192,显存需求一下子就降下来了,实际业务影响未必大。
6.3 CPU offload 的“慢”,不是慢,而是不可用
显存不够时,vLLM 有个--cpu-offload-gb参数,可以把部分权重挪到 CPU 内存。实测下来这个功能确实能让你把 70B 模型塞进小显存的卡,但推理速度惨不忍睹——每次生成都要从内存搬运权重,生成一个 token 的耗时从毫秒级变成秒级。
这功能不是给你线上用的,是给你演示用的。线上如果显存不够,正解是量化、换大卡或者走多卡并行,千万别开 CPU offload 硬扛流量。
6.4 并发上限与排队:流量不小,但时延突然飙升
还有种情况,服务没崩,错误也没增多,但 P95 时延从 500ms 一路飙到 8 秒。这时候通常是你设置的max-num-seqs太小,请求在排队。
如果业务要求低时延,你需要优先增大队列参数或副本数,而不是闷头增大max-num-seqs——批处理虽然提升了吞吐,但单请求的等待时间会上升。这个平衡要靠压测摸出来。我压测时会连续打 1000 个真实业务请求,看 P50。P95、P99 三个指标,同时看 GPU 利用率和 KV Cache 使用率,用数据确定并发上限。
6.5 量化带来的精度损失:灰度后才知道
很多团队为了上 70B 模型选择 INT4 量化,推理速度确实快,显存也确实省,但你知道什么时候会翻车吗?翻车往往不在通用对话上,而在代码生成、数学推理这类对精确度敏感的场景。量化掉的精度可能让本来能跑通的代码逻辑输出出现低级错误。
我的原则:量化可以,但必须灰度验证。先用小流量跑一两天,对比量化前后的输出质量,特别是你那批最关键的业务 prompt。省下的显存是实打实的,但输出质量的损失也是实打实的,这笔账要业务侧一起算。
6.6 关键监控指标与告警建议
最后给一个我常用的监控项清单,不用贪多,先把这几个盯住:
| 指标 | 关注点 | 建议告警阈值 |
|---|---|---|
| GPU 利用率 | 负载是否均衡 | 持续 >95% 注意时延恶化 |
| KV Cache 使用率 | 批次是否接近上限 | >90% 扩容或降低并发 |
| 请求 P95/P99 时延 | 用户体验 | 环比突增 30% 告警 |
| 错误率/429 | 容量瓶颈与限流 | >1% 立即排查 |
| 显存温度/功耗 | 硬件健康 | 温度 >85°C 告警 |
这些指标大多数云监控平台都有现成的,没有的话用dcgm-exporter配合 Prometheus 也能低成本的接一套。监控不是先上线后补救,而是部署流程的一部分——镜像启动之后的第一件事,就是确认监控能看到数据。
最后再说一点我自己的体会。第一次把模型从笔记本上跑到生产级服务,我最大的教训不是技术细节,而是期望管理:别指望一张卡能扛住所有并发,也别觉得一个框架能解决所有问题。我在实际部署中最常用的组合是——测试阶段用按量付费的小 GPU 实例跑通 vLLM,稳定期再根据压测数据买包月、加多副本。任何一个生产链路,第一版都争取简单、可回滚。先把请求打起来、把日志接出来、把告警挂上,再谈优化。能做到这一步,这套流程就已经超过很多“跑得起来但一上线就崩”的部署方案了。