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

云平台构建 RDMA高性能网络

RDMA的作用

  • RDMA:是一种绕过操作系统内核的网络通信技术,其核心在于通过网卡直接访问远端内存,避免了传统 TCP/IP 协议栈的数据拷贝和上下文切换开销。
  • NVIDIA GPU Direct[^2]:实现 GPU 显存与网卡 DMA 引擎的直接对接,当 GPU 需要与远端节点通信时,数据可直接通过 InfiniBand 或 RoCE 网卡传输,无需经过主机内存中转。
  • 网络虚拟化:Macvlan 和 SR-IOV 是两种常见的网络虚拟化方案。Macvlan 允许为容器创建虚拟网卡接口,使其在物理网络上显示为独立设备;而 SR-IOV 通过物理网卡的硬件虚拟化能力,将单个物理功能(PF)划分为多个虚拟功能(VF),每个 VF 都能直接分配给 Pod 使用。
  • 技术路径:目前 RDMA 主要有 InfiniBand 与 RoCE 两种实现方式。InfiniBand 原生支持 RDMA 协议,需要专用交换机和子网管理器构建独立网络,成本高昂;而 RoCEv2 则基于传统以太网基础设施,通过 PFC 和 ECN 等流控机制保障无损传输,被互联网公司广泛使用。

云平台RDMA网络结构

主要完成两个支持:

  • 接入ROCEV2, 使高速业务流量(data flow)可以走RDMA网络
  • 普通以太网走 控制流量和低速业务流量(controller flow),双网络平面达到高低速网络隔离效果。

构建方法

  • 使用multus-cni达到容器双网络支持
  • primiary cni 使用主机的物理网卡 lan0, lan1 聚合城的 bind01网卡(高可用),bind01网卡使用calico或cillium接入pod
  • secondary cni 使用 rocev2。rocev2 设备对应主机上的lanx--mlx5_x 设备,使用rdma-shared-device-plugin 向kubelet注册设备资源,容器调度到节点时将分配rocev2物理设备,multus-cni将使用 macvlan将分配的rocev2设备以名为netx 的网络设备映射入容器。

配置方法

rdmaSharedDevicePlugin配置:在物理机上lan2、lan3、lan4、lan5分别对应mlx5_0、mlx5_1、mlx5_2、mlx5_3,将四张网卡分别以nvidia.com/mlx5_0、nvidia.com/mlx5_1、nvidia.com/mlx5_2、http://nvidia.com/mlx5_3的资源名称变成k8s的扩展资源,每个扩展资源定义为100份。

rdmaSharedDevicePlugin: deploy: true image: k8s-rdma-shared-dev-plugin repository: ghcr.io/mellanox version: sha-fe7f371c7e1b8315bf900f71cd25cfc1251dc775 useCdi: false resources: - resourcePrefix: nvidia.com resourceName: mlx5_0 rdmaHcaMax: 100 vendors: [15b3] ifNames: [lan2] - resourcePrefix: nvidia.com resourceName: mlx5_1 rdmaHcaMax: 100 vendors: [15b3] ifNames: [lan3] - resourcePrefix: nvidia.com resourceName: mlx5_2 rdmaHcaMax: 100 vendors: [15b3] ifNames: [lan4] - resourcePrefix: nvidia.com resourceName: mlx5_3 rdmaHcaMax: 100 vendors: [15b3] ifNames: [lan5]

MacvlanNetwork配置:分别创建rdma-net-ipam-lan2、rdma-net-ipam-lan3、rdma-net-ipam-lan4、rdma-net-ipam-lan5四份MacvlanNetwork配置,每份对应一个k8s集群内部的ip pool,同时指定MacvlanNetwork所作用的业务pod所在的k8s命名空间,例子中假设业务pod都是在prod ns中。

