Angel是基于PS范式的分布式机器学习系统。Parameter Server的引入,简化了计算模型的复杂度,提升了运行速度。但是,一个额外系统的引入,也造成了资源的配置复杂度增加。为此,我们编写了该指南,希望能帮助Angel的用户,更好的配置出高性能的PS系统,跑出高性能的算法。
运行一个Angel任务,需要确定任务的资源参数如下。根据你的数据大小,模型设计,机器学习算法,准确预估出所需要的资源,将能大大提升运行效率。
由于Angel的Master非常轻量,大部分情况下,使用默认参数就可以满足要求了,所以我们主要需要配置的是Worker和PS的资源参数。 计算不会发生在Master端,除非Worker数非常多,才需要稍微调大Master资源。
为了更好的实现数据并行,Angel可以自由配置Worker的个数。一般情况下,Worker的个数主要取决于总的需要计算的数据量大小。一般情况下,单个Worker处理的数据量推荐值为1-5GB(这里特指未压缩的文本格式数据,其他格式需要乘以对应的压缩比,下同)。
Worker的内存使用分布状况如下:
计算公式
定义如下变量:
N
Sm
Smd
Smmd
St
Sb
Worker内存估算公式为:
系统使用的内存可以通过下面的方法简单估算:
估算公式可以简化为:
与内存参数不一样的是CPU vcore只会影响任务执行效率,而不会影响任务的正确性。建议CPU vcore数和和内存参数按物理机器资源比例来调整。举一个简单的例子:
如果一台物理机器总的内存大小是100G,CPU vcore总数为50,当Worker内存配置为10G/20G时,CPU vcore可以配置为5/10。
PS个数配置主要取决于Worker个数,模型的格式,和模型大小相关。
一般Worker数量越多,模型越大,需要的PS个数越多。推荐PS个数为Worker个数的1/5-4/5。PS个数和算法相关性非常大,应具体算法具体分析。
PS的内存使用分布如下:
模型部分(model partitions):每个PS会加载的模型分区
系统部分(system buffer):Netty框架使用的ByteBuf pool等
定义如下变量
Smp
Sw
N
可以通过下面方式简单估算PS所需内存:
PS CPU VCore个数估算方法与Worker一致,但是具体需要根据算法来判断。如果有些算法,大量的计算发生在PS端,那么VCore需要稍微大点。
下面以LR为例,介绍一下Angel配置的方法。默认情况下,LR的模型是一个稠密的,以Double数组来存储模型和模型的分区。
假设LR的训练数据为300GB, 模型维度为1亿,
配置100个Worker,每个Worker执行的Task数量为1,每个Worker需要的内存估算如下:
Worker内存向上取整为8GB。PS个数为Worker个数的1/5, 即20个,一个PS上承载的模型分区大小为500万, 每个PS需要的内存为:
PS内存取整为8GB
假设每一台物理机器内存为128GB, CPU vcore总数为48个, 则Worker的CPU vcore数为:
PS 的CPU vcore数为: