繁体   English   中英

使用自定义训练容器和 model 服务容器构建 Vertex AI 管道

[英]Constructing a Vertex AI Pipeline with a custom training container and a model serving container

我希望能够使用我制作并保存到我的工件注册表中的训练应用程序容器来训练 model。 我希望能够部署一个 model 和一个 flask 应用程序以及一个可以处理某些逻辑的 /predict 路由——不一定只是预测输入 json。它还需要一个我理解的 /healthz 路由。 所以基本上我想要一个在我制作的 model 训练容器上执行训练工作的管道,并使用我制作的 model 服务容器部署 model 应用程序和 flask 应用程序。 环顾 Overflow,我想知道这个问题的管道是否具有我最终想要的正确布局。 所以,像这样:

import kfp
from kfp.v2 import compiler
from kfp.v2.dsl import component
from kfp.v2.google import experimental
from google.cloud import aiplatform
from google_cloud_pipeline_components import aiplatform as gcc_aip

@kfp.dsl.pipeline(name=pipeline_name, pipeline_root=pipeline_root_path)
def pipeline():
        training_job_run_op = gcc_aip.CustomPythonPackageTrainingJobRunOp(
            project=project_id,
            display_name=training_job_name,
            model_display_name=model_display_name,
            python_package_gcs_uri=python_package_gcs_uri,
            python_module=python_module,
            container_uri=container_uri,
            staging_bucket=staging_bucket,
            model_serving_container_image_uri=model_serving_container_image_uri)

        # Upload model
        model_upload_op = gcc_aip.ModelUploadOp(
            project=project_id,
            display_name=model_display_name,
            artifact_uri=output_dir,
            serving_container_image_uri=model_serving_container_image_uri,
        )
        model_upload_op.after(training_job_run_op)

        # Deploy model
        model_deploy_op = gcc_aip.ModelDeployOp(
            project=project_id,
            model=model_upload_op.outputs["model"],
            endpoint=aiplatform.Endpoint(
                endpoint_name='0000000000').resource_name,
            deployed_model_display_name=model_display_name,
            machine_type="n1-standard-2",
            traffic_percentage=100)

    compiler.Compiler().compile(pipeline_func=pipeline,
                                package_path=pipeline_spec_path)

我希望model_serving_container_image_uriserving_container_image_uri都引用我将要制作的 model 服务容器的 URI。 我已经制作了一个训练容器,用于训练 model 并将saved_model.pb保存到 Google Cloud Storage。 除了拥有一个处理预测和健康检查路由的 flask 应用程序和一个为 flask 应用程序公开端口的 Dockerfile 之外,我还需要做什么来确保 model 服务容器在此管道中工作? 我在代码的哪个位置安装了 GCS 的 model? 在Dockerfile? model 服务容器是如何工作的,以便 go 在管道的构建中一切顺利? 我无法找到任何教程或示例来准确说明我在任何地方尝试做的事情,尽管这看起来很常见。

为此,我尝试使用以下管道:

import kfp
from kfp.v2 import compiler
from kfp.v2.dsl import component
from kfp.v2.google import experimental
from google.cloud import aiplatform
from google_cloud_pipeline_components import aiplatform as gcc_aip

@kfp.dsl.pipeline(name=pipeline_name, pipeline_root=pipeline_root_path)
def pipeline(
        project: str = [redacted project ID],
        display_name: str = "custom-pipe",
        model_display_name: str = "test_model",
        training_container_uri: str = "us-central1-docker.pkg.dev/[redacted project ID]/custom-training-test",
        model_serving_container_image_uri: str = "us-central1-docker.pkg.dev/[redacted project ID]/custom-model-serving-test",
        model_serving_container_predict_route: str = "/predict",
        model_serving_container_health_route: str = "/healthz",
        model_serving_container_ports: str = "8080"
):
        training_job_run_op = gcc_aip.CustomContainerTrainingJobRunOp(
            display_name = display_name,
            container_uri=training_container_uri,
            model_serving_container_image_uri=model_serving_container_image_uri,
            model_serving_container_predict_route = model_serving_container_predict_route,
            model_serving_container_health_route = model_serving_container_health_route,
            model_serving_container_ports = model_serving_container_ports)

        # Upload model
        model_upload_op = gcc_aip.ModelUploadOp(
            project=project,
            display_name=model_display_name,
            serving_container_image_uri=model_serving_container_image_uri,
        )
        model_upload_op.after(training_job_run_op)

        # Deploy model
#        model_deploy_op = gcc_aip.ModelDeployOp(
#            project=project,
#            model=model_upload_op.outputs["model"],
#            endpoint=aiplatform.Endpoint(
#                endpoint_name='0000000000').resource_name,
#            deployed_model_display_name=model_display_name,
#            machine_type="n1-standard-2",
#            traffic_percentage=100)

哪个失败了

google.api_core.exceptions.PermissionDenied: 403 Permission 'aiplatform.trainingPipelines.create' denied on resource '//aiplatform.googleapis.com/projects/u15c36a5b7a72fabfp-tp/locations/us-central1' (or it may not exist).

尽管我的服务帐户具有运行 AI Platform 管道所需的 Viewer 和 Kube.netes Engine Admin 角色。 我的训练容器将我的 model 上传到谷歌云存储,我的 model 服务容器下载它并使用它在/predict服务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM