云原生AI套件支持通过Kubeflow Pipelines构建和部署基于容器的可移植、可扩展的机器学习工作流。本文介绍如何通过Kubeflow Pipelines创建及查看工作流。
前提条件
已创建Kubernetes集群。本文以包含GPU的Kubernetes集群为例。具体操作,请参见使用Kubernetes默认GPU调度。
集群节点可以访问公网。具体操作,请参见为已有集群开启公网访问能力。
已创建PV和PVC。具体操作,请参见配置NAS共享存储或使用OSS静态存储卷。
已创建Notebook。具体操作,请参见创建并使用Notebook。
背景信息
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。
安装Kubeflow Pipelines。
未安装云原生AI套件:安装云原生AI套件时,工作流需选中Kubeflow Pipelines。具体操作,请参见安装云原生AI套件。
已安装云原生AI套件:
登录容器服务管理控制台,在左侧导航栏单击集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择
。在组件列表的操作列下,升级ack-ai-dashboard和ack-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的存储。
执行以下命令,安装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
使用以下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
可选
同步代码的模式,您可以指定git、rsync。本文使用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
成功运行如图所示。
查看Kubeflow Pipelines。
在AI开发控制台的左侧导航栏中,单击Kubeflow Pipelines。
在左侧导航栏单击Runs,然后单击Active页签,查看运行的Pipelines。
单击目标Run,查看运行详情。