通过Kubeflow Pipelines创建工作流

云原生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

操作步骤

本文以使用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.5.tar.gz
    • KFP Arena SDK:提供开箱即用的Component。

      pip install https://kube-ai-ml-pipeline.oss-cn-beijing.aliyuncs.com/sdk/kfp-arena-0.1.3.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,将数据下载到PVC中。
        download_op = standalone_job_op(namespace="default-group",
                                      name="download-mnist-dataset",
                                      image="kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/download-mnist-dataset:demo",
                                      working_dir="/root",
                                      data=["training-data:/mnt"], 
                                      command="/root/code/mnist-pytorch/download_mnist_dataset.sh /mnt/pytorch_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=3,
                                working_dir="/root",
                                image="registry.cn-beijing.aliyuncs.com/ai-samples/pytorch-with-tensorboard:1.5.1-cuda10.1-cudnn7-runtime",
                                sync_mode="git",
                                sync_source='https://code.aliyun.com/370272561/mnist-pytorch.git',
                                data=["training-data:/mnt"],
                                logdir="/mnt/pytorch_data/logs",
                                command="python /root/code/mnist-pytorch/mnist.py --epochs 10 --backend nccl --dir /mnt/pytorch_data/logs --data /mnt/pytorch_data/")
        train_op.after(download_op)
    
    #创建Client并提交数据。
    client = kfp.Client()
    client.create_run_from_pipeline_func(mnist_train_pipeline,
                                         namespace="default-group",
                                         arguments={})

    参数解释如下表。

    参数

    是否必选

    解释

    默认值

    name

    必选

    指定提交的作业名字,全局唯一,不能重复。

    working-dir

    可选

    指定当前执行命令所在的目录。

    /root

    gpus

    可选

    指定作业Worker节点需要使用的GPU卡数。

    0

    image

    必选

    指定训练环境的镜像地址。

    sync-mode

    可选

    同步代码的模式,您可以指定gitrsync。本文使用Git模式。

    sync-source

    可选

    同步代码的仓库地址,需要和--sync-mode一起使用,本文示例使用Git模式,该参数可以为任何github项目地址。阿里云code项目地址等支持Git的代码托管地址。项目代码将会被下载到--working-dir下的code/目录中。本文示例即为:/root/code/tensorflow-sample-code

    data

    可选

    挂载共享存储卷PVC到运行环境中。它由两部分组成,通过分号:分割。冒号左侧是您已经准备好的PVC名称。您可以通过arena data list查看当前集群可用的PVC列表;分号右侧是您想将PVC的挂载到运行环境中的路径,也是您训练代码要读取数据的本地路径。这样通过挂载的方式,您的代码就可以访问PVC的数据。

    说明

    执行arena data list查看本文示例当前集群可用的PVC列表。

    NAME           ACCESSMODE     DESCRIPTION  OWNER  AGE
    training-data  ReadWriteMany                      35m

    如果没有可用的PVC,您可创建PVC。具体操作,请参见配置NAS共享存储

    tensorboard

    可选

    为训练任务开启一个TensorBoard服务,用作数据可视化,您可以结合--logdir指定TensorBoard要读取的event路径。不指定该参数,则不开启TensorBoard服务。

    logdir

    可选

    需要结合--tensorboard一起使用,该参数表示TensorBoard需要读取event数据的路径。

    /training_logs

    成功运行如图所示。

    image

  4. 查看Kubeflow Pipelines。

    1. 登录AI开发控制台

    2. 在AI开发控制台的左侧导航栏中,单击Kubeflow Pipelines

    3. 在左侧导航栏单击Runs,然后单击Active页签,查看运行的Pipelines。查看运行的Pipeline

    4. 单击目标Run,查看运行详情。目标Run运行详情