apiVersion: mellanox.com/v1alpha1 kind: MacvlanNetwork metadata: name: rdma-net-ipam-lan2 spec: ipam: | { "type": "whereabouts", "datastore": "kubernetes", "kubernetes": { "kubeconfig": "/etc/cni/net.d/whereabouts.d/whereabouts.kubeconfig" }, "range": "192.168.4.0/22", "log_file" : "/var/log/whereabouts.log", "log_level" : "info", "gateway": "192.168.4.1" } master: lan2 mode: bridge mtu: 1500 networkNamespace: prod apiVersion: mellanox.com/v1alpha1 kind: MacvlanNetwork metadata: name: rdma-net-ipam-lan3 spec: ipam: | { "type": "whereabouts", "datastore": "kubernetes", "kubernetes": { "kubeconfig": "/etc/cni/net.d/whereabouts.d/whereabouts.kubeconfig" }, "range": "192.168.8.0/22", "log_file" : "/var/log/whereabouts.log", "log_level" : "info", "gateway": "192.168.8.1" } master: lan3 mode: bridge mtu: 1500 networkNamespace: prod apiVersion: mellanox.com/v1alpha1 kind: MacvlanNetwork metadata: name: rdma-net-ipam-lan4 spec: ipam: | { "type": "whereabouts", "datastore": "kubernetes", "kubernetes": { "kubeconfig": "/etc/cni/net.d/whereabouts.d/whereabouts.kubeconfig" }, "range": "192.168.12.0/22", "log_file" : "/var/log/whereabouts.log", "log_level" : "info", "gateway": "192.168.12.1" } master: lan4 mode: bridge mtu: 1500 networkNamespace: prod apiVersion: mellanox.com/v1alpha1 kind: MacvlanNetwork metadata: name: rdma-net-ipam-lan5 spec: ipam: | { "type": "whereabouts", "datastore": "kubernetes", "kubernetes": { "kubeconfig": "/etc/cni/net.d/whereabouts.d/whereabouts.kubeconfig" }, "range": "192.168.16.0/22", "log_file" : "/var/log/whereabouts.log", "log_level" : "info", "gateway": "192.168.16.1" } master: lan5 mode: bridge mtu: 1500 networkNamespace: prod

业务job配置:申请四张mlx网卡资源,在注解上打上四张mlx网卡的MacvlanNetwork配置,通过设置合适的NCCL环境变量启用RoCE网络。

nAvailable: 1 plugins: pytorch: - '--master=master' - '--worker=worker' - '--port=23456' policies: - action: RestartJob event: PodEvicted queue: default schedulerName: volcano tasks: - maxRetry: 3 minAvailable: 1 name: master replicas: 1 template: metadata: annotations: k8s.v1.cni.cncf.io/networks: rdma-net-ipam-lan2,rdma-net-ipam-lan3,rdma-net-ipam-lan4,rdma-net-ipam-lan5 spec: containers: - command: - /bin/bash - '-c' - sleep 1440h env: - name: NCCL_DEBUG value: INFO - name: NCCL_IB_DISABLE value: '0' - name: NCCL_NET_GDR_READ value: '1' - name: NCCL_IB_HCA value: mlx5 - name: NCCL_IB_GID_INDEX value: '5' - name: NCCL_SOCKET_IFNAME value: eth0 image: torch name: pytorch resources: limits: nvidia.com/gpu: '8' nvidia.com/mlx5_0: '1' nvidia.com/mlx5_1: '1' nvidia.com/mlx5_2: '1' nvidia.com/mlx5_3: '1' requests: nvidia.com/gpu: '8' nvidia.com/mlx5_0: '1' nvidia.com/mlx5_1: '1' nvidia.com/mlx5_2: '1' nvidia.com/mlx5_3: '1' schedulerName: volcano
apiVersion: batch.volcano.sh/v1alpha1 kind: Job metadata: name: rdma-test namespace: prod spec: maxRetry: 3 minAvailable: 1 plugins: pytorch: - '--master=master' - '--worker=worker' - '--port=23456' policies: - action: RestartJob event: PodEvicted queue: default schedulerName: volcano tasks: - maxRetry: 3 minAvailable: 1 name: master replicas: 1 template: metadata: annotations: k8s.v1.cni.cncf.io/networks: rdma-net-ipam-lan2,rdma-net-ipam-lan3,rdma-net-ipam-lan4,rdma-net-ipam-lan5 spec: containers: - command: - /bin/bash - '-c' - sleep 1440h env: - name: NCCL_DEBUG value: INFO - name: NCCL_IB_DISABLE value: '0' - name: NCCL_NET_GDR_READ value: '1' - name: NCCL_IB_HCA value: mlx5 - name: NCCL_IB_GID_INDEX value: '5' - name: NCCL_SOCKET_IFNAME value: eth0 image: torch name: pytorch resources: limits: nvidia.com/gpu: '8' nvidia.com/mlx5_0: '1' nvidia.com/mlx5_1: '1' nvidia.com/mlx5_2: '1' nvidia.com/mlx5_3: '1' requests: nvidia.com/gpu: '8' nvidia.com/mlx5_0: '1' nvidia.com/mlx5_1: '1' nvidia.com/mlx5_2: '1' nvidia.com/mlx5_3: '1' schedulerName: volcano

