Files
maths-cs-ai-compendium-zh/chapter 18: ML systems design/02. cloud computing.md
T
flykhan 2536c937e3 feat: 完整中文翻译 maths-cs-ai-compendium(数学·计算机科学·AI 知识大全)
翻译自英文原版 maths-cs-ai-compendium,共 20 章全部完成。

第01章 向量 | 第02章 矩阵 | 第03章 微积分
第04章 统计学 | 第05章 概率论 | 第06章 机器学习
第07章 计算语言学 | 第08章 计算机视觉 | 第09章 音频与语音
第10章 多模态学习 | 第11章 自主系统 | 第12章 图神经网络
第13章 计算与操作系统 | 第14章 数据结构与算法
第15章 生产级软件工程 | 第16章 SIMD与GPU编程
第17章 AI推理 | 第18章 ML系统设计
第19章 应用人工智能 | 第20章 前沿人工智能

翻译说明:
- 所有数学公式 $...$ / $$...$$、代码块、图片引用完整保留
- mkdocs.yml 配置中文导航 + language: zh
- README.md 已翻译为中文(兼 docs/index.md)
- docs/ 目录包含指向各章文件的 symlink
- 约 29,000 行中文内容,排除 .cache/ 构建缓存
2026-05-03 10:23:20 +08:00

