M8-035M8: ML Systems, Engineering & ResearchInference Serving & DeploymentHard
Mastery:
Inference Serving & Deployment: 解释模型热更新与零停机部署。
📐 Mathematical Definition
⚡ Executive Summary
Core Concept: 新版本在后台加载完成后原子切换;关键是'内存双份'、'连接优雅关闭'与'状态兼容'。
📌 Key Takeaways
- •流程:后台加载新版本 → 健康检查通过 → 原子切换流量 → 优雅关闭旧版本
- •关键:内存双份(新旧共存)、优雅关闭(处理完在途请求)、状态兼容
- •滚动更新(逐实例替换)vs 蓝绿(整批切换)
📐 Mathematical Derivations
数学机理:<strong>模型热更新与零停机部署</strong>——(1) <strong>目标</strong>——更新模型/服务<strong>不中断</strong>(用户无感知)。(2) <strong>基本流程(单实例热更新)</strong>——(a) <strong>后台加载</strong>——新版本在<strong>后台</strong>加载(不占用服务资源或占用可容忍的资源);(b) <strong>健康检查</strong>——新版本加载完成后做'自检'(加载正确性/推理冒烟测试);(c) <strong>原子切换</strong>——把流量<strong>原子地</strong>切到新版本(如'指针切换'或'配置更新');(d) <strong>优雅关闭(graceful shutdown)</strong>——旧版本<strong>处理完在途请求</strong>再退出(而非立即杀掉);<strong>关键</strong>——需 (i) 停止接收新请求、(ii) 等待在途请求完成(有超时)、(iii) 释放资源。(3) <strong>内存双份(double memory)</strong>——(a) <strong>问题</strong>——新旧版本共存需<strong>两倍的模型显存</strong>(大模型可能放不下);(b) <strong>对策</strong>——(i) <strong>足够显存</strong>(预留);(ii) <strong>分片加载</strong>(新版本分片加载,加载完一片释放旧的);(iii) <strong>滚动更新</strong>(逐实例替换,整体只需 1.x 倍);(iv) <strong>CPU offload</strong>(新版本先在 CPU 加载,再搬到 GPU)。(4) <strong>滚动更新(rolling update)</strong>——(a) <strong>做法</strong>——<strong>逐实例</strong>替换(先起新实例 → 加入负载均衡 → 健康检查 → 移除并关闭一个旧实例 → 重复);(b) <strong>优点</strong>——(i) 资源需求小(1.x 倍);(ii) 平滑;(c) <strong>关键</strong>——(i) <strong>最大不可用数</strong>(同时替换多少个——保证容量);(ii) <strong>健康检查</strong>(新实例就绪才加流量);(iii) <strong>优雅关闭</strong>(旧实例处理完在途请求)。(5) <strong>蓝绿部署(blue-green)</strong>——(a) <strong>做法</strong>——两套完整环境(蓝=旧、绿=新),新环境就绪后<strong>一键切换全部流量</strong>;(b) <strong>优点</strong>——(i) <strong>切换快</strong>(秒级);(ii) <strong>回滚快</strong>(切回蓝色);(c) <strong>缺点</strong>——(i) <strong>资源翻倍</strong>(两套环境);(ii) 需处理'状态同步'(若涉及数据库)。(6) <strong>状态兼容</strong>——(a) <strong>问题</strong>——新旧版本的'输入/输出格式'可能不同(如特征 schema 变化、输出格式变化);(b) <strong>对策</strong>——(i) <strong>版本化接口</strong>(新旧接口并存);(ii) <strong>向后兼容</strong>(新版本能处理旧格式);(iii) <strong>灰度</strong>(先小流量验证兼容性);(iv) <strong>'双写/双读'</strong>(过渡期同时支持)。(7) <strong>其他</strong>——(a) <strong>连接池</strong>(切换时旧连接需优雅关闭);(b) <strong>缓存</strong>(新版本可能需要不同的缓存键/格式);(c) <strong>监控</strong>(切换后指标对比);(d) <strong>回滚演练</strong>(确保能回滚)。<strong>与其他问题的关系</strong>——(a) 与'灰度发布'(热更新的一种方式);(b) 与'模型版本管理'(版本切换);(c) 与'可靠性与降级'(切换失败时的降级)。<strong>实践建议</strong>——(a) <strong>滚动更新</strong>(资源友好)+ <strong>健康检查</strong> + <strong>优雅关闭</strong>;(b) <strong>预留显存</strong>(热更新需双份);(c) <strong>状态兼容设计</strong>(版本化接口);(d) <strong>切换后监控</strong>(指标对比);(e) <strong>回滚演练</strong>;(f) <strong>蓝绿用于'需快速切换'的场景</strong>。<strong>度量</strong>——(a) 切换期间的错误率(应接近 0);(b) 切换时间;(c) 回滚时间;(d) 显存占用峰值。
🏭 Production Trade-offs
深度剖析与工程权衡:① <strong>'优雅关闭'常被忽视</strong>——立即杀掉旧实例会导致在途请求失败;面试中能指出是深度理解的标志。② <strong>'内存双份'是大模型热更新的难点</strong>——需预留显存或分片加载。③ <strong>'滚动更新资源友好'</strong>——1.x 倍 vs 蓝绿的 2 倍。④ <strong>'状态兼容'是隐形的坑</strong>——接口/schema 变化会导致切换失败。⑤ <strong>'健康检查'必须做</strong>——新实例就绪才加流量。⑥ <strong>面试要点</strong>——被问'怎么零停机更新模型',应给出'<strong>后台加载 → 健康检查 → 原子切换 → 优雅关闭 + 内存双份 + 滚动更新 vs 蓝绿 + 状态兼容</strong>';能指出'优雅关闭'是深度理解的标志。
⚠️ Common Interview Pitfalls
- ✕直接杀掉旧实例(在途请求失败)
- ✕不考虑状态兼容(切换后报错)
🎯 Interviewer Follow-ups
- ?'优雅关闭'要做什么?
- ?滚动更新如何保证'不中断'?
📚
Associated Knowledge Base Guides & Mindmaps
Explore the comprehensive technical article, exam cards, and global architecture tree.