运维与升级

每种变更先验证、各有回退点,看板要有质量一行

模型在企业自己的机房里跑,运维要保住的是服务质量,不只是容器。引擎镜像、模型权重、嵌入模型、向量索引、配置,每一种变更上线前都过同一道闸,也各有自己的回退点。只做试用、答案不进业务流程时,这道闸过重,不适用。

看板与监控

只看容量和温度的看板,抓不到质量退化:模型换了、索引重建了,GPU 照常运转,答案却可能变差。监控分层,每层回答不同的问题。下面以 Prometheus 抓取、Grafana 看板为例,引擎与 GPU 采集器是两个抓取目标。

层指标回答什么
引擎vllm:num_requests_waiting排队的请求是否在堆积
引擎vllm:kv_cache_usage_percKV 缓存是否接近用满
引擎vllm:time_to_first_token_seconds首个 token 的等待时间分布,与验收时的 TTFT 比
引擎vllm:prefix_cache_hits、vllm:prefix_cache_queries前缀缓存的命中情况,两个计数器之比
GPUDCGM_FI_DEV_GPU_UTIL、DCGM_FI_DEV_FB_USEDGPU 在不在忙,显存用了多少
GPUDCGM_FI_DEV_GPU_TEMP、DCGM_FI_DEV_POWER_USAGE温度与功耗是否异常
GPUDCGM_FI_DEV_XID_ERRORS驱动报出的 XID 错误
质量评测集周期回放引用正确率、应拒答的题是否拒答、回答是否忠于检索片段

指标名出自 vLLM 指标页与 DCGM Exporter 指标页,名称随版本变化,上线前对着实际的 /metrics 输出核对。DCGM Exporter 把 NVIDIA 显卡的状态转成 Prometheus 能读的文本,其他厂商的显卡按其工具另配。ECC 错误和降频原因在 DCGM Exporter 里默认不开,需要时在采集配置里打开(同一指标页)。

告警阈值不预设数值,取自验收时的基线:验收测得的 TTFT p95 和最高达标并发,是后续告警的参照。质量一行没有现成的指标,靠评测集周期回放得出,回放的周期和样本量按企业要求在合同中约定。

看板红了,能分清是容量问题、硬件问题,还是答案变差了。

变更分类与回退

下表是这类系统通行的变更分类与做法。每次变更的时间窗和检查项,写进部署记录。

变更对象上线前验证回退方式是否中断服务
引擎镜像能启动,接口返回正常,/metrics 有输出,评测集与压测不劣于验收基线compose 里的 tag 改回上一版并重建;上一版镜像与配置留存,不必重新导入单机重建期间短暂中断
模型权重评测集与压测都要重跑,模型换了,质量与容量都会变新权重放在新目录,旧目录保留为只读;指回旧目录并重启重启期间中断
嵌入模型新模型重嵌入全库,建成新索引,再跑评测集比较检索命中旧嵌入模型与旧索引保留到新索引通过为止;通过前随时切回建新索引期间,旧索引继续服务;需要额外存储
向量索引(重建或改参数)同上,另看检索耗时保留上一版索引同上
配置(启动参数、出站规则、告警规则)启动参数会改变显存占用与并发,需要重跑压测;出站规则改动后复测一次失败的对外连接还原上一份配置文件视改动而定,改启动参数需重启

换嵌入模型必须重建整个索引,因为不同模型产生的向量,即使维度相同,也不在同一个空间里,不能混着比较。所以回退引擎镜像,回不到旧的检索质量;旧的嵌入模型和索引不留,就没有回退点。

回退点在变更之前建好,不在出了问题之后补。核心经营系统本身的上线与回滚,是另一套做法,见发布与回滚:库里的结构只加不改,回滚只切回上一版程序。推理服务这一侧回退的是镜像、权重、索引和配置这几样。

没有测试环境时的验证

「新版先在测试环境验证」对三档规模不是都做得到。

