Spot Instance和可抢占GPU:降低AI成本70%
更新于2025年12月8日
2025年12月更新: 随着供应限制的缓解,Spot和按需GPU价格已显著趋同。AWS在2025年6月将按需H100价格下调了44%(至约3.90美元/小时),缩小了spot溢价优势。Hyperbolic等预算提供商提供H100服务价格为1.49美元/小时,H200为2.15美元/小时,通常与传统spot定价具有竞争力。GPU租赁市场正在从33.4亿美元增长到339亿美元(2023-2032年)。虽然spot instance仍为可中断工作负载提供节省,但计算方式已发生变化——按需现在对更多用例有意义,新的预算云提供商已经颠覆了传统的spot经济模式。
Spotify通过围绕AWS Spot instance构建整个推荐引擎训练管道,将机器学习基础设施成本从每年820万美元减少到240万美元,证明了可中断GPU能够支持生产AI工作负载。¹ 陷阱在于:当AWS需要收回容量时,他们的p4d.24xlarge实例会在2分钟警告后消失,迫使团队每5分钟检查点一次,并为关键作业维持三重冗余。掌握spot instance编排的组织相比按需定价可实现70-91%的成本减少,但那些天真部署的会因意外终止而损失数周的训练进展。²
AWS Spot、Google Cloud可抢占VM和Azure Spot VM以大幅折扣提供相同硬件,因为云提供商销售可能随时消失的过剩容量。³ 配备8个H100 GPU的p5.48xlarge实例按需价格为每小时98.32美元,但Spot平均价格为19.66美元——80%的折扣改变了AI经济学。⁴ 该模式之所以可行,是因为云提供商维持15-30%的备用容量用于维护、故障和需求峰值,在保留即时回收权利的同时将否则闲置的资源货币化。
可中断GPU容量的经济学
云提供商通过连续拍卖为spot instance定价,价格基于供需波动。AWS GPU实例的Spot价格比按需价格低70%至91%,ml.p4d.24xlarge实例价格范围为每小时3.90至29.49美元,对比32.77美元的按需价格。⁵ Google可抢占GPU提供固定的60-80%折扣,但无论需求如何,最多24小时后终止。⁶ Azure Spot提供类似的60-90%折扣,配有可配置的最高价格以防止账单冲击。
最大的折扣出现在不太受欢迎的地区和较旧的GPU代次中。由于需求集中,US-West-2的spot价格比US-East-2高20%。V100实例可获得91%折扣,而较新的H100很少超过75%折扣。随着企业工作负载减少,夜间和周末时段提供额外的10-15%节省。智能编排利用这些模式,在地区和时区间迁移工作负载以最小化成本。
中断率因实例类型、地区和时间而显著变化。对1000万spot instance小时的分析显示:⁷ - A100实例:2.3%每小时中断率 - V100实例:0.8%每小时中断率 - H100实例:4.1%每小时中断率 - 周末中断率:比工作日低40% - US-East-1:中断率比US-West-2高3倍
在spot instance上蓬勃发展的工作负载模式
某些AI工作负载天然适合spot instance模式:
超参数调优:参数空间的并行探索能容忍个别作业失败。每个实验独立运行,因此中断只影响单个配置。Optuna和Ray Tune自动处理spot instance失败,在新实例上重启已终止的作业。⁸ 组织报告使用专门的spot instance进行超参数搜索可节省75%的成本。
批量推理:处理数百万图像或文档分布在多个实例上。工作队列跟踪已完成与待处理的项目。中断只是将未完成的工作返回队列。自动扩展组自动启动替换实例。Netflix使用spot instance每日处理1亿张缩略图,每年节省320万美元。⁹
数据预处理:训练数据的ETL管道受益于spot容量。Apache Spark等框架自动检查点进展。被中断的任务从新实例上的检查点恢复。大多数预处理的无状态特性使spot instance成为理想选择。Uber的特征工程管道90%运行在spot instance上。¹⁰
开发和测试:非生产环境优雅地容忍中断。开发人员在实验期间预期偶尔的中断。成本节省使更大的开发集群成为可能。CI/CD管道自动重试失败的作业。GitHub Actions为spot运行器提供70%更低的定价。¹¹
带检查点的分布式训练:通过适当的检查点策略使大型模型训练变得可行。每10-30分钟将模型状态保存到持久存储。使用梯度累积在实例波动期间维持有效批次大小。实现弹性训练以适应可用实例。OpenAI使用60%的spot instance训练早期GPT模型。¹²
中断处理策略
成功使用spot instance需要复杂的中断管理:
检查点框架:定期自动检查点实施。PyTorch Lightning提供内置的spot instance支持,具有可配置的检查点频率。¹³ 除了模型权重外,还保存优化器状态、学习率调度和随机种子。将检查点存储在对象存储中以确保持久性。在新实例上无缝恢复训练。
实例多样化:将工作负载分散到多个实例类型、可用区和地区。AWS Spot Fleet自动管理多样化的容量池。¹⁴ 配置10-15种不同的实例类型以最大化可用性。接受稍微次优的实例以获得更好的可用性。维持20%的容量缓冲区以确保平滑过渡。
优雅关闭处理程序:AWS通过实例元数据服务提供2分钟终止通知。Google给出30秒可抢占警告。实现信号处理程序,在收到终止通知时触发立即检查点。在关闭前刷新日志和指标。清理临时资源以防止孤儿成本。
混合架构:将spot instance与按需容量结合用于关键组件。在参数服务器上运行按需,而工作节点使用spot。在稳定实例上维持最小可行容量。扩展到spot以获得额外吞吐量。基于价格和可用性信号扩展spot容量。
基于队列的架构:使用消息队列将工作调度与执行分离。Amazon SQS或Apache Kafka跟踪待处理工作。工作节点在可用时拉取任务。完成的工作更新持久存储。失败的任务返回队列重试。
生产系统的实施模式
生产级spot instance部署遵循经过验证的模式:
多地区编排:
# Kubernetes Spot Instance配置
apiVersion: v1
kind: NodePool
spec:
spotInstances:
enabled: true
maxPrice: 0.50 # 最高每小时价格
regions:
- us-east-1
- us-west-2
- eu-west-1
instanceTypes:
- g5.xlarge
- g5.2xlarge
- g4dn.xlarge
diversificationStrategy: lowestPrice
onDemandBaseCapacity: 2
spotInstancePools: 10
检查点管理:
class SpotTraining:
def __init__(self):
self.checkpoint_frequency = 600 # 10分钟
self.s3_bucket = "checkpoints"
def train(self):
if self.detect_termination_notice():
self.emergency_checkpoint()
self.graceful_shutdown()
if time.time() - self.last_checkpoint > self.checkpoint_frequency:
self.save_checkpoint()