<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Jimmy Song – 生产落地</title><link>https://jimmysong.io/zh/book/gpu-infra/production/</link><description>Recent content in 生产落地 on Jimmy Song</description><generator>Hugo -- gohugo.io</generator><language>zh</language><managingEditor>Jimmy Song</managingEditor><webMaster>Jimmy Song</webMaster><follow_challenge><feedId>51621818828612637</feedId><userId>59800919738273792</userId></follow_challenge><lastBuildDate>Sun, 30 Aug 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://jimmysong.io/zh/book/gpu-infra/production/index.xml" rel="self" type="application/rss+xml"/><item><title>平台责任：DGX、HGX、MGX 与整机思维</title><link>https://jimmysong.io/zh/book/gpu-infra/production/platform-responsibility/</link><pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate><author>Jimmy Song</author><guid>https://jimmysong.io/zh/book/gpu-infra/production/platform-responsibility/</guid><description>DGX 是整机系统责任、HGX 是 OEM 平台设计、MGX 是模块化参考架构、云 GPU 是服务契约：四个标签对应四种“谁为故障负责”的答案，而功耗、散热与可维护性本身就是算力特性。</description><content:encoded>
&lt;blockquote&gt;
&lt;p&gt;相关的采购问题不是“里面是什么 GPU”，而是“我们得到怎样的支持边界和经过验证的升级路径？”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="四个标签四种责任"&gt;四个标签，四种责任&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;标签&lt;/th&gt;
&lt;th&gt;传递什么信号&lt;/th&gt;
&lt;th&gt;该问的问题&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;DGX&lt;/td&gt;
&lt;td&gt;NVIDIA 整机系统与支持模型&lt;/td&gt;
&lt;td&gt;什么经过了验证？故障归谁？&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HGX&lt;/td&gt;
&lt;td&gt;供 OEM 实现的加速服务器平台&lt;/td&gt;
&lt;td&gt;实际出货的是哪套机箱/拓扑/固件？&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MGX&lt;/td&gt;
&lt;td&gt;模块化参考架构&lt;/td&gt;
&lt;td&gt;哪些模块今天和明年经过组合验证？&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;云 GPU&lt;/td&gt;
&lt;td&gt;供应商自有物理平台即服务&lt;/td&gt;
&lt;td&gt;真实的拓扑、租户与可用性契约是什么？&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;figcaption class="text-center mb-3"&gt;
表 1: DGX/HGX/MGX/云 GPU 的责任分层
&lt;/figcaption&gt;
&lt;ul&gt;
&lt;li&gt;**DGX：整机系统责任。**DGX 是 NVIDIA 的整机系统与软件产品，价值在于 GPU、网络、存储、系统软件、支持与生命周期的验证组合。&lt;/li&gt;
&lt;li&gt;**HGX：面向系统构建者的平台设计。**HGX 被 OEM 用来构建加速系统，最终服务器取决于 OEM 的 CPU、机箱、固件、网卡、存储、散热和服务方案，两台贴着 HGX 标签的服务器在运营上可能截然不同。&lt;/li&gt;
&lt;li&gt;**MGX：模块化参考架构。**NVIDIA 把 MGX 描述为面向 OEM/ODM 的开放模块化参考架构，支持 GPU、CPU、网络、PCIe 与机架级设计的组合（宣称超过 100 种）。MGX 是一套设计词汇，不是一台固定设备。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这与&lt;a href="../../fundamentals/gpu-generations-products/"&gt;世代、模块与产品语言&lt;/a&gt;的五层词汇一脉相承：平台标签回答的是“集成度与责任的边界在哪里”。&lt;/p&gt;
&lt;h2 id="功耗散热与可维护性是算力特性"&gt;功耗、散热与可维护性是算力特性&lt;/h2&gt;
&lt;p&gt;一台高密度 GPU 服务器是一个电气与热学系统。功率上限会影响持续性能（见&lt;a href="../../fundamentals/gpu-microarchitecture-roofline/"&gt;微架构&lt;/a&gt;的功耗墙）；散热设计影响降频、噪声、维护和机架密度；液冷改变机房要求与服务流程；备件策略影响可用性。&lt;/p&gt;
&lt;div class="alert alert-warning-container"&gt;
&lt;div class="alert-warning-title px-2"&gt;
不要仅凭基准图表批准集群
&lt;/div&gt;
&lt;div class="alert-warning px-2"&gt;
把机架功率、单节点功耗、散热容量、线缆与交换机布局、故障更换、固件所有权、以及排空并恢复一个节点所需的时间都算进采购决策。功耗与散热的更多运营视角见&lt;a href="../capacity-economics/"&gt;容量经济&lt;/a&gt;与&lt;a href="../../landscape/landscape-trends/"&gt;AI 时代&lt;/a&gt;的功耗维度。
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="总结"&gt;总结&lt;/h2&gt;
&lt;p&gt;平台选型的本质是选择责任边界：DGX 把验证与支持打包，HGX 把责任切给 OEM 与集成商，MGX 提供组合词汇，云 GPU 把一切变成服务契约。无论选哪条路，功耗、散热与可维护性都不是“机房的事”，而是算力特性本身。&lt;/p&gt;
&lt;h2 id="参考资料"&gt;参考资料&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;NVIDIA MGX Platform for Modular Server Design。&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>容量经济：购买、租赁还是组合</title><link>https://jimmysong.io/zh/book/gpu-infra/production/capacity-economics/</link><pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate><author>Jimmy Song</author><guid>https://jimmysong.io/zh/book/gpu-infra/production/capacity-economics/</guid><description>买还是租是一条利用率曲线，不是价格表：核心变量是每单位有用完成工作的成本（把启动、排队、传输、失败、工程与闲置时间全部计入），再警惕“总体很忙、GPU 却在碎片中等待”的利用率悬崖。</description><content:encoded>
&lt;blockquote&gt;
&lt;p&gt;核心变量不是每 GPU 小时的价格，而是每单位有用完成工作的价格。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="买还是租是一条利用率曲线"&gt;买还是租，是一条利用率曲线&lt;/h2&gt;
&lt;p&gt;租赁把硬件所有权变成可变容量，可以缩短实验启动时间；购买在利用率稳定时改善控制力、数据本地性和摊销；混合策略可以预留可预测的基线容量，并向云或专业供应商突发。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;每单位有用产出的成本 = (计算 + 存储 + 网络 + 电费 + 支持 + 工程 + 故障储备) / 完成的工作量&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这个分式是诊断工具，不是完整的经济模型：它把“单价比较”换成了“总拥有视角”。&lt;/p&gt;
&lt;h2 id="容量决策表"&gt;容量决策表&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;因素&lt;/th&gt;
&lt;th&gt;租赁占优当……&lt;/th&gt;
&lt;th&gt;购买占优当……&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;需求&lt;/td&gt;
&lt;td&gt;突发或不确定&lt;/td&gt;
&lt;td&gt;稳定的高利用率&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;时间&lt;/td&gt;
&lt;td&gt;立刻需要容量&lt;/td&gt;
&lt;td&gt;有整合投入的时间&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;数据&lt;/td&gt;
&lt;td&gt;数据能安全廉价地移动&lt;/td&gt;
&lt;td&gt;数据本地性主导&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;硬件&lt;/td&gt;
&lt;td&gt;供应商有确切 SKU/拓扑&lt;/td&gt;
&lt;td&gt;需要受限的定制设计&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;运维&lt;/td&gt;
&lt;td&gt;供应商支持有价值&lt;/td&gt;
&lt;td&gt;自有强大平台团队&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;风险&lt;/td&gt;
&lt;td&gt;需要灵活性&lt;/td&gt;
&lt;td&gt;能吸收残值与故障&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;figcaption class="text-center mb-3"&gt;
表 1: 租与买的决策因素
&lt;/figcaption&gt;
&lt;h2 id="度量利用率悬崖"&gt;度量利用率悬崖&lt;/h2&gt;
&lt;p&gt;一个集群可能在总体上“很忙”，而昂贵的 GPU 碎片化地散在各节点上，等待某个作业需要的精确拓扑（&lt;a href="../../control-plane/numa-scheduling/"&gt;NUMA&lt;/a&gt;与&lt;a href="../../control-plane/gpu-scheduling-problems/"&gt;调度问题域&lt;/a&gt;的碎片问题）；反过来，集群利用率低也可能只是因为作业被卡在策略瓶颈后面。&lt;/p&gt;
&lt;div class="alert alert-note-container"&gt;
&lt;div class="alert-note-title px-2"&gt;
不要只看全网平均值
&lt;/div&gt;
&lt;div class="alert-note px-2"&gt;
度量每 GPU 利用率、排队时间、碎片化、内存余量和作业完成情况，而不是一个机群平均数。把“忙”翻译成“每单位有用产出的成本”，采购决策才有依据。
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="总结"&gt;总结&lt;/h2&gt;
&lt;p&gt;容量决策是经济学的延伸，经济学跟随架构，架构跟随工作负载契约（见&lt;a href="../production-architecture/"&gt;生产架构&lt;/a&gt;）。租买组合的答案不在供应商的报价单里，而在你自己的利用率曲线与成本分式里。&lt;/p&gt;</content:encoded></item><item><title>生产架构：契约、节点池与平面划分</title><link>https://jimmysong.io/zh/book/gpu-infra/production/production-architecture/</link><pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate><author>Jimmy Song</author><guid>https://jimmysong.io/zh/book/gpu-infra/production/production-architecture/</guid><description>先写工作负载契约再写 YAML；把异构机群按世代、内存档位、互连与生命周期切成产品化的节点池；用控制、计算、数据、网络、可观测五个平面与命名空间契约把多租户治理落到对象上。</description><content:encoded>
&lt;blockquote&gt;
&lt;p&gt;在写 YAML 之前先写契约：工作负载契约是硬件、节点池、配额与 SLO 的共同依据。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="工作负载契约"&gt;工作负载契约&lt;/h2&gt;
&lt;p&gt;契约内容：模型与版本、精度、内存占用、序列长度、批次、并发、延迟/吞吐目标、故障恢复、检查点、数据路径、安全边界和预期增长。它与&lt;a href="../../observability/benchmarks-acceptance-capacity/"&gt;基准与验收&lt;/a&gt;的验收清单是同一件事的两面：一份定义“要什么”，一份验证“拿到了什么”。&lt;/p&gt;
&lt;h2 id="gpu-节点池是产品档位"&gt;GPU 节点池是产品档位&lt;/h2&gt;
&lt;p&gt;不要把异构机群当作每个节点都可互换来运营。按 GPU 世代、内存档位、外形规格、互连、工作负载类别、可用区和生命周期阶段建池，一致地打标签和污点（见&lt;a href="../../control-plane/placement-policy/"&gt;放置策略&lt;/a&gt;），实验池与生产池分开。每个池对应一种&lt;a href="../platform-responsibility/"&gt;平台责任&lt;/a&gt;边界与一种成本结构（见&lt;a href="../capacity-economics/"&gt;容量经济&lt;/a&gt;）。&lt;/p&gt;
&lt;h2 id="五个平面"&gt;五个平面&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;平面&lt;/th&gt;
&lt;th&gt;职责&lt;/th&gt;
&lt;th&gt;控制手段&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;控制&lt;/td&gt;
&lt;td&gt;API、调度器、准入、自动伸缩、策略&lt;/td&gt;
&lt;td&gt;RBAC、配额、优先级、队列&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPU 计算&lt;/td&gt;
&lt;td&gt;驱动、运行时、插件、工作负载容器&lt;/td&gt;
&lt;td&gt;金丝雀节点、污点、版本锁定&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;数据&lt;/td&gt;
&lt;td&gt;数据集、模型、缓存、检查点&lt;/td&gt;
&lt;td&gt;局部性、完整性、加密、保留&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;网络&lt;/td&gt;
&lt;td&gt;训练集合通信与服务流量&lt;/td&gt;
&lt;td&gt;RDMA 策略、分段、拥塞&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;可观测&lt;/td&gt;
&lt;td&gt;健康、容量、作业、SLO、成本&lt;/td&gt;
&lt;td&gt;DCGM、Prometheus、日志、追踪&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;figcaption class="text-center mb-3"&gt;
表 1: 生产 AI 平台的平面划分
&lt;/figcaption&gt;
&lt;p&gt;这张表与&lt;a href="../../control-plane/control-plane-map/"&gt;控制面地图&lt;/a&gt;的分层互为镜像：地图讲“哪些组件在哪一层”，平面讲“哪类责任归谁管”。&lt;/p&gt;
&lt;h2 id="命名空间契约"&gt;命名空间契约&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ResourceQuota&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gpu-team-quota&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ai-team&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hard&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;requests.nvidia.com/gpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;8&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;limits.nvidia.com/gpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;8&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;requests.cpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;64&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;requests.memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;512Gi&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;policy/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PodDisruptionBudget&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;inference-pdb&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ai-team&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;minAvailable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;inference&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;具体的配额键与控制器行为应对照集群的资源模型验证，尤其在使用 DRA 或共享设备时。&lt;/p&gt;
&lt;h2 id="总结"&gt;总结&lt;/h2&gt;
&lt;p&gt;生产架构 = 契约（要什么）+ 节点池（放在哪）+ 平面（谁负责）+ 命名空间（归谁用）。这四件事写清楚，&lt;a href="../end-to-end-walkthrough/"&gt;端到端实战&lt;/a&gt;中的每一条命令才有了上下文。&lt;/p&gt;</content:encoded></item><item><title>NVIDIA × CNCF：开放 AI 基础设施运动</title><link>https://jimmysong.io/zh/book/gpu-infra/production/nvidia-cncf/</link><pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate><author>Jimmy Song</author><guid>https://jimmysong.io/zh/book/gpu-infra/production/nvidia-cncf/</guid><description>为什么靠专有软件筑护城河的 NVIDIA 在系统性开源其 K8s 基础设施：KAI Scheduler、DRA Driver 捐赠、Grove、GPU Operator、NVCF，以及 KAI 的成组调度、分层队列与 NUMA 感知放置如何补上默认调度器的三个缺口。</description><content:encoded>
&lt;blockquote&gt;
&lt;p&gt;“Kubernetes 是 AI 数据中心的关键操作系统，是现代 AI 工厂的编排层。”（黄仁勋，KubeCon EU 2026）这不是营销话术：NVIDIA 已是 CNCF 白金会员并在积极贡献代码。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="为什么-nvidia-全力押注开源"&gt;为什么 NVIDIA 全力押注开源&lt;/h2&gt;
&lt;p&gt;NVIDIA 在 2024–2026 年的战略转变引人注目：一家靠专有软件（CUDA、cuDNN、TensorRT）构筑护城河的公司，正在系统性地开源其 Kubernetes 与 AI 基础设施组件。为什么？&lt;/p&gt;
&lt;p&gt;答案是 NVIDIA 的竞争优势已经上移。&lt;strong&gt;GPU 硬件就是护城河&lt;/strong&gt;，短期内没有人在硅片上追上 NVIDIA。把基础设施层开放并交给社区治理，意味着更多工程师学会在 NVIDIA 硬件上构建、更多面向 NVIDIA GPU 的集成存在、更少企业客户被许可问题卡住。&lt;/p&gt;
&lt;h2 id="cncf-贡献版图"&gt;CNCF 贡献版图&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;贡献&lt;/th&gt;
&lt;th&gt;是什么&lt;/th&gt;
&lt;th&gt;状态&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;KAI Scheduler&lt;/td&gt;
&lt;td&gt;开源 Kubernetes GPU 调度器：成组调度、拓扑感知放置、分层队列&lt;/td&gt;
&lt;td&gt;CNCF Sandbox（2025）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NVIDIA GPU DRA Driver&lt;/td&gt;
&lt;td&gt;发布 ResourceSlice 并处理 DRA 分配的驱动实现&lt;/td&gt;
&lt;td&gt;捐赠给 CNCF / Kubernetes 项目（2026 年 4 月）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grove&lt;/td&gt;
&lt;td&gt;编排 AI 工作负载（推理集群、LLM-d 集成）的开源 Kubernetes API&lt;/td&gt;
&lt;td&gt;随 DRA 捐赠一同开源&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;380 万美元 GPU 捐赠&lt;/td&gt;
&lt;td&gt;捐给 CNCF 的云 GPU 额度，用于真实 GPU 上测试 Kubernetes&lt;/td&gt;
&lt;td&gt;于 KubeCon EU 2026 宣布&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPU Operator&lt;/td&gt;
&lt;td&gt;自动化整个 GPU 栈生命周期的 Operator（Apache 2.0）&lt;/td&gt;
&lt;td&gt;2020 年建立，积极维护&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NVCF（NVIDIA Cloud Functions）&lt;/td&gt;
&lt;td&gt;GPU 函数服务的控制平面&lt;/td&gt;
&lt;td&gt;2026 年 4 月开源&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kubernetes AI 一致性&lt;/td&gt;
&lt;td&gt;与 CNCF 合作定义 AI 工作负载一致性测试&lt;/td&gt;
&lt;td&gt;2026 年进行中&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;figcaption class="text-center mb-3"&gt;
表 1: NVIDIA 的主要 CNCF 贡献
&lt;/figcaption&gt;
&lt;p&gt;对本书主线而言，最重要的是前两行：KAI Scheduler 补上了调度器缺口，DRA Driver 捐赠让&lt;a href="../../data-plane/dra/"&gt;数据平面·DRA&lt;/a&gt;的路径有了社区治理的驱动实现。&lt;/p&gt;
&lt;h2 id="kai-scheduler-深入解析"&gt;KAI Scheduler 深入解析&lt;/h2&gt;
&lt;p&gt;KAI（Kubernetes AI）Scheduler 2025 年 4 月以 Apache 2.0 开源并被 CNCF Sandbox 接纳。它解决了默认 kube-scheduler 在 GPU 工作负载上的三个关键缺口：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;成组调度（Gang Scheduling）：&lt;/strong&gt; 分布式训练作业需要 N 个 Pod 同时启动。默认调度器逐个放置 Pod，你可能落得 7/8 个 Pod 在跑、占着 7 块 GPU，而第 8 个因为找不到合适拓扑的 GPU 无法调度，7 个运行中的 Pod 全体闲置，资源在死锁中浪费。KAI 的 PodGroup 保证 N 个 Pod 原子化调度：要么全启动，要么全不启动。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;分层队列管理：&lt;/strong&gt; 团队需要 GPU 配额管理。A 队保底 16 块 GPU、空闲时可突发到 32；B 队保底 8 块。KAI 实现分层队列：保底分配受保护，高优先级作业需要时突发容量被回收。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NUMA 感知放置：&lt;/strong&gt; KAI 读取 NodeResourceTopology 对象，在调度器层面做出满足 NUMA 约束的放置决策，在 Pod 到达 kubelet 之前，杜绝“先调度后拒绝”循环（见&lt;a href="../../control-plane/numa-scheduling/"&gt;NUMA 感知调度&lt;/a&gt;）。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 安装 KAI Scheduler&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm install kai-scheduler &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; oci://ghcr.io/nvidia/kai-scheduler/charts/kai-scheduler &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --namespace kai-scheduler --create-namespace&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 成组调度：8-GPU 分布式训练的 PodGroup&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;scheduling.run.ai/v2alpha2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PodGroup&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;llama-70b-training&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ml-team&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;minMember&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 8 个 Pod 必须同时启动&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;minResources&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nvidia.com/gpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;team-ml-research&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;priorityClassName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;high-priority&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 带 GPU 配额的队列&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;run.ai/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Queue&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;team-ml-research&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;deservedGPUs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 保底分配&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;maxAllowedGPUs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 集群空闲时可突发到 32&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gpuPriority&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 高优先级可抢占低优先级&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;成组调度与队列治理正是 &lt;a href="../../control-plane/volcano/"&gt;Volcano&lt;/a&gt; 与 &lt;a href="../../control-plane/kueue/"&gt;Kueue&lt;/a&gt;的核心语义；KAI 的加入让“GPU 原生”调度器在 CNCF 里有了第三个选项，也印证了&lt;a href="../../landscape/landscape-trends/"&gt;生态趋势&lt;/a&gt;的判断：调度正在从“放置”走向“队列治理 + 资源运营”。&lt;/p&gt;
&lt;h2 id="总结"&gt;总结&lt;/h2&gt;
&lt;p&gt;NVIDIA 把基础设施层开源，是把护城河集中到硅片、把生态放大到软件的战略选择。对平台团队而言，这意味着控制面的可选项在变多：KAI 补调度缺口、DRA 捐赠补驱动治理、一致性测试补验收标准。评估它们时，用&lt;a href="../../control-plane/decision-axes/"&gt;决策轴&lt;/a&gt;的框架而不是“新就上”。&lt;/p&gt;</content:encoded></item><item><title>端到端实战：从裸机节点到训练作业</title><link>https://jimmysong.io/zh/book/gpu-infra/production/end-to-end-walkthrough/</link><pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate><author>Jimmy Song</author><guid>https://jimmysong.io/zh/book/gpu-infra/production/end-to-end-walkthrough/</guid><description>一台全新 Ubuntu 24.04 + H100 节点，从装 containerd、加入集群，到部署 GPU Operator、观察自举顺序、跑通验证 Pod、配置 NUMA 感知调度，最后提交一个 PyTorch 训练作业并用 DCGM 监控，七步走完前六章的全部机制。</description><content:encoded>
&lt;blockquote&gt;
&lt;p&gt;每一条命令都达到生产可用。这一章是全书的“接线图”，把软件栈、设备插件、Operator、NUMA 与监控串成一条时间线。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="环境"&gt;环境&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;项目&lt;/th&gt;
&lt;th&gt;值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;节点 OS&lt;/td&gt;
&lt;td&gt;Ubuntu 24.04 LTS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPU&lt;/td&gt;
&lt;td&gt;1× NVIDIA H100 80GB SXM5（DGX H100 节点）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kubernetes&lt;/td&gt;
&lt;td&gt;v1.34（DRA GA）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPU Operator&lt;/td&gt;
&lt;td&gt;v26.3.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NVIDIA 驱动目标&lt;/td&gt;
&lt;td&gt;570.x（由 GPU Operator 管理）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;容器运行时&lt;/td&gt;
&lt;td&gt;containerd v2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;figcaption class="text-center mb-3"&gt;
表 1: 实战环境
&lt;/figcaption&gt;
&lt;h2 id="第-1-步准备节点k8s-之前"&gt;第 1 步：准备节点（K8s 之前）&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 在 GPU 节点上（纯净 OS，尚未装驱动）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get install -y curl apt-transport-https ca-certificates gnupg lsb-release
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 安装 containerd&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://download.docker.com/linux/ubuntu/gpg &lt;span class="p"&gt;|&lt;/span&gt; sudo gpg --dearmor &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -o /etc/apt/keyrings/docker.gpg
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; https://download.docker.com/linux/ubuntu &lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;lsb_release -cs&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; stable&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;|&lt;/span&gt; sudo tee /etc/apt/sources.list.d/docker.list
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo apt-get install -y containerd.io
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 配置 containerd&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo containerd config default &lt;span class="p"&gt;|&lt;/span&gt; sudo tee /etc/containerd/config.toml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo sed -i &lt;span class="s1"&gt;&amp;#39;s/SystemdCgroup = false/SystemdCgroup = true/&amp;#39;&lt;/span&gt; /etc/containerd/config.toml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl restart containerd
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 加入集群&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo kubeadm join &amp;lt;control-plane-ip&amp;gt;:6443 --token &amp;lt;token&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --discovery-token-ca-cert-hash sha256:&amp;lt;hash&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 此刻：节点在集群里，但没有 GPU 支持&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl describe node gpu-node-01 &lt;span class="p"&gt;|&lt;/span&gt; grep &lt;span class="s1"&gt;&amp;#39;nvidia.com&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# GPU 对 Kubernetes 不可见&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="第-2-步部署-gpu-operator"&gt;第 2 步：部署 GPU Operator&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 在控制平面 / 管理机上&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 &lt;span class="p"&gt;|&lt;/span&gt; bash
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo add nvidia https://helm.ngc.nvidia.com/nvidia &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; helm repo update
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm install --wait --generate-name &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -n gpu-operator --create-namespace &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; nvidia/gpu-operator &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --version&lt;span class="o"&gt;=&lt;/span&gt;v26.3.0 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --set driver.enabled&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --set driver.version&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;570.86.10&amp;#39;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --set toolkit.enabled&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --set devicePlugin.enabled&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --set dcgmExporter.enabled&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --set dcgmExporter.serviceMonitor.enabled&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --set migManager.enabled&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --set nfd.enabled&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --set gfd.enabled&lt;span class="o"&gt;=&lt;/span&gt;true&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="第-3-步观察自举顺序"&gt;第 3 步：观察自举顺序&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;watch kubectl get pods -n gpu-operator
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 预期顺序（与 GPU Operator 章的八步对应）：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1. node-feature-discovery 启动 → 打 OS/内核标签&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 2. nvidia-driver-daemonset 启动 → 编译并加载 nvidia.ko（首次 2–5 分钟）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 3. nvidia-container-toolkit 启动 → 配置 containerd&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 4. gpu-feature-discovery 启动 → 打 GPU 型号标签&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 5. nvidia-device-plugin 启动 → 注册 nvidia.com/gpu&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 6. nvidia-dcgm-exporter 启动 → 暴露指标&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 7. nvidia-mig-manager 启动 → 管理 MIG（空闲）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 8. nvidia-operator-validator 启动 → CUDA 冒烟测试&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl describe node gpu-node-01 &lt;span class="p"&gt;|&lt;/span&gt; grep -A3 &lt;span class="s1"&gt;&amp;#39;Allocatable&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Allocatable:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# nvidia.com/gpu: 1 ← 成功！GPU 已注册&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="第-4-步运行-gpu-验证-pod"&gt;第 4 步：运行 GPU 验证 Pod&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl run nvidia-smi-test &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --image&lt;span class="o"&gt;=&lt;/span&gt;nvcr.io/nvidia/cuda:12.6.0-base-ubuntu22.04 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --restart&lt;span class="o"&gt;=&lt;/span&gt;Never &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --limits&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;nvidia.com/gpu=1&amp;#39;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -- nvidia-smi
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl logs nvidia-smi-test
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# +---------------------------------------------------------------------+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# | NVIDIA-SMI 570.86.10 Driver Version: 570.86.10 CUDA Version: 13.1|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# +-------+---------------------+------+------+------------------------+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# | 0 | NVIDIA H100 80GB HBM3 On | 00000000:1E:00.0 |&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# +-------+---------------------+------+------+------------------------+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# | 30W / 700W | 1023MiB / 81920MiB | 0% Default |&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# +---------------------------------------------------------------------+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl delete pod nvidia-smi-test&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="第-5-步配置-numa-感知调度"&gt;第 5 步：配置 NUMA 感知调度&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 在 GPU 节点上配置 kubelet&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo tee -a /var/lib/kubelet/config.yaml &lt;span class="s"&gt;&amp;lt;&amp;lt; &amp;#39;EOF&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;cpuManagerPolicy: static
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;topologyManagerPolicy: single-numa-node
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;topologyManagerScope: pod
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;memoryManagerPolicy: Static
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;reservedMemory:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;- numaNode: 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; limits:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; memory: 4Gi
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 策略变更后必须清理管理器状态&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl stop kubelet
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo rm -f /var/lib/kubelet/cpu_manager_state
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo rm -f /var/lib/kubelet/memory_manager_state
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl start kubelet
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo journalctl -u kubelet &lt;span class="p"&gt;|&lt;/span&gt; grep -i topology
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# &amp;#39;topology manager policy: single-numa-node&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="第-6-步运行分布式训练作业"&gt;第 6 步：运行分布式训练作业&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;batch/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Job&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pytorch-training&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ml-team&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;restartPolicy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Never&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nodeSelector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nvidia.com/gpu.product&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;NVIDIA-H100-80GB-HBM3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tolerations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nvidia.com/gpu&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;operator&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Exists&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;effect&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;NoSchedule&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;trainer&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nvcr.io/nvidia/pytorch:25.03-py3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;python&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- -&lt;span class="l"&gt;c&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; import torch
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; print(f&amp;#39;CUDA available: {torch.cuda.is_available()}&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; print(f&amp;#39;GPU count: {torch.cuda.device_count()}&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; print(f&amp;#39;GPU name: {torch.cuda.get_device_name(0)}&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; x = torch.randn(4096, 4096, device=&amp;#39;cuda&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; y = torch.mm(x, x)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; print(f&amp;#39;MatMul result shape: {y.shape} -- GPU compute verified!&amp;#39;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resources&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;limits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nvidia.com/gpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;1&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;64Gi&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;16&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nvidia.com/gpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;1&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;64Gi&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;16&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;NCCL_DEBUG&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;INFO&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;CUDA_VISIBLE_DEVICES&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;0&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="第-7-步用-dcgm-监控"&gt;第 7 步：用 DCGM 监控&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get svc -n gpu-operator &lt;span class="p"&gt;|&lt;/span&gt; grep dcgm
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# nvidia-dcgm-exporter ClusterIP 10.96.xxx.xxx 9400/TCP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl port-forward svc/nvidia-dcgm-exporter 9400:9400 -n gpu-operator &lt;span class="p"&gt;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -s localhost:9400/metrics &lt;span class="p"&gt;|&lt;/span&gt; grep DCGM_FI_DEV_GPU_UTIL
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# DCGM_FI_DEV_GPU_UTIL{gpu=&amp;#39;0&amp;#39;,UUID=&amp;#39;GPU-xxxx&amp;#39;,...} 87.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 训练期间的关键指标（口径详见“可观测”部分）：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# DCGM_FI_DEV_GPU_UTIL -&amp;gt; 活跃 matmul 期间应为 85-99%&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# DCGM_FI_DEV_MEM_COPY_UTIL -&amp;gt; 数据加载期间升高&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# DCGM_FI_DEV_FB_USED -&amp;gt; 显存占用（警惕逼近上限的 OOM）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# DCGM_FI_DEV_POWER_USAGE -&amp;gt; H100 SXM 满载应为 600-700W&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# DCGM_FI_DEV_GPU_TEMP -&amp;gt; 满载通常 65-80°C（健康）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# DCGM_FI_DEV_XID_ERRORS -&amp;gt; 必须为 0，非零立即排查&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# DCGM_FI_DEV_SM_CLOCK -&amp;gt; 应处于加速频率（H100 约 1800 MHz）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# GPU 健康诊断&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl &lt;span class="nb"&gt;exec&lt;/span&gt; -n gpu-operator -it nvidia-dcgm-exporter-xxxxx -- dcgmi diag -r &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# -r 1 短诊断（30 秒）/ -r 2 中等（90 秒）/ -r 3 完整 burn-in（约 10 分钟）&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="总结"&gt;总结&lt;/h2&gt;
&lt;p&gt;七步走完，恰好对应全书的机制链条：容器运行时与驱动（&lt;a href="../../software-stack/nvidia-container-toolkit/"&gt;软件栈&lt;/a&gt;）→ 设备注册（&lt;a href="../../fundamentals/k8s-device-model/"&gt;设备模型&lt;/a&gt;）→ Operator 自举（&lt;a href="../../control-plane/gpu-operator/"&gt;GPU Operator&lt;/a&gt;）→ 拓扑对齐（&lt;a href="../../control-plane/numa-scheduling/"&gt;NUMA&lt;/a&gt;）→ 负载（&lt;a href="../../workloads/pytorch/"&gt;工作负载&lt;/a&gt;）→ 验收（&lt;a href="../../observability/gpu-metrics-semantics/"&gt;可观测&lt;/a&gt;）。把这套流程套进&lt;a href="../implementation-sequence/"&gt;实施顺序&lt;/a&gt;的阶段 1–3，就是一台 GPU 节点从上架到生产的完整剧本。&lt;/p&gt;</content:encoded></item><item><title>安全、可靠性与生命周期</title><link>https://jimmysong.io/zh/book/gpu-infra/production/security-lifecycle/</link><pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate><author>Jimmy Song</author><guid>https://jimmysong.io/zh/book/gpu-infra/production/security-lifecycle/</guid><description>GPU 工作负载携带模型权重与凭据，特权 DaemonSet 需要更高级别的信任审查；可靠性是可预见的恢复而非从不报错；一份带签名性质的版本矩阵，让每次升级只动一个维度。</description><content:encoded>
&lt;blockquote&gt;
&lt;p&gt;一个平台可靠，是指它能可预见地失败并恢复，而不是它从不报错。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="安全边界"&gt;安全边界&lt;/h2&gt;
&lt;p&gt;GPU 工作负载常常携带模型权重、专有数据和凭据。实施最小权限 RBAC、镜像溯源与扫描、秘密管控、网络策略、命名空间隔离，以及受限的主机设备接口访问。&lt;/p&gt;
&lt;div class="alert alert-warning-container"&gt;
&lt;div class="alert-warning-title px-2"&gt;
特权组件需要更高级别的信任审查
&lt;/div&gt;
&lt;div class="alert-warning px-2"&gt;
驱动容器和特权 DaemonSet（NVIDIA 驱动容器、HAMi 核态模块、DRA 驱动等）应接受比普通应用 Pod 更高级别的信任审查，它们运行在主机内核边界上。
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="可靠性是恢复时间"&gt;可靠性是恢复时间&lt;/h2&gt;
&lt;p&gt;GPU 故障在单节点上罕见，在大型机群中却常见，要按机群规模做概率预算。使用检查点、幂等作业、重试预算、优雅终止、健康门禁、副本容量和有文档的隔离（quarantine）流程。检查点策略与训练作业的恢复契约直接相关（见&lt;a href="../../workloads/workload-physics/"&gt;工作负载物理&lt;/a&gt;的训练一节）。&lt;/p&gt;
&lt;h2 id="版本矩阵"&gt;版本矩阵&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Kubernetes 版本: ______________________
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;节点 OS / 内核: ________________________
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;GPU 型号 / 固件: _______________________
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NVIDIA 驱动: ___________________________
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;CUDA 运行时 / 工具链: ___________________
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Container Toolkit: _____________________
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;GPU Operator / 插件 / DRA: _____________
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;框架 / 推理引擎: _______________________
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NCCL / RDMA 栈: ________________________
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;已验证的工作负载镜像摘要: ______________&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这份矩阵是&lt;a href="../../software-stack/nvidia-software-stack/"&gt;软件栈&lt;/a&gt;“兼容性方向”一节的落地工具：&lt;strong&gt;尽可能一次只升级一个维度&lt;/strong&gt;。当协同升级无法避免时，对整栈做金丝雀（流程见&lt;a href="../../control-plane/gpu-operator/"&gt;GPU Operator&lt;/a&gt;的升级循环），而不是孤立地测试组件。&lt;/p&gt;
&lt;h2 id="总结"&gt;总结&lt;/h2&gt;
&lt;p&gt;安全回答“谁可以碰什么”，可靠性回答“坏了之后多久恢复”，生命周期回答“变更如何被验证地推进”。三者共同的生产出口，是下一章&lt;a href="../implementation-sequence/"&gt;实施顺序&lt;/a&gt;的验收清单。&lt;/p&gt;</content:encoded></item><item><title>实施顺序：从工作负载定义到生产化</title><link>https://jimmysong.io/zh/book/gpu-infra/production/implementation-sequence/</link><pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate><author>Jimmy Song</author><guid>https://jimmysong.io/zh/book/gpu-infra/production/implementation-sequence/</guid><description>阶段 0–5 的落地路线：定义工作负载 → 验证单节点 → 验证单服务器 → 验证 Kubernetes → 验证多节点 → 生产化，附一份六项验收清单：生产始于恢复路径被演练之时。</description><content:encoded>
&lt;blockquote&gt;
&lt;p&gt;阶段 0 的产出物是一份工作负载画像，不是一个 GPU 品牌。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="阶段-0定义工作负载"&gt;阶段 0：定义工作负载&lt;/h2&gt;
&lt;p&gt;写下工作负载契约、内存预算、精度、并发与失败行为。这是&lt;a href="../production-architecture/"&gt;生产架构&lt;/a&gt;工作负载契约的第一次落地。&lt;/p&gt;
&lt;h2 id="阶段-1验证单节点"&gt;阶段 1：验证单节点&lt;/h2&gt;
&lt;p&gt;检查拓扑与健康（&lt;a href="../../fundamentals/server-topology/"&gt;检查仪式&lt;/a&gt;），运行驱动/运行时冒烟测试、内存与计算基线，以及一个代表性应用。&lt;/p&gt;
&lt;h2 id="阶段-2验证单服务器"&gt;阶段 2：验证单服务器&lt;/h2&gt;
&lt;p&gt;运行一块、两块和全部 GPU，记录扩展效率、内存余量、集合通信时长、功率与失败行为；单节点内外的行为差异见&lt;a href="../../fundamentals/gpu-interconnect-collectives/"&gt;互连与集合通信&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id="阶段-3验证-kubernetes"&gt;阶段 3：验证 Kubernetes&lt;/h2&gt;
&lt;p&gt;应用标签、污点、配额、一个诊断 Pod 和一个代表性工作负载，验证分配、重启、日志、指标和排空行为，一条龙的完整命令见&lt;a href="../end-to-end-walkthrough/"&gt;端到端实战&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id="阶段-4验证多节点"&gt;阶段 4：验证多节点&lt;/h2&gt;
&lt;p&gt;运行一个已知良好的集合通信基准和真实工作负载，测试网络故障、节点故障、检查点恢复和排队行为。&lt;/p&gt;
&lt;h2 id="阶段-5生产化"&gt;阶段 5：生产化&lt;/h2&gt;
&lt;p&gt;补上 SLO、容量预测、准入控制、镜像溯源、金丝雀升级、操作手册与责任归属。&lt;strong&gt;生产始于恢复路径被演练之时。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="验收清单"&gt;验收清单&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;序号&lt;/th&gt;
&lt;th&gt;验收检查&lt;/th&gt;
&lt;th&gt;完成&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;工作负载契约包含精度、内存、延迟/吞吐与恢复行为&lt;/td&gt;
&lt;td&gt;☐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;GPU SKU、外形规格、内存、功率、链路与拓扑被精确记录&lt;/td&gt;
&lt;td&gt;☐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;驱动、CUDA、运行时、插件/DRA、Operator、框架与 NCCL 版本已锁定&lt;/td&gt;
&lt;td&gt;☐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;单 GPU、单节点与多节点基线已记录&lt;/td&gt;
&lt;td&gt;☐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;排队时间、吞吐、错误、温度与内存余量可观测&lt;/td&gt;
&lt;td&gt;☐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;升级、排空、检查点、隔离与更换手册已测试&lt;/td&gt;
&lt;td&gt;☐&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;figcaption class="text-center mb-3"&gt;
表 1: 上生产前的六项验收
&lt;/figcaption&gt;
&lt;h2 id="总结"&gt;总结&lt;/h2&gt;
&lt;p&gt;六个阶段把全书的机制变成一条时间线：先定义再验证、先单点再集成、先演练再生产。验收清单六项全勾之前，你拥有的是一套很有希望的组件；六项全勾之后，你才拥有一个平台。&lt;/p&gt;</content:encoded></item></channel></rss>