基于 NCCL的RDMA分布式训练示例

容器引擎 CCE

  • 功能发布记录
  • 产品描述
    • 介绍
    • 优势
    • 使用限制
    • 应用场景
    • 核心概念
    • 特性
  • 开发指南
    • EFK日志采集系统部署指南
    • 创建LoadBalancer类型的Service
    • Prometheus监控系统部署指南
    • kubectl管理配置
    • 在CCE集群中使用-Network-Policy
  • 常用工具
    • 视图命令行场景示例
  • 产品公告
    • CCE 新版集群管理发布公告
    • CCE 控制台升级公告
    • Kubernetes 版本发布说明
      • CCE发布Kubernetes 1.18版本说明
      • CCE发布Kubernetes 1.30版本说明
      • CCE Kubernetes 版本更新说明
      • CCE发布Kubernetes 1.22版本说明
      • CCE发布Kubernetes 1.20版本说明
      • CCE发布Kubernetes 1.28版本说明
      • CCE发布Kubernetes 1.24版本说明
      • CCE发布Kubernetes 1.26版本说明
    • 安全漏洞修复公告
      • 漏洞CVE-2020-14386修复公告
      • 修复漏洞CVE-2021-30465公告
      • 漏洞CVE-2019-5736修复公告
      • 漏洞CVE-2025-1097、CVE-2025-1098等修复公告
      • 关于 runc 的安全问题(CVE-2024-21626)影响声明
  • 快速入门
    • 快速部署nginx应用
    • 使用CCE容器引擎流程概述
  • 典型实践
    • CCE集群网络说明及规划
    • CCE典型实践之容器网络模式选择
    • Pod异常问题排查
    • 通过 CCE Ingress 实现虚机和容器服务的统一接入
    • CCE集群使用Jenkins持续发布
    • CCE-访问公网实践
    • Linux系统配置常用参数说明
    • 用户使用自定义 CNI 插件方法
    • CCE典型实践之Guestbook搭建
    • 使用KMS对etcd数据加密
    • 添加CGroup V2节点
    • CCE容器运行时选择
    • CCE使用检查清单
    • VPC-ENI模式集群访问公网实践
    • 利用 Velero 实现将应用跨云迁移到 百度CCE
    • 使用 CNI 配置容器内网络参数
    • CCE Resource Recommender 用户文档
    • CCE集群中使用私有镜像实践
    • 云原生AI
      • 使用 CCE AITraining Operator 实现弹性容错训练
      • 部署 TensorFlow Serving 推理服务
      • GPU虚拟化之隔离性最优型的最佳实践
  • 操作指南
    • 多用户访问控制
    • 使用须知
    • 命名空间管理
      • 设置资源配额
      • 设置资源限制
      • 命名空间基本操作
    • 弹性伸缩
      • 使用 cce-autoscaling-placeholder 实现秒级弹性伸缩
      • CCE 集群节点自动伸缩
      • 容器定时水平伸缩(CronHPA)
      • 容器水平伸缩(HPA)
    • 存储管理
      • 使用云盘CDS
      • 使用并行文件存储PFS
      • 使用对象存储BOS
      • 使用并行文件存储PFS L2
      • 使用本地存储
      • 使用数据湖存储加速工具RapidFS
      • 使用文件存储CFS
      • 概述
    • 节点管理
      • 移出节点
      • kubelet容器监控只读端口风险提示
      • 管理污点
      • 设置GPU显存共享
      • 添加节点
      • 自定义Kubelet参数
      • 设置节点封锁
      • 节点排水
      • 管理节点标签
    • 组件管理
      • CCE CSI BOS Plugin 说明
      • Kube Scheduler 说明文档
      • CCE CSI PFS L2 Plugin
      • CCE NodeLocal DNSCache 说明
      • CCE Ingress NGINX Controller 说明
      • CCE RDMA Device Plugin 说明
      • CCE Node Problem Detector 说明
      • CCE Credential Controller 说明
      • Kube Controller Manager 说明
      • CCE Ingress Controller 说明
      • CCE GPU Manager 说明
      • CCE Backup Controller 说明
      • CCE QoS Agent 说明
      • CCE Descheduler 说明
      • 组件概述
      • CCE Image Accelerate 说明
      • CCE Network Plugin说明
      • Kube ApiServer 说明
      • CCE Log Operator 说明
      • CoreDNS 说明
      • CCE NPU Manager 说明
      • CCE AI Job Scheduler 说明
      • CCE LB Controller 说明
      • CCE P2P Accelerator 说明
      • CCE_Hybrid_Manager说明
      • CCE CSI PFS Plugin 说明
      • CCE Deep Learning Frameworks Operator 说明
      • CCE Node Remedier 说明
      • CCE CSI CDS Plugin 说明
      • CCE Ascend Mindx DL说明
      • CCE Calico Felix 说明
      • CCE Virtual Kubelet组件
      • CCE Fluid说明
      • CCE Onepilot 说明
      • CCE CronHPA Controller 说明
      • CCE 动态调度插件说明
    • 云原生AI
      • 云原生AI概述
      • GPU虚拟化
        • MPS 最佳实践&注意事项
        • GPU独占和共享说明
        • GPU在离线混部使用说明
        • GPU虚拟化适配表
        • 单GPU容器共享多卡使用说明
        • 共享GPU场景下的镜像构建注意事项
        • 关闭节点显存共享功能注意事项
      • 队列管理
        • 逻辑队列和物理队列使用说明
        • 修改队列
        • 删除队列
        • 新建队列
      • 任务管理
        • 基于 NCCL的RDMA分布式训练示例
        • 新建AITraining任务
        • 新建PaddlePaddle任务
        • 删除任务
        • 查看任务信息
        • 新建Mxnet任务
        • 新建TensorFlow任务
        • 新建Pytorch任务
      • 数据集管理
        • 删除数据集
        • 操作数据集
        • 查看数据集
        • 新建数据集
      • AI监控大盘
        • 接入监控实例并开启采集任务
        • NVIDIA芯片资源观测
          • AI Job Scheduler组件
          • GPUManager组件
          • GPU资源池总览
          • GPU节点资源
          • GPU工作负载资源
        • 昇腾芯片资源观测
          • 昇腾节点资源
          • 昇腾资源池总览
          • 昇腾工作负载资源
      • AI 加速套件
        • 使用AIAK-Inference 加速推理业务
        • 使用AIAK-Training Pytorch版
        • AIAK 简介
        • 使用 AIAK-Training 部署分布式训练任务
    • Helm管理
      • Helm模板
      • Helm实例
    • 应用管理
      • 部署
      • 保密字典
      • 服务
      • 配置字典
      • 容器组
      • 概述
    • 镜像仓库
      • 使用容器镜像构建服务
      • 镜像仓库基本操作
    • Serverless集群
      • 在Serverless集群中使用Service
      • 产品概述
      • 创建Serverless集群
    • 工作负载
      • 设置工作负载自动水平伸缩
      • Statefulset管理
      • 使用私有镜像创建工作负载
      • Job管理
      • 查看容器组
      • CronJob管理
      • Daemonset管理
      • 免密拉取容器镜像
      • Deployment管理
    • 节点组管理
      • 节点组管理
      • 节点组介绍
      • 升级节点组
      • 添加外部已有节点
      • 自定义节点组 Kubelet 配置
      • 添加备选机型
      • 节点组节点故障检测自愈
      • 配置扩缩容策略
    • 监控日志
      • 使用Prometheus监控集群
      • CCE 事件中心
      • 集群审计仪表盘
      • CCE 集群异常事件报警
      • Java应用监控
      • 集群服务画像
      • 日志管理
      • 集群审计
      • 日志中心
        • 在容器引擎控制台配置采集规则
        • 查看集群控制面日志
        • 日志概述
        • 查看业务日志
        • 使用CRD配置采集规则
    • 网络管理
      • CCE 集群内容器访问集群外服务
      • 容器网段空间耗尽如何继续扩容(VPC-ENI模式)
      • 容器网段空间耗尽如何继续扩容(VPC网络模式)
      • CCE IP Masquerade Agent 用户指南
      • 创建VPC-ENI模式集群
      • 对等连接场景下容器流量转发配置
      • 使用Network Policy网络策略
      • CCE 支持 IPv4 和 IPv6 双栈网络
      • 在CCE集群中使用NetworkPolicy
      • 网络编排
        • 集群 Pod 子网拓扑分布(容器网络 v2)
        • 容器网络 QoS 管理
        • VPC-ENI指定子网分配IP(容器网络 v2)
      • 网络连通性
        • 容器网络通过 NAT 网关访问公网
      • 网络维护
        • CCE容器网络常见错误码对应表
      • DNS
        • DNS 原理概述
        • DNS 问题排查指南
        • CoreDNS 组件手动升级指南
    • 虚拟节点
      • 管理虚拟节点
      • 配置BCIPod
      • 配置bci-profile
    • 备份中心
      • 备份概述
      • 恢复管理
      • 备份仓库
      • 备份管理
    • 巡检与诊断
      • GPU运行环境检查
      • 集群巡检
      • 故障诊断
    • 流量接入
      • NGINX Ingress 使用配置参考
      • CCE基于nginx-ingress实现灰度发布
      • BLB Ingress Annotation说明
      • 通过CCE使用K8S_Ingress
      • 通过YAML创建LoadBalancer_Service
      • 通过CCE使用K8S_Service
      • LoadBalancer Service Annotation说明
      • 使用直连 Pod 模式 LoadBalancer Service
      • Service复用已有负载均衡BLB
      • 通过YAML创建CCE_Ingress
      • 使用 NGINX Ingress
    • 权限管理
      • 配置集群OIDC认证
      • 配置IAM标签权限策略
      • 配置IAM自定义权限策略
      • 配置IAM预置权限策略
      • 权限概述
      • 配置预置RBAC权限策略
    • 配置管理
      • Secret管理
      • Configmap管理
    • 集群管理
      • 集群快照
      • CCE 安全组
      • 查看集群
      • 创建集群
      • 操作集群
      • 升级集群Kubernetes版本
      • 通过kubectl连接集群
      • 托管集群使用说明
      • CCE 支持 GPUSharing 集群
      • CCE节点资源预留说明
      • CCE 节点 CDS 扩容
  • 服务等级协议SLA
    • CCE服务等级协议SLA(V1.0)
  • Solution-Fabric
    • Fabric解决方案
  • API参考
    • 通用说明
    • 公共头和错误返回
    • 概述
  • 常见问题
    • windows下使用kubectl
    • 自动扩缩容常见问题
    • 通过kubectl创建简单的服务
    • 业务应用如何使用负载均衡?
    • 常见问题总览
    • 集群管理常见问题
  • API_V2参考
    • 通用说明
    • Instance相关接口
    • 附录
    • Autoscaler相关接口
    • 组件管理相关接口
    • 套餐适配相关接口
    • Task相关接口
    • 公共头和错误返回
    • Network相关接口
    • 服务域名
    • Cluster相关接口
    • Kubeconfig相关接口
    • InstanceGroup相关接口
    • RBAC相关接口
    • 概述
  • 产品定价
    • 产品定价
  • Solution-Xchain
    • 超级链解决方案
  • SDK
    • Go-SDK
      • 节点组管理
      • 节点管理
      • 集群管理
      • 初始化
      • 安装SDK工具包
      • 概述