166 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 云计算
*云计算为ML工作负载提供按需基础设施,无需拥有硬件。本文件涵盖服务模型、主要云服务商、容器和Kubernetes、存储、云网络、无服务器计算、成本管理和基础设施即代码*
- 训练前沿模型需要数千个GPU持续数月。没有初创公司拥有这样的硬件。云计算让你按小时租赁,训练时扩展,推理时缩减,只为使用量付费。理解云基础设施对于任何在笔记本电脑之外构建ML系统的人来说都是必不可少的。
## 云服务模型
![云服务层:IaaS给你最大控制权,SaaS给你最少控制权](../images/cloud_service_layers.svg)
- 云服务按提供商管理程度的层叠划分:
| 模型 | 你管理 | 提供商管理 | 示例 |
|-------|-----------|-----------------|---------|
| **IaaS**(基础设施) | 操作系统、运行时、应用 | 硬件、虚拟化、网络 | AWS EC2、GCP Compute Engine |
| **PaaS**(平台) | 应用、数据 | 操作系统、运行时、扩展、修补 | AWS SageMaker、GCP Vertex AI |
| **SaaS**(软件) | 什么都不用管(只管用) | 一切 | OpenAI API、Weights & Biases |
| **FaaS**(函数) | 单个函数 | 其他所有 | AWS Lambda、GCP Cloud Functions |
- **对于ML**:大多数团队混合使用。IaaS用于自定义训练(完全控制GPU实例),PaaS用于托管训练和服务(SageMaker、Vertex AI处理编排),SaaS用于工具(W&B用于实验跟踪,OpenAI API用于基线比较)。
## 主要云服务商
### AWS(亚马逊云服务)
- 最大的云服务商(约32%市场份额)。关键ML服务:
- **EC2**:虚拟机。GPU实例:p4dA100)、p5H100)、g5A10G用于推理)。
- **S3**:对象存储。存储数据集和模型权重的标准。几乎无限的容量,约$0.023/GB/月。
- **SageMaker**:托管ML平台。处理训练、超参数调优、部署和监控。
- **EKS**:托管Kubernetes。
- **Lambda**:无服务器函数。不适合GPU工作负载,但适用于预处理和编排。
### GCP(谷歌云平台)
- 谷歌的云(约11%市场份额)。关键ML服务:
- **Compute Engine**:虚拟机。GPU实例提供A100、H100。**TPU VM**用于TPU访问。
- **GCS**:对象存储(类似S3)。
- **Vertex AI**:托管ML平台。原生支持JAX/TPU。
- **GKE**:托管Kubernetes(最成熟的K8s产品,因为谷歌创建了Kubernetes)。
- **Cloud TPU**GCP独有。v5e和v5p用于大规模训练。
### Azure(微软)
- 微软的云(约23%市场份额)。关键ML服务:
- **Azure VM**GPU实例提供A100、H100。
- **Azure Blob存储**:对象存储。
- **Azure ML**:托管ML平台。
- **AKS**:托管Kubernetes。
- **OpenAI服务**:通过Azure API独家访问OpenAI模型。
## 容器和Kubernetes
- 我们在第13章(操作系统)中概念性地介绍了容器(Docker)和Kubernetes,并在第15章(部署)中进行了实践。这里我们关注**云特定的**模式:
### Kubernetes用于ML
- **KubernetesK8s**大规模编排容器。关键概念:
- **Pod**:最小的可部署单元。包含一个或多个共享网络和存储的容器。一个模型服务Pod可能包含:模型服务器容器 + 用于指标收集的边车容器。
- **Deployment**:管理一组相同的Pod。指定所需的副本数。如果Pod崩溃,K8s会自动创建替代Pod。
- **Service**:一组Pod的稳定网络端点。客户端连接到Service;K8s路由到健康的Pod。类型:ClusterIP(内部)、NodePort(通过节点端口对外暴露)、LoadBalancer(通过云负载均衡器对外暴露)。
- **StatefulSet**:类似Deployment但用于有状态工作负载。每个Pod获得持久的身份和稳定的存储。用于数据库和分布式训练(每个工作者需要稳定的身份以便通信)。
- **DaemonSet**:在每个节点上运行一个Pod。用于:监控代理(Prometheus节点导出器)、日志收集器(Fluentd)、GPU设备插件(NVIDIA设备插件)。
- **K8s中的GPU调度**NVIDIA设备插件将GPU暴露为K8s资源。Pod请求GPU
```yaml
resources:
limits:
nvidia.com/gpu: 2 # 此Pod需要2个GPU
```
- K8s将Pod调度到具有2个可用GPU的节点上。这就是云ML平台为训练和推理分配GPU的方式。
### 自动缩放
- **水平Pod自动缩放器(HPA)**:基于指标(CPU使用率、请求率、自定义指标如GPU利用率或队列深度)缩放Pod数量。
- **集群自动缩放器**:缩放节点数量。如果由于没有足够节点而无法调度Pod,集群自动缩放器会从云服务商处配置新的VM。当节点利用不足时,它会排空并终止它们。
- **KEDA**Kubernetes事件驱动自动缩放):基于外部事件源(Kafka队列深度、HTTP请求率)进行缩放。非常适合推理:当请求队列增长时扩展模型服务器,当队列为空时缩减。
## 存储
| 类型 | 特性 | 用途 | 示例 |
|------|----------------|----------|---------|
| **块存储** | 低延迟,附加到单台VM | 操作系统磁盘、数据库 | AWS EBS、GCP Persistent Disk |
| **对象存储** | 无限容量,HTTP访问 | 数据集、模型权重、日志 | AWS S3、GCS、Azure Blob |
| **文件存储** | 跨VM共享,POSIX | 共享训练数据 | AWS EFS、GCP Filestore、NFS |
| **数据湖** | 读取时定义模式,原始数据 | 分析、特征工程 | Delta Lake、Iceberg、Hudi |
- **对于ML训练**:数据集存储在对象存储(S3/GCS)中。训练脚本从对象存储读取数据到内存。对于快速随机访问(随机数据加载),要么:(1)在训练前将数据集下载到本地SSD,(2)使用高吞吐量文件系统(Lustre、FSx),或(3)使用能高效流式和缓存的数据库加载库(WebDataset、FFCV)。
- **模型权重**:存储在带版本管理的对象存储中。70B模型在FP16下约140 GB。以1 GB/s的速度从S3加载约需2.5分钟。在本地SSD上缓存可减少推理的冷启动时间。
## 云网络
- **VPC**(虚拟私有云):云中的隔离网络。你的VM、数据库和服务在VPC内部通信。外部流量通过负载均衡器或网关进入。
- **子网**:将VPC划分为多个段。公有子网可访问互联网(用于API服务器)。私有子网不可访问(用于数据库、GPU工作线程)。这是最小权限安全原则在网络上的等价物。
- **安全组**AWS/ **防火墙规则**(GCP):控制允许哪些流量。"允许来自任何地方的入站HTTP端口80。仅允许来自我的IP的入站SSH端口22。阻止其他所有流量。"安全组配置错误是云安全事件的首要原因。
- **服务网格**Istio、Envoy):管理K8s内部的服务间通信。提供:mTLS加密(每次服务间调用都加密)、流量路由(A/B测试:将10%流量路由到新模型)、重试、超时、断路和可观测性(哪个服务调用了哪个,花了多长时间)。
## 无服务器计算
- **无服务器**AWS Lambda、GCP Cloud Functions):你上传一个函数,云服务商在触发时运行它。无需管理服务器,无需配置缩放。按调用次数付费(通常每100万次调用$0.20 + 计算时间)。
- **冷启动**:一段时间不活动后的第一次调用需要更长时间(服务商必须分配容器并加载你的代码)。冷启动为0.5-5秒,使得无服务器不适合对延迟敏感的ML推理。
- **对于ML**:无服务器适用于:预处理(发送到模型前调整图像大小)、后处理(格式化模型输出,发送通知)、编排(新数据到达时触发训练流水线)和轻量级推理(能容忍冷启动的小模型)。
- 无服务器**不**适用于:GPU推理(大多数无服务器平台不支持GPU)、长时间运行的训练作业(Lambda的15分钟超时)或有状态服务(调用之间没有持久状态)。
## 成本管理
- 云成本是ML团队的首要运营问题。单个H100实例约$8/小时。64-GPU训练运行约$500/小时。一个月的训练运行约$360,000。成本优化是工程问题,不是会计问题。
- **竞价/抢占式实例**:未使用的云容量以60-90%的折扣出售。服务商可在30秒到2分钟通知后回收。用于:容错训练(经常检查点,在新实例上恢复)、批量推理、数据预处理。不用于:对延迟敏感的服务(中断=停机)。
- **预留实例**:承诺使用1-3年,享受30-60%折扣。用于:你知道基线负载的稳态推理服务。
- **自动缩放**:高峰时段扩展,夜间/周末缩减。峰时需要10个GPU、夜间需要2个的模型服务器,通过自动缩放相比24/7运行10个GPU可节省约60%成本。
- **合理选型**:不要在7B模型上使用H100,如果它在A10G上运行良好。将GPU匹配到工作负载。使用性能分析(第16章)确定最合适的GPU。
- **存储成本**:对象存储便宜(S3标准约$0.023/GB/月),但会累积。一个团队如果保存每个训练检查点(每个10 GB,每个实验100个,50个实验),累积50 TB = $1,150/月。设置生命周期策略自动删除旧检查点。
## 多区域部署
- 对于全球ML系统(服务全球用户),在单个区域部署意味着远程用户的高延迟(东京的用户访问美国服务器会增加约150ms的网络往返)和单点故障(如果该区域宕机,整个服务离线)。
- **多区域模式**
- **主备模式**:一个主区域处理所有流量。辅助区域有热备(复制数据,准备接收流量)。主区域故障时,DNS切换到辅助区域。故障转移期间的停机时间:30秒到几分钟。
- **双活模式**:两个区域同时处理流量。用户被路由到最近的区域。两个区域都有最新数据(异步或同步复制)。单区域故障时无停机——流量自动重新路由。
- **数据复制**:困难的部分。模型权重可以轻松复制(复制到每个区域的S3)。特征存储数据必须以可接受的陈旧度复制。用户数据可能有**数据驻留要求**(GDPR:欧洲用户数据必须留在欧洲)。
- **GPU云价格比较**(2026年近似值):
| GPU | AWS | GCP | Azure | 典型用途 |
|-----|-----|-----|-------|-------------|
| A10G24 GB | $1.00/小时(g5 | $0.90/小时 | $0.90/小时 | 小模型推理 |
| A10080 GB | $4.10/小时(p4d | $3.70/小时 | $3.40/小时 | 训练、大型推理 |
| H10080 GB | $8.00/小时(p5 | $7.50/小时 | $7.00/小时 | 前沿训练 |
| TPU v5e | 无 | $1.20/小时 | 无 | JAX大规模训练 |
- 竞价/抢占式定价通常比这些价格低60-70%。价格因区域和可用性而异。
## 基础设施即代码
- **IaC**在版本控制的配置文件中定义基础设施(VM、网络、数据库、K8s集群)。不是在AWS控制台中点击按钮,而是编写代码描述你想要的内容,然后工具创建它。
- **Terraform**HashiCorp):标准的IaC工具。适用于所有主要云服务商。声明式:你描述期望状态,Terraform计算需要创建/修改/删除什么以达到该状态。
```hcl
# main.tf — 创建用于推理的GPU VM
resource "aws_instance" "model_server" {
ami = "ami-0abcdef1234567890" # 深度学习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
}
}
```
```bash
terraform init # 下载提供商插件
terraform plan # 显示将要更改的内容
terraform apply # 创建基础设施
terraform destroy # 全部拆除
```
- **IaC为何重要**:可重现性(从代码重建整个基础设施)、审计(git历史显示谁更改了什么)、灾难恢复(从同一配置在不同区域重建)和环境一致性(开发、预发布和生产使用相同模板,仅参数不同)。
- **Pulumi**:类似Terraform,但使用真正的编程语言(Python、TypeScript、Go)而不是HCL。当基础设施逻辑复杂时(条件、循环、动态配置)很有用。