TrainingOperator--PyTorchJob实现机制分析

news2024/11/17 22:26:51

前言

由 Pytorch分布式训练(一)_chenxy02的博客-CSDN博客 可知Pytorch分布式训练实现进程间寻址,主要依靠以下 四个参数:

  • MASTER_ADDR
  • MASTER_PORT
  • WORLD_SIZE
  • RANK

MASTER_PORT和MASTER_ADDR的目的是告诉进程组中负责进程通信协调的核心进程的IP地址和端口。 RANK参数是该进程的id,WORLD_SIZE是说明进程组中进程的个数。
 

从上一篇博客我们可以想到 手工启动分布式训练 有以下缺点:

1、得手工在多个节点上启动多个 python脚本,配置不同的 rank等参数

2、如果是在K8S上起多个 pod 进行分布式训练 ,还得解决IP不确定的问题

3、难以满足用户想在特定情景下动态伸缩节点数的要求

带着这三个问题,我们来解析一下 PyTorchJob (training-operator实现的CRD之一) 的实现机制。

Training-operator 介绍

代码仓库:GitHub - kubeflow/training-operator: Training operators on Kubernetes.

如下,Training-operator 提供各位了 各种 K8S 的 custom resources。 使得在 K8S 上进行 TensorFlow/PyTorch/Apache MXNet/XGBoost/MPI/Paddle 框架的分布式训练变得容易。

Training-operator 安装

由 training-operator 在 v1.6 之后才支持 PaddlePaddle,这里我们安装 v1.6.0 版本。

# 在线安装
kubectl apply -k "github.com/kubeflow/training-operator/manifests/overlays/standalone?ref=v1.6.0"

# 离线安装则提前下好training-operator的项目代码,以及镜像 kubeflow/training-operator:v1-5a5f92d

检查安装结果

PytorchJob 入门使用

apply 一个 kind 为 PyTorchJob 的 yaml ,如下:

kubectl apply -n kubeflow -f <<EOF
apiVersion: "kubeflow.org/v1"
kind: PyTorchJob
metadata:
  name: pytorch-simple-001
  namespace: kubeflow
spec:
  pytorchReplicaSpecs:
    Master:
      replicas: 1
      restartPolicy: OnFailure
      template:
        spec:
          containers:
            - name: pytorch
              image: kubeflowkatib/pytorch-mnist:v1beta1-45c5727
              imagePullPolicy: Always
              command:
                - "python3"
                - "/opt/pytorch-mnist/mnist.py"
                - "--epochs=1"
    Worker:
      replicas: 2
      restartPolicy: OnFailure
      template:
        spec:
          containers:
            - name: pytorch
              image: kubeflowkatib/pytorch-mnist:v1beta1-45c5727
              imagePullPolicy: Always
              command:
                - "python3"
                - "/opt/pytorch-mnist/mnist.py"
                - "--epochs=1"
EOF

正常情况下,我们会看到三个running的pod,如下:

 训练完成后,Pod 的状态变成 Completed,如下:

PytorchJob 源码分析

关于 traning-operator 所使用的脚手架工具 kubebuilder 的代码结构可参见 Kubeflow--TFJob实现机制分析_chenxy02的博客-CSDN博客 , 这里我们直接看PyTorchJob的调谐方法 Reconcile()

代码地址:pkg/controller.v1/pytorch/pytorchjob_controller.go

其中,r.ReconcileHPA(pytorchjob) 会根据 pytorchjob.spec.elasticPolicy 字段,对训练任务进行动态扩缩容。利用此,也便可以解决 上述第三个问题——“在特定情景下动态伸缩节点数”。

接下来 我们进到 r.ReconcileJobs(pytorchJob, ……)方法,看一下 PyTorchJob 怎么解决上述前两个问题。在 ReconcileJobs() 方法中调用了 ReconcilePods()方法负责调谐出Pod,pod的数量由 pytorchjob.spec.pytorchReplicaSpecs 决定。

代码地址:github.com/kubeflow/common/pkg/controller.v1/common/pod.go

进入到 jc.createNewPod() 可以发现,training-operator是通过 jc.Controller.SetClusterSpec()方法,根据不同分布式训练框架的需要,为训练容器注入相应的配置。

