跳到主要内容

Serverless AI Agent 的冷启动税

· 阅读需 13 分钟
Tian Pan
Software Engineer

一个带有精简 Python 处理程序的标准 Lambda 函数冷启动大约需要 250 毫秒。而你的 AI 智能体,在调用相同的运行时并添加了一些 SDK 导入后,冷启动需要 8-12 秒。如果再加上本地模型推理,时间将达到 40-120 秒。第一个触发已缩容部署的用户,在智能体响应之前需要等待一条电视广告的时间。这种差距——不是单次推理 Token 的延迟,也不是吞吐量,而是初始启动成本——正是大多数 Serverless AI 部署在用户体验上悄然失败的原因。

这个问题并非 Serverless 所特有,但 Serverless 让它变得显而易见。当你在常驻(always-on)基础设施上运行智能体时,你是在为闲置容量付费,且冷启动永远不会发生。当你为了降低成本而采用缩减至零(scale-to-zero)的策略时,每一个低流量时期都成为了等待下一个请求的陷阱。

为什么 AI 智能体不同于普通函数

冷启动对于常规的 Serverless 函数来说是可控的。基准数据已经非常成熟:Lambda 上的 Python 3.12 在第 50 百分位数的启动时间为 200-300 毫秒。一个 14 MB 的部署包会将时间推迟到约 1.7 秒。虽然令人不悦,但对于许多用例来说是可以接受的。

AI 智能体打破了这些数字背后的所有假设。Serverless AI 函数的冷启动涉及典型 Web API 处理程序从未遇到的阶段:

  1. 容器镜像拉取 —— LLM 推理容器的重量通常在 8-15 GB 之间。即使在快速的内部网络上,拉取一个全新的镜像也需要 10-30 秒。
  2. SDK 和依赖项初始化 —— Anthropic Python SDK、OpenAI 客户端、boto3 以及类似的库会导入庞大的依赖树并建立连接池。一个除了导入这些库之外什么都不做的函数,也会给冷启动增加 3-8 秒。
  3. 模型权重加载 —— 对于本地推理,FP16 格式的 7B 参数模型大约有 14 GB,必须从存储移动到 GPU 显存中。70B 模型则超过 130 GB。LLaMA-2-70B 从下载到产出第一个 Token 的冷启动时间经测量超过 110 秒。
  4. GPU 上下文初始化 —— CUDA 上下文创建、内存池分配和内核编译在权重加载的基础上又增加了 5-15 秒。
  5. KV 缓存预热 —— 一些推理服务器在启动时会预分配 KV 缓存块,在系统接受请求之前增加了额外的时间。

生产环境的测量数据直观地说明了这种差距:在一个基准测试中,冷启动的 GPU 实例在 40 多秒后才产生第一个 Token,而热实例产生后续 Token 仅需约 30 毫秒。这是冷热状态之间 1,000 倍的延迟比。对于不运行本地推理的 API 调用型智能体,数字虽然较小,但比例依然成立——热调用在 300 毫秒内完成,而冷调用仅由于 SDK 初始化和 TLS 握手开销就需要 5-10 秒。

三层部署决策

Serverless 并不是单一的选择。在 Lambda、容器和专用实例之间的选择,实际上是一条具有清晰交叉结构的成本与延迟权衡曲线。

Lambda(标准版) 在每日请求量低于约 35,000 次时胜出。在低流量下,按调用付费比保持容器热启动更划算。Lambda 会自动缩减至零,对于 API 调用型智能体(无本地模型),启用 SnapStart 后,优化良好的 Python 函数冷启动时间不到 2 秒。Lambda 不支持 GPU —— Firecracker 微虚拟机架构不支持 PCIe 透传 —— 因此如果本地推理是必需的,无论成本如何,Lambda 都不在考虑范围内。

容器部署(ECS Fargate、Cloud Run、EKS)根据 ML 工作负载基准,在每日请求量超过约 35,000 次时变得更便宜,并且它们提供了显著更好的尾部延迟。在直接对比中,对于相同的 ML 推理工作负载,EKS 的平均延迟比 Lambda 低 48%,且 P99 延迟表现好 3.7 倍。容器支持 GPU 实例,没有超时限制,并能对扩缩容行为提供更多控制。权衡点在于运维复杂性和最小闲置成本。

专用 GPU 实例 对于 70B 级别的模型,在每月 Token 数超过约 5,000 万至 1 亿时具有成本效益。低于这个阈值,一旦考虑到工程开销和利用率不足,托管 API(Anthropic、OpenAI)或专业的 Serverless GPU 平台通常在总成本上胜出。

专业 Serverless GPU 平台(Modal、RunPod、Replicate)填补了 Lambda 无法覆盖的空白。Modal 的 GPU 冷启动在有热容器池的情况下为 2-4 秒,GPU 快照将 vLLM 启动时间从 45 秒缩短至 5 秒。Replicate 对流行的公共模型进行预热,实现了近乎零的冷启动。这些平台按秒计费,并提供自动缩减至零,费率与专用 GPU 计算相当 —— 这与 Lambda 和自管容器相比,是一个真正不同的价值主张。

AI 智能体 Lambda 冷启动剖析

即使是对于不运行本地模型的智能体(这是更常见的情况),冷启动也往往不被充分理解。主要的调节杠杆包括:

包大小和运行时。 1 KB 的 Python Lambda 在 AWS 上启动需要 0.3 秒。35 MB 的包需要 3.9 秒。加上 PyTorch、transformers 或重量级 LLM 客户端库,在你的处理程序运行第一行代码之前,你将面临 8-12 秒的等待。

模块作用域内的 SDK 初始化。 最常见的错误是在处理程序函数内部初始化 SDK 客户端。这样每次冷启动都会重新初始化 Anthropic SDK、建立 HTTP 连接池、验证凭据并建立 TLS。将所有初始化移动到模块作用域(处理程序之外),这样它在每个容器生命周期内只运行一次。对于热调用,这是免费的。对于冷启动,它只发生一次,后续所有请求都会重用已初始化的状态。

加载中…
References:Let's stay in touch and Follow me for more thoughts and updates