ZenML项目教程:如何查询和分析历史管道运行记录

ZenML项目教程:如何查询和分析历史管道运行记录

zenml ZenML 🙏: Build portable, production-ready MLOps pipelines. https://zenml.io. zenml 项目地址: https://gitcode.com/gh_mirrors/ze/zenml

前言

在机器学习工作流中,我们经常需要回溯历史运行记录,比如:

  • 查找昨天训练的模型存放在哪里
  • 比较不同参数配置下的模型性能
  • 复用某个中间处理结果

本文将详细介绍如何使用ZenML项目提供的功能来查询和分析历史管道运行记录,包括完整的对象层级访问方法和实用技巧。

核心概念解析

在深入操作之前,我们需要理解ZenML中的几个核心对象层级关系:

管道(Pipeline) → 运行(Run) → 步骤(Step) → 产物(Artifact)

这种层级关系体现了:

  • 一个管道可以被多次执行,产生多个运行记录
  • 每个运行包含多个步骤
  • 每个步骤会产生一个或多个数据产物

环境准备

开始本教程前,请确保:

  1. 已安装并配置好ZenML环境
  2. 至少运行过一个完整的管道
  3. 了解ZenML基础概念(管道、步骤等)

详细操作指南

1. 查询管道列表

当需要查找特定管道时,可以通过以下方式:

Python方式:

from zenml.client import Client

# 获取所有管道列表
pipelines = Client().list_pipelines()

# 打印管道基本信息
for pipeline in pipelines:
    print(f"管道名称: {pipeline.name}")
    print(f"创建时间: {pipeline.created}")
    print("-" * 40)

命令行方式:

zenml pipeline list

2. 获取特定管道的运行记录

获取到管道后,可以查询其历史运行记录:

# 获取特定管道
pipeline = Client().get_pipeline("iris_training")

# 获取该管道的所有运行记录(按时间倒序)
runs = pipeline.runs

# 获取最近一次运行
latest_run = pipeline.last_run

# 获取最近一次成功运行
last_successful_run = pipeline.last_successful_run

3. 分析运行详情

每个运行记录包含丰富的信息:

# 运行状态(初始化/运行中/完成/失败/缓存)
status = run.status

# 运行配置参数
config = run.config

# 组件特定元数据(如Orchestrator的UI地址)
metadata = run.run_metadata
if "orchestrator_url" in metadata:
    print(f"编排器UI地址: {metadata['orchestrator_url'].value}")

4. 深入步骤分析

可以进一步查看运行中的各个步骤:

# 获取所有步骤
steps = run.steps

# 获取特定步骤
train_step = run.steps["trainer_step"]

# 查看步骤信息
print(f"步骤状态: {train_step.status}")
print(f"开始时间: {train_step.start_time}")
print(f"结束时间: {train_step.end_time}")
print(f"使用参数: {train_step.config.parameters}")

5. 访问数据产物

步骤产生的数据产物是最重要的资产:

# 获取步骤输出
output = train_step.outputs["model"]

# 加载产物到内存
model = output.load()

# 查看产物元数据
print(f"产物类型: {output.type}")
print(f"存储大小: {output.run_metadata['storage_size'].value}")

# 可视化产物(支持Jupyter环境)
output.visualize()

实用技巧

在运行中获取历史信息

可以在当前运行中获取之前运行的信息:

from zenml import get_step_context

@step
def compare_with_previous():
    current_run = get_step_context().pipeline_run
    previous_run = current_run.pipeline.runs[1]  # 索引0是当前运行
    
    # 比较指标
    prev_metrics = previous_run.steps["evaluator"].output.load()
    print(f"上次运行指标: {prev_metrics}")

直接获取产物

如果知道产物ID或名称,可以直接获取:

# 通过名称和版本获取
artifact = Client().get_artifact_version('iris_dataset', 'v1')
data = artifact.load()

# 通过UUID获取
artifact = Client().get_artifact_version('f429f94c-fb15-43b5-961d-dbea287507c5')

完整示例

以下是一个完整的训练管道及查询示例:

from zenml import pipeline, step
from zenml.client import Client
import pandas as pd
from sklearn.svm import SVC

@step
def data_loader() -> pd.DataFrame:
    # 数据加载逻辑
    return data

@step 
def trainer(data: pd.DataFrame) -> SVC:
    # 训练逻辑
    return model

@pipeline
def training_pipeline():
    data = data_loader()
    trainer(data)

if __name__ == "__main__":
    # 执行管道
    training_pipeline()
    
    # 查询运行记录
    pipeline = Client().get_pipeline("training_pipeline")
    last_run = pipeline.last_run
    
    # 获取训练好的模型
    model = last_run.steps["trainer"].output.load()
    print(f"模型参数: {model.get_params()}")

常见问题解决

问题1:找不到运行记录

  • 确认运行ID格式是否正确(通常是管道名-时间戳格式)
  • 检查是否使用了正确的管道名称

问题2:产物加载失败

  • 确认产物是否已成功保存
  • 检查当前环境是否有产物所需的依赖库

问题3:可视化不显示

  • 确保在Jupyter环境中执行visualize()
  • 或通过ZenML仪表板查看可视化结果

总结

通过本教程,您应该已经掌握:

  1. ZenML中管道运行的层级关系
  2. 如何查询历史运行记录
  3. 如何深入分析步骤和产物
  4. 多种实用技巧和问题解决方法

这些技能将帮助您更好地管理和复用机器学习工作流中的各种资产。

zenml ZenML 🙏: Build portable, production-ready MLOps pipelines. https://zenml.io. zenml 项目地址: https://gitcode.com/gh_mirrors/ze/zenml

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戚恬娟Titus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值