所有文档
menu
没有找到结果,请重新输入

容器引擎 CCE

  • 功能发布记录
  • 产品描述
    • 介绍
    • 优势
    • 使用限制
    • 应用场景
    • 核心概念
    • 特性
  • 开发指南
    • EFK日志采集系统部署指南
    • 创建LoadBalancer类型的Service
    • Prometheus监控系统部署指南
    • kubectl管理配置
    • 在CCE集群中使用-Network-Policy
  • 常用工具
    • 视图命令行场景示例
  • 产品公告
    • CCE 新版集群管理发布公告
    • CCE 控制台升级公告
    • Kubernetes 版本发布说明
      • CCE发布Kubernetes 1.18版本说明
      • CCE发布Kubernetes 1.30版本说明
      • CCE Kubernetes 版本更新说明
      • CCE发布Kubernetes 1.22版本说明
      • CCE发布Kubernetes 1.20版本说明
      • CCE发布Kubernetes 1.28版本说明
      • CCE发布Kubernetes 1.24版本说明
      • CCE发布Kubernetes 1.26版本说明
    • 安全漏洞修复公告
      • 漏洞CVE-2020-14386修复公告
      • 修复漏洞CVE-2021-30465公告
      • 漏洞CVE-2019-5736修复公告
      • 漏洞CVE-2025-1097、CVE-2025-1098等修复公告
      • 关于 runc 的安全问题(CVE-2024-21626)影响声明
  • 快速入门
    • 快速部署nginx应用
    • 使用CCE容器引擎流程概述
  • 典型实践
    • CCE集群网络说明及规划
    • CCE典型实践之容器网络模式选择
    • Pod异常问题排查
    • 通过 CCE Ingress 实现虚机和容器服务的统一接入
    • CCE集群使用Jenkins持续发布
    • CCE-访问公网实践
    • Linux系统配置常用参数说明
    • 用户使用自定义 CNI 插件方法
    • CCE典型实践之Guestbook搭建
    • 使用KMS对etcd数据加密
    • 添加CGroup V2节点
    • CCE容器运行时选择
    • CCE使用检查清单
    • VPC-ENI模式集群访问公网实践
    • 利用 Velero 实现将应用跨云迁移到 百度CCE
    • 使用 CNI 配置容器内网络参数
    • CCE Resource Recommender 用户文档
    • CCE集群中使用私有镜像实践
    • 云原生AI
      • 使用 CCE AITraining Operator 实现弹性容错训练
      • 部署 TensorFlow Serving 推理服务
      • GPU虚拟化之隔离性最优型的最佳实践
  • 操作指南
    • 多用户访问控制
    • 使用须知
    • 命名空间管理
      • 设置资源配额
      • 设置资源限制
      • 命名空间基本操作
    • 弹性伸缩
      • 使用 cce-autoscaling-placeholder 实现秒级弹性伸缩
      • CCE 集群节点自动伸缩
      • 容器定时水平伸缩(CronHPA)
      • 容器水平伸缩(HPA)
    • 存储管理
      • 使用云盘CDS
      • 使用并行文件存储PFS
      • 使用对象存储BOS
      • 使用并行文件存储PFS L2
      • 使用本地存储
      • 使用数据湖存储加速工具RapidFS
      • 使用文件存储CFS
      • 概述
    • 节点管理
      • 移出节点
      • kubelet容器监控只读端口风险提示
      • 管理污点
      • 设置GPU显存共享
      • 添加节点
      • 自定义Kubelet参数
      • 设置节点封锁
      • 节点排水
      • 管理节点标签
    • 组件管理
      • CCE CSI BOS Plugin 说明
      • Kube Scheduler 说明文档
      • CCE CSI PFS L2 Plugin
      • CCE NodeLocal DNSCache 说明
      • CCE Ingress NGINX Controller 说明
      • CCE RDMA Device Plugin 说明
      • CCE Node Problem Detector 说明
      • CCE Credential Controller 说明
      • Kube Controller Manager 说明
      • CCE Ingress Controller 说明
      • CCE GPU Manager 说明
      • CCE Backup Controller 说明
      • CCE QoS Agent 说明
      • CCE Descheduler 说明
      • 组件概述
      • CCE Image Accelerate 说明
      • CCE Network Plugin说明
      • Kube ApiServer 说明
      • CCE Log Operator 说明
      • CoreDNS 说明
      • CCE NPU Manager 说明
      • CCE AI Job Scheduler 说明
      • CCE LB Controller 说明
      • CCE P2P Accelerator 说明
      • CCE_Hybrid_Manager说明
      • CCE CSI PFS Plugin 说明
      • CCE Deep Learning Frameworks Operator 说明
      • CCE Node Remedier 说明
      • CCE CSI CDS Plugin 说明
      • CCE Ascend Mindx DL说明
      • CCE Calico Felix 说明
      • CCE Virtual Kubelet组件
      • CCE Fluid说明
      • CCE Onepilot 说明
      • CCE CronHPA Controller 说明
      • CCE 动态调度插件说明
    • 云原生AI
      • 云原生AI概述
      • GPU虚拟化
        • MPS 最佳实践&注意事项
        • GPU独占和共享说明
        • GPU在离线混部使用说明
        • GPU虚拟化适配表
        • 单GPU容器共享多卡使用说明
        • 共享GPU场景下的镜像构建注意事项
        • 关闭节点显存共享功能注意事项
      • 队列管理
        • 逻辑队列和物理队列使用说明
        • 修改队列
        • 删除队列
        • 新建队列
      • 任务管理
        • 基于 NCCL的RDMA分布式训练示例
        • 新建AITraining任务
        • 新建PaddlePaddle任务
        • 删除任务
        • 查看任务信息
        • 新建Mxnet任务
        • 新建TensorFlow任务
        • 新建Pytorch任务
      • 数据集管理
        • 删除数据集
        • 操作数据集
        • 查看数据集
        • 新建数据集
      • AI监控大盘
        • 接入监控实例并开启采集任务
        • NVIDIA芯片资源观测
          • AI Job Scheduler组件
          • GPUManager组件
          • GPU资源池总览
          • GPU节点资源
          • GPU工作负载资源
        • 昇腾芯片资源观测
          • 昇腾节点资源
          • 昇腾资源池总览
          • 昇腾工作负载资源
      • AI 加速套件
        • 使用AIAK-Inference 加速推理业务
        • 使用AIAK-Training Pytorch版
        • AIAK 简介
        • 使用 AIAK-Training 部署分布式训练任务
    • Helm管理
      • Helm模板
      • Helm实例
    • 应用管理
      • 部署
      • 保密字典
      • 服务
      • 配置字典
      • 容器组
      • 概述
    • 镜像仓库
      • 使用容器镜像构建服务
      • 镜像仓库基本操作
    • Serverless集群
      • 在Serverless集群中使用Service
      • 产品概述
      • 创建Serverless集群
    • 工作负载
      • 设置工作负载自动水平伸缩
      • Statefulset管理
      • 使用私有镜像创建工作负载
      • Job管理
      • 查看容器组
      • CronJob管理
      • Daemonset管理
      • 免密拉取容器镜像
      • Deployment管理
    • 节点组管理
      • 节点组管理
      • 节点组介绍
      • 升级节点组
      • 添加外部已有节点
      • 自定义节点组 Kubelet 配置
      • 添加备选机型
      • 节点组节点故障检测自愈
      • 配置扩缩容策略
    • 监控日志
      • 使用Prometheus监控集群
      • CCE 事件中心
      • 集群审计仪表盘
      • CCE 集群异常事件报警
      • Java应用监控
      • 集群服务画像
      • 日志管理
      • 集群审计
      • 日志中心
        • 在容器引擎控制台配置采集规则
        • 查看集群控制面日志
        • 日志概述
        • 查看业务日志
        • 使用CRD配置采集规则
    • 网络管理
      • CCE 集群内容器访问集群外服务
      • 容器网段空间耗尽如何继续扩容(VPC-ENI模式)
      • 容器网段空间耗尽如何继续扩容(VPC网络模式)
      • CCE IP Masquerade Agent 用户指南
      • 创建VPC-ENI模式集群
      • 对等连接场景下容器流量转发配置
      • 使用Network Policy网络策略
      • CCE 支持 IPv4 和 IPv6 双栈网络
      • 在CCE集群中使用NetworkPolicy
      • 网络编排
        • 集群 Pod 子网拓扑分布(容器网络 v2)
        • 容器网络 QoS 管理
        • VPC-ENI指定子网分配IP(容器网络 v2)
      • 网络连通性
        • 容器网络通过 NAT 网关访问公网
      • 网络维护
        • CCE容器网络常见错误码对应表
      • DNS
        • DNS 原理概述
        • DNS 问题排查指南
        • CoreDNS 组件手动升级指南
    • 虚拟节点
      • 管理虚拟节点
      • 配置BCIPod
      • 配置bci-profile
    • 备份中心
      • 备份概述
      • 恢复管理
      • 备份仓库
      • 备份管理
    • 巡检与诊断
      • GPU运行环境检查
      • 集群巡检
      • 故障诊断
    • 流量接入
      • NGINX Ingress 使用配置参考
      • CCE基于nginx-ingress实现灰度发布
      • BLB Ingress Annotation说明
      • 通过CCE使用K8S_Ingress
      • 通过YAML创建LoadBalancer_Service
      • 通过CCE使用K8S_Service
      • LoadBalancer Service Annotation说明
      • 使用直连 Pod 模式 LoadBalancer Service
      • Service复用已有负载均衡BLB
      • 通过YAML创建CCE_Ingress
      • 使用 NGINX Ingress
    • 权限管理
      • 配置集群OIDC认证
      • 配置IAM标签权限策略
      • 配置IAM自定义权限策略
      • 配置IAM预置权限策略
      • 权限概述
      • 配置预置RBAC权限策略
    • 配置管理
      • Secret管理
      • Configmap管理
    • 集群管理
      • 集群快照
      • CCE 安全组
      • 查看集群
      • 创建集群
      • 操作集群
      • 升级集群Kubernetes版本
      • 通过kubectl连接集群
      • 托管集群使用说明
      • CCE 支持 GPUSharing 集群
      • CCE节点资源预留说明
      • CCE 节点 CDS 扩容
  • 服务等级协议SLA
    • CCE服务等级协议SLA(V1.0)
  • Solution-Fabric
    • Fabric解决方案
  • API参考
    • 通用说明
    • 公共头和错误返回
    • 概述
  • 常见问题
    • windows下使用kubectl
    • 自动扩缩容常见问题
    • 通过kubectl创建简单的服务
    • 业务应用如何使用负载均衡?
    • 常见问题总览
    • 集群管理常见问题
  • API_V2参考
    • 通用说明
    • Instance相关接口
    • 附录
    • Autoscaler相关接口
    • 组件管理相关接口
    • 套餐适配相关接口
    • Task相关接口
    • 公共头和错误返回
    • Network相关接口
    • 服务域名
    • Cluster相关接口
    • Kubeconfig相关接口
    • InstanceGroup相关接口
    • RBAC相关接口
    • 概述
  • 产品定价
    • 产品定价
  • Solution-Xchain
    • 超级链解决方案
  • SDK
    • Go-SDK
      • 节点组管理
      • 节点管理
      • 集群管理
      • 初始化
      • 安装SDK工具包
      • 概述
  • 文档中心
  • arrow
  • 容器引擎CCE
  • arrow
  • 操作指南
  • arrow
  • 云原生AI
  • arrow
  • 任务管理
  • arrow
  • 基于 NCCL的RDMA分布式训练示例
本页目录
  • 概述
  • 使用前提
  • 环境验证
  • 提交任务
  • YAML方式提交任务
  • 准备
  • 任务示例
  • 关键参数说明
  • 控制台方式提交任务

基于 NCCL的RDMA分布式训练示例

更新时间:2025-08-21

概述

RDMA(Remote Direct Memory Access)是新一代的网络通信技术,它允许计算机之间直接进行内存对内存的数据传输,而不需要经过操作系统或中央处理器的处理。在大规模的分布式训练中,通过使用RDMA有效解决网络传输中服务器端数据处理的延迟问题,从而实现高吞吐、低延迟的网络通信,提升训练效率。

本文档用于介绍在云原生AI的环境下使用 RDMA 网络进行分布式训练。

说明:
1、由于 RDMA 网络的特殊性,以下示例在自建k8s集群中可能无法适用。
2、IB和RoCE在使用上几乎无区别,如无特别说明以下均以RoCE为例,IB在应用侧无需更改。
3、业务镜像中需要使用 nccl 依赖库,这里推荐使用 NVIDIA GPU Cloud(NGC)提供的基础镜像。NGC 提供的基础镜像通常会包含 nccl 依赖库,并且已经预先配置和优化了许多常用的深度学习框架和工具。使用 NGC 基础镜像可以简化您的设置和配置过程,并确保您能够顺利使用 nccl 进行 GPU 加速计算和深度学习任务。

