xwild / XLearning-XDML

extremely distributed machine learning

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool


license Release Version PRs Welcome

XDML是一款基于参数服务器(Parameter Server),采用专门缓存机制的分布式机器学习平台。 XDML内化了学界最新研究成果,在效果保持稳定的同时,能大幅加速收敛进程,显著提升模型与算法的性能。同时,XDML还对接了一些优秀的开源成果和360公司自研成果,站在巨人的肩膀上,博采众长。 XDML还兼容hadoop生态,提供更好的大数据框架使用体验,将开发者从繁杂的工作中解脱出来。XDML已经在360内部海量规模数据上进行了大量测试和调优,在大规模数据量和超高维特征的机器学习任务上,具有良好的稳定性,扩展性和兼容性。

欢迎对机器学习或分布式有兴趣的同仁一起贡献代码,提交Issues或者Pull Requests。

架构设计

architecture

针对超大规模机器学习的场景,奇虎360开源了内部的超大规模机器学习计算框架XDML。XDML是一款基于参数服务器(Parameter Server),采用专门缓存机制的分布式机器学习平台。它在360内部海量规模数据上进行了测试和调优,在大规模数据量和超高维特征的机器学习任务上,具有良好的稳定性,扩展性和兼容性。

功能特性

1.提供特征预处理/分析,离线训练,模型管理等功能模块

2.实现常用的大规模数据量场景下的机器学习算法

3.充分利用现有的成熟技术,保证整个框架的高效稳定

4.完全兼容hadoop生态,和现有的大数据工具实现无缝对接,提升处理海量数据的能力

5.在系统架构和算法层面实现深度的工程优化,在不损失精度的前提下,大幅提高性能

代码结构

1.ps

XDML的核心参数服务器架构,包括以下组件:

2.conf

XDML的配置包,包括对参数服务器的配置和对作业及模型相关的配置。包括以下组件:

3.task

XDML向PS提交的作业,包括拉取和推送。包括以下任务:

  • Task
  • PullTask
  • PushTask

4.optimization

XDML模型的优化算法包。包括以下优化算法:

5.ml

XDML中已经实现的部分机器学习模型。包括以下模型:

6.feature

XDML中特征分析和特征处理模块。

  • 特征分析

    特征分析覆盖常见的分析指标,如数值型特征的偏度、峰度、分位数,与label相关的auc、ndcg、互信息、相关系数等指标。

  • 特征处理

    特征处理覆盖常见的数值型、类别型特征预处理方法。包括以下算子:

    • CategoryEncoder
    • MultiCategoryEncoder
    • NumericBuckter
    • NumericStandardizer

7.model

XDML中包含用南京大学李武军老师提出的Scope优化算法进行训练的线性模型,以及部分H2O模型的spark pipeline封装。具体包括以下模型:

Model:

  • LinearScope
  • MultiLinearScope
  • OVRLinearScope
  • H2ODRF
  • H2OGBM
  • H2OGLM
  • H2OMLP

8.example

XDML中作业提交实例,可以参考Example.

编译&部署指南

XDML是基于Kudu、HazelCast以及Hadoop生态圈的一款基于参数服务器的,采用专门缓存机制的分布式机器学习平台。

环境依赖

  • centos >= 7
  • Jdk >= 1.8
  • Maven >= 3.5.4
  • scala >= 2.11
  • hadoop >= 2.7.3
  • spark >= 2.3.0
  • sparkling-water-core >= 2.3.0
  • kudu >= 1.9
  • HazelCast >= 3.9.3

Kudu安装部署

XDML基于Kudu,请首先部署Kudu。Kudu的安装部署请参考Kudu

源码下载

git clone https://github.com/Qihoo360/XLearning-XDML

编译

mvn clean package -Dmaven.test.skip=true 编译完成后,在源码根目录的target目录下会生成:xdml-1.0.jarxdml-1.0-jar-with-dependencies.jar等多个文件,xdml-1.0.jar为未加spark、kudu等第三方依赖,xdml-1.0-jar-with-dependencies.jar添加了spark、kudu等依赖包。

运行示例

提交参数

  • 算法参数
    • spark.xdml.learningRate:学习率
  • 训练参数
    • spark.xdml.job.type:作业类型
    • spark.xdml.train.data.path:训练数据路径
    • spark.xdml.train.data.partitionNum:训练数据分区
    • spark.xdml.model.path:模型存储路径
    • spark.xdml.train.iter:训练迭代次数
    • spark.xdml.train.batchsize:训练数据batch大小
  • PS相关参数
    • spark.xdml.hz.clusterNum:hazelcast集群机器数目
    • spark.xdml.table.name:kudu表名称

提交命令

可以通过以下命令提交示例训练作业:

  $SPARK_HOME/bin/spark-submit \   
    --master yarn-cluster \    
    --class net.qihoo.xitong.xdml.example.LRTest \   
    --num-executors 50 \   
    --executor-memory 40g \   
    --executor-cores 2 \   
    --driver-memory 4g \   
    --conf "spark.xdml.table.name=lrtest" \   
    --conf "spark.xdml.job.type=train" \   
    --conf "spark.xdml.train.data.path=$trainpath" \   
    --conf "spark.xdml.train.data.partitionNum=50" \   
    --conf "spark.xdml.hz.clusterNum=50" \   
    --conf "spark.xdml.model.path=$modelpath" \   
    --conf "spark.xdml.train.iter=5" \   
    --conf "spark.xdml.train.batchsize=10000" \   
    --conf "spark.xdml.learningRate=0.1" \   
    --jars xdml-1.0-jar-with-dependencies.jar \   
    xdml-1.0-jar-with-dependencies.jar   

注:提交命令中的设置有$SPARK_HOME$trainpath$modelpath 分别代表spark客户端路径、训练数据HDFS路径、模型存储HDFS路径

FAQ

XDML常见问题

参考文献

XDML参考了学界及工业界诸多优秀成果,对此表示感谢!

联系我们

Mail: g-xlearning-dev@360.cn
QQ群:874050710
qq

About

extremely distributed machine learning


Languages

Language:Scala 89.5%Language:Java 10.5%