像Google一样构建机器学习系统3 - 利用MPIJob运行ResNet101

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 从上篇文章中,我们可以看到如何通过Kubeflow Pipeline运行单节点任务机器学习工作流,在本文中,我们会介绍如何使用Pipeline运行分布式MPI任务,该MPI任务运行模型ResNet101的测试。

本系列将利用阿里云容器服务,帮助您上手Kubeflow Pipelines.

上篇文章中,我们可以看到如何通过Kubeflow Pipeline运行单节点任务机器学习工作流,在本文中,我们会介绍如何使用Pipeline运行分布式MPI任务,该MPI任务运行模型ResNet101的测试。

开发MPIRun Pipeline

由于Kubeflow Pipelines提供的例子多数都是单机任务,那么如何利用Pipelines运行分布式训练?阿里云容器服务团队提供了利用MPIJob训练ResNet101模型的例子,方便您在阿里云上使用和学习Kubeflow Pipelines,并且训练支持分布式的allreduce模型训练。

在Kubeflow Pipelines中可以用Python代码描述了这样一个流程, 完整代码可以查看mpi_run.py。我们在这个例子中使用了arena_op这是对于Kubeflow默认的container_op封装,能够实现对于分布式训练MPI和PS模式的无缝衔接,另外也支持使用GPU和RDMA等异构设备和分布式存储的无缝接入,同时也方便从git源同步代码。是一个比较实用的工具API。而arena_op是基于开源项目Arena

  env = ['NCCL_DEBUG=INFO','GIT_SYNC_BRANCH={0}'.format(git_sync_branch)]

  train=arena.mpi_job_op(
    name="all-reduce",
    image=image,
    env=env,
    data=[data],
    workers=workers,
    sync_source=sync_source,
    gpus=gpus,
    cpu_limit=cpu_limit,
    memory_limit=memory_limit,
    metrics=[metric],
    command="""
    mpirun python code/benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py --model resnet101 \
    --batch_size {0}  --variable_update horovod --optimizer {1}\
    --summary_verbosity=3 --save_summaries_steps=10
    """.format(batch_size, optimizer)
  )

arena.mpi_job_op函数的参数如下:

name,image, data和command之外,在模型训练步骤中,还需要指定:

  • name: 步骤名称
  • image: 需要使用的容器镜像
  • workers: 参与运算的worker数量
  • data: 要使用的数据以及其对应到容器内部的挂载目录, 这里的data是一个数组类型, 可以设置为data=["user-susan:/training"],表示可以挂载到多个数据。
  • env: 系统环境变量,这里的env也是数组类型,可以支持多个env; 如果不需要指定环境变量可以把env设置为[]
  • gpu: 默认为0,就是不使用GPU;如果为大于0的整数值,就代表该步骤需要这个数量的GPU数。
  • cpu_limit: cpu的资源上限
  • memory_limit: 内存的资源上限
  • metrics: 同样是从可重现和可比较的实验目的出发,用户可以将需要的一系列指标导出,并且通过Pipelines UI上直观的显示和比较。具体使用方法分为两步,1.在调用API时以数组的形式指定要收集指标的metrics name和指标的展示格式PERCENTAGE或者是RAW,比如metrics=["Train-accuracy:PERCENTAGE"]。2.由于Pipelines默认会从stdout日志中收集指标,你需要在真正运行的模型代码中输出{metrics name}={value}或者{metrics name}:{value}, 可以参考具体样例代码
  • command: 就是要提交的mpirun命令

arena中mpi_run方法的调用, 还比较直观,下面就可以定义一个Python方法。

@dsl.pipeline(
  name='pipeline to run mpi job',
  description='shows how to run mpi job.'
)
def mpirun_pipeline(image="uber/horovod:0.13.11-tf1.10.0-torch0.4.0-py3.5",
               batch_size="64",
               optimizer='momentum',
               sync_source='https://github.com/tensorflow/benchmarks.git',
               git_sync_branch='cnn_tf_v1.9_compatible',
               data='user-susan:/training',
               gpus=1,
               workers=1,
               cpu_limit='2',
               metric='images/sec',
               memory_limit='10Gi'):

