cube开源一站式云原生机器学习平台--volcano 多机分布式计算

本文主要是介绍cube开源一站式云原生机器学习平台--volcano 多机分布式计算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

全栈工程师开发手册 (作者:栾鹏)
一站式云原生机器学习平台

volcano的基本原理和架构

Volcano是一个基于Kubernetes的云原生批量计算平台,也是CNCF的首个批量计算项目。

volcano是华为开源出的分布式训练架构,github官方网址:https://github.com/volcano-sh/volcano
在这里插入图片描述

volcano 多机分布式

有时候单台机器多进程也无法快速完成代码运行,这个时候就需要多机器实现:

1、单机器算力有限,核数不足
2、有些运行有机器白名单显示,需要多台机器ip增加并发处理
在这里插入图片描述
volcano主要为我们提供index job, 也就是启动多个pod,并为每个pod提供index,role,以及其他role的访问地址。这样我们就可以用这些信息来做事情。

分布式计算集群

为了方便的实现一个volcano多机分布式集群,这里直接使用
在这里插入图片描述

https://github.com/tencentmusic/cube-studio 开源的云原生一站式机器学习平台。

使用volcano这个模板,填上自己的worker数量,每个worker的镜像和启动命令就可以了

在这里插入图片描述

分布式原理和代码

基本原则

部署分布式volcano集群 平台已经我们实现了,我们只需要编写分布式的代码。 要想针对实现并发操作

1、通过环境变量VC_WORKER_NUM 有多少个worker
2、通过环境变量VC_TASK_INDEX实现当前pod是第几个worker
3、每个worker里面都判别一遍总共需要处理的数据,和当前worker需要处理的数据。
4、代码根据当前是第几个worker处理自己该做的工作。

用户代码示例

保留单机的代码,添加识别集群信息的代码(多少个worker,当前worker是第几个),添加分工(只处理归属于当前worker的任务),

import time, datetime, json, requests, io, os
from multiprocessing import Pool
from functools import partial
import os, random, sysWORLD_SIZE = int(os.getenv('VC_WORKER_NUM', '1'))  # 总worker的数目
RANK = int(os.getenv("VC_TASK_INDEX", '0'))  # 当前是第几个worker 从0开始print(WORLD_SIZE, RANK)# 子进程要执行的代码
def task(key):print(datetime.datetime.now(),'worker:', RANK, ', task:', key, flush=True)time.sleep(1)if __name__ == '__main__':# if os.path.exists('./success%s' % RANK):#     os.remove('./success%s' % RANK)input = range(300)  # 所有要处理的数据local_task = []  # 当前worker需要处理的任务for index in input:if index % WORLD_SIZE == RANK:local_task.append(index)  # 要处理的数据均匀分配到每个worker# 每个worker内部还可以用多进程,线程池之类的并发操作。pool = Pool(10)  # 开辟包含指定数目线程的线程池pool.map(partial(task), local_task)  # 当前worker,只处理分配给当前worker的任务pool.close()pool.join()# 添加文件标识,当前worker结束# open('./success%s' % RANK, mode='w').close()# # rank0做聚合操作# while (RANK == 0):#     success = [x for x in range(WORLD_SIZE) if os.path.exists('./success%s' % x)]#     if len(success) != WORLD_SIZE:#         time.sleep(5)#     else:#         # 所有worker全部结束,worker0开始聚合操作#         print('begin reduce')#         break

这篇关于cube开源一站式云原生机器学习平台--volcano 多机分布式计算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/512258

相关文章

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

k8s中实现mysql主备过程详解

《k8s中实现mysql主备过程详解》文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致... 目录一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

k8s搭建nfs共享存储实践

《k8s搭建nfs共享存储实践》本文介绍NFS服务端搭建与客户端配置,涵盖安装工具、目录设置及服务启动,随后讲解K8S中NFS动态存储部署,包括创建命名空间、ServiceAccount、RBAC权限... 目录1. NFS搭建1.1 部署NFS服务端1.1.1 下载nfs-utils和rpcbind1.1

k8s容器放开锁内存限制问题

《k8s容器放开锁内存限制问题》nccl-test容器运行mpirun时因NCCL_BUFFSIZE过大导致OOM,需通过修改docker服务配置文件,将LimitMEMLOCK设为infinity并... 目录问题问题确认放开容器max locked memory限制总结参考:https://Access

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Linux之platform平台设备驱动详解

《Linux之platform平台设备驱动详解》Linux设备驱动模型中,Platform总线作为虚拟总线统一管理无物理总线依赖的嵌入式设备,通过platform_driver和platform_de... 目录platform驱动注册platform设备注册设备树Platform驱动和设备的关系总结在 l

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和