4. 集群配置与自动伸缩优化

在Databricks上跑AI负载,集群配置不是“选一台大机器”这么简单。训练任务和推理服务对资源的需求形态完全不同:训练往往需要多GPU长时间稳定运行,推理则更关注低延迟、弹性扩缩和单位请求成本。本节围绕节点类型、GPU型号、自动伸缩策略以及Spot与按需实例的混合方案,给出一套可落地的配置思路。

一、先分清训练与推理的资源画像

训练负载的特征是:单次运行时间长、GPU利用率高、对中断敏感、常需要多机多卡通信。推理负载的特征是:请求并发波动大、单次计算短、对冷启动和延迟敏感、可以容忍部分实例被回收。这两类负载决定了后续所有配置选择。

在Databricks中,集群由Driver和Worker组成。Driver负责调度与协调,Worker承载实际计算。对于AI场景,Driver通常不需要GPU,除非你在Driver上做模型聚合或小规模推理。Worker节点才是GPU资源的载体。

二、节点类型与GPU型号选择

Databricks支持多种云厂商的GPU实例族。以AWS为例,常见选择包括:

  • g5系列:NVIDIA A10G,24GB显存,适合中等规模训练和推理,性价比高。
  • p4d/p4de系列:NVIDIA A100,40GB或80GB显存,适合大模型训练和高吞吐推理。
  • p5系列:NVIDIA H100,适合超大规模训练,成本最高。
  • g4dn系列:NVIDIA T4,16GB显存,适合轻量推理和开发调试。

选择GPU型号时,先看显存需求。一个粗略的估算方法是:模型参数量 × 精度字节数 × 4(含梯度、优化器状态和激活值)。例如7B参数模型用FP16训练,仅权重就需要约14GB,加上优化器状态和激活,通常需要40GB以上显存,A100 40GB是起点。如果做LoRA微调,显存需求可降低到1/3左右,A10G 24GB也能胜任。

再看通信需求。多机训练时,节点间带宽决定扩展效率。p4d系列带400Gbps网络,适合多机AllReduce;g5系列网络带宽较低,更适合单机多卡或小规模分布式。

三、自动伸缩策略:训练与推理要分开设计

Databricks的自动伸缩基于集群负载和待处理任务数。但AI场景下,默认策略往往不够用,需要针对性调整。

对于训练集群,建议关闭自动伸缩或设置最小Worker数等于最大Worker数。原因是训练任务一旦启动,中途缩容会导致任务失败或重跑。如果必须弹性,可以设置较长的空闲超时(如60分钟),并确保最小Worker数满足单次训练的最低并行需求。

对于推理集群,自动伸缩是核心。关键参数包括:

  • 最小Worker数:保证基线并发下的服务能力,避免冷启动。
  • 最大Worker数:控制成本上限,防止突发流量导致无限扩容。
  • 伸缩触发指标:Databricks默认基于待处理任务数,推理场景可结合队列深度和GPU利用率。
  • 空闲超时:推理服务建议设置较短(如10分钟),快速释放闲置资源。

一个实用的推理伸缩配置示例:最小2个Worker,最大10个Worker,空闲超时10分钟。当请求队列持续超过阈值时扩容,队列清空后逐步缩容。

四、Spot与按需实例混合方案

Spot实例价格通常是按需实例的30%~70%,但可能被云厂商回收。混合方案的核心是:用按需实例保底,用Spot实例降本。

对于训练集群,如果任务支持Checkpoint,可以大量使用Spot。配置时设置Spot回退策略:当Spot不可用时自动切换到按需实例。Databricks支持在集群配置中指定Spot实例比例,例如80% Spot + 20% 按需。

对于推理集群,建议最小Worker数使用按需实例,保证服务不中断;超出最小数的部分使用Spot实例,承接弹性流量。这样即使Spot被回收,基线服务仍可用。

下面这张图展示了训练与推理两种场景下,节点类型、GPU型号、伸缩策略和实例组合的配置关系:

AI集群配置决策关系图 训练场景 GPU型号 A100 / H100 节点类型 p4d / p5 多机多卡 伸缩策略 固定Worker数 实例组合 80% Spot + 20% 按需 关键:Checkpoint + Spot回退策略 推理场景 GPU型号 A10G / T4 / A100 节点类型 g5 / g4dn 单机多卡 伸缩策略 弹性伸缩 2~10 Worker 实例组合 最小按需 + 弹性Spot 关键:基线按需保服务,弹性Spot降成本 Spot与按需混合决策逻辑 任务是否支持Checkpoint? 是 → 可大量使用Spot 服务是否要求高可用? 是 → 最小Worker用按需 成本敏感度如何? 高 → 提高Spot比例 训练:Spot优先,按需兜底 | 推理:按需保底,Spot弹性 | 通用:设置Spot回退策略 监控指标:GPU利用率、队列深度、Spot回收率、单位请求成本

五、配置落地与验证

在Databricks中配置集群时,可以通过UI或JSON API完成。以下是一个推理集群的配置片段示例:

{
  "cluster_name": "inference-gpu-cluster",
  "spark_version": "14.3.x-gpu-ml-scala2.12",
  "node_type_id": "g5.2xlarge",
  "driver_node_type_id": "g5.2xlarge",
  "num_workers": 2,
  "autoscale": {
    "min_workers": 2,
    "max_workers": 10
  },
  "azure_attributes": {
    "availability": "SPOT_WITH_FALLBACK_AZURE",
    "spot_bid_max_price": -1
  },
  "custom_tags": {
    "workload": "inference",
    "cost_center": "ai-team"
  }
}

配置完成后,需要观察几个关键指标来判断是否达到平衡:GPU利用率是否稳定在60%以上、请求P99延迟是否在SLA内、Spot实例回收是否导致服务抖动、单位请求成本是否下降。如果GPU利用率长期低于30%,说明Worker数偏多或GPU型号过大;如果P99延迟频繁超标,说明最小Worker数不足或伸缩触发太慢。

实践建议:先用小规模流量做压测,记录不同并发下的GPU利用率和延迟曲线,再据此设定最小/最大Worker数和伸缩阈值。不要直接照搬默认值。

六、常见误区与排障方向

一个常见误区是训练集群也开启激进自动伸缩,导致任务中途Worker被回收,训练失败。另一个误区是推理集群全部使用Spot,结果Spot回收时服务不可用。排障时优先检查:集群事件日志中是否有Spot回收记录、自动伸缩是否频繁触发、GPU利用率是否与Worker数匹配。

如果发现推理延迟高但GPU利用率低,可能是CPU预处理或网络IO成为瓶颈,此时增加GPU Worker无效,应检查数据管道和批处理大小。如果训练扩展效率低,检查节点间网络带宽和AllReduce配置。

总结来说,AI集群配置的核心是按负载类型分开设计:训练求稳,推理求弹;GPU型号看显存和通信;伸缩策略训练偏固定、推理偏弹性;实例组合用按需保底、Spot降本。把这四件事对齐,才能在性能和成本之间找到可持续的平衡点。