加入收藏 | 设为首页 | 会员中心 | 我要投稿 怀化站长网 (https://www.0745zz.cn/)- 语音技术、云资源管理、物联设备、云计算、决策智能!
当前位置: 首页 > 大数据 > 正文

Kubernetes Node规模超过7500

发布时间:2021-06-05 20:43:26 所属栏目:大数据 来源:互联网
导读:我们的Kubernetes集群规模已经上升到7,500个节点,主要为诸如GPT-3、CLIP和DALLE等大型训练模型提供可扩展的基础架构,而且还可用于小规模快速迭代研究,例如神经语言模型的标度律等。将单个Kubernetes集群扩展到如此规模很难完成,同时在这个过程中需要格外
我们的Kubernetes集群规模已经上升到7,500个节点,主要为诸如GPT-3、CLIP和DALL·E等大型训练模型提供可扩展的基础架构,而且还可用于小规模快速迭代研究,例如神经语言模型的标度律等。将单个Kubernetes集群扩展到如此规模很难完成,同时在这个过程中需要格外小心。但好处是借助这种简单的基础架构使得我们的机器学习研究团队无需更改其代码就可以快速扩容。
自上一篇有关扩展到2,500个节点的文章发表以来,我们一直在不断扩展基础架构以满足研究人员的需求,在此过程中我们还学到了很多经验。这篇文章对此作了总结,以便Kubernetes社区共同受益,最后介绍我们仍然要面对的问题以及解决办法探讨。
工作负载
在我们深入讨论之前,介绍一下我们的工作负载是很重要的。我们运行Kubernetes软硬件和您在公司的情况可能不太一样。我们的问题和相应的解决方案可能是,也可能不是,也请您视情况而应用!
大型机器学习作业跨越许多节点,并且只有当可以访问每个节点上的所有硬件资源时,才能最大化运行效率。如此一来,GPU就可以通过 NVLink直接进行交叉通信,或者GPU也可以通过GPUDirect直接与NIC通信。因此,对于我们的许多工作负载,一个节点上只放置一个Pod。任何NUMA、CPU或PCIE资源争用都不是调度的因素,因此装箱调度或碎片化不是一个常见的问题。我们现有的集群拥有完整的对分带宽,因此也无需考虑任何机架或网络拓扑。所有这些都表明,我们的Kubernetes拥有许多节点,但是调度的压力相对较低。
不过,kube-scheduler上经常会出现峰值压力。一个新的Job可能包含数百个一次性创建的Pod,但具有较低的使用率。
 
我们最大的Job上运行着 MPI 协议(消息传递接口协议),该Job内的所有Pod都加入了同一个MPI通信器。如果某个Pod宕机,则整个Job都将暂停,需要重新启动。我们会定期保存检查点,Job重启时会从上一个检查点恢复。因此,可以认为Pod是半状态化的,终止的Pod可以被替换掉,而且Job还可以继续,但是这种做法会干扰正常的Job,应尽量减少。
由于HTTPS通道流量很少,也不需要进行A/B测试、蓝/绿或金丝雀部署,我们没有完全依赖Kubernetes进行负载均衡。Pod之间通过SSH(而不是服务端点),利用IP地址直接通过MPI相互通信。我们的服务“发现”功能很有限,一般只需要在Job启动的时候执行一次查找去找到MPI中的Pod。
我们的大多数Job都使用了某种形式的Blob存储。通常,它们会直接从Blob存储,以流的形式读取数据及或检查点的某些分片,或将其缓存到临时的本地磁盘。在需要POSIX语义的时候,我们也使用了一些持久卷,但是Blob存储更容易扩展,而且不需要缓慢的分离/附加操作。
最后要提醒,我们的工作大多是基于研究性质的,这意味着负载本身在不断变化。尽管超算团队努力提供了生产级别的计算基础架构,但集群上运行的应用程序的生命周期很短,而且开发人员的迭代非常快。新的使用模式随时可能出现,因此我们很难预料发展趋势,并做出适当的折中。我们需要一个可持续发展的系统,以便在事情发生变化时迅速做出响应。
网络
由于集群内的Node数和Pod数不断增长,我们发现Flannel难以扩展到所需的吞吐量。于是,我们转而使用原生Pod网络技术来管理Azure VMSSes的IP配置和相关的CNI插件。这样我们的Pod就能够获得宿主级别的网络吞吐。
我们最大的集群上大约有20万个IP地址正在使用中,在测试基于路由的Pod网络时,我们发现可以有效利用的路由数量受到了严重限制。因此我们改用基于别名的IP寻址。
避免封装增加了对底层SDN或路由引擎的要求,但它使我们的网络设置保持简单。无需任何额外的适配器就可以添加隧道。我们不需要担心数据包分片,因为网络的某些部分MTU较低。网络策略和流量监控也很简单;数据包的源和目的地不存在歧义。
我们在宿主上使用iptables来跟踪每个命名空间和Pod上网络资源的使用情况。这样研究人员就可以可视化网络的使用情况。具体来说,因为许多实验的互联网和Pod间通信都有独特的模式,所以能够调查何处可能出现瓶颈是非常必要的。
iptables的mangle规则可以给任何符合特定规则的数据包做标记。我们采用了以下规则来检测流量属于内部还是发向外网。FORWARD规则负责Pod间的流量,而INPUT和OUTPUT负责来自宿主的流量:
iptables -t mangle -A INPUT ! -s 10.0.0.0/8 -m comment --comment "iptables-exporter openai traffic=internet-in" 
iptables -t mangle -A FORWARD ! -s 10.0.0.0/8 -m comment --comment "iptables-exporter openai traffic=internet-in" 
iptables -t mangle -A OUTPUT ! -d 10.0.0.0/8 -m comment --comment "iptables-exporter openai traffic=internet-out" 
iptables -t mangle -A FORWARD ! -d 10.0.0.0/8 -m comment --comment "iptables-exporter  
做好标记后,iptables就会统计符合该规则的数据包的字节数。使用iptables命令就可以看到这些统计结果:

(编辑:怀化站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读