把大模型部署从“能跑”做到“能生产”,中间隔着的不是显存,而是一堆你迟早要踩的坑。
我在过去一年里帮团队和客户部署过不少大模型服务,从单卡跑7B聊天模型,到多卡推理70B参数模型,再到把服务接进监控告警体系。这里头最深的体会是:框架选型、云服务对比、生产级流程,这三件事是连在一起的,不能分开考虑。你选了个好框架但落在不合适的云服务器上,照样卡死;你把云服务器配得再豪华,一套没有健康检查的生产流程也能让你半夜爬起来重启。
这篇文章就围绕“大模型服务器部署”这件事,把2026年这个节点上值得用的框架、值得买的云服务、值得抄的流程,掰开揉碎讲一遍。适合刚拿到GPU资源准备部署第一个模型的技术同学,也适合已经跑通demo但想往生产环境推进的小团队。
1. 部署前的关键决策:先想清楚再动手
很多人部署大模型上来就装环境、拉模型、跑demo,等真上了生产才发现哪个环节都不对劲。我建议动手之前先回答三个问题,答案会直接决定你后面每一步怎么做。
1.1 三个前置问题决定后续走向
第一个问题:你的模型服务是给谁用的?大概多少人同时用?
这个问题直接决定你需要多大的并发能力,也决定你是该上vLLM这种专注吞吐的推理引擎,还是用Ollama快速搞定一个小范围使用的服务。举个例子,如果你只是自己在内网用,几个研发同事做测试,那Ollama完全够用,甚至可以说体验很好。但如果你要接一个面向公司全员或者外部用户的AI助手,那从第一天起就应该按vLLM这类生产级推理框架来设计,不然等到并发上来再迁移,代价相当大。
第二个问题:你的预算是多少?买卡还是租云?
这是最现实的问题。一张A100级别的显卡,不管是买还是租,都不便宜。而且大模型部署不只是显卡的问题,配套的CPU、内存、磁盘IO、带宽都会成为瓶颈。说句实在话,大部分团队不应该买卡,租云GPU是更合理的选择,尤其是业务还没稳定跑起来的时候。买卡要算折旧、要自己维护机房环境、要考虑硬件故障,这些隐性成本远比云厂商按量计价看起来的数字要高。
第三个问题:团队里有没有人能守这套系统?
部署不是一次性的,模型会更新、框架会升级、业务量会变化。一个没有专人维护的生产系统,迟早会出问题。所以后面讲的流程里,监控告警、日志、一键回滚这些“非功能需求”必须一开始就做进去,不要等出事了再补。
1.2 GPU选型与显存预算的计算逻辑
GPU选型这事儿,可以用一条简单的公式先粗算:
模型权重显存 ≈ 参数量 × 每个参数占的字节数
以7B模型为例,如果用FP16(半精度,每个参数占2字节),权重就需要约14GB显存。再加上推理过程中的KV Cache、激活值、中间缓冲区等开销,一张24GB显存的卡(比如RTX 4090、A10G、L40S这类)跑7B模型是比较舒服的。
70B模型呢?FP16权重直接需要约140GB显存,单卡肯定放不下。常见的做法是:
- 用4张40GB或80GB的卡做张量并行部署,比如4×A100-40G或者2×A100-80G;
- 或者量化到INT8/INT4,把显存需求降到70GB以下,但精度和生成质量会有一定折损;
- 或者牺牲上下文长度,用更小的KV Cache预算来腾空间。
我个人的经验是,部署前用这条公式把显存粗算一遍,再去决定买什么卡、租什么实例,基本不会出大错。但要注意,不同推理框架的显存占用差别很大,比如vLLM用了PagedAttention,KV Cache是按页分配的,利用率比传统方式高不少。所以公式算完还要留出15%~30%的余量,别把显存卡得太死,不然并发一上来直接OOM。
另一个容易被忽视的点是大模型推理对CPU和内存的要求。GPU要等数据从内存传过去,CPU太弱或者内存带宽不够,GPU就会一直在那等,利用率上不去。我现在部署GPU服务器,基本会配16核以上的CPU、64GB起步的系统内存,硬盘至少1TB NVMe SSD,模型文件放SSD上是基本要求。
2. 2026 主流推理框架选型对比
框架选型是部署里最纠结的一步,因为每个框架都有自己的优势,网上讨论也很多。我直接给一个经过生产验证的结论:默认选vLLM,除非你有特殊理由。
这个结论不是我拍脑袋。vLLM的PagedAttention解决了KV Cache浪费问题,连续批处理让吞吐量比传统方案高好几倍,而且它兼容OpenAI的API格式,意味着你现有的客户端代码几乎不用改。2026年这个节点,它已经是生产环境里被验证最多的开源推理框架之一。
为了让你看得更清楚,我把几个主流框架放在一起做个对比:
| 框架 | 核心优势 | 典型场景 | 上手难度 |
|---|---|---|---|
| vLLM | 吞吐高、KV Cache利用率高、OpenAI兼容API、社区活跃 | 生产环境API服务、高并发在线推理 | 中等 |
| SGLang | 前缀复用强、多轮对话推理快、调度灵活 | 长对话、复杂提示词场景 | 中等偏难 |
| TensorRT-LLM | 延迟极低、GPU利用率极致优化、适合固定模型 | 对延迟极其敏感、模型长期不变的用户 | 较高 |
| Ollama | 部署简单、模型管理方便、开箱即用 | 本地体验、个人开发、小范围内部服务 | 很低 |
| llama.cpp | 纯CPU也能跑、量化支持好、轻量 | 无GPU环境、边缘设备、低资源部署 | 低 |
下面展开讲讲每个框架的关键点和自己踩过的坑。
2.1 vLLM:生产级默认选择
vLLM的部署方式很直接,一条命令就能起服务:
python -m vllm.entrypoints.openai.api_server \ --model /data/models/Qwen2.5-7B-Instruct \ --served-model-name qwen \ --gpu-memory-utilization 0.9 \ --max-model-len 8192 \ --port 8000几个参数值得单独说一下:
--gpu-memory-utilization:控制vLLM最多用多少比例的显存。默认是0.9,但如果机器上还要跑别的进程,建议调低到0.7~0.8,否则很容易互相抢显存导致OOM。--max-model-len:最大上下文长度,这个参数同时影响KV Cache的预留大小。设得越大,能缓存的历史token就越多,但显存占用也越高。如果发现并发一高就OOM,最优先调整的就是它。--served-model-name:对外暴露的模型名称。客户端请求时用这个名字,方便后面切换模型时客户端不用改代码。
vLLM最值得称道的就是连续批处理机制。传统推理引擎在处理多个请求时往往要等当前批次全部生成完才处理新请求,而vLLM支持动态调度:只要有一个序列生成了一个token,就可以把它和别的序列拼在一起计算。打个比方,这就像餐厅服务,不用等所有客人吃完再翻台,而是哪个客人吃完了就立刻收桌、立刻安排下一桌,所以吞吐量提升非常明显。
我实际测过,同样一台A100-80G跑Qwen2.5-7B,用vLLM部署后单卡吞吐大概能到2000+ tokens/s(一般在线场景下),相比朴素部署方式提升5到10倍,这个数字在长文本生成场景里差距更恐怖。所以凡是说要上生产的,我都建议直接选vLLM。
2.2 SGLang:高并发多轮对话的更优解
SGLang是另一个值得关注的框架,它在多轮对话场景里有独特优势。它的RadixAttention机制会自动复用对话历史的前缀,也就是说,当多个用户问了相似或相同的问题,或者同一用户在多轮对话中重复提到相同内容时,SGLang可以把这些公共前缀的计算结果缓存下来,避免了重复计算。
这个特性在什么场景里最有用?想想客服机器人:大量用户问“退款流程是什么”“发票怎么开”,前缀缓存直接命中,整个系统的吞吐能再上一个台阶。如果你做的产品是多轮对话为主、用户问题高度相似,SGLang值得重点考虑。
但SGLang也有它的门槛。它在调度层面给出的可调参数比vLLM多,优化空间大,同时也意味着你需要花更多时间去理解每个参数的含义。团队如果没有人能深入跟进,建议还是从vLLM起步。
2.3 TensorRT-LLM:极致延迟的代价是灵活性
TensorRT-LLM是NVIDIA官方的推理框架,它在延迟和GPU利用率方面的表现确实顶尖。因为它会对模型做编译优化,把网络结构、计算内核都固定下来,在推理时就不需要再做太多动态调度,效率自然高。
但代价是部署过程繁琐,模型要先转换格式、做编译,而且模型一旦变了,整个编译流程可能要重来一遍。如果你部署的是一个很稳定的模型,且对单个请求的延迟有极其严格的要求(比如实时语音交互),时光机可以用TensorRT-LLM。如果模型迭代频繁,今天换个LoRA、明天升个版本,用TensorRT-LLM会非常痛苦。
我的建议是:不要为了零点几秒的延迟提升,牺牲掉整个团队的迭代效率。对绝大多数场景来说,vLLM的延迟已经足够低了。
2.4 Ollama与轻量级工具的取舍
Ollama这两年口碑很好,主要原因就是简单。下载安装、ollama run qwen2.5就能跑起来,模型的下载管理、量化、Modelfile定制都集成在一起,新手半小时就能搞定一个能对话的本地模型。
我自己也经常在自己电脑上用Ollama做实验,确实方便。但它如果想直接搬到生产环境,问题也明显:
- 吞吐调度能力不足,高并发下性能会明显下降;
- 监控和指标暴露不完善,很难嵌入现有的可观测体系;
- 多卡并行、张量并行等高级特性支持不如vLLM类框架完整。
所以我的定位是:Ollama适合本地开发、个人体验、小规模内部服务,但要正式接业务流量,还是老老实实迁移到vLLM。这不是说Ollama不行,而是工具各有适用场景。
顺带提一句llama.cpp。如果你手里的机器没有NVIDIA显卡,或者只有CPU,那llama.cpp几乎是你唯一的好选择。它的GGUF量化格式在CPU上跑得不错,但吞吐上限摆在那里,不适合做高并发在线服务。
2.5 微调工具链与推理框架的配合
聊到这里必须提醒一件事:微调模型和推理部署不是割裂的。你会用微调工具训练出模型,然后部署它服务用户,中间还得打通格式和兼容性问题。
目前主流的微调框架,比如LLaMA-Factory、Axolotl、Unsloth,训练完导出的模型格式通常是safetensors(PyTorch权重)或GGUF(量化后的格式)。部署到vLLM时,尽量用safetensors格式,因为vLLM对新模型结构的适配速度最快;GGUF格式vLLM也支持,但性能和功能可能比原生格式差一些。
我的经验是:微调完成后先做一次“部署验证”,也就是直接在推理环境里加载训练好的模型,跑几个核心测试用例,确认输出质量没问题再上生产。这一步能省掉你和算法团队扯皮的很多时间。格式问题、对话模板问题、特殊token设置问题,都要在验证阶段暴露出来。
3. 云服务器选型与成本测算
框架定下来之后,就得选云服务器了。这里我默认你也是用云GPU,而不自己买卡,理由前面已经说过。云服务商那么多,配置五花八门,到底怎么选?我给你一套自己的筛选逻辑。
3.1 按量付费、包年包月还是抢占式实例
云GPU的计费模式主要有三种,适用的场景完全不同:
| 计费模式 | 价格水平 | 适用场景 | 风险点 |
|---|---|---|---|
| 按量付费 | 最贵,按小时算 | 短期验证、临时扩容、模型实验 | 长期跑费用失控 |
| 包年包月 | 中间价位,按月或年预付 | 长期稳定跑服务的业务 | 配置选错后调整成本高 |
| 抢占式实例 | 最便宜,通常比按量低30%~50% | 离线训练、容错性强的批处理任务 | 实例随时可能被回收 |
先说结论:在线推理服务,不要用抢占式实例。理由很简单,抢占式实例的机制就是云厂商可以把闲置资源随时收回去给你的邻居用,你的服务会毫无征兆地中断。推理服务最重要的是稳定性,实例说没就没,连续挂几次,使用方直接把你的服务拉黑。抢占式实例适合的是离线任务,中断了可以重启继续跑,没有实时性要求。
如果你确定要把推理服务长期跑起来,包年包月是最划算的。但购买前务必要想清楚GPU型号、实例规格、数据盘大小,因为这些资源规格不是随便就能降配的。举个例子,你为了省钱买了个小内存的实例,结果模型一加载就把内存占满了,这时候要么停机升配,要么换一台机器重新部署,最折腾的其实是迁移这件事本身。
按量付费的好处是我可以在不同型号的GPU之间来回试。预算有限的时候,我倾向于先用按量付费跑一天,做压测拿到真实吞吐数据,再决定要不要买包年包月。这就像买车前先租一天开,感受感受动力和空间,再下单。
3.2 数据盘、对象存储与内网穿透细节
云GPU实例默认都有系统盘,但系统盘通常不大,装完系统和驱动就所剩无几。模型文件动辄十几GB到上百GB,所以必须挂载独立的数据盘,把模型放在数据盘上。
我建议的磁盘方案是:用云厂商的高性能SSD数据盘,容量按模型大小再加50%的余量来申请。比如你要部署70B模型(量化后约40GB),数据盘给100GB左右比较稳妥。模型文件从对象存储拉取到数据盘上,首次启动时做一次校验,之后就一直在数据盘上复用。
这中间有个容易踩的坑:云服务器重启后,数据盘有时候不会自动挂载,如果你的服务启动脚本引用了数据盘路径,就会因为目录不存在而启动失败。解决办法是把磁盘挂载信息写进/etc/fstab,保证重启后自动挂载。另外,别忘了在数据盘上单独建一个目录放模型文件,不要把模型放到系统盘,系统盘被填满的后果很严重,连SSH都可能登录不上。
内网穿透这招我也经常用。云GPU实例的公网IP如果不在自己可控的网段里,或者你想从本地笔记本直接调试部署在云上的服务,可以搭一个frp隧道,把云上服务的端口映射到本地。它的原理就是你在本地跑一个frpc,云上跑一个frps,两边通过公网中转打个隧道,本地访问自己的端口就等于访问云上的端口。这东西用来调试API、看日志非常方便,安全性上比直接把服务端口暴露到公网要好得多。
3.3 网络带宽与安全组设置
很多人会在云服务器配置里忽略网络带宽。GPU服务器的带宽如果太小,用户请求进来时模型还没开始算,数据已经卡在网络上了。尤其是并发高的时候,带宽不足会直接拖垮整体响应时间。我个人建议至少配100Mbps以上的公网带宽,具体要看你的token吞吐和并发数,简单估算的话可以这样算:假设每秒输出50个token,每个token约1KB,单个请求就需要50KB/s的下行带宽,一百个并发就是5MB/s,换算过来差不多40Mbps。这是一个很粗糙的估算,但能帮你建立量级概念。
安全组规则同样重要,这是云上第一道防线。建议默认只放行必要端口,比如SSH端口最好设置成只允许你公司的出口IP访问,API服务端口(比如8000)也尽量限定在需要调用的客户端IP段内。如果客户端IP不固定,至少也要给API加上鉴权机制,关于这个我后面会细说。
4. 生产级部署全流程实操
决策做完了,接下来就是落地。我按照自己平时部署的标准流程给你过一遍,每一步都尽量写出关键细节。
4.1 环境初始化与驱动配置
拿到一台新的GPU云服务器,第一件事不是急着拉模型,而是把运行环境梳理干净。我的标准顺序是:
- 更新系统软件源和基础软件包;
- 安装NVIDIA驱动和CUDA工具包;
- 安装Docker和NVIDIA Container Toolkit;
- 创建独立用户来跑服务,不用root直接跑业务。
这里我必须强调Docker的重要性。把推理服务跑在Docker容器里,好处非常明显:环境隔离、依赖管理清晰、迁移简单、版本回滚方便。我的习惯是,宿主机只装驱动和最基础的工具,所有业务依赖都打进镜像里,这样即使机器出问题,换一台新机器,拉个镜像就能恢复服务。
NVIDIA Container Toolkit装好后,要在Docker里启用GPU支持。配置完成后,可以在容器里检查GPU是否可见,这一步别跳过,很关键。
CUDA版本不建议追求最新。NVIDIA的驱动是向下兼容的,但有些框架对CUDA版本有具体要求,建议按照推理框架官方文档推荐的CUDA版本来装,省得到时候框架起不来。
4.2 模型下载与校验
模型文件的下发方式,生产环境基本不用huggingface-cli直接拉到生产服务器。更规范的做法是:
- 在本地或跳板机把模型下载好,校验没问题;
- 上传到对象存储(比如阿里云OSS、AWS S3、MinIO);
- 在生产服务器上用
ossutil或aws s3等工具从对象存储拉取到数据盘。
这样做的好处是,模型文件可以统一管理、版本清晰,而且对象存储的带宽和内网传输速度通常比直接从Hugging Face下载更快更稳定。特别是在国内网络环境下,从Hugging Face直连下载大文件经常断流,走对象存储中转要省心太多。
下载完模型后,一定要做完整性校验。每个模型仓库里都有SHA256哈希值,拉完对比一次,模型文件损坏或者半途下载截断的情况在训练数据里很常见,不校验的话,服务起来各种诡异报错,轻则默默开始胡言乱语,重则直接加载失败。
另外,模型文件尽量保存为safetensors格式,它是Hugging Face推荐的安全格式,序列化时不会执行任意代码,相比老式的pickle格式安全得多。尤其别人给你的模型,你不知道里面藏了什么,用safetensors门禁至少能拦住一波投毒模型。
4.3 推理服务启动与OpenAI兼容API对接
模型文件就位后,启动vLLM服务,启动命令我上面已经给了。这里说说怎么验证服务真的能正常工作。
启动之后,用curl发一个请求测试:
curl http://localhost:8000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "qwen", "messages": [{"role": "user", "content": "你好,介绍一下你自己"}], "max_tokens": 200 }'返回结果如果正常,说明服务基本通了。然后我做两件额外的事情:
- 第一,把服务注册成systemd服务,设置开机自启和崩溃自动重启。这样即使服务进程因为某些原因退出,系统也会自动拉起来,不用手动干预。
- 第二,写一个简单的健康检查脚本,定时请求
/health或/v1/models接口,探活失败就告警。这一步是把服务接入监控的起点。
还有一个细节:不要直接用0.0.0.0监听公网端口就把服务暴露出去。vLLM本身没有内置鉴权,任何能访问到你IP和端口的人都能直接调你的模型,轻则被人白嫖算力,重则被恶意请求打爆。生产环境至少要套一层API网关或者用鉴权中间件,给请求加上API Key验证。
4.4 监控告警与成本治理
服务跑起来只是开始,真正的生产环境考验的是长期稳定性。我常用的监控手段包括:
- GPU指标:用
nvidia-smi定期采集温度、显存使用率、功耗,配合Prometheus和Grafana展示; - 服务指标:QPS、平均延迟、P99延迟、token吞吐量、请求错误率,这些可以暴露Prometheus格式的metrics给采集端;
- 日志:服务日志统一收集,方便排查问题用;
- 告警规则:GPU温度过高、显存使用率持续超过90%、错误率超过阈值、QPS骤降,这些都要触发告警。
成本治理同样是生产环境不能回避的话题。GPU服务器的花销大头其实是空闲和浪费,服务没有流量时GPU也在费电、也要付钱。我的经验是给服务设定一个最低并发和最大并发的伸缩边界,流量波峰时扩容,波谷时缩容。这需要你的服务本身设计成无状态的,模型加载和业务逻辑解耦,才能灵活扩容缩容。
5. 常见问题与排查经验
部署会遇到的坑很多,我把自己实际踩过的、以及帮别人排查过的典型问题整理成一张速查表,你可以直接存下来。
| 问题 | 常见原因 | 排查与解决 |
|---|---|---|
| 服务启动时报错CUDA out of memory | 显存预算设得太大,或模型本身太大 | 调低gpu-memory-utilization,换更大显存的实例,或使用量化模型 |
| 并发上来后部分请求超时 | 连续批处理没有生效或并发上限太低 | 检查max_num_seqs参数,适当调大;观察GPU利用率 |
| 模型加载到一半进程被杀 | 系统内存不足或OOM | 增大系统内存,或改用更小的量化模型 |
| 重启后模型文件消失 | 数据盘没有自动挂载 | 检查/etc/fstab,补上挂载信息 |
| 同一请求重复计算 | 多轮对话没有开前缀缓存 | 换SGLang,或检查vLLM的KV Cache复用策略 |
| 生成质量忽高忽低 | 温度参数、采样参数不一致 | 统一服务端参数,不要依赖客户端默认值 |
下面挑几个重点展开说说。
5.1 OOM与显存预算调整
“CUDA out of memory”恐怕是部署大模型遇见过最多的报错。我见过很多新手第一反应是“模型太大了,换个更大的显卡”,其实很多时候不是模型太大,而是显存预算不合理。
vLLM的gpu-memory-utilization参数默认0.9,意思是它可以用90%的显存,剩下10%留给其他进程。如果机器上还跑了别的程序,这10%根本不够,就会出现莫名的OOM。解决办法是把这个参数压到0.7~0.8,宁可让vLLM预留多一点显存,也不要贪那一点点利用率然后频繁崩溃。
还有max-model-len这个参数,它决定了单条请求的最大上下文长度,也是KV Cache显存占用的关键。对话场景经常有用户粘很长很长的历史记录,如果你把它设得过高,比如32K,那KV Cache会占据大量显存,并发稍微一多就OOM。建议根据业务实际需求设定,不要无脑给最大。
5.2 吞吐量上不去与并发调度
还有一种典型情况:GPU利用率只有10%,看着好像没干活,但请求还是排队超时。这多半不是GPU算不动,而是框架的并发调度没调好。
vLLM的连续批处理能力是强,但不是无限的。--max-num-seqs参数控制最多同时处理多少个序列,默认值不一定适合所有场景。如果你发现QPS上不去、GPU利用率忽高忽低,可以把这个参数调大试试,但要同时关注显存变化。批处理越大,KV Cache占用的显存也越多,这是一对矛盾,要慢慢调平衡。
如果还是不理想,检查一下Prefill阶段是否变成了瓶颈。关于prefill和decode的资源配置,vLLM在2026年已经做了不少优化选项,你可以根据服务场景选择偏重首字延迟还是偏重吞吐。
5.3 模型投毒与安全防护
最后提一嘴安全。模型投毒这个热点我看了不少相关讨论,现实中确实存在。你从网上下载的模型,训练数据可能被污染,推理结果可能被悄悄引导向特定输出,这类问题很难通过常规功能测试发现。
我能给的实际建议就三条:尽量只下载官方发布渠道的模型文件;用safetensors格式并做校验;部署前抽一批风险测试用例(比如诱导性问题、安全边界问题)跑一遍,看模型输出是否符合预期。大模型安全是个长期课题,但基本的卫生习惯不能丢。
最后说句实在话
跑了几次生产环境之后,我最大的体会是:大模型部署的价值不在于把模型跑起来,而在于跑起来之后还能稳稳地服务用户、还能在出了问题的时候快速定位修复。框架选型、云服务对比、生产级流程,这三件事看起来是三个话题,实际上是一条链路。你选的框架决定了你云服务器的配置方向,云服务器的预算反过来约束你框架选型的空间,最终所有决策都要落地到一套能长期运转的流程上。
我给你的建议很朴素:第一,部署前把显存、并发、成本用公式粗算一遍,别凭感觉买GPU;第二,生产环境默认选vLLM,除非你有明确的特殊需求;第三,从第一天起就把监控、鉴权、自动重启做进去,不要等出事了再补。
按这套流程把基础打好,后面不管换什么模型、上什么业务,都只是换模型文件、调几个参数的事,真正的框架和流程不用推翻重来。