n
的最小堆(优先队列)来维护每个 NPU 的当前负载,初值全为 0。直觉:把大的任务优先安排,并始终让它落到当前最“空闲”的设备,可有效压低最大负载。
大模型训练通常采用数据并行的训练方式,处理大规模数据集(样本),加速训练过程,具休的:
假设有n个NPU,m个样本,把m个样本分给n个NPU,每个NPU上有一份完整模型,各自计算自己的样本数据,其中m>=n,保证每个NPU至少分到一个样本,且样本不能切分,一个样本必须完整的被分到个NPU上
每个NPU的运行时间跟所分到的样本的长度和呈正相关。如果每个NPU上的样本长度和相差较大,会形成木桶效应,执行快的NPU等待执行慢的NPU,最终执行时间由最大样本和长度的NPU决定。
试着编号一段程序对样本进行均衡分配,设n个NPU上分得的最大的样本和为lmax,使lmax最小,即求min(lmax)
第一行为1个整数n(0<n<1000),表示NPU的个数
第二行为1个整数m(0<m<10000),表示样本的个数
第三行有m个处于区间[1,100000]之内的整数,表示m个样本中每个样本的长度
输出1个整数(行尾没有空格),该数字表示min(lmax)的值,
输入
4
7
89 245 64 128 79 166 144
输出
245
样本根据NPU个数进行分组,一共有4个NPU,所以有4个分组,最优样本分配如下:
$(1)79,144 \ (2)245 \ (3)64,166 \ (4)128,89$
求和分别为:223,245,230,217;4个NPU中最大的样本长度和为245、所以输出245
输入
2
3
145 274 100
输出
274
样本根据NPU个数进行分组,一共有2个NPU,3个样本;所以有2个分出,有以下3种分法:
(1)145,274+100;(2)274,145+100;(3)100,145+274
3种分法的最大样本和分别为:374,274,419;
所以第2种分法超均衡,最大样本和长度最小,为274,所以输出274