Training - Kubeflow 的 PyTorchJob 配置 DDP 分布式训练 (ncclInternalError)

欢迎关注我的CSDN:https://spike.blog.csdn.net/
本文地址:https://blog.csdn.net/caroline_wendy/article/details/137569332

PyTorchJob

Kubeflow 的 PyTorchJob 是 Kubernetes 自定义资源,用于在 Kubernetes 上运行 PyTorch 训练任务,是 Kubeflow 组件中的一部分,具有稳定状态,并且,实现位于 training-operator 中。PyTorchJob 允许定义一个配置文件,来启动 PyTorch 模型的训练,可以是分布式的,也可以是单机的。

请注意,PyTorchJob 默认情况下不在用户命名空间中工作,因为 istio 自动侧车注入。为了使其运行,需要为 PyTorchJob pod 或命名空间添加注释 sidecar.istio.io/inject: "false" 以禁用它。

PyTorch Lightning 框架中,可以通过 strategy 配置多机多卡模式,例如 DDP(Distributed Data Parallel) 策略,即:

  • 多机多卡,需要设置固定的随机种子
  • 训练策略设置成 DDPStrategy
  • pl.Trainer() 设置 strategy(策略)、num_nodes(节点数)、devices(节点的卡数)

即:

from pytorch_lightning import seed_everything
from pytorch_lightning.strategies import DeepSpeedStrategy, DDPStrategy# 多机多卡,需要设置固定的随机种子
seed_everything(args.seed)# DeepSpeed 策略
# strategy = DeepSpeedStrategy(config=args.deepspeed_config_path)# DDP 策略
strategy = DDPStrategy(find_unused_parameters=False)# num_nodes 是节点数量,devices 是节点的 GPU 数量,可以设置成 auto
trainer = pl.Trainer(accelerator="gpu",# ...strategy=strategy,  # 多机多卡配置num_nodes=args.num_nodes,  # 节点数devices="auto",  # 每个节点 GPU 卡数
)

Kubeflow 配置 PyTorchJob,即:

  • Job的类型(kind),需要设置成 PyTorchJob,支持 DDP 模式。
  • 包括 Master 节点与 Worker 节点,两个节点的配置可以相同。
  • 运行命令 command 相同,可以存储不同的 nohup.out 中,例如 _master_worker
  • resources 配置资源,即单机卡数;tolerations 配置资源池。
  • 必须添加 sidecar.istio.io/inject: "false"
  • replicas 表示节点数量,Master 与 Worker 的总和,就是 num_nodes 的数量。

即:

apiVersion: "kubeflow.org/v1"
kind: PyTorchJob
metadata:name: [your project]-trainer-n8g1-20240409
spec:pytorchReplicaSpecs:Master:replicas: 1template:metadata:annotations:sidecar.istio.io/inject: "false"labels:file-mount: "true"user-mount: "true"spec:containers:- name: pytorchcommand:- /bin/sh- -cl- "bash run_train_n8g1.sh > nohup.run_train_n8g1_master.log 2>&1"image: "[docker image]"imagePullPolicy: AlwayssecurityContext: # Newprivileged: falsecapabilities:add: ["IPC_LOCK"]resources:limits:rdma/hca: 1cpu: 12memory: "100G"nvidia.com/gpu: 1workingDir: "[project dir]"volumeMounts:- name: cache-volume  # change the name to your volume on k8smountPath: /dev/shmnodeSelector:gpu.device: "a100"  # support 'a10' or 'a100'group: "algo2"tolerations:- effect: NoSchedulekey: roleoperator: Equalvalue: "algo2"volumes:- name: cache-volume  # change the name to your volume on k8semptyDir:medium: MemorysizeLimit: "960G"Worker:replicas: 7template:metadata:annotations:sidecar.istio.io/inject: "false"labels:file-mount: "true"user-mount: "true"spec:containers:- name: pytorchcommand:- /bin/sh- -cl- "bash run_train_n8g1.sh > nohup.run_train_n8g1_worker.log 2>&1"image: "[docker image]"imagePullPolicy: AlwayssecurityContext:  # Newprivileged: falsecapabilities:add: ["IPC_LOCK"]resources:limits:rdma/hca : 1cpu: 12memory: "100G"nvidia.com/gpu: 1workingDir: "[project dir]"volumeMounts:- name: cache-volume  # change the name to your volume on k8smountPath: /dev/shmnodeSelector:gpu.device: "a100"  # support 'a10' or 'a100'group: "algo2"tolerations:- effect: NoSchedulekey: roleoperator: Equalvalue: "algo2"volumes:- name: cache-volume  # change the name to your volume on k8semptyDir:medium: MemorysizeLimit: "960G"

设置运行脚本:

# 激活环境
source /opt/conda/etc/profile.d/conda.sh  # 必要步骤
conda activate alphaflow# DDP 模式需要设置 MASTER_PORT,否则异常
export MASTER_PORT=9800# 显示环境变量
export

注意:DDP 模式需要设置 MASTER_PORT,否则异常

运行日志,主要关注 RANKWORLD_SIZE 变量,如下:

RANK="0"
WORLD_SIZE="8"RANK="6"
WORLD_SIZE="8"

遇到 Bug:ncclInternalError: Internal check failed. ,即:

RuntimeError: NCCL error in: ../torch/csrc/distributed/c10d/ProcessGroupNCCL.cpp:1269, internal error, NCCL version 2.14.3
ncclInternalError: Internal check failed.
Last error:
Net : Call to recv from [IP]<[Port]> failed : Connection refused

原因是 DDP 策略需要设置 MASTER_PORT 参数,例如:

export MASTER_PORT=9800

参考:GitHub - multi node training error:NCCL error

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

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

相关文章

网格矢量如何计算莫兰指数

网格矢量如何计算莫兰指数 引言 遇到一个问题&#xff0c;计算矢量网格的莫兰指数。 概念解释 莫兰指数 莫兰指数&#xff08;Moran’s Index&#xff09;是一种空间自相关指标&#xff0c;用于衡量空间数据的相似性和聚集程度。它可以用来描述一个区域与其邻近区域之间的属…

这4大流氓软件,以后看见记得绕着走。

第一个&#xff0c;2345浏览器。时不时弹出广告&#xff0c;还会自动修改你的默认主页&#xff0c;并且很难修改回去。 第二个&#xff0c;搜狗输入法。别以为它打字很方便&#xff0c;实际上弹广告也很方便。 第三个&#xff0c;快压。解压不仅给你弹广告&#xff0c;还能让…

TCP-IP详解卷一:协议——阅读总结

该内容适合程序员查看 第1章 概述 1.1 引言 WAN全称是 Wide Area Network&#xff0c;中文名为广域网。 LAN全称是 Local Area Network&#xff0c;中文名为局域网。 1.2分层 ICP/IP协议族通常被认为是一个四层协议系统 分层协议应用层Telnet、FTP和e-mail运输层TCP和UDP网…

EVAL-21489-EZLITE原理图下载方法

1&#xff0c;进入官网&#xff0c;搜索“21489”&#xff1a; 2&#xff0c;下拉找到EVAL-21489-EZLITE&#xff0c;点击“文件”&#xff1a; 3&#xff0c;点击“电路板设计数据库”的“查看全部”&#xff1a; 4&#xff0c;点击下载即可&#xff1a; 5&#xff0c;下载完成…

Python 全栈体系【四阶】(二十五)

第五章 深度学习 二、计算机视觉基本理论 11. 图像梯度处理 11.1 什么是图像梯度 图像梯度计算的是图像变化的速度。对于图像的边缘部分&#xff0c;其灰度值变化较大&#xff0c;梯度值也较大&#xff1b;相反&#xff0c;对于图像中比较平滑的部分&#xff0c;其灰度值变化…

【鸿蒙开发】ArkTS和组件

1. 初识ArkTS语言 ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript生态基础上做了进一步扩展&#xff0c;继承了TS的所有特性。 当前&#xff0c;ArkTS在TS的基础上主要扩展了如下能力&#xff1a; 基本语法&#xff1a;ArkTS定义了声明式UI描述、自…

一招搞定vcruntime140_1.dll无法继续执行代码的解决方法

在我们日常频繁地与计算机互动、依赖其高效处理各类任务的过程中&#xff0c;偶尔会遭遇一些突发的技术问题&#xff0c;导致原本顺畅的操作流程被迫中断。其中一种常见的困扰便是系统弹出一则明确且令人颇感困惑的错误提示&#xff1a;“由于找不到vcruntime140_1.dll文件&…

C语言的显式类型转换和隐式类型转换详细讲解

目录 一、类型转换 1、显式类型转换 2、隐式类型转换 二、算术转换 三、总结 每个编译器都会对表达式做两件事情&#xff0c;一是判断表达式中操作符的优先级和结合性&#xff0c;二是判断表达式中的操作数类型是否一致&#xff0c;如果不一致则需要进行类型转换。第一点在…

