在 ZenML 中使用 Google Cloud Vertex AI Experiment Tracker:配置、认证与实验追踪实战指南

在 ZenML 中使用 Google Cloud Vertex AI Experiment Tracker:配置、认证与实验追踪实战指南 在 ZenML 中使用 Google Cloud Vertex AI Experiment Tracker配置、认证与实验追踪实战指南【免费下载链接】zenmlZenML : One AI Platform from Pipelines to Agents. https://zenml.io.项目地址: https://gitcode.com/GitHub_Trending/ze/zenmlVertex AI Experiment Tracker 是 ZenML GCP 集成提供的 Experiment Tracker 组件 flavorflavorvertex它基于 Google Cloud 托管的 Vertex AI Experiments 服务在每次 pipeline step 运行时把模型、参数、指标等实验信息写入 Vertex AI 并在其 UI 中可视化。读完本文你将掌握如何安装集成并注册/连接该 tracker、四种认证与最小权限配置方式、如何在 step 中用aiplatform的 logging/autologging 与 TensorBoard 上传能力记录实验以及如何通过 run metadata 与 step settings 精确控制实验与 TensorBoard 实例。何时应该使用 Vertex AI Experiment TrackerVertex AI Experiment Tracker 适合以下场景你的项目已经在用 Vertex AI 追踪实验希望在引入 ZenML 的 MLOps 工作流时继续沿用同一套实验追踪体系你需要一种更直观、可视化的方式来浏览 ZenML pipeline run 产生的结果模型、指标、数据集等你的机器学习工作流构建在 Google Cloud 生态中需要一个与 Cloud Storage、Vertex AI Pipelines 等其他 GCP 服务深度集成的托管式实验追踪方案。反之如果你从未接触过 Vertex AI或者没有使用 GCP / 使用了其他云厂商建议考虑其他 Experiment Tracker flavor如 MLflow、Neptune、WB 等选用自己更熟悉的追踪工具。从源码结构看GCP 集成还同时提供了vertexflavor 的 VertexOrchestrator 和 VertexStepOperator以及gcpflavor 的 Artifact Store、Image Builder 和 Deployer见 GcpIntegration.flavors()。因此 Vertex AI Experiment Tracker 非常适合与同生态的其他 GCP 栈组件组合成一套完整栈。安装与注册基本配置选项Vertex AI Experiment Tracker 的 flavor 由 GCP ZenML 集成提供先在本机安装集成zenml integration install gcp -y注册 tracker 时可配置以下选项配置项是否必填说明project可选GCP 项目名。为None时从环境推断见下文认证逻辑location可选创建 experiment 的 GCP region默认us-central1staging_bucket可选暂存工件的默认 bucket格式为gs://...service_account_path可选用于与 Vertex AI Experiment Tracker 交互的服务账号 JSON 凭据文件路径详见后文认证方法在 VertexExperimentTrackerConfig 的源码中还可以看到更多进阶配置项networkVPC 网络、encryption_spec_key_nameCMEK 加密密钥SecretField 类型、api_endpoint/api_key/api_transport/request_metadata底层 Vertex AI API 访问控制。这些配置最终会原样透传给aiplatform.init(...)见 vertex_experiment_tracker.py。使用 project、location 与 staging_bucket 注册并加入栈# 注册 Vertex AI Experiment Tracker zenml experiment-tracker register vertex_experiment_tracker \ --flavorvertex \ --projectGCP_PROJECT_ID \ --locationGCP_LOCATION \ --staging_bucketgs://GCS_BUCKET-NAME # 注册并设置包含新 experiment tracker 的栈 zenml stack register custom_stack -e vertex_experiment_tracker ... --set认证方法在 pipeline 中使用 Vertex AI Experiment Tracker 必须完成 GCP 认证。快速本地起步可用隐式认证但推荐通过 ZenML 的GCP Service Connector认证此外还支持通过 ZenML Secret 引用服务账号密钥。无论选择哪种认证方式都必须按最小权限原则为账号授予使用 Vertex AI Experiment Tracking 所需的权限推荐做法项目级roles/aiplatform.user角色允许在 Vertex AI 中创建、管理和追踪 experimentsroles/storage.objectAdmin角色限定作用域到具体 GCS bucket而非项目级用于向这些 bucket 读写模型、数据集等实验工件。替代做法自定义最小权限角色aiplatform.experiments.create/get/list/updatestorage.objects.create/get/liststorage.buckets.get方式一隐式认证Implicit Authentication该方式假设你已在本机用gcloudCLI 完成 GCP 认证例如运行过gcloud auth login。适合快速本地验证但由于不可移植不适合团队协作或生产环境。zenml experiment-tracker register EXPERIMENT_TRACKER_NAME \ --flavorvertex \ --projectGCP_PROJECT_ID \ --locationGCP_LOCATION \ --staging_bucketgs://GCS_BUCKET-NAME zenml stack register custom_stack -e vertex_experiment_tracker ... --set方式二GCP Service Connector推荐推荐通过 GCP Service Connector 认证以获得自动配置、长时凭据安全实践以及在多个栈组件间复用同一凭据等能力。若尚未配置可用交互式命令注册zenml service-connector register --type gcp -i之后注册 tracker 并连接 connectorzenml experiment-tracker register EXPERIMENT_TRACKER_NAME \ --flavorvertex \ --projectGCP_PROJECT_ID \ --locationGCP_LOCATION \ --staging_bucketgs://GCS_BUCKET-NAME zenml experiment-tracker connect EXPERIMENT_TRACKER_NAME --connector CONNECTOR_NAME zenml stack register custom_stack -e vertex_experiment_tracker ... --set源码侧flavor 通过ServiceConnectorRequirements(resource_typeGCP_RESOURCE_TYPE)声明了兼容 connector 的资源类型要求见 vertex_experiment_tracker_flavor.py用于在 CLI/Dashboard 中过滤出可用的 GCP connector。实际运行时GoogleCredentialsMixin._get_authentication() 会优先调用已连接 connector 的connect()方法获取google.auth.credentials.Credentials与项目 ID若 connector 凭据过期会自动刷新。方式三GCP 凭据服务账号密钥 ZenML Secret注册 tracker 时可生成 GCP 服务账号密钥存入 ZenML Secret 后在 tracker 配置中引用。相比隐式认证该方式的优势无需在宿主机安装和配置 GCP CLI无需为 orchestrator、step operator、model deployer 等其他栈组件通过服务账号与 Workload Identity 打通对 experiment tracker 的访问可以将 Vertex AI Experiment Tracker 与非 GCP 上的其他栈组件组合使用。操作步骤创建 user-managed GCP 服务账号 → 创建服务账号密钥 → 将密钥文件保存到本地 → 注册 ZenML Secret 并在配置中引用zenml experiment-tracker register EXPERIMENT_TRACKER_NAME \ --flavorvertex \ --projectGCP_PROJECT_ID \ --locationGCP_LOCATION \ --staging_bucketgs://GCS_BUCKET-NAME \ --service_account_pathpath/to/service_account_key.json zenml experiment-tracker connect EXPERIMENT_TRACKER_NAME --connector CONNECTOR_NAME从源码看service_account_path由 GoogleCredentialsConfigMixin 提供当未连接 connector 时若配置了service_account_path则用load_credentials_from_file从该 JSON 文件加载凭据否则回退到 Application Default Credentialsgoogle.auth.default()若配置了project且与认证项目不一致会打印告警日志并以配置的project为准。在 pipeline step 中使用实验追踪在活跃栈启用 Vertex AI Experiment Tracker 后用step装饰器指定experiment_tracker即可像平时一样使用 Vertex AI 的 logging 或 auto-logging 能力记录实验。示例 1用内置方法记录指标下面的示例演示如何用 Keras callback 中的aiplatform.log_time_series_metrics记录时间序列指标并用aiplatform.log_metrics/aiplatform.log_params记录具体指标和实验参数。记录结果可在 Vertex AI Experiment Tracker UI 及集成的 TensorBoard 实例中查看。注意使用 autologging 功能需安装带 Autologging 扩展的google-cloud-aiplatformpip install google-cloud-aiplatform[autologging]from google.cloud import aiplatform class VertexAICallback(tf.keras.callbacks.Callback): def on_epoch_end(self, epoch, logsNone): logs logs or {} metrics {key: value for key, value in logs.items() if isinstance(value, (int, float))} aiplatform.log_time_series_metrics(metricsmetrics, stepepoch) step(experiment_trackerVERTEXAI_TRACKER_STACK_COMPONENT_NAME) def train_model( config: TrainerConfig, x_train: np.ndarray, y_train: np.ndarray, x_val: np.ndarray, y_val: np.ndarray, ): aiplatform.autolog() ... # 使用自定义 callback 将指标记录到 experiment tracker model.fit( x_train, y_train, validation_data(x_test, y_test), epochsconfig.epochs, batch_sizeconfig.batch_size, callbacks[VertexAICallback()] ) ... # 记录具体指标和参数 aiplatform.log_metrics(...) aiplatform.log_params(...)示例 2上传 TensorBoard 日志如果项目已在用 TensorBoard可以用集成的 TensorBoard 实例直接上传训练日志以利用其细粒度可视化。通过aiplatform.start_upload_tb_log开启上传、aiplatform.end_upload_tb_log结束上传同时也可直接记录指标和参数。注意使用 TensorBoard 日志功能需安装带 TensorBoard 扩展的google-cloud-aiplatformpip install google-cloud-aiplatform[tensorboard]from google.cloud import aiplatform step(experiment_trackerVERTEXAI_TRACKER_STACK_COMPONENT_NAME) def train_model( config: TrainerConfig, gcs_path: str, x_train: np.ndarray, y_train: np.ndarray, x_val: np.ndarray, y_val: np.ndarray, ): # 获取当前 experiment 与 run 名称 experiment_tracker Client().active_stack.experiment_tracker experiment_name experiment_tracker.experiment_name experiment_run_name experiment_tracker.run_name # 定义 TensorBoard callback日志写入 gcs_path tensorboard_callback tf.keras.callbacks.TensorBoard( log_dirgcs_path, histogram_freq1 ) # 开始上传 TensorBoard 日志 aiplatform.start_upload_tb_log( tensorboard_experiment_nameexperiment_name, logdirgcs_path, run_name_prefixf{experiment_run_name}_, ) model.fit( x_train, y_train, validation_data(x_test, y_test), epochsconfig.epochs, batch_sizeconfig.batch_size, ) ... # 结束上传 TensorBoard 日志 aiplatform.end_upload_tb_log() aiplatform.log_metrics(...) aiplatform.log_params(...)除了硬编码 tracker 名称还可以通过 ZenMLClient动态使用活跃栈中的 experiment trackerfrom zenml.client import Client experiment_tracker Client().active_stack.experiment_tracker step(experiment_trackerexperiment_tracker.name) def tf_trainer(...): ...底层生命周期tracker 如何驱动 Vertex AI run理解上述示例背后发生了什么有助于排查问题。从 VertexExperimentTracker 的实现可以看到完整生命周期prepare_step_run()在 step 执行前调用_initialize_vertex()依次完成aiplatform.init(...)传入 project、location、experiment、staging_bucket、credentials 以及 network / encryption_spec_key_name / api_endpoint 等透传参数和aiplatform.start_run(runrun_name, resumeTrue)若 run 不存在exceptions.NotFound则以resumeFalse重新启动experiment 与 run 名称都经过_format_name()规范化小写、非[a-z0-9-]字符替换为-、截断到 128 字符、去除尾部-见 vertex_experiment_tracker.py未在 settings 中指定 experiment 时默认使用 pipeline 名info.pipeline.namecleanup_step_run()step 结束后调用aiplatform.end_run(state...)失败时标记FAILED成功时标记COMPLETEget_step_run_metadata()把 experiment dashboard URLMETADATA_EXPERIMENT_TRACKER_URL、TensorBoard 资源名和 Vertex run 名写入 step run metadata。集成测试 test_vertex_experiment_tracker.py 验证了名称规范化规则如My Experiment Name→my-experiment-name、Name-With-Dashes---→name-with-dashes、140 个字符被截断为 128 字符并保证格式化结果始终匹配 Vertex AI 实验名校验正则^[a-z0-9][a-z0-9-]{0,127}$该正则同时定义在 flavor 的_validate_experiment校验器中见 vertex_experiment_tracker_flavor.py。测试还验证了该 tracker 可与本地 orchestrator artifact store 组合成合法栈。从 run metadata 获取 Experiment Tracker UI 链接你可以通过使用 experiment tracker 的 step 的 run metadata 找到某次 ZenML run 对应的 Vertex AI experiment URLfrom zenml.client import Client client Client() last_run client.get_pipeline(PIPELINE_NAME).last_run trainer_step last_run.steps.get(STEP_NAME) tracking_url trainer_step.run_metadata[experiment_tracker_url].value print(tracking_url)该 URL 即对应实验在 Vertex AI Experiment Tracker 中的地址。在源码中experiment_tracker_url正是get_step_run_metadata()返回的METADATA_EXPERIMENT_TRACKER_URL: Uri(dashboard_url)见 vertex_experiment_tracker.pydashboard_url来自aiplatform.Experiment(experiment_name...).dashboard_url。下面是 Vertex AI Experiment Tracker UI 与集成的 TensorBoard 实例界面示例。进阶配置指定实验名与 TensorBoard 实例如需对 tracker 做更细粒度的控制可以在 step 的settings中传入VertexExperimentTrackerSettings指定 experiment 名称或选择已创建的 TensorBoard 实例。注意默认情况下若未显式指定Vertex AI 会使用你项目中的默认 TensorBoard 实例。import mlflow from zenml.integrations.gcp.flavors.vertex_experiment_tracker_flavor import VertexExperimentTrackerSettings vertexai_settings VertexExperimentTrackerSettings( experimentYOUR_EXPERIMENT_NAME, experiment_tensorboardTENSORBOARD_RESOURCE_NAME ) step( experiment_trackerVERTEXAI_TRACKER_STACK_COMPONENT_NAME, settings{experiment_tracker: vertexai_settings}, ) def step_one( data: np.ndarray, ) - np.ndarray: ...从 VertexExperimentTrackerSettings 的源码看experiment可选字符串指定 Vertex AI experiment 名称未设置时回退到 pipeline 名。该值必须匹配^[a-z0-9][a-z0-9-]{0,127}$否则注册阶段即抛出ValueErrorexperiment_tensorboard可选类型为Union[str, bool]可传 TensorBoard 资源名称该值会在_initialize_vertex()中同时传给aiplatform.init(experiment_tensorboard...)和aiplatform.start_run(tensorboard...)即决定实验对应的 TensorBoard 实例。settings 会通过 step 的settings{experiment_tracker: vertexai_settings}注入并在prepare_step_run的self.get_settings(info)中被读取。关于如何在 ZenML 中指定 settings可参考 step 与 pipeline 配置文档 中的相关章节。小结ZenML 的 Vertex AI Experiment Tracker 把 Google Cloud 托管实验追踪能力无缝接入 ZenML pipeline通过zenml integration install gcp -y安装、--flavorvertex注册配合隐式认证 / GCP Service Connector / 服务账号密钥三种认证方式与最小权限 IAM 配置在 step 中启用step(experiment_tracker...)后即可用aiplatform的 logging、autologging 与 TensorBoard 上传能力记录参数、指标与训练日志并通过 run metadata 与VertexExperimentTrackerSettings精确掌控实验与可视化入口。无论你是从既有 Vertex AI 项目迁移到 ZenML还是在 GCP 生态内构建生产级 ML 工作流这套组合都能让实验 → 生产的过渡保持一致的可观测性。【免费下载链接】zenmlZenML : One AI Platform from Pipelines to Agents. https://zenml.io.项目地址: https://gitcode.com/GitHub_Trending/ze/zenml创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考