云原生AI套件支持通过Kubeflow Pipelines构建和部署基于容器的可移植、可扩展的机器学习工作流。本文介绍如何通过Kubeflow Pipelines创建及查看工作流。

前提条件

背景信息

Kubeflow Pipelines是一个用于构建端到端机器学习工作流的平台,主要由以下三个组件构成:
  • Kubeflow Pipelines UI:用于Experiments,Pipelines和Runs的创建和查看。
  • Kubeflow Pipelines SDK:用于定义和构建Components和Pipelines。
  • Workflow Engine:工作流的执行引擎。
通过Kubeflow Pipelines可以实现如下功能:
  • 借助Pipelines的Workflow能力,构建符合您业务场景的机器学习CI/CD流水线,加速算法的商业化落地。
  • 借助Pipelines的Experiments能力,对比和分析不同参数或数据下Pipelines的运行情况。
  • 借助Pipelines中的Tracking能力,记录每一次上线模型的Data、Code、Config、Input和Output等信息。

关于Kubeflow Pipelines的更多信息,请参见Kubeflow Pipelines

准备工作

本文示例从Git URL下载源代码,且下载的数据集放在共享存储系统(基于NAS的PV和PVC)中。示例假设您已经获得一个名为fashion-pvc的PVC实例(共享存储),且已经将代码传递到Git中,代码内容请参见mnist.pydownload_mnist_dataset.sh

操作步骤

本文以使用KFP SDK和KFP Arena SDK构建一个机器学习工作流为例,安装Python SDK、编写并提交工作流均在Notebook环境下进行。关于KFP SDK的更多信息,请参见Introduction to the Pipelines SDK

  1. 安装Kubeflow Pipelines。
    • 未安装云原生AI套件:安装云原生AI套件时,工作流需选中Kubeflow Pipelines。具体操作,请参见安装云原生AI套件
    • 已安装云原生AI套件:
      1. 登录容器服务管理控制台,在左侧导航栏中单击集群
      2. 集群列表页面中,单击目标集群名称,然后在左侧导航栏中,选择应用 > 云原生AI套件(公测)
      3. 在组件列表的操作列下,升级ack-ai-dashboardack-ai-dev-console,并部署ack-ai-pipeline
        组件说明
        ack-ai-dashboard需升级到1.0.7及以上版本。
        ack-ai-dev-console需升级到1.013及以上版本。
        ack-ai-pipeline部署ack-ai-pipeline时,控制台会判断系统中是否存在kubeai-oss Secret,若存在则使用阿里云OSS作为Artifact的存储,若不存在则使用集群内置MinIO作为Artifact的存储。
  2. 执行以下命令,安装Python SDK。
    本文需要安装两个Python SDK,包括KFP SDK和KFP Arena SDK。
    • KFP SDK:提供Pipelines编排和提交的能力。
      pip install https://kube-ai-ml-pipeline.oss-cn-beijing.aliyuncs.com/sdk/kfp-1.8.10.2.tar.gz
    • KFP Arena SDK:提供开箱即用的Component。
      pip install https://kube-ai-ml-pipeline.oss-cn-beijing.aliyuncs.com/sdk/kfp-arena-0.1.0.tar.gz
  3. 使用以下Python文件,编写并提交Pipelines工作流。

    Pipelines工作流包含两部分:执行数据下载的操作、根据下载的数据执行模型训练。

    import kfp
    from kfp import compiler
    from arena import standalone_job_op, pytorch_job_op
    
    def mnist_train_pipeline():
        #数据下载OP,将数据下载到PCV中。
        download_op = standalone_job_op(namespace=ns,
                                      name="download-mnist-dataset",
                                      image="busybox:1.35",
                                      working_dir="/root",
                                      sync_mode="git",
                                      data=["fashion-pvc:/mnist_data"],
                                      env=["GIT_SYNC_USERNAME=<GIT_USERNAME>", "GIT_SYNC_PASSWORD=<GIT_PASSWORD>"],,
                                      sync_source='https://codeup.aliyun.com/622f0c211c3bb48e78fc****/mnist-pytorch.git',
                                      command="/root/code/mnist-pytorch/download_mnist_dataset.sh /mnist_data/test_data")
    
        #模型训练OP,从PVC中读取download_op的数据进行训练,并将结果写入到PVC中。
        train_op = pytorch_job_op(namespace=""default-group",
                                annotation="kubai.pipeline:test",
                                name="pytorch-dist-step",
                                gpus=1,
                                workers=2,
                                working_dir="/root",
                                image="ai-studio-registry.cn-beijing.cr.aliyuncs.com/kube-ai/pytorch:1.11.0-cuda11.3-cudnn8-runtime",
                                sync_mode="git",
                                env=["GIT_SYNC_USERNAME=<GIT_USERNAME>", "GIT_SYNC_PASSWORD=<GIT_PASSWORD>"],
                                sync_source='https://codeup.aliyun.com/622f0c211c3bb48e78fc****/mnist-pytorch.git',
                                data=["fashion-pvc:/mnist_data"],
                                logdir="/mnist_data/pytorch_data/logs",
                                command="python /root/code/mnist-pytorch/mnist.py --epochs 10 --backend nccl --dir /mnist_data/pytorch_data/logs --data /mnist_data/test_data")
        train_op.after(download_op)
    
    #创建Client并提交数据。
    client = kfp.Client()
    client.create_run_from_pipeline_func(mnist_train_pipeline,
                                         namespace="default-group",
                                         arguments={})
  4. 查看Kubeflow Pipelines。
    1. 登录AI开发控制台
    2. 在AI开发控制台的左侧导航栏中,单击Kubeflow Pipelines
    3. 在左侧导航栏单击Runs,然后单击Active页签,查看运行的Pipelines。查看运行的Pipeline
    4. 单击目标Run,查看运行详情。目标Run运行详情