J.P.Liu

Work on ...

Distributed machine learning framework. Algorithm strategy in advertisement, search and recommendation systems.

  
TensorFlow分布式任务DataSet卡住问题
2018年,公司的分布式模型训练普遍向`TensorFlow on Yarn`迁移。在公司的Hadoop集群上,使用TensorFlow通过DataSet读数据方式进行分布式训练时,在每个Epoch的最后一个Batch会卡住,导致任务一直停在那里无法结束。集群节点都是`CentOS, linux kernel 3.10.0`。如果用老的Queue读取数据不会出现这个问题,并且这个问题不是必现,只有在分布式且节点比较多的时候发生的概率比较高。
CMake管理第三方依赖
最近在一个C++项目中尝试`Bazel`编译,编译依赖方式确实写着比较舒服和直观,但最后链接出来的二进制文件在执行时报`Segment error`,但用`CMake`编译出来的二进制文件就可以成功执行,Bazel编译的问题无从下手。另外,Bazel无法从系统目录查找头文件,这就不能忍了,有人建议从`cc_toolchain_config.bzl`查找问题,但toolchain实在是有点麻烦,就暂时放弃Bazel,继续使用CMake了。Bazel里提供的`git_repositry`等从外部源自动下载编译依赖的方式很好用,所以就思考在CMake里是不是也有类似的东西呢。之前使用CMake时,第三方依赖都是手动先在本地安装好,后来查找到了CMake里提供了类似Bazel的命令,那就是`ExternalProject`,不过这个命令只管下载编译等操作,但`git_repositry`更好使一些,它可以根据依赖自动判断是不是下载,而`ExternalProject`就没这么丝滑了,所以本文记录下在CMake怎样基于`ExternalProject`打造`git_repositry`那种丝滑的体验。
VSCode下Markdown和LaTex混合编辑环境配置
最近在公司用Markdown写技术博客时,需要插入伪代码块,而Markdown里没有找到比较美观的实现方案,想到之前在学校写论文时一直用LaTex,里面的伪代码非常漂亮,所以就想在Markdown里混合使用LaTex,下面是从网上找到的解决方案汇总,方便自己以后查阅。
SGD优化算法的各种变体
2017年前,公司内部的算法团队还都是使用`XGBoost`来训练模型,手动构造的特征已经几百个,特征迭代效果微弱,但在搜索推荐场景下,有大规模的离散特征,这类特征记忆效果非常好,如果加入模型训练会获得不错的效果提升,但树模型并不适合大规模离散特征,所以我开发了一个基于`Parameter Server`架构的分布式机器学习框架,主要支持大规模离散的浅层模型,比如`Logistic Regression`、`Factorization Machine`、`Field-aware Factorization Machine`分类模型以及对应的回归模型和`SVD分解`。这个机器学习框架使用`Yarn`调度在公司的大数据集群上,在线上取得了非常不错的收益,框架后续又开始朝着深度模型和在线学习演化,目前公司算法团队已经基本往大规模离散DNN迁移完毕。这里主要记录一下训练框架支持的一些优化算法,公式脑子只能记个大概,还是写下来方便以后查阅。
TensorFlow多Worker Barrier同步实现
同步机制在TensorFlow等分布式机器学习框架中非常重要,比如TensorFlow有以下场景需要做同步:1) 当chief worker训练完一轮后,保存模型前需要等所有worker都完成再保存模型。 2) BSP方式的SGD训练,需要每个batch做同步。 如果不做同步可能会出现如下问题: 1) TensorFlow大部分使用方案都是异步SGD,而且使用global_step做停止条件,不能保证所有worker负责的数据训练相同的轮数,速度快的worker所负责的数据将会获得更多step。 2) chief worker结束时会保存模型参数,但还存在其他worker没结束,所以模型没有完全训练完整。