新浪微博 吴磊——基于Spark的大规模机器学习在微博的应用

2020-02-27 585浏览

  • 1.基于Spark的大规模机器学习在微博的应用 新浪微博 wulei3@staff.weibo.com
  • 2.新浪微博 自我介绍 • 吴磊 • 现任职于新浪微博,负责计算框架设计&实现 • 曾就职于IBM、联想研究院,从事数据仓库、大数据应用 • 微博:小生活与大数据 • 微信:方块K • 邮箱:wulei3@staff.weibo.com
  • 3.新浪微博 议题 • 微博业务场景 • 大规模机器学习 • 微博机器学习框架
  • 4.新浪微博 新浪微博 • 中国领先社交媒体平台 • 数据 • MAU:3.40亿+(2017Q1) • DAU:1.54亿+(2017Q1) • 同比增长:30%左右 • 用户分布:91%移动端 • 刷新数:百亿级 • 曝光数:千亿级
  • 5.微博业务场景 微博业务场景 业务场景复杂 业务场景多样性 (Feed, Hot, Rec, PUSH, Anti-spam, etc) 微博内容体量大 微博内容数据多样 (文本、图片、音频、视频,等) 用户体量大 高频访问 用户间关系纷杂 特征类别多 特征维度巨大 近百亿级别特征维度 近万亿级别样本量 算法模型多样化 (LR, SVM, GBDT, RF, NN, FP, FM,etc)
  • 6.大规模机器学习 大规模机器学习
  • 7.大规模机器学习 大规模机器学习 - 基于Spark Mllib的尝试&实践 经验之谈: • Too many RDD union >> stackoverflow • Driver out of memory >> spark.driver.maxResultSize • Model AUC=0.5 >> lower learning rate • Integer.MAX_VALUE >> partition.size less than 2G • Shuffle fetch failed >> spark.local.dir • Shuffle fetch failed >> JVM GC adjustment • Shuffle fetch failed >> spark.network.timeout 挑战: 亿维特征空间 参数矩阵巨大 • 内存开销 • 网络开销
  • 8.大规模机器学习 大规模机器学习 - 基于Spark的参数服务器 PS Server: • 主从架构 • 服务化 • 梯度更新 • 权重更新 • 多参数副本 PS Client: • Spark executors • Summon PS actors • 读取参数(PUSH) • 拉取参数(PULL) Yarn
  • 9.大规模机器学习 大规模机器学习 - 基于Spark的参数服务器
  • 10.大规模机器学习 大规模机器学习 - 基于Spark的参数服务器 异步随机梯度下降算法 • 将数据分块 • 分块数据拉取参数 • 计算分块数据梯度 • 将梯度更新到参数服务器 • 重复上述操作
  • 11.大规模机器学习 大规模机器学习 - 基于Spark的参数服务器 性能优化: • Batch Size • PS server count • Sparse • Partitioning • Spark memory tuning
  • 12.大规模机器学习 大规模机器学习 - 基于Spark的参数服务器 优化实例:Batch Size对性能的影响 BatchSize Parameter(MB) Tx(MB) 20000 10000 5000 2000 1000 500 200 60 25 30 35 15 47 6 50 3 50 1.5 87 0.6 94.3 Pull(ms) 1925.91 862.373 300 98 55.56 63.95 87.64 Push(ms) 6868.88 3013.54 1500 404 199.79 193.22 176.587 Time(s) 2118 1924 1573 1392 1307 1059 1302
  • 13.大规模机器学习 大规模机器学习 - 基于Spark的参数服务器 优化实例: Batch Size
  • 14.大规模机器学习 大规模机器学习 - 基于Spark的参数服务器 新的挑战: • 更多的算法支持 • 性能优化 • 半同步尝试 What’s next? • Contained with Docker • 通过ZooKeeper实现配置化
  • 15.微博机器学习框架 微博机器学习框架
  • 16.微博机器学习框架 机器学习流图 发博流 曝光流 互动流 XXX 流 特征工程 原始样本 数 特 据 征 处 映 理 射 训练样本 实时预测 线上 自动部署 模 映 型 射 文 规 件 则 模型训练、评估、验证 离线
  • 17.微博机器学习框架 现存挑战&问题 迭代上线 业务开发流程冗长 业务脚本调用混乱 算法多样性 模型多样性 特征、数据处理繁琐 python tensorflow 计算框架多样性 redis storm hive hadoop 系统运行门槛高 spark 平台化需求 执行性能差 沟通效率低
  • 18.微博机器学习框架 weiflow 统一计算框架 node hive spark node node tensorflow node input • Text • Csv • Libsvm • Parquet • Orc • Json • 统计 process • • 清洗 过滤 • 组合 • 采样 • 转换 • 。。。 output
  • 19.微博机器学习框架 One XML to rule them all Node DAG构造 Node内input、process、output 1 1 1 2 2
  • 20.微博机器学习框架 weiflow 开发API 支持语言: • Scala • Java
  • 21.微博机器学习框架 weiflow 实现 框架部分: XML解析 JVM反射 Scala语言特性 业务部分: • Array >> HashMap • map >> mapPartitions • Dense >> Sparse • Currying、Partial functions • Busy driver • Broadcast variables • Spark SQL • Spark ML • DataFrame
  • 22.微博机器学习框架 weiflow 功效 业务开发效率 提升显著 执行性能(6T,1000亿) 20hours >> 20mins 业务代码贡献 更加活跃 业务部门 沟通效率提升 模型性能(GBDT+LR) AUC up 0.05~0.1
  • 23.微博机器学习框架 weiflow 应用(特征组合) 性别 设备 2 20 互动 时间 range 36 粉丝数 logE 15 组合特征 21600维 = 2 * 20 * 36 * 15
  • 24.微博机器学习框架 weiflow 应用(特征组合) 组合特征的使用 featureIndex@featureName@mapType@operator@args 16@combinedFeauture1@enum@cartesian@f1+f2+f3+…+fN
  • 25.微博机器学习框架 weiflow 应用(特征组合) 组合特征的实现 Feature1(localIndex, dim) Feature2(localIndex, dim) Feature1.localIndex * Feature2.dim + Feature2.localIndex
  • 26.微博机器学习框架 weiflow 应用(GBDT+LR) 特征库 GBDT 机选特征 机选特征空间 人选特征 数据处理 特征映射 + 人选特征空间 LR 模型训练
  • 27.微博机器学习框架 weiflow 应用(GBDT+LR) node1 node2 GBDT模型训练 GBDT预测 LR特征映射 LR模型训练
  • 28.微博机器学习框架 weiflow 应用(GBDT+LR) GBDT预测/映射 读入数据 读取模型文件 预测(By ID) 叶子节点集合 特征映射
  • 29.微博机器学习框架 weiflow 应用(FM) 特征库 人选特征 数据处理 特征映射 人选特征空间 FM 模型训练
  • 30.微博机器学习框架 weiflow 应用(FM) node1 数据清洗 数据提取 特征映射 FM训练
  • 31.You are WANTED! You are WANTED! 微博算法平台 • 分布式系统研发 • 算法系统研发 • 深度学习系统研发 联系方式 • 微博:小生活与大数据 • Email:wulei3@staff.weibo.com
  • 32.以微博之力,让世界更美!