代码地址:github.com/kubeflow/common/pkg/controller.v1/common/pod.go

代码地址:pkg/controller.v1/pytorch/pytorchjob_controller.go

进入在setPodEnv() 便可以看到 training-operator是怎么为pytorch分布式训练的容器注入所需的 MASTER_PORT、MASTER_ADDR、WORLD_SIZE、RANK 等环境变量。

至此,便解决了上述第一个问题—— “启动多个 python脚本,配置不同的 rank值”

至于上述第二个问题——"多个 pod 进行分布式训练 ,IP不确定的问题"。则是通过为每一个训练节点创建一个Services,通过记录集群内域名来解决。详见:jc.Controller.ReconcileServices方法(代码地址:github.com/kubeflow/common/pkg/controller.v1/common/job.go)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/705575.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot:整合 Redis BitMap技术及结合场景:实现签到与统计

⛄引言 本文参考黑马 点评项目 在各个项目中&#xff0c;我们都可能需要用到签到和 统计功能。 签到后会给用户一些礼品以此来吸引用户持续在该平台进行活跃。 签到功能&#xff0c;我们可以通过Redis中的 BitMap功能来实现 一、Redis BitMap 基本用法 ⛅BitMap 基本语法、…

vue+css中通过一个div的hover触发另一个的样式变化

思路 通过触发父div&#xff0c;除了改变父div的背景色外&#xff0c;还同时改变div中i标签的颜色 效果图 原本 hover触发后 html代码 <div class"user_addfrid"><i class"iconfont icon-friend-add"></i> </div> css代码 …

动态地图开发需要注意哪些方面?

动态地图是指可以随时更新和展示地理信息的地图。随着科技的发展和人们对地理信息的需求不断增加&#xff0c;动态地图的开发越来越受到关注。动态地图可以实现多种功能&#xff0c;如实时交通状况的展示、灾害预警、物流配送路线规划等。动态地图的开发需要结合多种技术手段&a…

HummerRisk V1.2.0 发布

经过一个月的时间&#xff0c;1.2.0和大家见面了&#xff0c;在这个版本中我们重做了云资源态势&#xff0c;用全新的2.5D方式来展现云上资源态势及资源关联关系&#xff0c;同时升级了多云合规检测引擎&#xff0c;现在X-PACK中的多云检测可以提升300%的执行速度&#xff0c;规…

自定义MVC

目录 一、MVC概念描述 1、什么是MVC&#xff1f; 2、什么是自定义MVC&#xff1f; 3、自定义MVC有什么用&#xff08;主要用途&#xff09;&#xff1f; 二、MVC三层架构 第一种版本 JSP页面 servlet 结果 第二种版本 JSP代码 servlet 结果 第三种版本 jsp页面 s…

unity Embedded Browser(ZFBrowser)使用相关问题

在使用ZFBrowser的时候 碰到获取不到声音权限的问题 在插件的BrowserNative.cs脚本中&#xff0c;找到commandLineSwitches变量&#xff0c; 只需要开启以下两个配置项&#xff1a; "--enable-media-stream"&#xff1a;允许收集用户的摄像头视频流与mic的音频流。…

【Rust】入门教程-7章

Package、Crate、Module 7.1 代码组织 7.2 路径 根级可以相互访问 super 关键字 pub struct 7.4 use关键字

【Spark大作业】财政收入影响因素分析及预测模型

文章目录 前言一、数据的基本描述性分析1.1 导包与读取数据1.2 数据的基本情况1.3 变量的分布情况1.4 相关性分析 二、数据的预处理2.1 Lasso变量选择模型 三、建立财政收入预测模型3.1 灰色模型3.2 神经网络预测模型 环境搭建Spark pandsAPI接口&#xff08;了解&#xff09;分…

windows本地上传文件到服务器(scp)

命令 1.ssh 用户名ip&#xff1a;远程登录服务器。 ssh root1.15.233.1932.scp 本地文件路径 用户名ip:上传路径 &#xff1a;本地文件与服务器进行传递。 scp C:\a.txt root1.15.233.193:/var/www/html3.本地文件夹上传到服务器 scp -r C:\user root1.15.233.193:/home4…

三防工业平板在哪些行业中得到广泛应用?

