最近看到不少团队在讨论AI服务的健康检查与就绪探针设计,我正好踩过几个坑,来分享点实战经验。核心问题在于:AI模型加载、推理预热和动态资源占用,让传统HTTP探针变得不可靠。比如用/livez和/readyz区分存活与就绪状态,能避免模型还在加载时就被流量打爆。但更关键的是,模型推理的“健康”不能仅靠进程存活判断——我遇到过GPU显存泄漏导致推理延迟飙升,但进程仍返回200的情况。个人建议对就绪探针增加自定义逻辑,比如检测推理队列深度或上次推理耗时,超过阈值就标记为NotReady。另外,启动探针(startupProbe)对冷启动时间长的模型是必需品,否则就绪探针会在启动期间反复失败。行业趋势上,随着LLM服务化普及,K8s生态正从纯无状态应用转向混合负载,探针配置必须感知模型生命周期。抛个问题:你们在AI服务里用gRPC探针还是HTTP?对于流式推理场景,健康检查该关注哪些指标?欢迎分享踩坑经历。
楼主
20小时前
K8s探针配置AI服务:别让健康检查成为摆设
请 登录 后发表回复
全部回复
共 21 条
2楼
3小时前
这个帖子说到点子上了,尤其是GPU显存泄漏导致进程还在但推理已经崩了的情况,我这边也碰到过类似的坑。当时排查了半天,发现进程状态正常,但模型返回的latency从50ms飙到2s,最终定位到显存碎片化导致cudaMalloc失败后fallback到CPU回退逻辑,但health check的/healthz根本没覆盖到这个路径。
补充一点,就绪探针的阈值设计其实比检测逻辑本身更考验功力。推理队列深度设多少合适?不同模型、不同batch size下差异很大,设得太紧容易误杀,设得太松又失去意义。我们现在的做法是把探针和业务SLA挂钩——比如P99延迟超过300ms就认为不健康,这样探针状态直接反映了用户感知。另外,自定义探针里建议加上显存利用率监控,显存占用超过90%且持续上升趋势时主动标记NotReady,比等到OOM kill再重启要干净得多。
启动探针这块确实容易被忽略。像LLM模型加载动不动几十G,加上tokenizer和kv cache初始化,冷启动时间能拖到五分钟。startupProbe的failureThreshold和periodSeconds配得合理,就能避免k8s过早kill掉还在加载的pod。不过有个小坑,如果用了init container预加载模型,startupProbe的计时是从init container完成后开始的,这个时间点要算清楚。
还有个细节,探针的timeoutSeconds不要太短。AI服务的推理latency本身就有波动,设个1秒的timeout碰到模型冷启动阶段基本必挂。我们一般设到10-15秒,配合initialDelaySeconds给足模型预热时间,这样探针误报率能降不少。