Serverless Computing
无服务器计算按需运行代码,由服务商管理并扩缩服务器,甚至可缩减至零,并按请求计费。内容涵盖冷启动和 AI 应用。
无服务器计算是一种云执行模型:只有事件触发时,云服务提供商才运行代码;底层服务器会自动启动和扩缩,流量停止后则缩减至零;计费依据是请求次数和执行时间,而非预留的机器。服务器依然存在,但开发者无需配置、修补或调整服务器规格。AWS Lambda 于 2014 年 11 月发布后,这种模式开始普及,如今涵盖 Lambda、Azure Functions 和 Cloud Run functions 等函数平台,以及 Google Cloud Run 和 Azure Container Apps 等无服务器容器。加州大学伯克利分校的研究人员在 2019 年的论文《简化云编程:伯克利视角下的无服务器计算》中阐述了它的优势与局限。对于机器学习,无服务器模式适合流量突发或难以预测的模型服务场景;如果在流量突发之间让闲置的 GPU 服务器持续运行,成本可能会超过实际计算工作的成本。
无服务器执行的工作原理#
代码打包为函数或容器镜像,并绑定到触发器:HTTP 请求、写入对象存储的文件、队列中的消息或定时任务。事件到达时,如果有空闲的热实例,平台会立即在该实例上运行处理程序。否则就会执行冷启动:平台创建隔离的沙箱,例如 AWS 为 Lambda 构建的 Firecracker 微型虚拟机之一,加载代码、启动语言运行时,并在处理事件前运行处理程序外的初始化代码。实例无状态且可随时销毁,因此任何需要在请求结束后保留的数据都必须写入外部存储或数据库。
冷启动与机器学习模型#
机器学习会让冷启动变得昂贵,因为初始化时需要导入 PyTorch 等框架,并加载可能达到数百 MB 的模型权重。常见做法是在每个实例上只加载一次模型,在处理程序外部或首次使用时加载,从而让每次热调用都能复用模型。下面的处理程序使用 torchvision 中的 ResNet-50 分类器,遵循了这种模式:
import time
import torch
import torchvision
model = None # module state survives between invocations while the instance stays warm
def handler(event, context):
"""Classify one image tensor, building the model only on a cold start."""
global model
cold_start = model is None
if cold_start:
model = torchvision.models.resnet50().eval() # built once per instance
with torch.inference_mode():
logits = model(event["image"])
return {"cold_start": cold_start, "class_id": int(logits.argmax())}
for _ in range(3):
start = time.perf_counter()
response = handler({"image": torch.rand(1, 3, 224, 224)}, context=None)
print(response["cold_start"], f"{(time.perf_counter() - start) * 1000:.0f} ms")在 Apple M5 Pro CPU 上,首次调用会构建网络,耗时约 0.2 秒;随后两次复用模型的热调用各耗时约 15 毫秒。团队可以使用更小的容器镜像、更紧凑或经过量化的模型,以及更轻量的运行时(如 ONNX Runtime),来缩短剩余的冷启动时间;也可以通过保持一定数量的热实例来消除冷启动,例如使用 Lambda 预置并发或 Cloud Run 最小实例,但这样又会产生闲置时间的费用。
面向 AI 工作负载的无服务器计算#
无服务器架构适用于事件驱动的计算机视觉流水线。图像上传到对象存储后,可以触发一个函数,在图像加入训练数据集之前对其进行验证和调整尺寸,作为数据预处理的一部分;在安防报警系统中,运动传感器可以向目标检测函数发送单帧图像,并且只有在检测到人员时才发出警报。其余限制取决于平台:AWS Lambda每次调用最长运行 15 分钟,最多可使用 10,240 MB 内存且不提供 GPU,适合使用紧凑模型进行 CPU 推理,却不适合长时间训练,更无法进行跨多 GPU 的分布式训练。GPU 无服务器服务填补了这一空缺:Cloud Run可为容器连接 NVIDIA L4 GPU,同时支持缩容至零;Modal等平台则按秒计费 GPU 使用时间。
Ultralytics Platform 为 YOLO 部署提供了相同的权衡:默认规格为 1 vCPU 和 2 GiB 的端点免费,闲置时会缩减至零;从闲置状态启动可能需要约一分钟,而自定义规格会保持一个实例处于热状态,并按运行时间计费。
无服务器计算与相关模型的比较#
- 基础设施即服务:虚拟机全天候运行并持续计费,无论是否收到请求;客户负责管理操作系统和扩缩。长时间训练任务通常在这种环境中运行。
- Kubernetes:在团队自行运维的集群上编排容器。Knative 在 Kubernetes 之上添加了基于请求的缩放至零功能,KServe 则利用这项功能提供模型服务。
- 边缘计算:在生成数据的设备上或其附近运行代码。无服务器计算则在云区域运行代码;部分边缘平台会结合两者,在用户附近的许多小型位置运行函数。










