RDMA
RDMA 全称是 Remote Direct Memory Access(远程直接内存访问),是一种高性能网络通信技术。它允许一台计算机直接访问另一台计算机的内存数据,而无需经过对方的 CPU、中断或操作系统内核的干预。这种方式大大降低了网络通信的延迟和 CPU 的负载,非常适合需要低延迟、高吞吐量的场景。
主要特点
- 低延迟:绕过操作系统的内核,减少数据传输路径上的延迟。
- 高带宽:能够充分利用网络硬件的最大带宽。
- 低 CPU 占用:由于数据传输不经过 CPU,可以释放 CPU 资源用于其他任务。
- 零拷贝:数据可以直接从一个应用程序的缓冲区传输到另一个应用程序的缓冲区,无需中间拷贝。
实现方式
目前,主要有三种主流的 RDMA 实现方式:
-
InfiniBand (IB)
- 专为高性能计算设计的网络协议。
- 提供极低的延迟和高带宽。
- 需要专用的硬件设备(如交换机、网卡等)。
-
RoCE (RDMA over Converged Ethernet)
- 在标准以太网上运行 RDMA。
- 支持现有的以太网基础设施,但需要支持 DCB(Data Center Bridging)特性的交换机。
- 分为 RoCEv1(仅限单个二层网络)和 RoCEv2(支持三层路由)。
-
iWARP (Internet Wide Area RDMA Protocol)
- 在 TCP/IP 上运行 RDMA。
- 可以在标准的 IP 网络上运行,但性能可能不如 InfiniBand 或 RoCE。
弹性容器中使用
弹性容器集群跨节点支持 RDMA,只需要在您部署容器的 YAML 文件资源定义中加上 RDMA 设备标签,目前支持如下配置:
rdma/rdma_shared_device_a: 1rdma/rdma_shared_device_b: 1
示例
apiVersion: ray.io/v1
kind: RayCluster
metadata:
name: raycluster-kuberay
spec:
rayVersion: '2.40.0'
headGroupSpec:
rayStartParams: {}
template:
spec:
containers:
- name: ray-head
image: registry.hd-01.alayanew.com:8443/vc-app_market/ray-ml-vllm:0.7.1
resources:
requests:
memory: "1600G"
cpu: "144"
nvidia.com/gpu-h800: 8
rdma/rdma_shared_device_a: 1
rdma/rdma_shared_device_b: 1
limits:
memory: "1600G"
cpu: "144"
nvidia.com/gpu-h800: 8
rdma/rdma_shared_device_a: 1
rdma/rdma_shared_device_b: 1
workerGroupSpecs:
- replicas: {{ .Values.raycluster.workerGroupSpecs.replicas }}
groupName: workergroup
rayStartParams: {}
template:
spec:
containers:
- name: ray-worker
image: registry.hd-01.alayanew.com:8443/vc-app_market/ray-ml-vllm:0.7.1
resources:
requests:
memory: "1600G"
cpu: "144"
nvidia.com/gpu-h800: 8
rdma/rdma_shared_device_a: 1
rdma/rdma_shared_device_b: 1
limits:
memory: "1600G"
cpu: "144"
nvidia.com/gpu-h800: 8
rdma/rdma_shared_device_a: 1
rdma/rdma_shared_device_b: 1最后更新于
这篇文档对你有帮助吗?
