在HPC场景下,底层网络的性能直接影响最终的结果,HPC往往会伴随海量的数据交换,特别是在跨Node之间,10Gb的以太网网络传输肯定要比100Gb的IB网络传输慢,本人所负责的训练平台也是如此,在一次训练过程中,GPU存在海量数据交换,虽然是在GPU之间,但本质还是通过网络进行传输,但是以太网的传输在HPC场景下往往显得不那么高效,因此可以通过RDMA或者如果预算够的话,通过硬件IB实现数据交换,能大大提高训练质量
本人所负责的训练平台是完全基于k8s的,现在要迁移至IB网络同时不影响现有业务进行,大大增加了实施难度,在经过一番调研之后,最终的方案为在原有的容器网络基础之上,再加一层IB网络层,即在k8s集群中同时存在2个网络,这在k8s是完全支持的,即在容器中除了eth0,由flannel cni分配, 还会有一个net1网络,由IB cni分配, eth0的网络用于集群之间的通信,而net1则用于训练时pod与pod节点进行通信,在实践之前先介绍几个比较重要的技术
Infinitband
infinitband做专门为高带宽,低时延,高可靠,不占用cpu资源的网络互联技术,大量被用于超算、AI等HPC场景下
这里不对infintband展开细说,感兴趣的可以参考下列连接
https://zhuanlan.zhihu.com/p/74238082
https://zhuanlan.zhihu.com/p/163104439
https://blog.csdn.net/swingwang/article/details/72935461
sr-iov
SR-IOV (Single Root Input/Output Virtualization) 的主要作用是将一个物理设备模拟成多个虚拟设备,在虚拟化技术中使用非常频繁,
sr-iov需要硬件上的支持,好在目前大部分服务器都支持了该技术,这里也不过多介绍其中的细节,后续用到的两个比较重要的概念:
SR-IOV引入了两种新的PCIe的Function:
- PFs:完整功能的PCIe Function包含了SR-IOV Extended Capability。这个Capability被用来配置和管理SR-IOV的功能。
- VFs:一部分轻量级的PCIe function,只包含必要的用于数据移动的最小可配置的资源。
一个 具备SR-IOV能力的设备可以被配置成被枚举出多个Virtual Functions(数量可控制),而且每个Funciton 都有自己的完整有BAR的配置空间。每个VF 分配给虚拟或者容器
https://zhuanlan.zhihu.com/p/347204232
https://blog.csdn.net/wangdd_199326/article/details/90476728
资源清单
下列的资源清单为部分集群资源且机器ip不为真实ip
机器 | 角色 | 以太网/IB网卡 | 内核/发行版 |
---|---|---|---|
10.4.52.2 | k8s master/v1.15.5 | Y/N | Linux-4.19 centos7.4 |
10.4.52.3 | k8s master/v1.15.5 | Y/N | Linux-4.19 centos7.4 |
10.4.52.4 | k8s master/v1.15.5 | Y/N | Linux-4.19 centos7.4 |
10.4.52.5 | k8s node/v1.15.5 | Y/Y,一个ib网口 | Linux-4.19 centos7.4 |
10.4.52.6 | k8s node/v1.15.5 | Y/Y,一个ib网口 | Linux-4.19 centos7.4 |
10.4.52.7 | k8s node/v1.15.5 | Y/Y,一个ib网口 | Linux-4.19 centos7.4 |
master做为控制面,用于集群间的管理角色
node上做为数据面,以太网用于与控制面进行交互,同时IB网卡用于HPC业务
组网图
在集群物理机器上,实际存在3个网络:
- 管理网(eth1), 用于机器的管控网,一般叫做ipmi或者带外、外带等,在服务器上有专门的网口标识
- 业务网(eth0), 用于flannel的启动参数指定的网卡名,这个网络在pod中用于与k8s控制面进行交互
- IB网(eth100), 用于ib网卡,在这个网卡上会通过sriov虚拟出若干网卡用于pod中
架构图
实现目的
最终要实现的目标为: 通过sriov在IB网卡上实现高性能容器网络以加速分布式训练的GPU数据交换