机器学习(五) -- 监督学习(2) -- k近邻

系列文章目录及链接 目录 前言 一、K近邻通俗理解及定义 二、原理理解及公式 1、距离度量 四、接口实现 1、鸢尾花数据集介绍 2、API 3、流程 3.1、获取数据 3.2、数据预处理 3.3、特征工程 3.4、knn模型训练 3.5、模型评估 3.6、结果预测 4、超参数搜索-网格搜…

相机模型浅析

相机模型 文章目录 相机模型四个坐标系针孔相机模型世界坐标系到相机坐标系相机坐标系到图像坐标系图像坐标到像素坐标 四个坐标系 ①世界坐标系&#xff1a;是客观三维世界的绝对坐标系&#xff0c;也称客观坐标系。因为数码相机安放在三维空间中&#xff0c;我们需要世界坐标…

Python3 replace()函数使用详解:字符串的艺术转换

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

JavaScript(1)神秘的编程技巧

大家都感兴趣的箭头函数 箭头函数在许多场景中都可以发挥作用&#xff0c;尤其适用于简化函数声明和提高代码的可读性。以下是箭头函数可以使用的一些常见方面&#xff1a; &#xff08;1&#xff09;回调函数&#xff1a; 箭头函数特别适合作为回调函数&#xff0c;例如在事…

RuntimeError: Library cublas64_12.dll is not found or cannot be loaded

运行guillaumekln/faster-whisper-large-v2模型进行语音识别的时候报错了 RuntimeError: Library cublas64_12.dll is not found or cannot be loaded 代码&#xff1a; from faster_whisper import WhisperModelmodel WhisperModel("H:\\model\\guillaumekln\\faster…

Linux系统安装内网穿透实现固定公网地址访问本地MinIO服务

文章目录 前言1. 创建Buckets和Access Keys2. Linux 安装Cpolar3. 创建连接MinIO服务公网地址4. 远程调用MinIO服务小结5. 固定连接TCP公网地址6. 固定地址连接测试 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&am…

MY-Java高级面试题

1. jdk1.7 到 jdk1.8 Map 发生了什么变化 ( 底层 )? 1.8 之后 hashMap 的数据结构发生了变化&#xff0c;从之前的单纯的数组 链表结构变成数组 链 表 红黑树。也就是说在 JVM 存储 hashMap 的 K-V 时仅仅通过 key 来决定每一个 entry 的存 储槽位&…

网络安全:重要性与应对措施

1. 网络安全的重要性 随着互联网的普及和信息技术的快速发展&#xff0c;网络安全问题已经变得日益突出。网络攻击者可以通过各种手段窃取个人信息、破坏系统、传播病毒等&#xff0c;给个人和社会带来巨大的损失。因此&#xff0c;网络安全已经成为信息化时代的重要问题之一。…

【MySQL】如何判断一个数据库是否出问题

在实际的应用中&#xff0c;其实大多数是主从结构。而采用主备&#xff0c;一般都需要一定的费用。 对于主备&#xff0c;如果主机故障&#xff0c;那么只需要直接将流量打到备机就可以&#xff0c;但是对于一主多从&#xff0c;还需要将从库连接到主库上。 对于切换的操作&a…

百度获评CCIA数据安全和个人信息保护社会责任评价“三星”示范单位

日前&#xff0c;由中国网络安全产业联盟&#xff08;CCIA&#xff09;数据安全工作委员会主办的“促进数据安全合规流通使用”专题研讨会&#xff08;CCIA数安委年度会议&#xff09;成功举办。与会介绍了数据安全和个人信息保护社会责任试点评价工作的开展情况&#xff0c;并…

LangChain-11 Code Writing FunctionCalling 大模型通过编写代码完成需求 大模型计算加法

背景简介 我们知道GPT模型对于内容的输出&#xff0c;是对下一个字符的预测&#xff0c;通过概率选出下一个文本。 而且我们也知道&#xff0c;训练样本是非常庞大的&#xff0c;对于GPT来说&#xff0c;也是有可能学习过1 1 2的。 当我们向GPT询问11 时&#xff0c;完全可以…

FME学习之旅---day21

我们付出一些成本&#xff0c;时间的或者其他&#xff0c;最终总能收获一些什么。 教程&#xff1a;AutoCAD 变换 相关的文章 为您的 DWG 赋予一些样式&#xff1a;使用 DWGStyler、模板文件、块等 FME数据检查器在显示行的方式上受到限制。它只能显示线条颜色&#xff0c;而…