使用前提

  • 已经创建集群,且集群中至少有2台具有RDMA网络的GPU实例。
  • GPU实例镜像中包含ofed和nvidia驱动,这里推荐使用百度智能云提供的GPU镜像,已包含OFED驱动,无需手动安装。
  • 集群已安装 云原生AI CCE RDMA Device Plugin、 CCE GPU Manager 、 CCE AI Job Scheduler 和 CCE Deep Learning Frameworks Operator 组件。

环境验证

登录集群内具有 RDMA 网络的GPU节点,运行以下命令验证主机环境。

  1. 验证 ofed 驱动
Plain Text
1$ ofed_info -s         #roce驱动版本
2MLNX_OFED_LINUX-5.8-1.1.2.1:
  1. 验证 Nvidia GPU 驱动
Plain Text
1$ nvidia-smi  #nvidia gpu驱动
2+-----------------------------------------------------------------------------+
3| NVIDIA-SMI 470.141.03   Driver Version: 470.141.03   CUDA Version: 11.4     |
4|-------------------------------+----------------------+----------------------+
5| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
6| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
7|                               |                      |               MIG M. |
8|===============================+======================+======================|
9|   0  NVIDIA A100-SXM...  On   | 00000000:53:00.0 Off |                    0 |
10| N/A   29C    P0    64W / 400W |      0MiB / 81251MiB |      0%      Default |
11|                               |                      |             Disabled |
12+-------------------------------+----------------------+----------------------+
13|   1  NVIDIA A100-SXM...  On   | 00000000:59:00.0 Off |                    0 |
14| N/A   32C    P0    61W / 400W |      0MiB / 81251MiB |      0%      Default |
15|                               |                      |             Disabled |
16+-------------------------------+----------------------+----------------------+
17|   2  NVIDIA A100-SXM...  On   | 00000000:6E:00.0 Off |                    0 |
18| N/A   33C    P0    67W / 400W |      0MiB / 81251MiB |      0%      Default |
19|                               |                      |             Disabled |
20+-------------------------------+----------------------+----------------------+
21|   3  NVIDIA A100-SXM...  On   | 00000000:73:00.0 Off |                    0 |
22| N/A   29C    P0    60W / 400W |      0MiB / 81251MiB |      0%      Default |
23|                               |                      |             Disabled |
24+-------------------------------+----------------------+----------------------+
25|   4  NVIDIA A100-SXM...  On   | 00000000:8D:00.0 Off |                    0 |
26| N/A   29C    P0    60W / 400W |      0MiB / 81251MiB |      0%      Default |
27|                               |                      |             Disabled |
28+-------------------------------+----------------------+----------------------+
29|   5  NVIDIA A100-SXM...  On   | 00000000:92:00.0 Off |                    0 |
30| N/A   32C    P0    65W / 400W |      0MiB / 81251MiB |      0%      Default |
31|                               |                      |             Disabled |
32+-------------------------------+----------------------+----------------------+
33|   6  NVIDIA A100-SXM...  On   | 00000000:C9:00.0 Off |                    0 |
34| N/A   33C    P0    64W / 400W |      0MiB / 81251MiB |      0%      Default |
35|                               |                      |             Disabled |
36+-------------------------------+----------------------+----------------------+
37|   7  NVIDIA A100-SXM...  On   | 00000000:CF:00.0 Off |                    0 |
38| N/A   28C    P0    62W / 400W |      0MiB / 81251MiB |      0%      Default |
39|                               |                      |             Disabled |
40+-------------------------------+----------------------+----------------------+
41
42+-----------------------------------------------------------------------------+
43| Processes:                                                                  |
44|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
45|        ID   ID                                                   Usage      |
46|=============================================================================|
47|  No running processes found                                                 |
48+-----------------------------------------------------------------------------+
  1. 查询 RDMA 网卡
