当前位置: 首页 > article >正文

cube studio开源一站式云原生机器学习平台--pytorch分布式训练

全栈工程师开发手册 作者栾鹏一站式云原生机器学习平台前言开源地址https://github.com/data-infra/cube-studiocube studio 开源的国内最热门的一站式机器学习mlops/大模型训练平台支持多租户sso单点登录支持在线镜像调试在线ide开发数据集管理图文音标注和自动化标注任务模板自定义拖拉拽任务流模型分布式多机多卡训练超参搜索模型管理推理服务弹性伸缩支持ml/tf/pytorch/onnx/tensorrt/llm模型0代码服务发布以及配套资源监控和算力存储资源管理。支持机器学习深度学习大模型 开发训练推理发布全链路。支持元数据管理维表指标sqllab数据etl等数据中台对接功能。支持多集群边缘集群serverless集群方式部署。支持计量计费资源额度限制支持vgpurdma国产gpuarm64架构。aihub模型市场支持AI hub模型市场支持400开源模型应用一键开发一键微调一键部署。gpt大模型支持40开源大模型部署一键部署支持rayvolcano,spark等分布式计算框架支持tf,pytorch,mxnet,mpi,paddle,mindspre分布式多机多卡训练框架支持deepspeedcolossalaihorovod分布式加速框架支持llama chatglm baichuan qwen系列大模型微调。支持llama-factory 100llm微调支持大模型vllm推理加速支持智能体私有知识库智能机器人。背景在单机单卡或者单机多卡无法在有限时间内完成训练的情况下我们就需要使用多机多卡分布式训练在多机多卡分布式训练主要存在几个难点1、分布式多机多卡集群2、pytorch多机多卡分布式训练代码3、多机多卡分布式训练gpu利用率问题4、cpu/gpu任务分配不均cpu任务会占用GPU任务分布式训练集群为了方便的实现一个pytorch分布式集群这里直接使用https://github.com/data-infra/cube-studio 开源的云原生一站式机器学习平台。使用pytorchjob这个模板填上自己的启动命令和启动worker数目就可以。分布式原理和代码基本原则每个进程的rank是不能一样的进程总数目是为WORLD_SIZEmaster只能是rank0主要变更分布式集群的每个pod都会提供如下环境变量 NCCL_DEBUGINFO NCCL_IB_DISABLE1MASTER_PORT23456NCCL_SOCKET_IFNAMEeth0 MASTER_ADDRpytorchjob-xxx-master-0WORLD_SIZE3# 一共多少个workerRANK0# 当前是第几个worker注意 masterRANK0worker-0RANK1worker-1RANK2# 初始化集群信息ifint(os.environ.get(WORLD_SIZE,1))1:# 要不专门配置init_method RANK或者WORLD_SIZE 系统会自动识别dist.init_process_group(backendargs.backend,init_methodNone)# 被DDP封装的model的参数的grad才会进行all reduceifis_distributed():Distributornn.parallel.DistributedDataParallelifuse_cudaelsenn.parallel.DistributedDataParallelCPU modelDistributor(model)# 需要DistributedSampler作为实例传递给DataLoader来配合DDP使用这样数据集的样本会为每个进程划分每个进程读取各自的样本。train_samplertorch.utils.data.distributed.DistributedSampler(train_dataset)# 分布式下set_epochtrain_sampler.set_epoch(epoch)启动方式直接python启动your_start.py例如上面的mnist代码torch.distributed.launch启动python-mtorch.distributed.launch--nproc_per_node每个worker的卡数量--nnodes$WORLD_SIZE--node_rank$RANK--master_addr$MASTER_ADDR--master_port$MASTER_PORTtrain.py --自己脚本的其他参数torch.distributed.launch会向你的脚本传递–local_rank参数同时会透传train.py后面的参数你的train.py脚本if__name____main__:parser.add_argument(--local_rank,typeint,default0,helplocal_rank)world_sizeint(os.environ[WORLD_SIZE])rankint(os.environ[RANK])dist.init_process_group(nccl)gpu利用率优化其中gpu由于是整卡占用需要调整任务的部分参数和代码提高gpu显存占用率和gpu使用率平台监控通过监控按钮可以进入查看任务运行的资源使用率对于资源使用超标可以手动配置增加资源。自己监控利用率watchnvidia-smi 或者 pipinstallgpustatwatch--color-n1gpustat-cpugpu利用率低的原因核心cpu操作慢进而阻塞了gpu的计算可能的原因数据加载/网络等待/数据预处理/模型保存/loss 计算/评估指标计算/日志打印/指标上报/进度上报gpu利用率优化1、数据加载相关1、存储计算不在同一个城市数据导入到集群存储2、磁盘io性能太差对于临时数据可以将内存映射为磁盘3、小文件太多频繁io合并为大文件处理4、未启用多进程并行读取数据pytorch提高num_workerstf配置num_parallel_calls/num_parallel_reads5、未启用提前加载机制来实现 CPU 和 GPU 的并行pytorch配置prefetch_factortf配置Dataset.prefetch()6、未设置共享内存 pin_memory设置为true7、每次送入gpu的_size太少模型固定后调整 batch_size尽量增大显存的利用率。然后再调节num_workers提高gpu利用率2、数据预处理相关1、数据处理和训练耦合在一起将数据处理和训练分成两个task训练中需要的配置之类的全部提前加载到内存让gpu只做训练任务。或者使用Nvidia DALI在gpu中做数据处理3、频繁io操作1、模型保存太频繁减少保存模型(checkpoint)的频率2、tensorboard文件保存太频繁xxxx3、日志打印太频繁频繁cpu/gpu切换不要打印训练迭代中个人日志多进程共享gpu通过多进程共享单机的方式提高gpu的利用率概念图。添加多进程共享gpu卡的启动方式shell方式添加start端可以添加启动start.sh启动3个进程。每个进程在原有基础上添加--process_index xx --process_num xx参数。并放在在后端运行并在最后wait所有后端程序。python3 /mnt/pengluan/mytask.py --lr xx ... --process_index 0 --process_num 3 /process0.file 21 python3 /mnt/pengluan/mytask.py --lr xx ... --process_index 1 --process_num 3 /process1.file 21 python3 /mnt/pengluan/mytask.py --lr xx ... --process_index 2 --process_num 3 /process2.file 21 waitpython方式添加start端透传上层参数添加一个start.py通过start.py启动多个任务进程import json import argparse import subprocess import sys if __name__ __main__: # 以下参数列表只是示例实际使用时请按需自己增删改 arg_parser argparse.ArgumentParser(多进程启动) process_num3 python_path/mnt/pengluan/mytask.py commands [[/usr/bin/python3,python_path,--process_index,str(process_index),--process_num,str(process_num)]sys.argv[1:] for process_index in range(process_num)] print(commands) all_process [subprocess.Popen(command) for command in commands] all_returncode [process.wait() for process in all_process]

