神经网络的吞吐率(Throughput)定义为网络模型在单位时间(例如1s)内可以处理的最大输入的训练样本数据。
与涉及单个样本数据处理的延迟Latency不同,为了实现最大吞吐率,我们希望在集群训练的过程中有效并行处理尽可能多的样本数据。这种有效的并行性显然依赖于数据、模型和设备规模。
要找到最佳Batch Size大小值,一个好的经验法则是达到Ascend昇腾处理器对给定数据类型的内存限制,即Batch Size占满内存。这取决于硬件类型、网络的大小以及输入数据的大小。
要找到这个最大的Batch Size,最快方法是执行二分搜索。当时间不重要时,简单的顺序搜索就足够了。不过在大模型训练的过程中,Batch Size的值会影响到重计算、Pipeline并行、Tensor并行等不同并行模式的配比,还有micro Batch Size的数据配比。因此默认Batch Size为16的倍数比较合理。
这确定了AI加速卡上可以处理的最大批量大小,用于训练大模型及其处理的输入训练样本数据。
在确定最佳Batch Size值后,可以使用以下公式计算实际吞吐量:
对于固定shape的NLP任务,吞吐率的单位为samples/s时,可通过seq_len,将吞吐率指标单位换算为tokens/s,吞吐率换算公式为:
假设GLM10B网络模型的吞吐率为25 samples/s,max seq_len为1024,那么按照tokens来计算吞吐率为 25 * 1024 = 25600 tokens/s,也就是每秒能处理2万多个tokens。