Plain Text
1$ show_gids
2DEV	PORT	INDEX	GID					IPv4  		VER	DEV
3---	----	-----	---					------------  	---	---
4mlx5_0	1	0	fe80:0000:0000:0000:f820:20ff:fe28:c769			v1	eth0
5mlx5_0	1	1	fe80:0000:0000:0000:f820:20ff:fe28:c769			v2	eth0
6mlx5_0	1	2	0000:0000:0000:0000:0000:ffff:0a00:3c03	10.0.60.3  	v1	eth0
7mlx5_0	1	3	0000:0000:0000:0000:0000:ffff:0a00:3c03	10.0.60.3  	v2	eth0
8mlx5_1	1	0	fe80:0000:0000:0000:eaeb:d3ff:fecc:c920			v1	eth1
9mlx5_1	1	1	fe80:0000:0000:0000:eaeb:d3ff:fecc:c920			v2	eth1
10mlx5_1	1	2	0000:0000:0000:0000:0000:ffff:190b:8002	25.11.128.2  	v1	eth1
11mlx5_1	1	3	0000:0000:0000:0000:0000:ffff:190b:8002	25.11.128.2  	v2	eth1
12mlx5_2	1	0	fe80:0000:0000:0000:eaeb:d3ff:fecc:c921			v1	eth2
13mlx5_2	1	1	fe80:0000:0000:0000:eaeb:d3ff:fecc:c921			v2	eth2
14mlx5_2	1	2	0000:0000:0000:0000:0000:ffff:190b:8022	25.11.128.34  	v1	eth2
15mlx5_2	1	3	0000:0000:0000:0000:0000:ffff:190b:8022	25.11.128.34  	v2	eth2
16mlx5_3	1	0	fe80:0000:0000:0000:eaeb:d3ff:fe6c:51d2			v1	eth3
17mlx5_3	1	1	fe80:0000:0000:0000:eaeb:d3ff:fe6c:51d2			v2	eth3
18mlx5_3	1	2	0000:0000:0000:0000:0000:ffff:190b:8042	25.11.128.66  	v1	eth3
19mlx5_3	1	3	0000:0000:0000:0000:0000:ffff:190b:8042	25.11.128.66  	v2	eth3
20mlx5_4	1	0	fe80:0000:0000:0000:eaeb:d3ff:fe6c:51d3			v1	eth4
21mlx5_4	1	1	fe80:0000:0000:0000:eaeb:d3ff:fe6c:51d3			v2	eth4
22mlx5_4	1	2	0000:0000:0000:0000:0000:ffff:190b:8062	25.11.128.98  	v1	eth4
23mlx5_4	1	3	0000:0000:0000:0000:0000:ffff:190b:8062	25.11.128.98  	v2	eth4
24mlx5_5	1	0	fe80:0000:0000:0000:eaeb:d3ff:fe33:1366			v1	eth5
25mlx5_5	1	1	fe80:0000:0000:0000:eaeb:d3ff:fe33:1366			v2	eth5
26mlx5_5	1	2	0000:0000:0000:0000:0000:ffff:190b:8082	25.11.128.130  	v1	eth5
27mlx5_5	1	3	0000:0000:0000:0000:0000:ffff:190b:8082	25.11.128.130  	v2	eth5
28mlx5_6	1	0	fe80:0000:0000:0000:eaeb:d3ff:fe33:1367			v1	eth6
29mlx5_6	1	1	fe80:0000:0000:0000:eaeb:d3ff:fe33:1367			v2	eth6
30mlx5_6	1	2	0000:0000:0000:0000:0000:ffff:190b:80a2	25.11.128.162  	v1	eth6
31mlx5_6	1	3	0000:0000:0000:0000:0000:ffff:190b:80a2	25.11.128.162  	v2	eth6
32mlx5_7	1	0	fe80:0000:0000:0000:eaeb:d3ff:fe6c:68ae			v1	eth7
33mlx5_7	1	1	fe80:0000:0000:0000:eaeb:d3ff:fe6c:68ae			v2	eth7
34mlx5_7	1	2	0000:0000:0000:0000:0000:ffff:190b:80c2	25.11.128.194  	v1	eth7
35mlx5_7	1	3	0000:0000:0000:0000:0000:ffff:190b:80c2	25.11.128.194  	v2	eth7
36mlx5_8	1	0	fe80:0000:0000:0000:eaeb:d3ff:fe6c:68af			v1	eth8
37mlx5_8	1	1	fe80:0000:0000:0000:eaeb:d3ff:fe6c:68af			v2	eth8
38mlx5_8	1	2	0000:0000:0000:0000:0000:ffff:190b:80e2	25.11.128.226  	v1	eth8
39mlx5_8	1	3	0000:0000:0000:0000:0000:ffff:190b:80e2	25.11.128.226  	v2	eth8

