遍览200多个机器学习工具后,我学到了啥
大数据文摘出品
来源:huyenchip
编译:Fisher、Andy
因为机器学习研究的放缓,以及大家对产业化的需求。近来大家对MLOps的关注越来越高,特别是其中涉及到的各种各样的工具。
在这篇文章中,Chip小哥统计了两百多个机器学习相关工具,并且对整个该领域的发展和现状进行了回顾,同时列出机器学习开发的难点特别是和传统软件开发的不同点,最后还特意讨论了开源对该领域的影响。
最近,为了更好地了解机器学习领域工具的整体情况,我决定彻底调查每个能找到的人工智能/机器学习工具。整个过程中参考的资源包括:
- Full Stack Deep Learning
- LF AI Foundation landscape
- AI Data Landscape
- 各媒体评选出的AI创业公司榜单
- 推特和领英上收到的帖子回复
- 别人分享给我的工具列表(包括朋友、陌生人、风险投资人)
在筛掉只有应用程序的公司(如用机器学习提供商业分析的公司)、未处于积极开发中的工具,以及没人用的工具后,最后剩下202个工具。
完整列表如下:
https://docs.google.com/spreadsheets/d/1OV0cMh2lmXMU9bK8qv1Kk0oWdc_Odmu2K5sOULS9hHQ/edit?usp=sharing
如果有工具你觉得应该列入但未被列入,请务必在留言区补充!
免责声明:
- 这个工具列表创建于19年11月,现在情况肯定不同了;
- 有些科技公司提供的一套工具数量太多,难以一一列举,如Amazon Web Services提供超过165项功能齐全的服务;
- 有很多不知名的创业公司,我可能并不知道,甚至还有些都还没听说就倒闭了。
概述
我认为可以将机器学习生产流程归纳成4个主要步骤:
- 项目创建
- 数据管道
- 建模和训练
- 上线服务
基于某个工具是服务于上述流程中哪个,我对工具进行了分类。我没将项目创建部分包含进来,因为这一步需要的是项目管理工具,而不是机器学习工具。分类有时候并非简单粗暴的,因为有些工具可能涉及多个步骤。而且这些工具模棱两可的描述也让人头大:什么“我们突破了数据科学的极限”,“将AI项目转化为现实世界的商业成果”,"让数据像空气一般自由流动",还有我个人最pick的一句:“我们生活于数据科学之上,呼吸于数据科学之中”。
对于涵盖了流程中多个步骤的工具,我按照其最为人所知的功能来分类。有些工具多个分类的功能都为大家所熟悉,我就把它们都放在“一体化”(All-in-one)类中。我还增加了“基础设施”(Infrastructure)这一类,来纳入那些提供基础设施来训练和存储模型的公司,它们大部分都是“云”提供者。
整体发展历程
对此,我记录了每个工具推出的年份。对于开源项目,我通过查看首次提交时间来确定项目是何时公开的。对于公司,我在Crunchbase网站上查找它的创立年份。然后我绘制了各个类别工具数目随时间的变化图。
随年份累加的工具数目图:左上角图例依次为一体化、数据管道、基础设施、建模和训练、提供服务。
正如所料,数据显示该领域从12年才开始急速发展,正好伴随着人们对深度学习的重新关注开始。
前AlexNet时期(12年之前)
直到11年,该领域都是以建模和训练工具为主。一些框架现在还很流行(如scikit-learn),或影响了现在的框架(如Theano)。在12年之前创立并存活至今的工具,有的已上市(Cloudera、Datadog、Alteryx),有的被收购(Figure Eight),有的成为了圈内非常热门的开源项目(Spark、Flink、Kafka)。
发展时期(2012年到2015年)
随着机器学习圈开始了"使劲喂数据"玩法后,机器学习已经变成了数据主导的领域。看每年推出的各个类别工具数时,这点尤其明显。15年,57%(82个中的47个)是数据管道工具。
每年推出的各个类别的工具数。左上角图例依次为一体化、提供服务、基础设施、数据管道、建模和训练。
产业化时期(2016年至今)
虽然纯研究很重要,但大多数公司都负担不起成本,除非研究能在短期就带来商业应用。随着机器学习的研究、数据和现成模型越来越易得,有更多的人和组织会想要直接找应用场景,这就增加了对机器学习产业化工具的需求。
在16年,谷歌宣布用神经机器翻译来改进谷歌翻译服务,这是深度学习在现实中的首批重要应用中一个。此后,大家开发了各种工具来帮助机器学习类应用部署上线。
整体发展现状
尽管AI领域初创公司很多,但大多数是应用型的(提供商业分析或客户支持等应用),而不是工具型的(打造工具来帮助其他公司开发应用)。或者用风投的行话来讲,大多数创业公司都是垂直细分AI(Vertical AI)。在19年的福布斯“50家AI创业公司”榜单中,只有7家是工具型公司。
应用类更好销售,因为你可以直接去一家公司推销说:“我们可以让你们一半的客户支持业务自动化”。相比起来,虽然工具类要更长时间来销售,但会产生更大影响,因为你不是关注单独孤立的应用程序,而是关注整个生态的一部分。对于某一类应用,可以有多家供应商共存;但对于生态的一环,通常只有少数工具能存活下来。
这次,经过大量搜索后,我也只找到大约200个AI工具,和传统软件工程的工具数量相比还很少。比如,如果你想对传统的Python应用做测试,2分钟之内就能在谷歌上搜到至少20种工具。而如果你想对机器学习模型做测试,那一个可能也搜不到。
机器学习开发所面临的问题
许多传统的软件工程工具都能用来开发或部署机器学习应用。但也有很多问题是机器学习应用特有的,所以也需要专门的工具。
在传统的软件工程中,写代码部分是难点。但在机器学习中,写代码只是整体的一小部分。开发一个新模型,而且对实际任务提供显著提升,这不光难,成本也很高。所以大部分公司不会专注于开发模型,而是用现成模型,例如 “BERT大法解决一切”。
对于机器学习,一般有最多/最好数据的应用就是最好的。因此,大多数公司并不太专注于改进深度学习算法,而是专注于改善数据质量。由于数据可能会快速变化,所以机器学习应用也要求更快的开发和部署周期。在很多时候,你可能得每晚都部署一个新模型。
模型的大小也是一个问题。经过预训练的大型 BERT 模型有340M个参数,占1.35GB空间。就算能装在移动终端比如手机上,因为其推断要花的时间太长,所以对很多应用场景也是没意义的。比如,如果输入法提示下一个字符所花时间比你直接输入还要长,那相应的自动补全模型也就没意义了。
Git通过逐行比较来进行版本管理,这对大多数传统程序很有效。但它不适用于对数据集或模型做版本管理。对于大多数传统数据框架的操作,Pandas就很好了,但它却不能在GPU上跑。
基于行的数据格式(比如CSV)对于使用较少数据的应用效果很好。但如果你的样本包含许多特征,而你只想用其中一个子集,那么基于行的数据格式仍需要先载入所有特征才行。像PARQUET和OCR这样的列式文件格式对处理这种情况进行了优化。
机器学习应用开发所面临的一些问题:
- 监测:如何得知你的数据分布发生了变化,然后重新训练模型?例如:Dessa,由AlexNet的Alex Krizhevsky支持,于20年2月被Square收购。
- 数据标记:如何快速标记新数据或针对新模型重新标记现有数据?例如:Snorkel
- CI/CD测试:如何运行测试来确保模型在改动后仍能发挥预期作用?你不能每次都花几天时间重新训练直到收敛。例如:Argo。
- 部署:如何打包和部署一个新模型或替换掉一个现有模型?例如:OctoML。
- 模型压缩:如何压缩模型来适应终端设备?例如:Xnor.ai是从Allen Institute分拆出来的一家创业公司,专注模型压缩。2018年5月,该公司以6200万美元的估值得到1460万美元融资。2020年1月,苹果花了约2亿美元收购了它,并关掉了它的网站。
- 推断优化:如何加快模型的推断时间?通过合并若干操作?通过降低模型精度?模型更小会让推断速度更快。例如:TensorRT。
- 边缘设备:专门设计的硬件,使机器学习算法运行起来更快成本更低。例如:Coral SOM。
- 隐私:如何才能既通过用户数据来训练模型,同时又保护用户隐私?如何才能使流程符合欧盟《通用数据保护条例》的要求?例如:PySyft。
下面这张图里,横坐标是这些工具设法解决的主要问题,纵坐标是针对特定问题的工具数量。
可以看出,很大一块儿比例集中在数据管道方面:数据管理、数据标记、数据库/查询、数据处理、数据生成。这类工具可能志在发展成一体化平台。因为数据处理是项目中最耗费资源的阶段,一旦你让人们把数据放到你的平台上,你会很想用这些数据弄出一些预训练模型什么。
而针对建模和训练方面的工具大多是框架。深度学习框架的竞争现在差不多大局已定,主要是PyTorch和TensorFlow两个框架,此外还包括基于这两个框架的更高层次的框架,用于特定任务,比如自然语言处理(NLP)、自然语言理解(NLU)以及多模态问题。现在还有可以进行分布式训练的框架。以及最近谷歌推出的新框架JAX,每个讨厌TensorFlow的谷歌党都对它夸夸不停。
还有一些独立工具针对实验追踪,而流行框架内也有自己的实验跟踪功能。超参数调优很重要,所以有好几个工具就专注于此,但好像没有哪个被广泛接受——因为超参数调优的瓶颈不在设置上,反而在调优过程中所需算力上。
留待解决的最令人兴奋的问题是在部署和服务方面。缺乏服务解决方案的原因之一是研究人员和产品工程师之间缺乏沟通。在那些有能力进行AI研究的公司(一般是大公司),研究团队与部署团队是分开的,两个团队只通过带有字母“p”各种经理沟通:产品经理(product managers)、项目经理(project managers),以及项目群经理(program managers)。小公司的员工可以看到全栈的情况,但受制于迫在眉睫的产品需求,也没什么时间搞。只有少数创业公司设法填补这个空白,这些公司通常是由有为的研究人员创办,而且有足够资金来雇用熟练的工程师,随时准备在AI工具市场上抢占份额。
开放源码和开放内核
我查看的202种工具中,有109种是开源软件。即使是不开源的那些,通常也有相伴的开源工具。
开源兴盛有若干原因。其中一个原因是所有支持开源的人多年来一直在谈论的:透明度、协作性、灵活性,而且这似乎成了道德规范。客户可能不愿使用一个没法看到源代码的新工具。否则,一旦这个工具停止运营(初创公司里经常发生),就得悲剧地不得不重写代码。
当然,开源软件并不代表非盈利和免费,其维护非常费时,而且昂贵。据传TensorFlow团队的规模接近1000人。公司在提供开源工具时必须得考虑其商业目标,例如,越多人使用他们的开源工具,就有越多人了解他们,信任他们的技术,并因此去购买他们的付费工具或想加入他们的团队。
比如谷歌就希望推广它的工具,好让大家用它的云服务。英伟达维护着cuDF(以及之前的dask),这样就能卖出更多GPU。Databricks免费提供MLflow,而同时在出售其数据分析平台。就在最近,Netflix组建了专门的机器学习团队并发布了他们的Metaflow框架,此举使他们进入机器学习领域,得以招揽人才。Explosion免费提供SpaCy,但对Prodigy收费。HuggingFace免费提供transformers,但我还不知道他们怎么赚钱的(哈哈哈,良心企业)。
由于开源软件已经成了一种标准,初创公司要找到一种行之有效的商业模式还是挺难的。因为任何一家公司创立后都必须与现有开源工具竞争。如果你遵循开放内核的商业模式,那就必须决定哪些功能放在开源版本里,哪些放在付费版本里,而且还不显得吃相太难看;或者琢磨如何让免费用户开始付费。
结论
一直以来都有很多讨论,讨论AI泡沫是否会破灭。现今AI投资的很大一部分是在自动驾驶汽车上。由于完全自动驾驶离商业化还比较遥远,所以有人猜测投资者会对AI行业彻底失望。加上现在谷歌已经停止了机器学习研究员的招聘,而Uber裁掉了AI团队一半的研究人员。这两家公司的决定都是在新冠疫情前做出的。有传言称,由于大量的人在上机器学习课,所以这方面的技术人员将会饱和。
现在还是进入机器学习领域的好时机吗?我相信对人工智能的炒作确实存在,而且是时候冷静下来了。但我不认为机器学习领域会消失,虽然有能力做机器学习研究的公司可能会减少,但那些需要各种工具把机器学习整合产业化的公司还是一直需要的。
如果你必须在工程师和机器学习专家之间选择的话,那我建议你选择工程师吧。优秀的工程师更容易掌握机器学习知识,但机器学习专家要成为优秀的工程师就难多了。如果你成了一名工程师,为机器学习领域开发出很棒的工具,我也会永远感激你的!