立即部署:使用 Vertex AI Deployer 简化模型部署

立即部署:使用 Vertex AI Deployer 简化模型部署

img

在 MLOps 生命周期的各个阶段中,模型部署是最具挑战性的步骤之一。一旦模型成功训练、验证并注册到模型注册表,它就可以部署了。部署过程包括打包、测试和将模型部署到指定的服务环境。这可能需要构建 CI/CD 管道,以促进渐进式集成和交付。

使用 Cloud Build 在 Vertex AI 上构建模型部署管道是一种广泛采用的模式。此发布管道的目的是将已注册的模型部署到 Vertex AI。使用 Cloud Build 进行模型部署会带来一定的限制。

  • 它不提供批准模型发布的能力。
  • 实施金丝雀部署之类的部署策略并不简单。
  • 此外,Cloud Build 缺乏对利用 Vertex AI Model Registry 别名的支持,这阻碍了对部署过程的有效管理。

为了克服这些挑战,Google Cloud Deploy 最近推出了自定义目标类型支持(目前处于公开预览阶段),允许将 Cloud Deploy 扩展到基于容器的运行时之外。除了此次发布外,还提供了5 种示例自定义目标类型,其中包括一种用于Vertex AI的自定义目标类型。

本博文概述了 Cloud Deploy 和 Vertex AI 自定义目标,然后指导您完成 Vertex AI Deployer 示例的入门过程。阅读完本文后,您将了解如何利用 Cloud Deploy 和 Vertex AI 构建更强大的部署管道。

Cloud Deploy 和 Vertex AI Deployer 简介

Cloud Deploy 是一种托管的持续交付服务。借助 Cloud Deploy,用户可以完成持续交付流程的主要步骤。具体来说,用户可以:

  • 定义交付管道并配置一个或多个****目标的有序序列,这些目标对应特定的部署环境。
  • 创建一个与特定版本软件相关联的发布版本。
  • 开始推出,将该版本部署到管道序列中的特定目标。
  • 将此版本提升到序列中的下一个目标。

基于 YAML 的声明式 Cloud Deploy 语言在通过 gcloud CLI 交互时定义和创建资源。实际上,Cloud Deploy 通过将声明式定义应用于目标来执行部署。创建发布时,您需要提供一个文件来定义您希望目标所处的状态。此配置文件可能包含变量或其他占位符,这些占位符由 Cloud Deploy 在渲染步骤中填写。最后,在部署阶段,最终渲染的文件将应用于目标资源。部署的最终目标是使资源配置与配置文件匹配。

本质上,Cloud Deploy 仅设计为部署到特定目标类型。自定义目标将 Cloud Deploy 功能扩展至更远,并为您提供更大的灵活性。自定义目标接管渲染和部署过程,使您能够部署到几乎任何类型的部署环境,包括 Vertex AI Endpoint。此外,您仍在利用 Cloud Deploy 功能,例如批准、升级和回滚。为了更好地理解 Vertex AI 和 Cloud Deploy 自定义目标示例之间的关系,您可以在下图中表示这种关系。

img

图 1 — 当 Cloud Deploy 遇到 Vertex AI

Cloud Deploy 提供了一系列开源自定义目标示例,可在 GitHub 上获取。这些示例可以根据您的特定要求进行定制。例如,让我们探索Vertex AI Model Deployer,该示例演示了如何利用 Cloud Deploy 自定义目标功能在 Vertex AI Endpoint 中部署模型。

开始使用 Vertex AI 模型部署器

假设您已成功训练模型,您可以利用 Vertex AI Deployer 自动部署模型以供在线使用。为此,您需要在 Vertex AI 模型注册表中注册模型。此注册表提供了一个集中的、可浏览的存储库,方便管理模型的生命周期,包括版本控制和评估。

您可以使用 Vertex AI Python SDK 注册模型的版本,如下所示。

从google.cloud导入aiplatform作为vertex_ai 

