大规模机器学习工程上最大的挑战是模型的规模。在计算广告,推荐系统的场景下,运用Logistic Regression算法时常需要做特征交叉。原来两组,三组特征的数量可能并不是太大,但是通过交叉后可能会特征数会爆炸。例如,用户特征数1万,广告特征数1万,那么交叉后总特征数就是1亿,如果再与几十个广告位特征交叉,总特征数就会达到几十亿。有些情况下,特征交叉后,总数甚至能达到上千亿。特征数量的爆炸,也带来模型规模的爆炸,这给机器学习带来的挑战比庞大的训练数据量更大。
通常认为,当模型的规模超过单节点的容量后,基于MapReduce计算模型的Spark, Hadoop MapReduce就无法支持了。为了解决这一问题,Parameter Server应运而生,目前是大规模机器学习研究方面的前沿。目前Parameter Server还在发展的过程中,其使用,开发门槛相较于Spark来说都是较高的,而且在大数据平台中再引入一套新的计算平台,对整个体系的管理,运维都将带来更大点挑战。
Fregata致力于在Spark上解决大规模机器学习的问题,Fregata目前已经公开发布的版本已经能支持亿级维度的模型,而目前内部最新版本已经在一个月内连续突破了10亿,100亿,1000亿和10000亿4个台阶。在模型规模提高了4个数量级的同时保持了训练的高效性。下面是 Fregata的Logistic Regression算法在511412394个样本的训练集下的训练时间:
从上表可以看出,对于5亿多样本的训练集,在仅使用48个Executor的情况下,千亿维度以内的问题,都可在500秒内完成,而且每个Executor仅需最多2G内存。对于万亿维度的问题,训练时间也仅需800秒多一点,只是Executor的内存加到了8G。Fregata最近的突破,打破了在Spark上无法支持超大规模模型的瓶颈,将进一步降低大规模机器学习的使用门槛和成本。