条件做法代价
一柜:两台推理机,每台都能独立装下所用模型先在其中一台上验证,通过后再切另一台验证期间只剩一台服务,容量降到一半,冗余暂时消失
一台:显存放得下新旧两份同机另起一个新实例,用另一个端口验证,通过后切换显存要容得下新旧两份权重与各自的 KV 缓存
一台:显存放不下两份在约定的停机窗口内切换,失败就切回窗口内服务中断

升级入口

升级包怎么进来,由签约前选定的受控入口决定:

入口更新包怎么进日志与指标排障
现场SZV 工程师到机房,用机房内终端操作留在机房内要等人到场
介质闸口或单向网闸更新包经审核后单向进入留在机房内,看监控也要到场不能远程排障
堡垒机加录屏每次会话由企业审批开通,全程录屏,到时关闭会话期间可看会话期间有一条受控连接,承诺降为「出站受控」

新镜像和新权重都要先过交付与验收里的入闸检查,再进入上表的变更流程。升级时间窗由 SZV 与对接负责人商定。

固定 tag 与 digest

镜像用固定 tag 或 digest,不用 latest。Docker 官方的构建建议写明,镜像 tag 可变,发布者能把它指向新镜像;钉住 digest 才保证总是同一个版本,代价是放弃自动的安全更新。所以安全更新要主动跟进。离线环境没有联网提醒,安全更新靠什么途径发现、由谁负责,在合同中约定。

故障处理

企业的故障先报 SZV,由 SZV 定位范围。定位之后,范围不同,处理的人也不同。

范围做法谁处理
推理服务看日志与指标,必要时按上面的分类回退SZV
设备一台档:整机备件是冷备,换机期间服务中断;一柜档:两台推理机互为备份,容量降到一半;一间档:机房级灾备SZV,机房负责人配合
机房供电、制冷与出口按机房规范处理机房负责人
接入的系统一起排查SZV 与对接负责人

每次故障的原因和处理写入部署记录,下次遇到同类问题可以直接查。

故障分级的字段,合同里要有:等级、影响范围(不可用、降级、单卡故障)、首次响应时限、恢复目标、升级路径、通知对象。字段在这里列出,数值不在公开页写,写进合同。

限制与不适用

  • 每次变更都要跑回归与压测,升级比换个镜像慢。
  • 建新索引要额外存储,同机验证要显存放得下两份。
  • 一台档没有冗余,换机期间服务中断。
  • 故障的响应时限与恢复目标写进合同,公开页不写数值。
  • 试用环境、答案不进业务流程时,这道闸过重。

其他做法

做法它解决什么为什么不用
运维用常开的远程隧道排障最省事隧道本身是一条出站连接,有了它,零出站再无法用测试证明,见私有部署概览
镜像用 latest 或可变 tag省去升级工作同一份配置在不同时间可能起出不同的镜像,验收基线随之失效

与常见做法对照

通行做法里,下面的与这里不同:

通行做法好处在私有部署里的代价
只回退引擎镜像一步操作回不了嵌入模型与索引,也回不了权重
滚动更新或蓝绿切换异常只影响一部分流量需要多实例与分流;一台档不具备,一柜档的两台推理机可以类比,代价是验证期间冗余消失

验收时可以问的问题

  • 请按本机所属的档位,说明新版在没有测试环境时怎样验证。
  • 故障的首次响应时限与恢复目标,请在合同中写明;夜间与节假日由谁接,也一并写明。
  • 评测集周期回放的周期和样本量,以及质量退化时由谁决定回退,请在合同中写明。
  • 请现场查变更权限表与部署记录:谁有权发起一次权重、嵌入或索引的变更,变更写在哪份记录里。
  • 安全更新靠什么途径发现、由谁负责、经哪个入口带入,请在合同中写明。
  • 备份包括哪些内容、放在哪里、恢复演练怎样做,请在合同中写明。

相关页

这页有帮助吗谢谢,我们会据此改进这一页。

需要帮助?联系我们

想先知道我们怎么想?关于 SZV

联系我们

企业人员规模(人)

试用工作台