CubeStudio 是一款国产化、云原生的一站式开源人工智能平台,同时覆盖传统机器学习、深度学习与大模型全链路(MLOps / MaaS / 算力调度 / 训推平台),开源协议 MIT,开源免费商用,开源版本已有数千家企业私有化部署。平台提供多租户与算力纳管调度、算力租赁与 Token 中转站、拖拉拽 Pipeline 任务流编排、多机多卡分布式训练、超参搜索、推理服务、vGPU 虚拟化、云边端协同与边缘计算、图文音多模态自动化标注、大模型 SFT 微调 / 奖励模型 / 强化学习训练、vLLM / Ollama / MindIE 大模型多机推理、私有知识库 / LLMOps / 智能体、AI 模型市场,以及从数据到上线的全流程模型部署。原生适配昇腾、寒武纪、海光、摩尔线程、沐曦等国产异构算力与 x86 / ARM CPU 架构,支持 IB / RoCE / RDMA 高速网络及信创私有化、内网离线部署。

官网:https://www.cubestudio.vip | GitHub:https://github.com/data-infra/cube-studio | Gitee:https://gitee.com/data-infra/cube-studio

关键词:CubeStudio、cube-studio、RDMA、RoCE、InfiniBand、IB、NCCL、NCCL_IB_HCA、NCCL_SOCKET_IFNAME、NCCL_IB_GID_INDEX、NCCL_IB_DISABLE、集合通信、PyTorchJob、多机多卡、分布式训练、IPC_LOCK、rdma/hca、rdma/shared、show_gids、ofed_info、GPU、高速网络

多机多卡训练到一定规模,瓶颈往往不在算力而在网络——梯度同步的通信量巨大,普通 TCP 网络会把 GPU 拖成「算一会儿等一会儿」。RDMA(远程直接内存访问)让机器间内存直接互传、绕过内核和 CPU,是大规模分布式训练的标配。本文讲清怎么在云原生 GPU 集群上用 RDMA + NCCL 跑分布式训练,以及 CubeStudio 原生的 RDMA 资源支持。

说明:本文「环境验证」到「NCCL 参数」部分是通用 RDMA/NCCL 参考(以某公有云 RDMA 环境为例),适用于任意云原生 GPU 集群;CubeStudio 自身的 RDMA 能力见文末「原生 RDMA 支持」一节。

一、RDMA 为什么快

RDMA 允许计算机之间直接做内存到内存的数据传输,绕过操作系统内核与 CPU 的处理开销,实现高吞吐、低延迟通信。在大规模分布式训练里,它能显著降低梯度同步的服务器端延迟,从而提升训练效率。IB 与 RoCE 在应用侧几乎无区别(本文以 RoCE 为例,IB 无需改代码)。

二、先验证主机环境

登录带 RDMA 网络的 GPU 节点,三条命令确认环境就绪:

ofed_info -s     # OFED/RoCE 驱动版本,如 MLNX_OFED_LINUX-5.8-1.1.2.1
nvidia-smi       # NVIDIA 驱动与显卡状态(如 8 卡 A100-SXM)
show_gids        # 列出每张 RDMA 网卡(mlx5_x)的 GID 表

show_gids 是关键:它列出各 RDMA 网卡的 GID,后面配 NCCL_IB_HCA / NCCL_IB_GID_INDEX 要参考它。通常 mlx5_0 是 TCP 主网卡,mlx5_1~mlx5_8 才是 RoCE 数据网卡。

三、提交 NCCL 分布式训练任务

NCCL 是 NVIDIA 的集合通信库,内部已实现 RDMA 通信,会自动根据网卡类型和拓扑选最优路径,主流训练框架都支持它。以 PyTorchJob 提交多机训练时,几个要点必须到位:

containers:
  - name: pytorch
    image: <含 NCCL 的镜像,推荐 NGC 基础镜像>
    env:
      - name: NCCL_DEBUG
        value: "INFO"
      - name: NCCL_IB_DISABLE
        value: "0"            # 0 = 启用 IB/RoCE
    securityContext:
      capabilities:
        add: [ "IPC_LOCK" ]    # 锁页内存,RDMA 必需
    resources:
      limits:
        nvidia.com/gpu: 8
        rdma/hca: 1            # 申请 RDMA 资源
    volumeMounts:
      - mountPath: /dev/shm
        name: cache-volume     # 共享内存供 IPC 使用
schedulerName: volcano         # gang 批调度

三个不能漏的点:IPC_LOCK(RDMA 锁页内存必需)、rdma/hca 资源申请、/dev/shm 共享内存(供 rank 间 IPC)。训练 Pod 通常还要关掉 istio sidecar 注入。

四、NCCL 关键参数

NCCL 靠环境变量启用 RDMA 特性:

变量值含义
NCCL_IB_DISABLE0 / 10 用 IB/RoCE;1 退回 TCP 套接字
NCCL_IB_HCAmlx5_1~mlx5_8指定用哪些 RDMA 网卡(8 卡填 1~8,4 卡填 1~4;mlx5_0 是 TCP 主网卡不填)
NCCL_SOCKET_IFNAMEeth0控制面通信走哪个 IP 接口
NCCL_IB_GID_INDEX动态值RoCE 的全局 GID 索引,参考 show_gids
NCCL_IB_TIMEOUT22断点重连超时
NCCL_IB_QPS_PER_CONNECTION8每个 IB QP 连接数
NCCL_DEBUGINFO调试信息,排障常用

部分托管环境会自动检测 RoCE 并给 PID=1 进程注入 NCCL_IB_HCA/NCCL_SOCKET_IFNAME/NCCL_IB_GID_INDEX 等;但通过 sh 启动的子进程可能继承不到——自建集群通常需要自己显式设置。

五、CubeStudio 的原生 RDMA 支持

以上手写 YAML 的活,CubeStudio 已经产品化——平台内置 RDMA 资源的申请与自动注入,不依赖任何云厂商专有插件名:

  • 资源类型映射:config.py 的 RDMA_RESOURCE 把类型映射到 K8s 扩展资源名——ib → rdma/hca(IB 交换机实现)、roce → rdma/shared(RoCE 实现),默认 RDMA_RESOURCE_NAME='rdma/hca'(install/kubernetes/cube/overlays/config/config.py:1231-1236)。这个名字需与集群实际安装的 RDMA Device Plugin 暴露的资源名一致。
  • 灵活的申请写法:myapp/utils/core.py:1678 的 get_rdma() 支持 1(roce) / 2(ib) 这种写法——括号里的类型词会被映射成对应资源名,返回 (数量, 类型, 资源名)。
  • 自动注入:myapp/utils/py/py_k8s.py 在 rdma_num > 0 时,自动给容器追加 IPC_LOCK capability(py_k8s.py:1345-1348)并把 RDMA 资源写进 requests/limits(py_k8s.py:1287-1290)。也就是说,前面 YAML 里手写的 IPC_LOCK + rdma/hca: 1,在平台上是自动完成的。
  • 开关位置:是否启用 RDMA 一般在项目组配置里开启。

小结

用 RDMA 给分布式训练提速,链路是清晰的:验证环境(ofed_info / nvidia-smi / show_gids)→ 配对 NCCL 参数(NCCL_IB_HCA / NCCL_IB_GID_INDEX 等)→ 备齐三要素(IPC_LOCK / rdma 资源 / 共享内存)。而在 CubeStudio 上,这些都被收敛成「项目组开 RDMA + 任务填 1(roce)」,平台自动完成资源申请与 IPC_LOCK 注入——把公有云级别的高速网络训练能力,干净地落进你自己的私有化集群。


了解更多

CubeStudio 采用 MIT 开源协议,开源免费商用并支持源码交付与二次分发,开源版本已有数千家企业私有化部署。

  • 官网与在线文档:https://www.cubestudio.vip
  • 开源仓库(GitHub):https://github.com/data-infra/cube-studio
  • 开源仓库(Gitee):https://gitee.com/data-infra/cube-studio
Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