提交任务

NCCL是NVIDIA的集合通信库,能实现Collective通信和点对点通信,NCCL内部已经实现了RDMA通信,同时NCCL可以根据环境中网卡类型和拓扑关系,自行选择一个最优的通信路径,目前主流的分布式训练框架都已支持NCCL。

下面介绍将介绍如何在云原生AI 上通过 YAML或者控制台的方式,提交基于NCCL的RDMA分布式训练任务。

YAML方式提交任务

准备

已通过kubectl连接kubernetes集群。具体操作,请参见通过Kubectl连接集群。

任务示例

以下是一个swin-transformer基于NCCL的Pytorch分布式训练任务的示例:

Plain Text
1apiVersion: "kubeflow.org/v1"
2kind: "PyTorchJob"
3metadata:
4  name: "pytorch-swin-transformer-nccl"
5spec:
6  pytorchReplicaSpecs:
7    Master:
8      replicas: 1
9      restartPolicy: OnFailure
10      template:
11        metadata:
12          annotations:
13            sidecar.istio.io/inject: "false"
14        spec:
15          containers:
16            - name: pytorch
17              image: registry.baidubce.com/cce-ai-native/swin-transformer-torch:v2.0
18              imagePullPolicy: IfNotPresent
19              command:
20              - /bin/sh
21              - -c
22              - python -m torch.distributed.launch --nproc_per_node 8 --nnodes $WORLD_SIZE --node_rank $RANK --master_addr $HOSTNAME --master_port $MASTER_PORT main.py --cfg configs/swin/swin_large_patch4_window7_224_22k.yaml --pretrained swin_large_patch4_window7_224_22k.pth --data-path /imagenet --batch-size 128 --accumulation-steps 2
23              env:
24                - name: NCCL_DEBUG
25                  value: "INFO"
26                - name: NCCL_IB_DISABLE
27                  value: "0"
28              securityContext:
29                capabilities:
30                  add: [ "IPC_LOCK" ]
31              resources:
32                limits:
33                  baidu.com/a100_80g_cgpu: 8
34                  rdma/hca: 1
35              volumeMounts:
36                - mountPath: /imagenet
37                  name: dataset
38                - mountPath: /dev/shm
39                  name: cache-volume
40          schedulerName: volcano
41          volumes:
42            - name: dataset
43              persistentVolumeClaim:
44                claimName: imagenet-22k-pvc
45            - emptyDir:
46                medium: Memory
47              name: cache-volume
48    Worker:
49      replicas: 1
50      restartPolicy: OnFailure
51      template:
52        metadata:
53          annotations:
54            sidecar.istio.io/inject: "false"
55        spec:
56          containers:
57            - name: pytorch
58              image: registry.baidubce.com/cce-ai-native/swin-transformer-torch:v2.0
59              imagePullPolicy: IfNotPresent
60              command:
61              - /bin/sh
62              - -c
63              - python -m torch.distributed.launch --nproc_per_node 8 --nnodes $WORLD_SIZE --node_rank $RANK --master_addr $MASTER_ADDR --master_port $MASTER_PORT main.py --cfg configs/swin/swin_large_patch4_window7_224_22k.yaml --pretrained swin_large_patch4_window7_224_22k.pth --data-path /imagenet --batch-size 128 --accumulation-steps 2
64              env:  
65                - name: NCCL_DEBUG
66                  value: "INFO"
67                - name: NCCL_IB_DISABLE
68                  value: "0"
69              securityContext:
70                capabilities:
71                  add: [ "IPC_LOCK" ]
72              resources:
73                limits:
74                  baidu.com/a100_80g_cgpu: 8
75                  rdma/hca: 1
76              volumeMounts:
77                - mountPath: /imagenet
78                  name: dataset
79                - mountPath: /dev/shm
80                  name: cache-volume
81          volumes:
82            - name: dataset
83              persistentVolumeClaim:
84                claimName: imagenet-22k-pvc
85            - emptyDir:
86                medium: Memory
87              name: cache-volume
88          schedulerName: volcano
89---
90apiVersion: v1
91kind: PersistentVolume
92metadata:
93  name: imagenet-22k-pv
94spec:
95  accessModes:
96  - ReadWriteMany
97  storageClassName:
98  capacity:
99    storage: 100Gi
100  csi:
101    driver: csi-clusterfileplugin
102    volumeHandle: data-id
103    volumeAttributes:
104      parentDir: /           #必填,自定义路径
105      path: ""               #必填,pfs 挂载路径,这里需要填写相对于 parentDir 的路径
106      clusterIP: ""          #必填,pfs实例的endpoint
107      clusterPort: "8888"    #必填,当前端口固定为8888
108      clientID: ""           #非必填,pfs实例的id
109
110---
111kind: PersistentVolumeClaim
112apiVersion: v1
113metadata:
114  name: imagenet-22k-pvc
115  namespace: default
116spec:
117  accessModes:
118    - ReadWriteMany
119  storageClassName: 
120  resources:
121    requests:
122      storage: 100Gi

