Skip to content

部署相关的知识点

重点 CPU VS GPU

架构的差异

  • CPU:设计初衷是处理顺序指令,擅长复杂逻辑控制和串行计算,核心数较少(数十核),但单核能力强
  • GPU:由数千个小而高效的核心组成 => 适合处理LLM的并行矩阵运算。

核心 GPU 型号

硬件型号和云端可用性变化很快,应用工程师不应背“某型号必然适合某模型”的结论。选型要先用实际模型、量化方式、上下文、并发和 SLA 计算,再查当期硬件规格与报价。

维度要问的问题
显存容量权重、KV Cache、并发和预留空间能否同时放下?
带宽与算力工作负载更受 Prefill、Decode 还是数据传输限制?
互联多卡需要的张量/流水线并行是否受 PCIe、NVLink 或网络限制?
可靠性与运维云上供给、驱动、监控、故障替换和预算是否满足要求?
方案替代能否量化、缩短上下文、降低并发、走托管模型或做缓存?

本地消费级显卡适合开发验证;生产与训练资源由压测、成本和可用性共同决定。具体型号、显存规格和价格应链接到厂商或云服务商的当期文档,而不是写死在通用笔记里。

CPU 与内存的隐形瓶颈

推理不只是 GPU 的事。CPU 负责:并发请求调度、Tokenization(文本 ↔ Token)、前后处理(JSON、正则过滤)。

CPU 和 GPU 要配比。并发大时,CPU 过载或系统内存(DRAM)不够,GPU 会陷入饥饿等待:卡闲着等 CPU 喂数。

CPU 与 DRAM 没有可脱离负载背诵的固定配比。按 tokenizer、并发、上下文、KV 卸载、网络与数据预处理压测 CPU 利用率、内存余量和队列等待;文档中的硬件量级只能作为演练起点,不能当作配置结论。

和「内存墙」不是一回事:内存墙是 GPU 片内等 HBM;这里是整机 CPU / DRAM 跟不上,把 GPU 饿死。

重点 四大主流框架

框架重点能力常见评估场景
vLLMPagedAttention、批处理调度、OpenAI 兼容服务通用 GPU 推理服务与高吞吐 API
SGLang前缀复用、约束生成与 LLM 程序运行时共享前缀、结构化输出或复杂编排负载
TensorRT-LLMNVIDIA 平台上的深度编译与运行时优化硬件固定且需要深度性能优化的服务
Ollama本地模型管理与简化 API本地开发、原型、边缘或小规模部署

先跑通用生产选 vLLM;对话 / Agent 前缀长选 SGLang;本机 demo 选 Ollama;锁死英伟达、要极致性能再上 TRT-LLM

重点 如何进行框架选型?

  • 新手/快速验证 → Ollama(2分钟跑起来)
  • 生产环境通用场景 → vLLM(生态最全,文档最丰富)
  • 长上下文/Agent/多轮对话 → 评估 SGLang 的前缀缓存与结构化生成能力;收益取决于共享前缀比例和实际负载。
  • 极致性能 / NVIDIA 平台深度优化 → 评估 TensorRT-LLM;量化格式与硬件支持以当前版本的官方兼容矩阵为准。

Ollama 的架构

两层分工:Go 对外提供服务,C++ 负责算,中间用 CGO 粘住。

  1. Go — HTTP API、拉模型、命令行。语言本身适合高并发(goroutine)、带 GC,适合写网关。
  2. llama.cpp(C++) — 矩阵乘和 token 生成。CGO 把它暴露成 Go 能调用的函数。

说「基于 llama.cpp」指的是推理内核,进程外壳是 Go。

Ollama 的定位与并发

Ollama 适合本地开发、原型和边缘环境,但不能简单说成“不支持并发”。官方 FAQ 提供了 OLLAMA_NUM_PARALLEL 控制每个模型可并行处理的请求数,默认值为 1;OLLAMA_MAX_QUEUE 控制忙碌时可排队的请求数。并行数提高会按上下文长度增加内存需求。

