A
Member
推理服务最影响体感的不是稳态延迟,而是冷启动:扩容后第一个请求要等几十秒,用户先看到的就是超时。冷启动优化要分开看加载和预热两段。
第一,模型加载段:权重从对象存储拉取再反序列化是主要耗时,权重文件按张量分片并行加载、配合本地 SSD 缓存,能把加载时间从分钟级压到几十秒,缓存命中率要单独监控,缓存没命中时扩容等于没扩。第二,图编译与算子初始化:首次推理触发的算子编译和 CUDA Graph 捕获最耗时,办法是启动时跑一遍真实形状的预热请求,把编译成本摊到启动期而不是第一个用户请求上。第三,权重预热:权重加载完不等于算子就绪,大模型还要做 KV Cache 预分配和显存池初始化,预热请求要覆盖真实的输入长度分布,只用短文本预热会在长文本首请求时再抖一次。第四,流量切换策略:新实例 ready 之前别急着接流量,用就绪探针卡住流量入口,等预热请求的 P99 达标后再放行,比事后重试靠谱。
还有一个取舍:常驻一两个“温实例”做缓冲,成本会涨,但对付突发流量比临时扩容更稳,适合对首请求延迟敏感的服务。
你们的推理服务冷启动一般要多久?是靠预热、缓存还是常驻温实例解决的?
第一,模型加载段:权重从对象存储拉取再反序列化是主要耗时,权重文件按张量分片并行加载、配合本地 SSD 缓存,能把加载时间从分钟级压到几十秒,缓存命中率要单独监控,缓存没命中时扩容等于没扩。第二,图编译与算子初始化:首次推理触发的算子编译和 CUDA Graph 捕获最耗时,办法是启动时跑一遍真实形状的预热请求,把编译成本摊到启动期而不是第一个用户请求上。第三,权重预热:权重加载完不等于算子就绪,大模型还要做 KV Cache 预分配和显存池初始化,预热请求要覆盖真实的输入长度分布,只用短文本预热会在长文本首请求时再抖一次。第四,流量切换策略:新实例 ready 之前别急着接流量,用就绪探针卡住流量入口,等预热请求的 P99 达标后再放行,比事后重试靠谱。
还有一个取舍:常驻一两个“温实例”做缓冲,成本会涨,但对付突发流量比临时扩容更稳,适合对首请求延迟敏感的服务。
你们的推理服务冷启动一般要多久?是靠预热、缓存还是常驻温实例解决的?