关键参数说明

  1. NCCL需要输入环境变量来使能RDMA特性,具体包括以下环境变量:

    备注:带 * 号的环境变量,云原生AI会基于百度智能云内部大规模分布式训练经验,在任务运行时会自动注入推荐的值,无需手动填写

键 值 含义 备注
NCCL_IB_DISABLE 0,1 0代表NCCL使用的IB/RoCE传输;
1代表禁止NCCL使用的IB/RoCE传输。此时NCCL将退回到使用IP套接字
--
NCCL_IB_HCA* mlx5_1 ~ mlx5_8 NCCL_IB_HCA 变量指定使用哪些RDMA接口进行通信。
根据套餐类型填对应的值,例如:8卡的roce套餐填mlx5_1~mlx5_8,4卡为mlx5_1~mlx5_4,以此类推。
注:mlx5_0通常为tcp网络的主网卡
云原生AI在任务运行时,会自动检测容器的roce环境,并为容器PID为1的进程自动注入NCCL_IB_HCA 、NCCL_SOCKET_IFNAME 、 NCCL_IB_GID_INDEX、NCCL_IB_TIMEOUT 和 NCCL_IB_QPS_PER_CONNECTION 环境变量;通过PID1创建的子进程会继承这个环境变量,但是如果是通过sh启动的进程则无法继承。
如果用户在yaml中声明了这几个环境变量,容器运行时则不再自动注入
NCCL_SOCKET_IFNAME* eth0 NCCL_SOCKET_IFNAME变量指定使用哪个IP接口进行通信;
注:容器内默认是eth0
NCCL_IB_GID_INDEX* 动态值 NCCL_IB_GID_INDEX变量定义了RoCE模式中使用的全局ID索引。设置方法请参见ib show_gids命令。
注:如果是通过容器网络使用RoCE网卡,CCE的CNI插件会为容器创建对应数量的子网卡,roce网卡的GID INDEX会动态生成。如果容器内有show_gids命令,可以看到对应的值。
NCCL_IB_TIMEOUT* 22 网络断点重连超时时间。
NCCL_IB_QPS_PER_CONNECTION* 8 每个IB qp连接的连接数。
NCCL_DEBUG INFO NCCL_DEBUG变量控制从NCCL显示的调试信息。此变量通常用于调试。
  1. 为了在rank之间共享数据,NCCL需要为IPC和固定(页面锁定)系统内存资源共享系统内存,需要在YAML中配置如下参数