相关文章:

cube studio开源一站式云原生机器学习平台--pytorch分布式训练

全栈工程师开发手册 (作者:栾鹏) 一站式云原生机器学习平台 前言 开源地址:https://github.com/data-infra/cube-studio cube studio 开源的国内最热门的一站式机器学习mlops/大模型训练平台,支持多租户&#xff0c…...

PHPWord替换word模板内容时,存在表格,且不确定表格行数的处理方式

PHPWord替换word模板内容时,存在表格,且不确定表格行数的处理方式 想得到的目标表格 表格可能存在若干行,需要循环生成,插入到word模板中 word模板 实现过程 1、Composer安装 phpword composer require phpoffice/phpword2、实现代码 //模拟数据 $data = [[...

taotoken的token plan套餐为团队开发带来的成本可控体验

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken 的 Token Plan 套餐为团队开发带来的成本可控体验 在团队开发环境中,频繁调用大模型 API 已成为提升研发效率…...

C语言-函数的调用

目录: 一、函数名作为函数的输入参数 二、回调函数 1、回调函数的引入 2、回调与普通函数的调用 3、回调函数的作用 4、回调函数的程序编写 一、函数名作为函数的输入参数 函数参数传递分为两种,一种是值传递,一种是地址传递。一般我们…...

【中科院研究所主办、高录用、往届会后4个月检索】第二届人工智能与基础模型国际学术会议(AIFM 2026)

第二届人工智能与基础模型国际学术会议(AIFM 2026)将于2026 年 6 月 26-28 日在中国乌鲁木齐举办。会议旨在汇聚来自世界各地学术界、产业界及政府机构的专家学者,围绕人工智能与基础模型技术的核心议题展开深度研讨,共同探索领域…...

通俗易懂的C++前缀和与差分算法图文示例详解

1、前缀和 前缀和是指某序列的前n项和,可以把它理解为数学上的数列的前n项和,而差分可以看成前缀和的逆运算。合理的使用前缀和与差分,可以将某些复杂的问题简单化。 2、前缀和算法有什么好处? 先来了解这样一个问题&#xff1a…...

