在 Vertex AI 上部署 Hugging Face ViT

Vertex AI 的模型部署能力

Vertex AI 是一个托管的机器学习平台,提供统一的 API 来覆盖整个机器学习工作流。对于模型部署,它提供了多项面向生产的功能:

  • 自动伸缩: 根据进入的流量自动调整资源。
  • 流量管理: 支持在不同模型版本之间进行流量分配,并提供模型版本管理以便轻松回滚。
  • 运营控制: 包括身份验证、速率限制以及集成的模型监控和日志记录。
  • 预测支持: 处理在线预测和批量预测请求。

虽然本指南侧重于 TensorFlow,但 Vertex AI 也支持 PyTorch 和 scikit-learn 框架。

服务模型架构

部署使用了在 TensorFlow 中实现的 ViT B/16 模型。为最小化训练与服务之间的偏差,模型被序列化为 SavedModel,并将预处理和后处理操作直接嵌入图中。

模型输入与输出:

  • 输入: 模型接受图像的 base64 编码字符串,以防止在网络传输过程中被修改。预处理步骤包括将图像调整为 224x224、标准化到 [-1, 1] 范围,并转置为 channels_first 内存布局。
  • 输出: 模型返回预测标签(字符串)和置信度分数(浮点数)。

模型制品必须先存储在 Google Cloud Storage(GCS)桶中,然后才能部署到 Vertex AI。

部署工作流

部署通过 google-cloud-aiplatform Python SDK 管理,遵循四步流程:

1. 模型上传

SavedModel 被上传到 Vertex AI 模型注册表,这是一个全托管的注册表,负责存储和版本管理。此步骤需要一个指向 Vertex AI 为 TensorFlow 服务提供的预构建 Docker 镜像的 container_spec

2. 端点创建

创建一个 Endpoint 作为接收请求和发送响应的接口。这为模型提供了受管的入口点。

3. 模型部署

已上传的模型被关联到该端点。在此阶段,硬件规格在 dedicated_resources 下定义:

  • 机器类型: 定义基础计算资源(例如 n1-standard-8,拥有 8 个 vCPU 和 32GB RAM)。
  • 加速器: 指定 GPU 类型(例如 NVIDIA_TESLA_T4)以及每个副本的加速器数量。
  • 伸缩: 设置 min_replica_countmax_replica_count 以实现自动伸缩。

4. 预测请求

使用 PredictionServiceClient 发起预测请求。对于图像等二进制数据,请求负载必须格式化为:{serving_input: {"b64": base64_encoded_string}}

性能与监控

Vertex AI 提供内置监控工具,用于跟踪端点性能和资源使用情况,例如加速器的占用率。

负载测试结果:

使用 Locust 进行本地负载测试,团队处理了约 17,230 次请求,平均延迟为 646 毫秒。

价格概览

费用基于计算节点的每小时费率以及任何附加的加速器。以下示例基于文中使用的配置:

资源 规格 每小时费用 (USD)
Machine Type n1-standard-8 (8vCPU, 30GB) $0.4372
Accelerator NVIDIA_TESLA_T4 $0.4024

只有在节点实际处理预测请求时才会产生费用。

Sources