@dsl.pipeline是表示工作流的装饰器,这个装饰器中需要定义两个属性,分别是namedescription

入口方法mpirun_pipeline中定义了一系列参数,由于数量较多就不在这里一一列举了。这里的参数的值实际上是 dsl.PipelineParam类型,定义成dsl.PipelineParam的目的在于可以通过Kubeflow Pipelines的原生UI可以将其转换成输入表单,表单的关键字是参数名称,而默认值为参数的值. 值得注意的是,这里的dsl.PipelineParam对应值的实际上只能是字符串和数字型;而数组和map,以及自定义类型都是无法通过转型进行变换的。

而实际上,这些参数都可以在用户提交工作流时进行覆盖,以下就是提交工作流对应的UI:

5_input

提交Pipeline

整个过程包括:

1.将Python代码编译成Pipelines执行引擎(Argo)识别的DAG文件的压缩包

准备一个python3的环境,并且安装Kubeflow Pipelines SDK

# docker run -itd --name py3 python:3  sleep infinity
# docker exec -it py3 bash

在Python3的环境下执行如下命令

# pip3 install http://kubeflow.oss-cn-beijing.aliyuncs.com/kfp/0.1.16/kfp.tar.gz --upgrade
# pip3 install http://kubeflow.oss-cn-beijing.aliyuncs.com/kfp-arena/kfp-arena-0.6.tar.gz --upgrade

# curl -O https://raw.githubusercontent.com/cheyang/pipelines/add_mpijob/samples/arena-samples/mpi/mpi_run.py
# dsl-compile --py mpi_run.py --output mpi_run.py.tar.gz

# ls -ltr | grep mpi_run
mpi_run.py.tar.gz

# exit

将该文件从容器中拷贝出来

# docker cp py3:/mpi_run.py.tar.gz .

2.将该压缩包上传到Kubeflow Pipeline的web控制台,并且将名字改为mpi_run

5_upload_pipeline

运行试验

1.在pipeline页面,点击mpi_run链接

2.点击右上角按钮Create run

3.在Start a new run的界面上填写Run name,同时选择已有或者创建相关的实验。同时按照实际情况设置运行参数,也就是Run parameters。注意,如果您没有配置数据相关的配置,请将data中的参数清空即可。点击启动即可。

5_param

查看运行结果

