ZenML项目实战:如何获取和分析已完成的Pipeline运行数据
zenml 项目地址: https://gitcode.com/gh_mirrors/zen/zenml
前言
在机器学习工作流管理中,Pipeline的运行和监控是至关重要的环节。ZenML作为一个强大的MLOps工具,提供了完善的Pipeline运行数据管理功能。本文将详细介绍如何在ZenML项目中获取和分析已完成的Pipeline运行数据,帮助开发者更好地理解和利用这些信息。
Pipeline运行数据层次结构
在ZenML中,Pipeline运行数据采用层次化结构组织,理解这一结构是有效获取数据的基础:
Pipeline → Runs → Steps → Artifacts
这种1对多的层级关系意味着:
- 一个Pipeline可以有多次运行(Runs)
- 每次运行包含多个步骤(Steps)
- 每个步骤会产生多个工件(Artifacts)
获取Pipeline信息
通过Client获取特定Pipeline
from zenml.client import Client
# 获取名为"first_pipeline"的Pipeline
pipeline_model = Client().get_pipeline("first_pipeline")
列出所有可用Pipeline
当不确定需要哪个Pipeline时,可以先列出所有已注册的Pipeline:
# 使用Python代码列出
pipelines = Client().list_pipelines()
或者使用CLI命令:
zenml pipeline list
获取Run信息
每次Pipeline执行都会产生一个Run记录,包含该次执行的详细信息。
获取Pipeline的所有Runs
# 获取某个Pipeline的所有运行记录
runs = pipeline_model.runs # 按时间倒序排列
获取最新Run
last_run = pipeline_model.last_run # 或 pipeline_model.runs[0]
last_successful_run = pipeline_model.last_successful_run # 最近成功的运行
直接获取特定Run
pipeline_run = Client().get_pipeline_run("first_pipeline-2023_06_20-16_20_13_274466")
Run的关键信息
每个Run对象包含丰富的信息:
status = run.status # 运行状态:初始化/失败/完成/运行中/缓存
pipeline_config = run.config # 完整配置信息
pipeline_settings = run.config.settings # Pipeline级别设置
run_metadata = run.run_metadata # 组件特定元数据
获取Step信息
Pipeline中的每个步骤都可以单独检查:
# 获取Run中的所有步骤
steps = run.steps
# 通过调用ID获取特定步骤
step = run.steps["first_step"]
Step的关键信息
step_params = step.config.parameters # 步骤参数
step_settings = step.config.settings # 步骤级别设置
step_metadata = step.run_metadata # 步骤特定元数据
获取Artifact信息
Artifact是步骤的输入输出数据,是Pipeline运行的核心产物。
获取步骤输出Artifact
# 通过名称获取输出
output = step.outputs["output_name"]
# 单一输出可直接使用.output属性
output = step.output
# 加载Artifact到内存
my_model = output.load()
直接获取Artifact
# 获取Artifact及其所有版本
artifact = Client().get_artifact('iris_dataset')
# 获取特定版本
output = Client().get_artifact_version('iris_dataset', '2022')
Artifact的关键信息
# 元数据访问
output_metadata = output.run_metadata
storage_size = output_metadata["storage_size"].value
# 可视化展示
output.visualize() # 在Jupyter中显示
运行期间获取信息
在Pipeline执行过程中,也可以获取历史运行信息:
from zenml import get_step_context
@step
def my_step():
# 获取当前运行上下文
current_run = get_step_context().pipeline_run
# 获取同一Pipeline的上次运行
previous_run = current_run.pipeline.runs[1]
完整示例
以下是一个完整的代码示例,展示如何获取训练步骤产生的模型:
from zenml.client import Client
# 运行Pipeline并获取Run对象
last_run = training_pipeline()
print(last_run.id)
# 获取训练步骤和模型
trainer_step = last_run.steps["svc_trainer"]
model = trainer_step.outputs["trained_model"].load()
总结
通过ZenML提供的丰富API,我们可以方便地获取和分析Pipeline运行的各个层级数据。这种能力对于:
- 模型和数据集版本管理
- 运行结果复现和调试
- 工作流监控和优化
- 自动化决策和流程控制
都具有重要价值。掌握这些数据获取技巧,将极大提升您的MLOps实践能力。
zenml 项目地址: https://gitcode.com/gh_mirrors/zen/zenml
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考