在 Google Cloud 上部署 Serverless Transformers 流水线

A Hugging Face 社区成员 Maxence Dominici 详细介绍了一种在 Google Cloud Platform (GCP) 上部署情感分析微服务的流程。最终的实现采用了通过 Google Cloud Run 实现的 serverless 架构,允许针对低请求量模式以具有成本效益的方式部署 distilbert-base-uncased-finetuned-sst-2-english 模型。

通过 Google Cloud Run 进行 Serverless 部署

选择 Google Cloud Run 作为生产环境,是因为它允许灵活配置内存和 vCPU,这对于加载 transformer 模型是必要的。最终的架构由封装在 Docker 容器中的 Flask 应用组成,并作为托管服务进行部署。

技术组件

  • 模型:使用 distilbert-base-uncased-finetuned-sst-2-english 模型,特别是 PyTorch 版本 (pytorch_model.bin, config.json, 和 vocab.txt)。
  • 应用逻辑main.py 文件处理 GET 请求,需要一个评论字符串和一个用于基础安全验证的 API key。
  • 容器化:基于 python:3.7Dockerfile 使用 gunicorn 作为入口点来提供 Flask 应用服务。
  • 依赖项:环境需要 Flask==1.1.2, torch===1.7.1, transformers~=4.2.0, 和 gunicorn>=20.0.0

资源配置

为了避免内存错误并控制成本,实例配置如下:

  • 内存:从默认的 256 MB 升级到 4 GB。
  • 并发性:Gunicorn 配置设置为 --workers 1 --threads 1。这确保了只有一个进程和一个线程处于活动状态,从而防止多个实例消耗过量内存并增加账单费用。

GCP 服务评估

在确定使用 Cloud Run 之前,测试了多种 Google Cloud 服务,以确定部署 Hugging Face 流水线的最可行路径:

Service Outcome Reason for Rejection
AI-Platform Prediction Failed 该模型是一个 checkpoint,而不是“纯 TensorFlow”保存的模型;遇到了 beta 版稳定性问题。
App Engine Failed 在安装 TensorFlow 时遇到了缺失系统依赖文件的问题;PyTorch 可以工作,但每个实例无法处理超过两个请求。
Cloud Run Success 通过 Docker 镜像提供了必要的内存和 vCPU 控制。

性能与成本分析

延迟

请求处理通常耗时不到五秒,包括模型加载和预测。冷启动可能会增加大约 10 秒的额外延迟。作者指出,性能可以通过“预热”进一步提高。

Sources