MODEL_ID = 'test-model'

 registered_model = vertex_ai.Model.upload( 
  model_id=MODEL_ID, 
    display_name= 'model_to_deploy' , 
    artifact_uri= 'gs://model-bucket/model/' , 
    servo_container_image_uri= 'xx-docker.pkg.dev/xx/tf_opt-cpu.nightly:latest
 )

打印(registered_model) 

# 资源名称:projects/<your-project-id>/locations/<your-location>/models/<your-model-id>

其中,artifact_uri是包含模型工件及其任何支持文件的 GCS 目录路径。serving_container_image_uri是模型服务容器的 URI,这对于在 Vertex AI部署模型必不可少。此示例使用Vertex AI 上优化的 TensorFlow 运行时

要实现用于获取实时预测的模型,您还需要创建 Vertex AI Endpoint,这是用于托管 ML 模型的托管服务。以下代码展示了利用 Vertex AI Python SDK 创建 Vertex AI Endpoint 的示例。

从google.cloud导入aiplatform作为vertex_ai 

ENDPOINT_ID = 'prod_endpoint'

端点 = vertex_ai.Endpoint.create( 
  endpoint_id=ENDPOINT_ID,
  display_name= 'target_endpoint',
    project= 'prod-project',
    location= 'prod-region',
)

打印(端点) 

# 资源名称:projects/<your-project-id>/locations/<your-location>/endpoints/<your-endpoint-id>

成功注册模型并创建关联端点后,您可以利用 Github 上提供的 Vertex AI Deployer 示例。此示例可让您利用 Cloud Deploy 将模型无缝部署到端点。

当您使用 Vertex AI Deployer 部署已注册的模型时,首先要构建和注册与 Vertex AI 的自定义目标类型关联的容器映像。该映像包括将模型部署到自定义目标(在本例中为 Vertex AI Endpoint)的功能。为此,Vertex AI Deployer 提供了一个包装器 build_and_register.sh,可帮助自动化该过程,如您在以下打印输出中看到的那样。

cd cloud-deploy-samples/custom-targets/vertex-ai/quickstart 
./build_and_register.sh -p $PROJECT_ID -r $REGION 


# 创建 Cloud Deploy 资源:projects/prod-project/locations/prod-region/customTargetTypes/custom-target-id

您可以在下面看到 Cloud Deploy UI 中生成的目标。

img

图 2 — Cloud Build 自定义目标

创建并注册 Cloud Deploy Custom 目标映像后,您可以使用部署参数自定义操作定义部署过程。

创建 Cloud Deploy 版本时,Vertex AI 模型部署器需要DeployedModel资源的 YAML 表示形式,该表示形式指定要部署的模型、要将其部署到的端点以及服务所需的任何资源。有关详细信息,请参阅部署参数支持的部署参数列表

专用资源:
  最大副本数: 9

除了部署表示之外,Vertex AI 模型部署器示例还支持通过 Skaffold 执行自定义操作。自定义操作提供了实施部署策略(例如金丝雀配置)的能力。这些配置有助于在新部署的模型和之前部署的模型之间拆分端点流量。您可以在下方找到 Vertex AI 模型部署器示例中的 Skaffold 文件。

apiVersion: skaffold/v4beta7
类型: 配置
customActions:
- 名称: 添加别名
  容器:
  - 名称: 添加别名
    图像: $REGION-docker.pkg.dev/$PROJECT_ID /cd-custom-targets/ 
    $_CT_IMAGE_NAME@$IMAGE_SHA 参数: [ “/ bin / vertex-ai-deployer”,“--add-aliases-mode” ]

到目前为止,您已定义自定义目标和部署流程。下一步涉及在 Cloud Deploy 上创建交付管道以编排部署工作流。示例如下:

apiVersion: deploy.cloud.google.com/v1
种类: DeliveryPipeline
元数据:
  名称: vertex-ai-cloud-deploy-pipeline 
serialPipeline:
  阶段:
  -targetId  : prod-endpoint
    策略:
      标准:
        postdeploy:
          操作: [ “add-aliases” ] 