Plain Text
1              securityContext:
2                capabilities:
3                  add: [ "IPC_LOCK" ]  #使能进程间通信
4              resources:
5                limits:
6                  baidu.com/a100_80g_cgpu: 8
7                  rdma/hca: 1  #使能RDMA资源
8              volumeMounts:
9                - mountPath: /imagenet
10                  name: dataset
11                - mountPath: /dev/shm  #使用Emptydir,为IPC提供足够的共享内存  
12                  name: cache-volume
13          volumes:
14            - name: dataset
15              persistentVolumeClaim:
16                claimName: imagenet-22k-pvc
17            - emptyDir:  #使用Emptydir,为IPC提供足够的共享内存            
18                medium: Memory
19              name: cache-volume
  1. 此示例运行依赖开源数据集ImageNet-22K。这里使用百度云并行文件存储PFS作为共享存储,需要将上述开源数据集提前拷贝PFS挂载目录中,如何在CCE容器集群中使用并行文件存储PFS详见:这里。

控制台方式提交任务

  1. 登录百度智能云官网,并进入管理控制台。
  2. 选择“产品服务 > 云原生 > 容器引擎 CCE”,单击进入容器引擎管理控制台。
  3. 单击左侧导航栏中的集群管理 > 集群列表。
  4. 在集群列表页面中,单击目标集群名称进入集群管理页面。
  5. 在集群管理页面单击云原生AI > 任务管理。
  6. 在任务管理页面单击 新建任务,进入创建任务的流程
  7. 在 新建任务 > 容器配置 ,任务类型模块,训练方式选择 分布式 后,选择 开启RDMA 即可。

截屏2024-06-03 上午11.20.45.png

备注:云原生AI控制台会默认向任务中注入上述 YAML示例中的关键参数,无需手动填写

上一篇
队列管理
下一篇
新建AITraining任务