云计算 云计算(cloud computing)为 ML 工作负载提供按需的基础设施,让你不必自己拥有硬件。本文件覆盖服务模型、主流云厂商、容器与 Kubernetes、存储、云网络、serverless 计算、成本管理以及基础设施即代码 训练一个前沿模型需要上千张 GPU 跑上几个月。没有哪家创业公司会自己买这些硬件。云计算让你按小时租用,训练时扩容、推理时缩容,只为实际使用付费。对任何想造出超出笔记本规模的 ML 系统的人来说,理解云基础设施都是基本功。
云计算(cloud computing)为 ML 工作负载提供按需的基础设施,让你不必自己拥有硬件。本文件覆盖服务模型、主流云厂商、容器与 Kubernetes、存储、云网络、serverless 计算、成本管理以及基础设施即代码
| 模型 | 你管理 | 厂商管理 | 示例 |
|---|---|---|---|
| IaaS(基础设施) | 操作系统、运行时、应用 | 硬件、虚拟化、网络 | AWS EC2、GCP Compute Engine |
| PaaS(平台) | 应用、数据 | 操作系统、运行时、扩缩容、补丁 | AWS SageMaker、GCP Vertex AI |
| SaaS(软件) | 什么都不用管(直接用) | 全部 | OpenAI API、Weights & Biases |
| FaaS(函数) | 单个函数 | 其余全部 | AWS Lambda、GCP Cloud Functions |
Kubernetes(K8s) 在大规模下编排容器。关键概念:
Pod(容器组):最小的可部署单元。包含一个或多个共享网络和存储的容器。一个模型服务 pod 里可能装着:模型服务器容器 + 一个用于收集指标的 sidecar 容器。
Deployment(部署):管理一组相同的 pod。指定期望的副本数。某个 pod 崩溃时,K8s 会自动创建替代品。
Service(服务):为一组 pod 提供稳定的网络端点。客户端连到 service,K8s 把流量路由到健康的 pod。类型有:ClusterIP(集群内部)、NodePort(通过节点端口对外)、LoadBalancer(通过云厂商的负载均衡器对外)。
StatefulSet:类似 Deployment,但面向有状态工作负载。每个 pod 都有持久身份和稳定存储。用于数据库和分布式训练(每个 worker 需要稳定身份才能互相通信)。
DaemonSet:在每个节点上跑一个 pod。用于:监控 agent(Prometheus node exporter)、日志收集器(Fluentd)、GPU 设备插件(NVIDIA device plugin)。
K8s 中的 GPU 调度:NVIDIA device plugin 把 GPU 暴露为一种 K8s 资源。Pod 来申请 GPU:
resources: limits: nvidia.com/gpu: 2 # 这个 pod 需要 2 张 GPU
水平 Pod 自动扩缩器(Horizontal Pod Autoscaler,HPA):根据指标(CPU 使用率、请求速率,或自定义指标如 GPU 利用率、队列深度)扩缩 pod 数量。
集群自动扩缩器(Cluster Autoscaler):扩缩节点数量。当 pod 因为节点不够而无法调度时,集群自动扩缩器会从云厂商处申请新的虚拟机。节点利用率低时,它会先排空再终止。
KEDA(Kubernetes Event-Driven Autoscaling,基于事件的自动扩缩):根据外部事件源(Kafka 队列深度、HTTP 请求速率)扩缩。特别适合推理:请求队列变长就扩容模型服务器,队列空了就缩容。
| 类型 | 特点 | 用途 | 示例 |
|---|---|---|---|
| 块存储(Block) | 低延迟,挂载到单个虚拟机 | 操作系统盘、数据库 | AWS EBS、GCP Persistent Disk |
| 对象存储(Object) | 容量无限,HTTP 访问 | 数据集、模型权重、日志 | AWS S3、GCS、Azure Blob |
| 文件存储(File) | 跨虚拟机共享,POSIX 兼容 | 共享训练数据 | AWS EFS、GCP Filestore、NFS |
| 数据湖(Data lake) | 读时 schema,原始数据 | 分析、特征工程 | Delta Lake、Iceberg、Hudi |
对 ML 训练而言:数据集存在对象存储(S3/GCS)。训练脚本从对象存储把数据读进内存。要快速随机访问(打乱的数据加载),可以:(1) 训练前先把数据集下到本地 SSD;(2) 用高吞吐文件系统(Lustre、FSx);(3) 用一个能高效流式读取并缓存的数据加载库(WebDataset、FFCV)。
模型权重:带版本控制地存在对象存储里。一个 FP16 的 70B 模型约 140 GB。以 1 GB/s 从 S3 加载约需 2.5 分钟。缓存到本地 SSD 能显著减少推理的冷启动时间。
VPC(虚拟私有云,Virtual Private Cloud):云中一个隔离的网络。你的虚拟机、数据库和服务都在 VPC 内部互相通信。外部流量通过负载均衡器或网关进入。
子网(subnet):把 VPC 划分成几段。公有子网能访问互联网(给 API 服务器用);私有子网不能(给数据库、GPU worker 用)。这是安全"最小权限原则"在网络层的对应物。
安全组(security groups,AWS) / 防火墙规则(firewall rules,GCP):控制哪些流量被允许。"允许任意来源的 80 端口入站 HTTP。仅允许我的 IP 的 22 端口入站 SSH。其余全部拒绝。"配置错误的安全组是云安全事件的头号原因。
服务网格(service mesh)(Istio、Envoy):管理 K8s 内部的服务间通信。提供:mTLS 加密(每次服务间调用都加密)、流量路由(A/B 测试:把 10% 流量导到新模型)、重试、超时、熔断,以及可观测性(哪个服务调了哪个服务、花了多久)。
Serverless(AWS Lambda、GCP Cloud Functions):你上传一个函数,云厂商在触发时运行它。无需管理服务器,无需配置扩缩容。按调用次数付费(通常 $0.20/百万次调用 + 计算时间)。
冷启动(cold starts):一段不活跃期之后的第一次调用会更慢(厂商需要分配容器并加载你的代码)。冷启动在 0.5-5 秒,所以 serverless 不适合延迟敏感的 ML 推理。
对 ML 而言:serverless 适合:预处理(送进模型前调整图片大小)、后处理(格式化模型输出、发通知)、编排(新数据到了就触发训练流水线),以及轻量推理(小模型、能容忍冷启动的场景)。
Serverless 不适合:GPU 推理(大多数 serverless 平台不支持 GPU)、长时间训练任务(Lambda 有 15 分钟超时),或需要保存状态的服务(调用之间没有持久状态)。
云成本是 ML 团队的头号运营顾虑。单张 H100 实例约 $8/小时。一次 64 张 GPU 的训练约 $500/小时。跑一个月的训练约 $360,000。成本优化是工程问题,不是会计问题。
竞价实例/可抢占实例(spot/preemptible instances):云厂商把闲置容量以 60-90% 折扣出售。厂商可以在 30 秒到 2 分钟通知后收回。适合:容错训练(频繁 checkpoint,换台实例续训)、批量推理、数据预处理。不适合:延迟敏感的服务(被中断 = 宕机)。
预留实例(reserved instances):承诺用 1-3 年,换 30-60% 折扣。适合:负载基线稳定的推理服务。
自动扩缩容:高峰期扩容,夜间/周末缩容。一个峰值要 10 张 GPU、夜间只要 2 张的模型服务器,靠自动扩缩容比 7×24 小时跑 10 张 GPU 能省约 60%。
合理选型(right-sizing):别拿 H100 跑一个在 A10G 上就跑得很好的 7B 模型。把 GPU 和工作负载匹配起来。用 profiling(第 16 章)来确定哪种 GPU 最合适。
存储成本:对象存储很便宜(S3 Standard 约 $0.023/GB/月),但会累积。一个团队如果保留每个训练 checkpoint(每个 10 GB、每次实验 100 个、共 50 次实验),就会攒出 50 TB = $1,150/月。设置生命周期策略,自动删除旧 checkpoint。
对面向全球用户的 ML 系统来说,只部署在一个区域意味着:远端用户延迟高(东京的用户访问美国服务器,单程网络往返就多约 150ms),以及单一故障点(该区域宕机,整个服务下线)。
多区域模式:
主-备(active-passive):一个主区域处理全部流量。一个备用区域保持热备(数据已复制、随时可以接管)。主区域故障时,DNS 切换到备用区域。故障转移期间的停机时间:30 秒到几分钟。
双活(active-active):两个区域同时处理流量。用户被路由到最近的区域。两个区域都持有最新数据(异步或同步复制)。单区域故障时不停机——流量被自动重新路由。
数据复制:这才是难点。模型权重复制很容易(每个区域都拷贝到 S3)。特征存储的数据必须在可接受的陈旧度内复制。用户数据可能有数据驻留要求(GDPR:欧洲用户的数据必须留在欧洲)。
GPU 云价格对比(约数,2026 年):
| GPU | AWS | GCP | Azure | 典型用途 |
|---|---|---|---|---|
| A10G (24 GB) | $1.00/小时 (g5) | $0.90/小时 | $0.90/小时 | 小模型推理 | |
| A100 (80 GB) | $4.10/小时 (p4d) | $3.70/小时 | $3.40/小时 | 训练、大模型推理 | |
| H100 (80 GB) | $8.00/小时 (p5) | $7.50/小时 | $7.00/小时 | 前沿训练 | |
| TPU v5e | 无 | $1.20/小时 | 无 | 大规模 JAX 训练 |
基础设施即代码(Infrastructure as Code,IaC) 把基础设施(虚拟机、网络、数据库、K8s 集群)定义在带版本控制的配置文件里。与其在 AWS 控制台里点按钮,你不如写代码描述你要什么,然后让工具去创建。
Terraform(HashiCorp):标准的 IaC 工具。支持所有主流云厂商。声明式:你描述期望状态,Terraform 自己算出要创建/修改/删除什么才能达到它。
# main.tf — 创建一台用于推理的 GPU 虚拟机 resource "aws_instance" "model_server" { ami = "ami-0abcdef1234567890" # Deep Learning AMI instance_type = "g5.xlarge" # A10G GPU tags = { Name = "model-server-prod" } } resource "aws_s3_bucket" "model_weights" { bucket = "my-model-weights-prod" versioning { enabled = true } }
terraform init # 下载 provider 插件 terraform plan # 显示将会发生什么变化 terraform apply # 创建基础设施 terraform destroy # 把它全部拆掉
为什么 IaC 重要:可复现(用代码就能重建整套基础设施)、可审计(git 历史显示谁改了什么)、灾难恢复(用同一份配置在另一个区域重建)、环境一致性(开发、预发布、生产用同一套模板、不同参数)。
Pulumi:类似 Terraform,但用真正的编程语言(Python、TypeScript、Go)而非 HCL。当你的基础设施逻辑复杂(条件、循环、动态配置)时很有用。