J.P.Liu

机器学习从业者

  
使用TensorFlow C++ API构建线上预测服务 - 篇1
目前,TensorFlow官方推荐使用Bazel编译源码和安装,但许多公司常用的构建工具是CMake。TensorFlow官方并没有提供CMake的编译示例,但提供了MakeFile文件,所以可以直接使用make进行编译安装。另一方面,模型训练成功后,官方提供了TensorFlow Servering进行预测的托管,但这个方案过于复杂。对于许多机器学习团队来说,一般都有自己的一套模型托管和预测服务,如果使用TensorFlow Servering对现存业务的侵入性太大,使用TensorFlow C++ API来导入模型并提供预测服务能方便的嵌入大部分已有业务方案,对这些团队来说比较合适。
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`那种丝滑的体验。
SGD优化算法的各种变体
2017年前,公司内部的算法团队还都是使用`XGBoost`来训练模型,手动构造的特征已经几百个,特征迭代效果微弱,但在搜索推荐场景下,有大规模的离散特征,这类特征记忆效果非常好,如果加入模型训练会获得不错的效果提升,但树模型并不适合大规模离散特征,所以我开发了一个基于`Parameter Server`架构的分布式机器学习框架,主要支持大规模离散的浅层模型,比如`Logistic Regression`、`Factorization Machine`、`Field-aware Factorization Machine`分类模型以及对应的回归模型和`SVD分解`。这个机器学习框架使用`Yarn`调度在公司的大数据集群上,在线上取得了非常不错的收益,框架后续又开始朝着深度模型和在线学习演化,目前公司算法团队已经基本往大规模离散DNN迁移完毕。这里主要记录一下训练框架支持的一些优化算法,公式脑子只能记个大概,还是写下来方便以后查阅。
VSCode下Markdown和LaTex混合编辑环境配置
最近在公司用Markdown写技术博客时,需要插入伪代码块,而Markdown里没有找到比较美观的实现方案,想到之前在学校写论文时一直用LaTex,里面的伪代码非常漂亮,所以就想在Markdown里混合使用LaTex,下面是从网上找到的解决方案汇总,方便自己以后查阅。
MXNet之NNVM代码简析
Symbol提供了许多图的接口,便于前端访问,而Graph里面没几个接口,主要就是有个indexed_graph,便于底层训练时快速访问。Symbol非常灵活,以后有可能支持动态图,但每次动态变化后都要先转成Graph,底层不太支持动态度,因为都是vector用index来索引node,不太适合中间插入一个node。