一般而言,集群是由多台机器组成的集合,其整体性能是多台机器性能的共同体现。因此,当遇到集群性能问题时,定位这些问题往往更加复杂和抽象。在此,我们先简单讨论集群的构成和集群性能定位的基础思路,而在本章节中,主要集中讨论集群用于训练模型的应用场景。
对于模型训练而言,分为存储、计算和通信三个主要的行为模式。存储包含host内存、device(这里主要指昇腾产品)内存和大容量磁盘等,用来存储模型训练所需的模型权重、训练数据以及保存的数据。计算则比较简单,主要包含CPU和NPU的计算。集群的通信,不仅包含常规意义上单机内部的通信和机器节点之间的通信,还包含通信所需的总线、交换机等硬件资源。
对于大规模训练而言,三者均会对训练性能产生影响,以下分别说明。
- 存储:集群训练通常会使用共享存储,在大规模IO的情况下,共享存储很有可能因为带宽等原因造成阻塞,从而影响数据读取和权重保存,进而影响模型训练性能。这种影响,通常体现在host操作耗时较长上,从profiling(见单机优化分析方法)中,主要体现在较长的free time。
- 计算:对于大集群训练,因为机器数量众多,有可能出现某些机器节点计算较慢的情况,这种节点一般被称之为慢节点。慢节点通常会导致模型的通信时间大大增加。
- 通信:集群间一般通过交换路由器组成的网络进行通信,对于通信网络而言,因为通信量大,通信单元众多,容易出现网络丢包或网络拥塞等情况,具体表现为网络监控数据异常(如PFC队列异常)、所有卡均在等待等。需要注意的是,慢节点和通信问题都表现为通信时间的显著增加,但慢节点一定存在某个(或某些)节点很慢的现象,这是两者的重要区别。