--- 
apiVersion: deploy.cloud.google.com/v1
种类: Target
元数据:
  名称: prod-endpoint 
customTarget:
  customTargetType: vertex-ai-endpoint 
deployParameters:
  customTarget/vertexAIEndpoint: projects/$PROJECT_ID/locations/$REGION/endpoints/$ENDPOINT_ID 
  customTarget/vertexAIConfigurationPath: “prod/deployedModel.yaml” 
  customTarget/vertexAIMinReplicaCount: “3” 
  customTarget/vertexAIAliases: “prod,champion”

交付管道包含一系列阶段,支持将注册的模型部署到不同环境中的每个目标。它还包括自定义目标的规范,包括其名称、类型以及与 Vertex AI Endpoint 相关的某些部署参数。您可以根据拥有的部署环境数量添加阶段和自定义目标规范。

与 Cloud Deploy Custom 目标镜像类似,值得注意的是,Vertex AI Deployer 示例提供了默认交付管道。并且,可以使用replace_variable.sh脚本将 Cloud Deploy 和 Skaffold 配置值中的占位符替换为实际镜像。

./replace_variables.sh -p $项目ID -r $区域-e $端点ID

无论哪种情况,您都可以应用clouddeploy.yaml中定义的 Cloud Deploy 配置。

gcloud deploy apply - file=clouddeploy.yaml - project=$PROJECT_ID - region=$REGION$PROJECT_ID - region= $REGION 
# 创建 Cloud Deploy 资源:projects/prod-project/locations/prod-region/deliveryPipelines/delivery-pipeline-id 
# 创建 Cloud Deploy 资源:projects/prod-project/locations/prod-region/targets/target-id

这里您可以看到 Cloud Deploy UI 中生成的交付管道。

img

图 3—Cloud Deploy 模型交付管道

如简介中所述,您必须在开始部署之前创建一个 Cloud Deploy 版本。该版本允许您设置要在 Cloud Deploy 配置中部署的更改。在我们的例子中,您可能想要更改默认部署设置,例如机器类型、副本数量等,这些都与您的端点相关联。以下是示例代码,显示了在 Vertex AI 上部署模型的版本的创建。

导出RELEASE_ID = 'release-001'
导出DELIVERY_PIPELINE = 'vertex-ai-cloud-deploy-pipeline'
导出MODEL_ID = 'test_model'
导出DEPLOY_PARAMS = "customTarget/vertexAIModel=projects/ ${PROJECT_ID} /locations/ ${REGION} /models/ ${MODEL_ID} ' 


gcloud deploy releases create $RELEASE_ID \ 
   --delivery-pipeline= $DELIVERY_PIPELINE \ 
   --project= $PROJECT_ID \ 
   --region= $REGION \ 
   --source=configuration \ 
   --deploy-parameters= $DEPLOY_PARAMS

 # 创建 Cloud Deploy 发布 release-0001。
# 创建推出项目/生产项目/位置/生产区域/交付管道/交付管道 ID/发布/发布 ID/推出/推出 ID

在这种情况下,以下命令行标志用于向自定义部署程序提供部署所需的参数:

  • *— source*:此标志指示 gcloud 在哪里查找相对于工作目录的配置文件。
  • *— deploy-parameters*:此标志用于为自定义部署程序提供执行该操作所需的其他参数。在本例中, customTarget/vertexAIModel表示要部署的模型的完整资源名称。

关于其余参数,–delivery-pipeline*是将在其中创建发布的交付管道的名称。管道的项目和区域分别由–project*–region指定。**

该命令会自动启动发布。以下是 Cloud Deploy UI 中正在运行的发布流程。

img

图 4—Cloud Deploy 发布

该过程将初始模型版本部署到目标端点,如下所示。

img

图 5 — Vertex AI Endpoint 视图

模型发布需要一些时间才能完成。要获取有关发布的信息(例如发布 ID),您可以使用以下gcloud命令。