登录到Kubeflow Pipelines的UI: [https://{pipeline地址}/pipeline/#/experiments],查看实验结果:

5_param

点击具体Run,选择all-reduce, 并点击logs查看日志

5_logs

总结

本文介绍了如何利用Pipeline运行MPIJob,实际上这个例子并不一定严丝合缝的满足使用者的需求:

  1. arena.mpi_job_op是使用MPIJob的API,您可以根据需要自定义调用方式。
  2. def mpirun_pipeline的灵活性更是掌握在用户的手里,如何定义具体Pipeline的输入参数,也是有足够的灵活性。
相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
目录
相关文章
|
4月前
|
机器学习/深度学习 人工智能 Kubernetes
Argo Workflows 加速在 Kubernetes 上构建机器学习 Pipelines
Argo Workflows 是 Kubernetes 上的工作流引擎,支持机器学习、数据处理、基础设施自动化及 CI/CD 等场景。作为 CNCF 毕业项目,其扩展性强、云原生轻量化,受到广泛采用。近期更新包括性能优化、调度策略增强、Python SDK 支持及 AI/大数据任务集成,助力企业高效构建 AI、ML、Data Pipelines。
484 1
|
6月前
|
人工智能 自然语言处理 数据挖掘
云上玩转Qwen3系列之三:PAI-LangStudio x Hologres构建ChatBI数据分析Agent应用
PAI-LangStudio 和 Qwen3 构建基于 MCP 协议的 Hologres ChatBI 智能 Agent 应用,通过将 Agent、MCP Server 等技术和阿里最新的推理模型 Qwen3 编排在一个应用流中,为大模型提供了 MCP+OLAP 的智能数据分析能力,使用自然语言即可实现 OLAP 数据分析的查询效果,减少了幻觉。开发者可以基于该模板进行灵活扩展和二次开发,以满足特定场景的需求。
|
7月前
|
人工智能 算法 网络安全
基于PAI+专属网关+私网连接:构建全链路Deepseek云上私有化部署与模型调用架构
本文介绍了阿里云通过PAI+专属网关+私网连接方案,帮助企业实现DeepSeek-R1模型的私有化部署。方案解决了算力成本高、资源紧张、部署复杂和数据安全等问题,支持全链路零公网暴露及全球低延迟算力网络,最终实现技术可控、成本优化与安全可靠的AI部署路径,满足企业全球化业务需求。
|
5月前
|
机器学习/深度学习 存储 运维
机器学习异常检测实战:用Isolation Forest快速构建无标签异常检测系统
本研究通过实验演示了异常标记如何逐步完善异常检测方案和主要分类模型在欺诈检测中的应用。实验结果表明,Isolation Forest作为一个强大的异常检测模型,无需显式建模正常模式即可有效工作,在处理未见风险事件方面具有显著优势。
421 46
|
10月前
|
人工智能 自然语言处理 安全
通过阿里云Milvus与PAI搭建高效的检索增强对话系统
阿里云向量检索Milvus版是一款全托管的云服务,兼容开源Milvus并支持无缝迁移。它提供大规模AI向量数据的相似性检索服务,具备易用性、可用性、安全性和低成本等优势,适用于多模态搜索、检索增强生成(RAG)、搜索推荐、内容风险识别等场景。用户可通过PAI平台部署RAG系统,创建和配置Milvus实例,并利用Attu工具进行可视化操作,快速开发和部署应用。使用前需确保Milvus实例和PAI在相同地域,并完成相关配置与开通服务。
|
5月前
|
存储 人工智能 运维
企业级MLOps落地:基于PAI-Studio构建自动化模型迭代流水线
本文深入解析MLOps落地的核心挑战与解决方案,涵盖技术断层分析、PAI-Studio平台选型、自动化流水线设计及实战构建,全面提升模型迭代效率与稳定性。
220 6
|
5月前
|
机器学习/深度学习 PyTorch API
昇腾AI4S图机器学习:DGL图构建接口的PyG替换
本文探讨了在图神经网络中将DGL接口替换为PyG实现的方法,重点以RFdiffusion蛋白质设计模型中的SE3Transformer为例。SE3Transformer通过SE(3)等变性提取三维几何特征,其图构建部分依赖DGL接口。文章详细介绍了两个关键函数的替换:`make_full_graph` 和 `make_topk_graph`。前者构建完全连接图,后者生成k近邻图。通过PyG的高效实现(如`knn_graph`),我们简化了图结构创建过程,并调整边特征处理逻辑以兼容不同框架,从而更好地支持昇腾NPU等硬件环境。此方法为跨库迁移提供了实用参考。
|
5月前
|
机器学习/深度学习 数据采集 分布式计算
阿里云PAI AutoML实战:20分钟构建高精度电商销量预测模型
本文介绍了如何利用阿里云 PAI AutoML 平台,在20分钟内构建高精度的电商销量预测模型。内容涵盖项目背景、数据准备与预处理、模型训练与优化、部署应用及常见问题解决方案,助力企业实现数据驱动的精细化运营,提升市场竞争力。
937 0
|
8月前
|
存储 人工智能 自然语言处理
基于QwQ-32B+Hologres+PAI搭建 RAG 检索增强对话系统
本文介绍如何使用PAI-EAS部署基于QwQ大模型的RAG服务,并关联Hologres引擎实例。Hologres与达摩院自研高性能向量计算软件库Proxima深度整合,支持高性能、低延时、简单易用的向量计算能力。通过PAI-EAS,用户可以一键部署集成大语言模型(LLM)和检索增强生成(RAG)技术的对话系统服务,显著缩短部署时间并提升问答质量。具体步骤包括准备Hologres向量检索库、部署RAG服务、通过WebUI页面进行模型推理验证及API调用验证。Hologres支持高性能向量计算,适用于复杂任务的动态决策,帮助克服大模型在领域知识局限、信息更新滞后和误导性输出等方面的挑战。