1.2 云原生 AI 的定义与核心价值:容器化、声明式与不可变基础设施 云原生不是把 AI 应用搬到云上,而是用容器、声明式、不可变基础设施、自动化与弹性这套方法论,重塑 AI 从训练到推理的整个生命周期。 1.2.1 从「云上 AI」到「云原生 AI」 首先要厘清两个常被混淆的概念: 云上 AI(AI on Cloud):把原来跑在本地的训练脚本搬到云服务器上执行。本质上只是「换了台更快的机器」,工作方式没变——还是 SSH 上去、敲命令、看日志、手工管理。 云原生 AI(Cloud Native AI):用云原生(Cloud Native)的方法论重新设计 AI 系统,让模型的全生命周期都建立在容器、声明式、不可变基础设施之上,从而获得自动化、弹性、可观测等云原生红利。
云原生不是把 AI 应用搬到云上,而是用容器、声明式、不可变基础设施、自动化与弹性这套方法论,重塑 AI 从训练到推理的整个生命周期。
首先要厘清两个常被混淆的概念:
这二者的差别,类似于「把一头牛牵到高速公路上」与「为高速公路重新设计一辆货车」。前者只是位置变化,后者是范式升级。
CNCF(Cloud Native Computing Foundation,云原生计算基金会)给出的权威定义是:云原生技术「赋能组织在公有云、私有云和混合云等现代动态环境中,构建和运行可扩展的应用」。它的代表技术包括容器、服务网格、微服务、不可变基础设施与声明式 API。
把这个定义迁移到 AI 场景,云原生 AI 可以概括为:
云原生 AI = 把云原生的容器化、声明式、不可变基础设施、自动化、弹性五大方法论,系统性地应用到 AI 全生命周期(数据、训练、评估、部署、监控),让模型成为可调度、可复现、可弹性、可观测的工程产物。
容器(Container)是云原生的第一块基石。它把「代码 + 依赖 + 环境」打包成一个不可分割的镜像(Image),让应用在任何能运行容器的地方都跑出一致的结果。
对 AI 场景而言,容器化解决了 1.1 节讲的「环境地狱」:
| 维度 | 传统裸装环境 | 容器化环境 |
|---|---|---|
| 环境封装 | 无 | 镜像完整封装 |
| 版本共存 | 冲突 | 多版本并行 |
| 复现成本 | 高(口口相传) | 低(拉镜像即复现) |
| 迁移成本 | 数天 | 秒级拉取 |
⚠️ AI 容器化的难点:容器镜像通常很大(动辄 5-10GB,因为含 CUDA 与框架),镜像拉取慢会拖慢训练启动。生产中常配合镜像预热、分层缓存、P2P 分发(如 Dragonfly)来缓解。
声明式(Declarative)是 Kubernetes 的核心哲学。传统脚本式(Imperative)部署是「先做 A、再做 B、然后做 C」,而声明式是「我要 3 个副本、用某个镜像、暴露某个端口」,由系统自动驱动现状向声明收敛。
对 AI 而言,声明式让训练和服务都可以写成「意图」而非「步骤」:
声明式的好处是自愈与可观察:如果某个 Pod 挂了,系统会自动拉起新的;如果声明改了(如副本数从 3 改到 5),系统自动收敛。这把大量「手工救火」工作交给了平台。
不可变基础设施(Immutable Infrastructure)的理念是:一旦部署就不修改,要变更就替换。一个运行的容器实例不会被 SSH 进去手动改配置,而是通过更新镜像重新部署。
这一理念对 AI 的版本治理至关重要:
传统软件有 CI/CD(持续集成/持续交付),云原生 AI 把它扩展为:
这条自动化链条把 1.1 节讲的「训练-服务割裂」彻底弥合:训练与服务不再是两个独立系统,而是一条由 Operator、Pipeline、模型注册中心串联起来的自动化闭环。第 5 章会详细讲 Kubeflow Pipelines 如何编排这条闭环。
弹性(Elasticity)是云原生最显眼的红利。AI 负载天然有强烈的弹性需求:
云原生通过调度 + 自动扩缩容实现这种弹性。第 3 章会讲调度器如何让训练与推理在同一集群混部,第 8 章会讲 KEDA 如何按队列长度自动扩缩推理副本。
把五大特性落到工程上,云原生 AI 系统通常分为四层架构。这张图是全书的总纲,后续每一章都对应其中一层或一个环节:
四层的分工:
| 层 | 职责 | 关键问题 | 本书章节 |
|---|---|---|---|
| 调度底座 | 管理算力,把 GPU/CPU 调度给任务 | 「资源怎么分、怎么共享、怎么打满」 | 第 2-3 章 |
| 生产流水线 | 把数据变成模型 | 「模型怎么工程化生产、训练怎么分布式」 | 第 4-5 章 |
| 高效交付 | 把模型变成服务 | 「大模型怎么高效推理、怎么降本提速」 | 第 6-7 章 |
| 稳定运行 | 保障线上稳定 | 「怎么监控、怎么弹性、怎么扛大流量」 | 第 8 章 |
最后,用一张工作流对比图把传统 AI 与云原生 AI 的范式差异收束起来:
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 880 420" font-family="sans-serif" font-size="13"> <defs> <marker id="arr" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto"> <path d="M0,0 L8,3 L0,6 z" fill="#475569"/> </marker> </defs> <!-- 标题 --> <text x="440" y="24" text-anchor="middle" font-size="15" font-weight="bold">传统 AI 工作流 vs 云原生 AI 工作流</text> <!-- 上半:传统 --> <rect x="20" y="40" width="840" height="160" rx="10" fill="#fee2e2" stroke="#dc2626" stroke-width="1.5"/> <text x="40" y="62" font-weight="bold" fill="#b91c1c">传统 AI:手工、单机、割裂</text> <g font-size="12" fill="#7f1d1d"> <rect x="40" y="90" width="120" height="40" rx="6" fill="#fff" stroke="#dc2626"/> <text x="100" y="114" text-anchor="middle">手工配环境</text> <rect x="180" y="90" width="120" height="40" rx="6" fill="#fff" stroke="#dc2626"/> <text x="240" y="114" text-anchor="middle">本地 notebook</text> <rect x="320" y="90" width="120" height="40" rx="6" fill="#fff" stroke="#dc2626"/> <text x="380" y="114" text-anchor="middle">独占 GPU</text> <rect x="460" y="90" width="120" height="40" rx="6" fill="#fff" stroke="#dc2626"/> <text x="520" y="114" text-anchor="middle">手工训练</text> <rect x="600" y="90" width="120" height="40" rx="6" fill="#fff" stroke="#dc2626"/> <text x="660" y="114" text-anchor="middle">手工导出</text> <rect x="740" y="90" width="100" height="40" rx="6" fill="#fff" stroke="#dc2626"/> <text x="790" y="114" text-anchor="middle">手工上线</text> <line x1="160" y1="110" x2="180" y2="110" stroke="#dc2626" marker-end="url(#arr)"/> <line x1="300" y1="110" x2="320" y2="110" stroke="#dc2626" marker-end="url(#arr)"/> <line x1="440" y1="110" x2="460" y2="110" stroke="#dc2626" marker-end="url(#arr)"/> <line x1="580" y1="110" x2="600" y2="110" stroke="#dc2626" marker-end="url(#arr)"/> <line x1="720" y1="110" x2="740" y2="110" stroke="#dc2626" marker-end="url(#arr)"/> <text x="40" y="165" font-style="italic">痛点:不可复现 · 资源浪费 · 训练-服务割裂 · 扩展靠堆人</text> </g> <!-- 下半:云原生 --> <rect x="20" y="220" width="840" height="180" rx="10" fill="#dcfce7" stroke="#16a34a" stroke-width="1.5"/> <text x="40" y="242" font-weight="bold" fill="#15803d">云原生 AI:自动化、容器化、闭环</text> <g font-size="12" fill="#14532d"> <rect x="40" y="270" width="120" height="40" rx="6" fill="#fff" stroke="#16a34a"/> <text x="100" y="294" text-anchor="middle">容器镜像</text> <rect x="180" y="270" width="120" height="40" rx="6" fill="#fff" stroke="#16a34a"/> <text x="240" y="294" text-anchor="middle">特征存储</text> <rect x="320" y="270" width="120" height="40" rx="6" fill="#fff" stroke="#16a34a"/> <text x="380" y="294" text-anchor="middle">共享 GPU 调度</text> <rect x="460" y="270" width="120" height="40" rx="6" fill="#fff" stroke="#16a34a"/> <text x="520" y="294" text-anchor="middle">分布式训练</text> <rect x="600" y="270" width="120" height="40" rx="6" fill="#fff" stroke="#16a34a"/> <text x="660" y="294" text-anchor="middle">模型注册</text> <rect x="740" y="270" width="100" height="40" rx="6" fill="#fff" stroke="#16a34a"/> <text x="790" y="294" text-anchor="middle">弹性推理</text> <line x1="160" y1="290" x2="180" y2="290" stroke="#16a34a" marker-end="url(#arr)"/> <line x1="300" y1="290" x2="320" y2="290" stroke="#16a34a" marker-end="url(#arr)"/> <line x1="440" y1="290" x2="460" y2="290" stroke="#16a34a" marker-end="url(#arr)"/> <line x1="580" y1="290" x2="600" y2="290" stroke="#16a34a" marker-end="url(#arr)"/> <line x1="720" y1="290" x2="740" y2="290" stroke="#16a34a" marker-end="url(#arr)"/> <!-- 反哺回路 --> <path d="M 790 310 Q 790 360 440 360 Q 100 360 100 310" fill="none" stroke="#16a34a" stroke-dasharray="5,3" marker-end="url(#arr)"/> <text x="440" y="378" text-anchor="middle" font-style="italic">监控指标反哺调度与扩缩容 · 形成闭环</text> </g> </svg>
💡 判读:注意下半图比上半图多了一条从「弹性推理」回到「容器镜像」的虚线回路——这正是云原生 AI 区别于传统 AI 的精髓:系统是自洽闭环的,监控指标会反哺调度与扩缩容,而传统 AI 是一条单向、割裂、不可回溯的流水线。
下一节《1.3 从 MLOps 到 LLMOps 的演进》将聚焦流水线层,讲清 MLOps 的成熟度模型,以及大模型时代给工程化带来的全新挑战。