对线上服务的正确说法是:先按真实模型、上下文、并发和 P95 延迟压测。若目标是高吞吐、多请求动态调度或大规模 GPU 服务,再评估 vLLM、SGLang 或 TensorRT-LLM;它们不是“唯一能并发”的替代品,而是不同的服务与性能取舍。

参考:https://docs.ollama.com/faq(核验于 2026-09-12)。

重点 vLLM 的架构

是由伯克利大学 LMSYS 组织开源的LLM高速推理框架,用于提升LLM的吞吐量与内存使用效率。它 通过 PagedAttention 技术高效管理注意力键和值的内存,并结合连续批处理技术优化推理性能。vLLM 支持量化 技术、分布式推理、与 Hugging Face 模型无缝集成等功能

vLLM 的调度和 KV 管理位于推理路径,适合需要高吞吐调度与 KV Cache 管理的服务场景。

  1. API 层 — OpenAI 兼容 HTTP,收请求、流式回 token。Tokenizer 多在 CPU。
  2. 调度器 — Continuous Batching:按 token 插队,谁结束谁让位,多条请求挤在同一次 forward。
  3. KV 管理(PagedAttention) — 把 KV Cache 切成固定大小的页,像操作系统的虚拟内存。序列长短不一也能拼在一起,显存不按「最长那条 × 最大 batch」预留,碎片少。
  4. 执行层 — Worker 在 GPU 上跑模型计算;多卡时再加并行(张量并行等)。

门口收请求 → 调度拼 batch → 页式 KV → GPU 算一步。生产高吞吐靠的是 2 + 3,不是换一个更快的 HTTP 框架。

vLLM 部署流程

环境 → 锁依赖 → 下权重 → 起 API → 打通接口。Node 只当客户端,推理进程是 Python。

  1. 机器 — NVIDIA 驱动和 CUDA 对齐,nvidia-smi 能看到卡。CPU / DRAM 按前面「隐形瓶颈」配,否则卡会饿。
  2. Python 环境 — 独立 venv / conda,按下面工具箱装,版本不要随便升。
  3. 权重 — 从 Hugging Face 或镜像拉模型目录;Tokenizer 必须和权重同一套。
  4. 启动vllm serve <模型路径>(或等价 API 入口),默认 OpenAI 兼容 /v1。显存不够再开量化、缩 max-model-len、多卡并行。
  5. 验收curl/v1/chat/completions 能出字;再看吞吐和 P99,不是只看进程还在。
  6. 业务接入 — 应用(Node / Python)把 baseURL 指到这台服务。

SGLang 框架

SGLang 是面向 LLM 程序与推理服务的开源运行时。它的 RadixAttention 适合共享前缀明显的请求,是否优于其他引擎必须以目标模型、版本和负载压测决定。

  1. RadixAttention — 用前缀树复用 KV。多轮对话、Agent、RAG 的系统提示重复时,可能减少重复 prefill。
  2. 结构化输出 — 支持约束解码等能力;应以格式正确率、兼容性和实际延迟比较,而不是承诺固定倍数。
  3. Runtime — 原生多模态(图 / 视频);DeepSeek R1 一类推理模型开箱能跑。
  4. DSL — 用很像普通 Python 的方式写 LLM 程序,支持条件、循环、并行调用。

和 vLLM 怎么选:短请求、通用高吞吐先 vLLM;多轮 / Agent / 超长共享前缀再上 SGLang。

适合场景

  • 聊天 / 客服 — 多轮和系统提示相似时,前缀缓存更可能带来收益。
  • Agent / Function Calling — 要频繁吐结构化 JSON。
  • 长文档 — 论文总结、代码审查等长上下文。
  • 多模态 API — 同时处理图文、视频。

和 vLLM 的对比方法

用相同模型、版本、硬件、输入输出长度和并发压测 TTFT、TPOT、吞吐、显存、错误率和成本。短、分散、没有共享前缀的请求,前缀缓存收益通常较小;具体数字不应脱离实验条件引用。