性能测试

参考文章

https://zhuanlan.zhihu.com/p/694555753

https://www.zhihu.com/question/454800042

http://www.jsqmd.com/news/466443/

相关文章:

  • 26版无菌附录|无菌药品高效过滤器检漏:条款解读+实操指南
  • Openclaw 龙虾卸载指南
  • 医药AIGC实战指南:AI疾病筛查助力药企实现精准患者挖掘与转化
  • 告别爬虫 openclaw 使用 Tushare 获取 A股市 美股 行情信息 历史数据 财务信息
  • 西门子1500 PLC立体仓库项目解析:智能仓储的实际应用
  • 算法杂记内容
  • 储能充放电状态约束
  • 2026年防火涂料用珍珠岩优质供应商推荐榜:珠光砂、闭孔珍珠岩、防火涂料用珍珠岩、防火门芯板、食品添加剂珍珠岩选择指南 - 优质品牌商家
  • 浏览器唤起支付宝打开特定地址
  • OpenClaw截至2026年3月11日,主流服务商与收费模式如下:
  • 爬虫学习阶段三:动态网页爬取(完整学习文档)
  • 十大品牌净水器排名,2026家用大型净水器全场景选购攻略 - 速递信息
  • Matlab人脸识别:PCA算法在Yale数据库中的应用及使用说明
  • Homebrew 详解:Mac 必备包管理工具及常用命令大全
  • 教程:自托管 OpenClaw 实现全离线任务自动化
  • 一文吃透动态规划:通用解题框架 + 实战案例
  • Flutter 三方库 sparky 的鸿蒙化适配指南 - 实现极简 2D 游戏引擎功能、支持高效精灵图渲染与跨端游戏逻辑
  • 大厂集体“养龙虾”!IT人再不进化就真的晚了!
  • 代码为舟,初心作桨——我的CSDN创作256天纪念
  • Python CSV文件处理详细教程
  • ChatGPT秒回的秘密?Transformer架构深度解析,不看后悔!
  • 专业不锈钢黑棒定制加工服务推荐:满足精密需求,不锈钢高压锅炉管/不锈钢薄壁板/不锈钢卷,不锈钢黑棒现货批发推荐 - 品牌推荐师
  • 关于化合物2471983-20-5(FAPI)的实验应用与保存规范说明
  • 车辆轮廓、车辆限界、设备限界与建筑限界的概念辨析及工程应用
  • 新能源倍速链流水线厂家核心实力,看这4点就够了
  • Vue的生命周期有哪些及执行机制?
  • 打开风电数据文件的瞬间,十几个G的CSV文件直接把同事的Excel卡崩了。这种真实数据就像没过滤的自来水,直接喝肯定窜稀。咱们先来点硬核预处理
  • OLED手机屏幕狂闪绿线用激光修复机轻松解决
  • 中国互联网大厂新产品增长解密
  • 三大主流数据库SQL注入差异详解,实战避坑不踩雷