在 Tensorflow 框架的实现中 , 这样一个作业间拓扑结构由一个 TF Cluster Spec 结构来描述 , 每个 Role(PS or Worker)实例都包含一个 Index 标识自身索引号 , 可以通过Role+Index 获取自身或其他Role实例的服务地址 , 即可建立连接开始通信 。 在标准容器网络模式中 , 用户提交以下 TFJob , KubeDL 会生成 TF Cluster Spec 并以环境变量的形式传入并被框架接收 , 同时为每个 Role 实例都准备好 Headless Service , 它的 Endpoint 域名地址即对应 TF Cluster Spec 中的服务地址 , 每个 Pod 都拥有一份独立的 Linux Network Namespace , Pod 的端口地址空间也相互隔离 , 因此调度到相同的 Node 上也可以使用相同的容器端口 。
至此不同 Role 的实例间就能通过 Tensorflow 原生的方式开始分布式训练及通信 。
标准容器网络的好处显而易见 , 简单直观的网络设置 , FailOver 友好的网络容错 , 都使得这一方案能够满足大多数场景下的需求 。 但对高性能网络有诉求的场景下又该如何运转呢?KubeDL 给出了主机网络的解决方案 。
Host 容器网络拓扑
沿用以上的例子 , 启用主机网络的方式很简单 , 只要给 TFJob 追加一个 annotation 即可 , 其余的作业配置都无需特殊改造 , 如下所示:
apiVersion: training.kubedl.io/v1alpha1kind: \"TFJob\"metadata: name: \"mnist\" namespace: kubedl annotations: kubedl.io/network-mode: hostspec: cleanPodPolicy: None tfReplicaSpecs: PS: ... Worker: ... 当 KubeDL 发现该作业声明了使用主机网络后 , 会通过以下步骤完成网络的连接设置:
创建 Pod 时不再使用固定端口 , 而是在一定端口范围内随机出一个主机端口 , 并设置对应暴露的容器端口号 , 通过上下文的方式传递到后续的控制流中; 对 Pod 启用 HostNetwork 并设置 DNS 解析策略为 Host 优先; 不再创建 Headless Service , 取而代之的是一个正常的流量转发 Service , 暴露端口为原先的恒定值 , 目标端口为 Pod 的真实值; 生成的 TF Cluster Spec 中 , 自身对应的 Role+Index 可见 Local 地址端口为真实的主机端口 , 其他 Role 实例的地址端口都是恒定的 , 无论对方的 Pod 如何漂移都能通过 Service 正确转发; 当发生 FailOver 时 , KubeDL 会为重建后的 Pod 重新选择端口 , 新启动的 Pod 会通过 TF_CONFIG 得到新的 Local 地址端口 , 同时 KubeDL 保证对应 Service 的目标端口得到正确更新 , 其他与之相连的 Role 也能在 Service 目标端口更新后继续通信; 这样一个根据训练作业拓扑结构搭建的主机网络就准备换好了 , 与之前的不同之处在于 , 所有的 Pod 都与主机共用了一个 Network Namespace , 因此也共享了主机的端口号 , 而 Pod 之间的通信也从原先通过解析域名为 Pod IP 并建立连接 , 变成了通过 Service 实现流量的转发 , 另一方面 TF Cluster Spec 发生了变化但没有改变原生 Tensorflow 的模式 , 当前 Pod 直接获得 Local Port 监听 , 而其他的 Pod 地址看起来都是恒定的 Service 对应的域名和暴露的端口永远恒定 , 只有目标端口可能随着 FailOver 不断改变 , 这一切都通过 KubeDL 处理变得无感 。
我们以 Tensorflow 作为主机网络的例子 , 因为它的 Cluster Spec 复杂性更具代表性 , 但 KubeDL 的内置工作负载(如 PyTorch , XGBoost 等)我们也都针对其框架的行为实现了对应主机网络模式的网络拓扑设置 。
总结 KubeDL 通过扩展现有的分布式训练作业标准容器网络通信模式 , 实现了基于原生主机网络的通信模式 , 在常见训练场景下获得网络性能增益的同时 , 也完美适应了 RDMA/SCC 等高性能网络架构的环境 , 助力分布式训练作业运行效率的大幅提升 , 这一通信模式已经在阿里巴巴内部的生产集群中广泛使用 , 比如达摩院在云栖大会最新发布的 AliceMind 超大模型就是通过 KubeDL 主机网络+RDMA 在高性能计算集群中训练的产物 。 我们期待更多开发者参与 KubeDL 社区的建设 , 一起优化深度学习工作负载的调度及运行时效率!
作者:陈裘凯( 求索)
本文为阿里云原创内容 , 未经允许不得转载 。
- 默多克|IEEE Spectrum调查:AI 的 6 种最坏情况
- 惠普|惠普Spectre x360 14测评:搭载3: 2长宽比屏幕
- 惠普|轻薄本进化有点快 这款惠普 Spectre x360值得入
- 浪潮企业级解决方案|4679分!全球第一!浪潮云海虚拟化InCloud Sphere 破SPECvirt世界纪录!
- 安晟培半导体宣布收购AI技术初创公司OnSpecta
- 全球财经网|银河麒麟V10+ZStack+鲲鹏拿下SPEC Cloud测试全球最高分!
- 惠普|惠普Spectre x360评测:最好的2合1电脑,完美无缺
- RGB灯效:威刚发布XPG Spectrix S20G系列M.2 2280固态硬盘
- 中科创达、施耐德电气联合发布基于AWS的融合智能工业视觉平台TurboX Inspection
- 解决|中科创达推TurboX Inspection平台:为智慧工业领域降本增效,解决行业智能化问题