在 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_count和max_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
- OriginalDeploying 🤗 ViT on Vertex AI