趋近智
训练和大规模推理的巨大计算需求使云计算成为任何AI预算中最大的开销项。竞价实例和可抢占实例提供了一种直接的解决方案,与按需付费价格相比,它们能以高达90%的折扣提供对未使用云资源的访问。然而,这种成本优势伴随着一个重要的操作注意事项:云提供商可以在几乎没有预警的情况下收回这些资源。一个平台不仅必须容忍这些中断,还必须设计为能够优雅地处理它们,将潜在的故障转变为例行的操作事件。
抢占是指当云提供商需要收回容量时,强制终止竞价实例。对于 AWS,这称为 Spot 实例中断;对于 GCP,是可抢占式虚拟机终止;对于 Azure,则是逐出。实例在关闭前会收到短暂通知,通常在30秒到两分钟之间。对于长时间运行的训练任务,如果任务进度没有保存,意外终止可能意味着数小时的工作丢失和开销浪费。
有效使用竞价实例的核心是构建能够承受这种不可预测性的系统。目标是使任务中断和重新调度成为一个标准化的自动化流程,而不是灾难性故障。
竞价实例上 Pod 的生命周期,展示了由抢占通知触发的优雅停机过程。
并非所有工作负载对中断的容忍度都相同。使用竞价实例的决定必须基于应用程序的容错特性。
竞价实例的理想选择:
不适合竞价实例的选择:
为了可靠地在竞价实例上运行工作负载,必须在 Kubernetes 中实施特定的架构模式。
Kubernetes 提供了一个 preStop 生命周期钩子,它在容器终止之前执行。这是响应抢占通知的主要机制。当云提供商发出即将关闭的信号时,Kubernetes 会终止该节点上的 Pod,这反过来会触发每个容器中的 preStop 钩子。
训练应用程序的容器应使用此钩子触发向持久存储(如 S3 或 PVC)进行最终、快速的检查点保存,并干净地退出。
apiVersion: v1
kind: Pod
metadata:
name: resilient-training-pod
spec:
containers:
- name: trainer
image: my-pytorch-trainer:1.0
command: ["python", "train.py", "--resume-from-checkpoint"]
lifecycle:
preStop:
exec:
# 此脚本将模型状态保存到持久存储
# 在容器终止之前。
command:
- "/bin/sh"
- "-c"
- "python /app/save_checkpoint.py --path /mnt/checkpoints/final_checkpoint.pt"
volumeMounts:
- name: checkpoint-storage
mountPath: /mnt/checkpoints
volumes:
- name: checkpoint-storage
persistentVolumeClaim:
claimName: training-pvc
一种常见且有效的策略是运行一个由按需实例和竞价实例节点组组成的混合集群。
CriticalAddonsOnly=true:NoSchedule),以阻止常规工作负载调度到它们上面。spot=true:NoExecute),以表明它们的瞬时性。工作负载 Pod 必须具有相应的 toleration (容忍) 才能调度到竞价节点上。这确保了只有容错应用程序才能在易变、低成本的计算资源上运行。
一个 Kubernetes 集群架构,它将重要服务隔离到稳定的按需节点上,同时使用污点和容忍在经济高效的竞价节点组上运行可中断的训练任务。
为实施此策略,可以在 Pod 规格中结合使用污点、容忍和节点亲和性。
# Pod 或 Deployment 规格的一部分
spec:
# 此容忍允许 Pod 调度到带有竞价污点的节点上。
tolerations:
- important: "spot"
operator: "Equal"
value: "true"
effect: "NoSchedule"
affinity:
nodeAffinity:
# 这优先选择调度到标记为竞价实例的节点上。
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
preference:
matchExpressions:
- lifecycle
operator: In
values:
- spot
# 这阻止调度到为重要 Pod 保留的节点上。
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- CriticalAddonsOnly
operator: DoesNotExist
竞价实例被抢占的概率因实例类型、区域和可用区而异。依赖单一实例类型会使工作负载容易受到该特定类型价格飙升或容量短缺的影响。
现代自动扩缩器如 Karpenter 或云原生配置如 AWS EC2 Fleet 应配置为从多样化的实例类型列表中选择。例如,如果任务需要一个具有16GB内存的 GPU,可以指定一系列适用的实例类型(例如,g4dn.xlarge、g5.xlarge、p3.2xlarge)。自动扩缩器随后将配置可用且价格最低的类型,显著增加获取容量的可能性并提升弹性。
通过结合优雅停机机制、混合集群设计和智能实例选择,可以利用竞价实例可观的成本节省,同时不影响 MLOps 平台的可靠性。这种运营规范是成熟且经济高效的 AI 基础设施的标志性特点。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造