Py学习  »  机器学习算法

无痛的机器学习系统入门指南(一)?

极市平台 • 4 年前 • 233 次点击  

加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动!

同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流点击文末“阅读原文”立刻申请入群~


来源:知乎专栏 -- 无痛的机器学习系统

https://zhuanlan.zhihu.com/p/65242220

已获作者授权,请勿二次转载


作为一个菜鸡小透明,贾扬清大神的点赞给了我无穷的动力。站在特别普通人的角度,谈一下如何入门机器学习系统,算是对过去一年的踩坑做一个总结。


总的来看,系统就是为了落地,层出不穷、琳琅满目的机器学习(基本就是深度学习)模型逐步走向实用化,会遇到各种各样的问题,去解决这些问题,机器学习系统应运而生。


过去小一年,在GitHub总结了一个相关资源的list:

https://github.com/HuaizhengZhang/Awesome-System-for-Machine-Learning

在总结的过程中,自己重新架构了这块的知识体系(基本上站在学术圈角度,工业大佬想法肯定更落地)。首先,机器学习分为若干阶段:数据收集和标定,处理数据,特征工程,编写模型,训练模型,模型管理,模型部署,其实每个阶段都对应着一种或多种机器学习系统,另外还有一些边缘计算AI系统,强化学习系统,AI视频系统,接下来也都分别说明。最后会站在菜鸡角度阐述一些问题的看法(何种语言?如何开始?...)



数据收集和标定 - Label System


这方面的突出工作是

polygonrnn++(http://www.cs.toronto.edu/~amlan/demo/)这种,系统、system这个概念太广,精确点儿这类工作可以称作tool,深度学习对数据的需求无穷无尽,这样的工作再多也不嫌多。


处理数据 - Data Processing System


超高速处理图像数据的Halide编译器(https://halide-lang.org/)是这一块的佼佼者,在很多很多相关项目中都能看到他的影子。个人另一个比较喜欢的工作是weld(https://www.weld.rs/),使用rust编写,抽象整个data science过程中的各种数据流,高端大气上档次。其它例如modin(https://github.com/modin-project/modin),改一行代码就能提高pandas的运行效率这样的项目很多,不一一列举了。


特征工程 - Auto-Feature-Engineering System


深度学习的端到端让这块的需求一下子不如之前那么多,很多AutoML系统都提供了相关接口,例如

h2o(https://github.com/h2oai/h2o-tutorials/tree/master/best-practices/feature-engineering),感觉不太火,不进一步列举了。


编写模型 - Framework


这个是概念上最容易懂,做起来难到爆,非大神无法进入的领域,caffe(贾扬清),Tensorflow(Jeff Dean),PyTorch,MxNet(李沐,陈天奇),xgboost(陈天奇),无论是推动,还是创建,有了他们,生活更简单,看看libsvm的引用,编写user-friendly的工具是多么的促进相关领域的发展。


训练模型-Distributed Training System


这一块和分布式系统息息相关,这一年给我的感觉是这类系统的论文数量比另外的总和都多。我个人大体将这块分成了三部分。


第一部分就是分布式训练系统,类似于

Parameter Server

(https://www.cs.cmu.edu/~muli/file/parameter_server_osdi14.pdf),强无敌,还有我师兄最近的work,一分半钟在imagenet上训练

alexnet(https://arxiv.org/pdf/1902.06855.pdf),快就完事了。


第二部分是更好的并行机制

大神Jia Zhihao的metaflow

(https://arxiv.org/pdf/1807.05358.pdf)可以瞻仰,提供了四种并行机制,然后用扎实的代码能力进行了实现


第三部分是如何在集群上更好的调度训练任务,让整体的训练时间缩短,去年听了HKU Wuchuan老师来我们组的talk,很精彩。这篇Optimus

(https://i.cs.hku.hk/~cwu/papers/yhpeng-eurosys18.pdf)也被伯克利的课程收录了,相关的工作也是越来越多。


管理模型 - Model DB


深度学习的管理和可复现性简直头疼,Spark大神公司的MLflow(https://www.mlflow.org)帮你管理整个模型的周期;MIT的

modelDB(https://mitdbg.github.io/modeldb/papers/hilda_modeldb.pdf)也能帮你进行模型的版本控制。


模型部署 - Model Deployment System


这块系统关注模型的预测(inference)阶段,我大体分成了三个部分。


第一部分是model serving system,这里面的佼佼者是Tensorflow-Serving,学术圈里比较出名的是

Clipper(https://www.usenix.org/system/files/conference/nsdi17/nsdi17-crankshaw.pdf),但是我们团队的试用体验不是很好。


第二部分是inference optimization,提升硬件的utilization,更好的model placement来加快模型运行,和network量化是完全不同的路子,这篇Dynamic Space-Time Scheduling for GPU Inference

(http://learningsys.org/nips18/assets/papers/102CameraReadySubmissionGPU_Virtualization%20(8).pdf)

可以一看


第三部分是编译器,不提了,知乎上相关讨论挺多的,TVM(又又又是陈天奇)独领风骚,各大公司也都有相关的project了。


走马观花的挑了一些文章,可以说系统支持了机器学习的全生命周期。再来谈一下看到的比较多的问题。


如何开始?


根据自己的知识体系,选择一个最接近的,正反馈稍微快一点的子领域。选择系统就意味着无法像深度学习的小伙伴一样一年3篇+,随便打开国内外系统大神的主页,两年做一个系统说不定还发不了好会都是很正常的现象,99%的代码跟论文无关,但是必须得做,不断擦干眼泪,不断上,所以选择自己入门快的领域,能让沮丧的时间短一点。


选定了就阅读优秀的相关源代码,这个过程感觉进步特别大,系统更注重现实意义,只要有价值,咬定不放松。


选择啥语言?


C++肯定是首选,效率是系统的要务。C++不太行咋办,我看到

Rust(https://www.weld.rs/),

Go(https://github.com/kubeflow/pipelines),

Jave(https://github.com/awslabs/mxnet-model-server)

都有相关的系统实现,系统还是要发现落地的痛点,

纯Python(https://github.com/mindsdb/mindsdb)也有,想点子,干就完事了。


未完待续,下篇文章补充一些其它应用系统,例如视频分析系统(视频数据大,应用ML model如何优化),强化学习系统(不同的范式,不同的架构)等等。


希望大家多提意见,共同进步。





*延伸阅读



点击左下角阅读原文”,即可申请加入极市 目标跟踪、目标检测、工业检测、人脸方向、视觉竞赛等技术交流群,更有每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流,一起来让思想之光照的更远吧~



觉得有用麻烦给个在看啦~  

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/35210
 
233 次点击