gcloud deploy 发布描述 $RELEASE_ID --delivery-pipeline=$DELIVERY_PIPELINE --project=$PROJECT_ID --region=$REGION$RELEASE_ID --delivery-pipeline= $DELIVERY_PIPELINE --project= $PROJECT_ID --region= $REGION 

#condition: 
#... 
#customTargetTypeSnapshots: 
#... 
#deliveryPipelineSnapshot: 
#... 
#deployParameters: 
# customTarget/vertexAIModel: 
#... 
#targetArtifacts: 
#... 
#targetRenders: 
#... 
#targetSnapshots: 
#...

使用推出 ID,您可以利用以下 CLI 命令来监控推出的状态。

导出ROLLOUT_ID = 'release-0001-to-prod-endpoint-0001'

 gcloud deploy rollouts 描述$ROLLOUT_ID --release= $RELEASE_ID   --delivery-pipeline= $DELIVERY_PIPELINE --project= $PROJECT_ID --region= $REGION 

# renderState: SUCCEEDED

部署完成后,您可以使用gcloud检查已部署的模型和端点的流量分割。

gcloud ai 端点描述$ENDPOINT_ID --region $REGION --project $PROJECT_ID 

# 使用端点 [https://xx-aiplatform.googleapis.com/] 
# deployedModels: 
#dedicatedResources: 
#machineSpec: 
#machineType: n1-standard-2 
#maxReplicaCount: 9 
#minReplicaCount: 3 
#displayName:model_to_deploy 
#id:'166...' 
#模型:projects/685.../locations/us-central1/models/681... 
#modelVersionId:'1' 
#displayName:target_endpoint 
#trafficSplit: 
#'166...': 100

通过 Vertex AI Endpoint 视图也可以实现同样的效果:

img

图 6—Vertex AI 部署模型

此外,由于自定义操作用于修改模型别名,因此查询部署使您能够监视部署后的操作。

gcloud  deploy  rollouts  describe  $ROLLOUT_ID  --release=$RELEASE_ID   --delivery-pipeline=$DELIVERY_PIPELINE  --project=$PROJECT_ID  --region=$REGION--format  "(phases[0].deploymentJobs.postdeployJob)" 

# phases: 
# - deployJobs: 
# postdeployJob: 
# id: postdeploy 
# jobRun: 
# ... 
# postdeployJob: 
# action: 
# - add-aliases 
# state: SUCCEEDED

成功完成部署后作业后,您可以检查已部署的模型及其相关别名。具体来说,应分配别名“prod”和“champion”。这些别名在管理模型的交付过程中起着至关重要的作用。

gcloud ai 模型描述$model_id --region $REGION --project $PROJECT_ID --format "(versionAliases)" 

# 使用端点 [https://xxx-aiplatform.googleapis.com/] 
#versionAliases: 
#- default 
#- prod 
#- champion

结论

如果您可以使用 Cloud Deploy 在 Vertex AI 上开始简化的部署之旅,为什么要满足于自定义 ML 部署流程呢?这篇博文介绍了 Cloud Deploy 如何让您轻松地在 Vertex AI 上部署自定义模型。

借助 Cloud Deploy,您可以通过消除手动流程无缝优化 ML 模型的交付,从而提高效率。此外,Cloud Deploy 中的 Vertex AI 自定义目标提供了与 Vertex AI 的可靠集成,可将模型部署到您的 ML 环境中。

总而言之,Cloud Deploy 通过其持续交付功能(例如批准、升级和回滚)保证了简化和规范的部署流程。通过利用这些功能,您可以将 MLOps 功能提升到新的高度。

下一步是什么

想要详细了解 Cloud Deploy Vertex AI Custom Target 以及如何使用它实现持续部署吗?请查看以下资源:

文档

Github 示例

oy/docs/custom-targets)

Github 示例

本文仅关注模型交付。它不涵盖机器学习 (ML) 管道的交付。我鼓励您研究在 Vertex AI Pipelines 上构建用于交付 ML 管道的自定义目标。如果您决定实施它,请告诉我 😉
博客原文:https://dz.closeai.cc/forum.php?mod=viewthread&tid=153

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值