随着科技的不断进步&#xff0c;工业平板正逐渐成为各行业中不可或缺的工具。其中&#xff0c;三防工业平板由于其卓越的耐用性和丰富的功能&#xff0c;在许多行业中得到了广泛的应用。本文将重点介绍三防工业平板在以下几个行业中的应用。 三防工业平板在物流行业中发挥着关键…

shell脚本ssh远程执行命令给变量赋值的问题

需求及目标 从A机器通过SSH方式到B机器&#xff0c;并执行相关的命令。命令中包含变量及变量的赋值。 代码如下&#xff0c;意思是&#xff0c;ssh到10.111.111.27这台机器&#xff0c;cd到 / 根目录下&#xff0c;并执行ls命令&#xff0c;如果ls出来的结果不为空&#xff0…

【鲁棒优化】微电网鲁棒优化定价方案研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【算法】区间DP (从记忆化搜索到递推DP)⭐

文章目录 前期知识516. 最长回文子序列思路1——转换问题&#xff1a;求 s 和反转后 s 的 LCS&#xff08;最长公共子序列&#xff09;思路2——区间DP&#xff1a;从两侧向内缩小问题规模补充&#xff1a;记忆化搜索代码 1039. 多边形三角剖分的最低得分从记忆化搜索开始翻译成…

改造3dmax的快捷键自定义3dmax快捷键

快捷键需要整体规划&#xff0c;不然太乱了&#xff0c;不要担心你的自定义快捷键破坏了系统原有的快捷键&#xff0c;或者和原有的某些快捷键冲突&#xff0c;如果那些被系统定义的快捷键所对应的功能指令你都不知道他们是干什么用的&#xff0c;你要他们有什么用。还不如来得…

Rust 基础入门 ——数值类型

数值类型 概述 数值类型 这里重点在于一些特殊的书写方式的格式&#xff0c;和几种特殊类型。除此以外&#xff0c;还包括一些常见的类型处理方式&#xff08;这之中包括了一些问题处理和Rust 特有内容&#xff09;。 细分之下为&#xff1a; 整数类型 重点问题&#xff1a…

基于PyQt5的图形化界面开发——天气应用

目录 0. 前言1. 注册心知天气2. 代码实现3. 其他PyQt5文章 0. 前言 本节使用PyQt5开发天气应用程序实现以下功能&#xff1a; 通过调用天气API获取实时天气数据&#xff0c;并在应用程序中显示当前城市的温度、天气状况、风速等信息。 操作系统&#xff1a;Windows10 专业版…

关于 3.0 和 2.0 的数据文件差异以及性能优化思路

如果需要对数据库性能优化&#xff0c;了解数据文件的存储方式和工作原理是必要的。 对于时序数据库&#xff08;Time Series Database&#xff09; TDengine 来说&#xff0c;在 2.x 版本中时序数据的保留策略是由keep和days这两个参数把控的。&#xff08;详情可见&#xff…

云原生——Kubenetes基础

❄️作者介绍&#xff1a;奇妙的大歪❄️ &#x1f380;个人名言&#xff1a;但行前路&#xff0c;不负韶华&#xff01;&#x1f380; &#x1f43d;个人简介&#xff1a;云计算网络运维专业人员&#x1f43d; 目录 一.什么是Kubernetes&#xff1f; 二.为什么你需要 Kubern…

markdown数学公式总结

行内与独行 行内公式&#xff1a;将公式插入到本行内&#xff0c;符号&#xff1a; 公式内容 公式内容 公式内容&#xff0c;如&#xff1a; x y z xyz xyz 独行公式&#xff1a;将公式插入到新的一行内&#xff0c;并且居中&#xff0c;符号&#xff1a; 公式内容 公式内容 公…

RISC-V IDE MRS使用笔记(十):嵌入式编程开发技巧汇总

RISC-V IDE MRS使用笔记(十)&#xff1a;嵌入式编程开发技巧汇总 MRS常见嵌入式开发技巧: Q1&#xff1a;如何修改程序编译生成库&#xff1f; A1&#xff1a;在工具栏中点击活动工程的编译配置按钮&#xff0c;在Build Artifact的Tab页面指定目标类型&#xff0c;选中为Stat…