当对话模型遇上向量模型,vllm production stack 又该如何应对?

上文讲到针对自部署的Deepseek v4 flash推理服务缺少识图能力,我们在网关层面加上了一双眼睛的方案。

今天重温下自研推理工程的设计架构, 也便于我们深刻理解推理工程中的可能的优化点。

整体如图

1. vllm

vLLM 代表虚拟大语言模型,vLLM包括一个推理服务器和一个推理引擎(加速推理), 通过PagedAttention算法加速GPU显存的使用 来提高吞吐量。

为理解请求,LLM 需要了解字词之间的关系以及如何在字词之间建立关联,LLM 是通过数学运算来"推理"的, 面对大量用户请求时, 需要消耗大量显存。

从本质上讲,vLLM 作为一组指令,通过持续对用户响应进行"批处理",促使 KV 缓存创建快捷方式。

① KV Cache: 是一种短期内存存储, 它是将每个token(词元)所对应的KV保存到缓存中, 以空间换时间的方式支持快速推理。

② 连续批处理:是一种可同时处理多个查询的技术(将先前计算的查询词元创建快捷方式),。

借助vLLM,LLM可以将批处理请求中重复部分的词元("what is the capital of")保存在短期记忆(KV 缓存)中,并发送一个"翻译请求",而不是两个单独的请求。

2. vllm prooduction stack

  • 快速扩缩容
  • 可观测性
  • 通过请求路由 和KV Cache 卸载来提升推理性能

LLMCache/Router:

可用的路由策略:"roundrobin" # @schema enum:[roundrobin,session,prefixaware,kvaware,disaggregated_prefill,disaggregated_prefill_orchestrated]

前缀感知路由可确保后续具有相同提示前缀的请求被路由到同一实例,从而最大限度地提高键值缓存的利用率并提升性能。

以下针对对话模型开启 前缀感知路由,默认使用k8s服务发现(推理服务Pod上均有 app.kubernetes.io/component=serving-engine 标签)。

yaml 复制代码
servingEngineSpec:
  enableEngine: false
cacheserverSpec:
  enabled: false

routerSpec:
  enableRouter: true
  routingLogic: "prefixaware"  #  按照请求prompt的前缀来路由,把相同前缀的请求都路由调度到同一后端
  replicaCount: 2
  serviceMonitor:
    enabled: true
  startupProbe:
    initialDelaySeconds: 5
    periodSeconds: 10
    failureThreshold: 60
  imagePullPolicy: "IfNotPresent"
  env:
  - name: TZ
    value: "Asia/Shanghai"
  extraArgs:
    - "--k8s-label-selector"
    - "app.kubernetes.io/component=serving-engine"    # 服务发现,推理服务的Pod上都有这个标签
  resources:
    limits:
      memory: 4Gi
    requests:
      cpu: 400m
      memory: 2Gi

这里面有一个问题,非对话模型是不能使用prefixaware, kvaware 路由策略:

向量模型Qwen/Qwen3-Embedding-8B发出的请求如下, 而对话模型会有prompt字段。

rust 复制代码
curl -X POST https://tokengine.hanyoai.com/v1/embeddings \
  -H 'Authorization: Bearer sk-YJ3fOnCRGMHH2gzLeShdeduYXuJUF4TG5qrSmihvTIl2bBhK' \
  -H 'Content-Type: application/json' \
  -d '{"model":"Qwen/Qwen3-Embedding-8B","input":"待向量化文本"}'

//  Internal Server Error

我们的方案是在上层提前分流:

  • 新建一个走roundrobin 路由
  • 在上层higress上将这些非对话模型的请求路由到 这个roundrobin 路由。

整体的对外输出, 还是可以保持 higress gateway 不变。

相关推荐
苍何6 小时前
开源微信流 Windows,微信聊天记录,可以直接给 Codex 和 Obsidan 了
后端
代码什么用7 小时前
Spring基础使用
java·后端·spring
明月_清风8 小时前
Deno 终局来了:从挑战 Node 到被 Cloudflare 收编
前端·后端·node.js
蜗牛互联网8 小时前
Java 17 HttpClient调用文件转写API的超时与失败回退
java·人工智能·后端
用户693717500138410 小时前
2026,程序员的时代拐点到了
android·前端·后端
惜鸟11 小时前
从源码看 pi 的上下文管理:原始数据永久保留,模型视角按需裁剪
后端
量化分析码农11 小时前
【Python量化策略评估体系 #05】极端行情扛得住吗?2008/2015/2020 三场景压力测试
后端
十年Java程序媛11 小时前
Java 接口和抽象类对比|Java8 新特性,抛弃老旧八股,正确选型
java·spring boot·后端
IT_陈寒11 小时前
SpringBoot自动配置差点让我加班到凌晨
前端·人工智能·后端
用户83562907805111 小时前
使用 Python 对 Excel 工作表进行排序
后端·python