C++中如何调用C语言的代码实现

为什么要是用 extern "C"在进行C开发的时候,由于C、C编译规则是不同的。C编译函数方法是 使用mangle的技术 。123456789101112void func(int age) {}void func(int age, int height) {}/*如果有这两个函数要被调用,在C语言中函数重载是不允许的…...

别再折腾内网穿透了!用EC600N 4G模块+华为云IoTDA,5分钟搞定远程宠物定位数据上传

5分钟实现宠物定位数据上云:EC600N 4G模块与华为云IoTDA实战指南 当你的宠物突然从视线中消失时,那种焦虑感是任何宠物主人都深有体会的。传统的蓝牙防丢器仅有几十米的有效范围,而GPS定位器又常受限于复杂的网络配置。现在,通过…...

别再硬刚滑块了!一个Python脚本自动搞定淘宝X5SEC验证码

Python自动化破解淘宝X5SEC滑块验证码实战指南 淘宝作为国内最大的电商平台之一,其反爬机制一直处于行业领先水平。其中X5SEC滑块验证码是淘宝用来识别自动化程序的主要手段之一。对于需要批量采集商品数据或进行价格监控的开发者来说,频繁的手动滑块验证…...

pyperclip测试策略:如何确保跨平台剪贴板功能的稳定性

pyperclip测试策略:如何确保跨平台剪贴板功能的稳定性 【免费下载链接】pyperclip Python module for cross-platform clipboard functions. 项目地址: https://gitcode.com/gh_mirrors/py/pyperclip pyperclip是一个强大的Python跨平台剪贴板模块&#xff0…...

CircularProgressBar扩展开发:如何基于现有库创建自定义进度条组件

CircularProgressBar扩展开发:如何基于现有库创建自定义进度条组件 【免费下载链接】CircularProgressBar Create circular ProgressBar in Android ⭕ 项目地址: https://gitcode.com/gh_mirrors/ci/CircularProgressBar CircularProgressBar是一个功能强大…...

Haneke与AFNetworking集成实战:构建强大的iOS图片加载系统

Haneke与AFNetworking集成实战:构建强大的iOS图片加载系统 【免费下载链接】Haneke A lightweight zero-config image cache for iOS, in Objective-C. 项目地址: https://gitcode.com/gh_mirrors/ha/Haneke 在iOS应用开发中,图片加载与缓存是影响…...

ESJsonFormat-Xcode泛型支持:Xcode 7及以上版本的优化特性

ESJsonFormat-Xcode泛型支持:Xcode 7及以上版本的优化特性 【免费下载链接】ESJsonFormat-Xcode 将JSON格式化输出为模型的属性 项目地址: https://gitcode.com/gh_mirrors/es/ESJsonFormat-Xcode 如果你是一位iOS开发者,那么你一定遇到过将JSON数…...

全新UI 阅后即焚V2正式版系统源码_全开源_安全加密传输

概述 在数字化信息交流日益频繁的今天,如何安全、私密地传输敏感数据(如商业机密、登录凭证、个人隐私)已成为企业和个人用户共同面临的严峻挑战。传统的即时通讯工具往往存在聊天记录留存、云端备份等安全隐患,难以满足“阅后即…...

3分钟搞定B站视频下载:免费解锁4K大会员高清视频的完整教程

3分钟搞定B站视频下载:免费解锁4K大会员高清视频的完整教程 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 你是否曾为无法…...

从零到一:用面包板和晶体管手搓一个4bit加法器(附完整电路图与避坑指南)

从零到一:用面包板和晶体管手搓一个4bit加法器(附完整电路图与避坑指南) 深夜的实验室里,面包板上横七竖八地插着几十个三极管和电阻,当我第三次测量到错误的输出电平时,终于意识到——这个看似简单的4bit加…...

【免费下载】 Maven 3.8.5 压缩包下载【maven下载安装与配置】

Maven 3.8.5 压缩包下载 简介 本仓库提供 Maven 3.8.5 版本的压缩包下载。Maven 是一个强大的项目管理和构建自动化工具,广泛应用于 Java 项目的开发中。 资源文件 文件名: maven3.8.5压缩包描述: Maven 3.8.5 版本的压缩包 下载链接 请点击以下链接下载 Mave…...

Bilibili-Evolved:打造无网络依赖的哔哩哔哩增强体验技术解析

Bilibili-Evolved:打造无网络依赖的哔哩哔哩增强体验技术解析 【免费下载链接】Bilibili-Evolved 强大的哔哩哔哩增强脚本 项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved 在当今网络环境复杂多变的时代,用户对Web应用的稳定性要…...

从虚拟机到私有云:手把手教你用VirtualBox+CentOS 7搭建个人OpenStack学习环境

从虚拟机到私有云:手把手教你用VirtualBoxCentOS 7搭建个人OpenStack学习环境 在个人电脑上搭建OpenStack环境听起来像是企业级IT工程师的专属领域,但事实上,借助VirtualBox这样的免费虚拟化工具和CentOS 7的稳定性,任何人都可以在…...

手把手拆解FD-SOI工艺流程:从SOI衬底到应变硅外延的保姆级图解

从SOI衬底到应变硅外延:FD-SOI工艺全流程拆解指南 想象一下建造一座微型城市,每一栋建筑只有头发丝直径的万分之一大小。这就是FD-SOI工艺工程师的日常工作——在硅片上用原子级精度"建造"晶体管。与传统的体硅工艺不同,FD-SOI&…...

垃圾分类助手APP - 安卓期末大作业

垃圾分类助手APP - 安卓期末大作业 【下载地址】垃圾分类助手APP-安卓期末大作业 本项目是一个基于Android Studio的安卓应用程序,专为满足垃圾分类指导需求设计。作为一款学习与实践相结合的期末大作业,它不仅集成了丰富的前端和后端功能,还…...

实战复盘:我们如何定位并彻底解决Spring Gateway的‘262144字节’缓冲区限制问题

深度解析:Spring Gateway缓冲区限制问题的工程化解决方案 1. 问题背景与现象分析 去年夏天,我们的电商平台在促销活动期间突然遭遇了一系列诡异的API请求失败。前端团队报告称,部分包含大型商品列表的JSON请求在通过Spring Cloud Gateway时被…...

用STM32F103C8T6做个触摸感应示波器?手把手教你ADC采集+OLED波形显示(附完整代码)

用STM32F103C8T6打造触摸感应示波器:从ADC采集到OLED波形显示的趣味实践 在嵌入式开发领域,将枯燥的技术参数转化为可视化的交互体验,往往能激发学习者的深层兴趣。今天我们要实现的,不仅是一个简单的信号采集系统,而是…...

别再手动挖洞!3DMAX QuickBoolean插件保姆级安装与工具栏配置指南(附图标含义详解)

3DMAX QuickBoolean插件:从零开始的高效布尔运算实战指南 在三维建模领域,布尔运算一直是创建复杂几何形状的必备技能。无论是建筑可视化中的门窗开洞,还是工业设计中的零件装配,传统布尔运算操作往往伴随着繁琐的步骤和不可预测的…...

【免费下载】 探索双面神技:STM32G474的USB跨界应用

探索双面神技:STM32G474的USB跨界应用 在物联网与嵌入式开发的世界里,寻找一款能兼顾数据传输与控制沟通的神器是每个开发者的心头好。今天,我们就来揭秘这样一个宝藏项目——STM32G474实现USB的MSCCDC组合功能,它巧妙地将STM32G4…...

如何轻松备份微信聊天记录:WeChatMsg完全免费的数据守护方案

如何轻松备份微信聊天记录:WeChatMsg完全免费的数据守护方案 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we…...

【Android】CloneTTS最强朗读听书引擎-可克隆一切音色

【Android】CloneTTS最强朗读听书引擎-可克隆一切音色 链接:https://pan.xunlei.com/s/VOsu4mh3O_d7zjeERkKPfcG4A1?pwddi3y# CloneTTS 是一款运行在安卓系统本地的文字转语音(TTS)原生引擎,允许用户离线克隆所需的声音并直接使用该声音来朗读书籍或长…...

双核Delfino架构解析:如何解决复杂实时控制系统的性能瓶颈

1. 项目概述:从“双核”到“创新架构”的深度解构最近在和一些做工业控制、新能源以及高端医疗器械的朋友交流时,发现一个词被反复提及,那就是“双核Delfino”。乍一听,这像是一个具体的芯片型号,但深入聊下去&#xf…...

工作流的常见模式 [ 2 ]

协调者 - 工作者模式(Orchestrator-Workers)概念好,我们接下来继续来看第4种工作模式。第4种工作模式呢它叫协调者工作者模式。什么是协调者和工作者模式呢?跟大家讲解这个模式,我们需要结合实际当中的例子&#xff0c…...

让旧款iPhone/iPad重获新生:Legacy-iOS-Kit终极使用指南

让旧款iPhone/iPad重获新生:Legacy-iOS-Kit终极使用指南 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit …...