在 LinkedIn 上,申请的机器学习职位往往会面临200多名竞争者。那么,在AI工具方面,是否也存在如此众多的选择呢?
为了全面了解机器学习技术的应用现状,斯坦福大学毕业并曾任职于英伟达的工程师ChIP Huyen决定对市场上所有可用的AI/机器学习工具进行评测。
经过对各类深度学习全栈工具的搜索与推荐,作者筛选出了202个较为热门的工具进行评测。最近,她的统计结果让机器学习社区感到惊讶。
首先,需要指出的是:
这个列表是在2019年11月发布的,最近开源社区可能会出现新工具。
某些科技巨头的工具列表庞大,难以一一列举,例如AWS已经提供了超过165种机器学习工具。
一些初创公司已经消失,其推出的工具也不为人所知。
作者认为,泛化机器学习的生产流程包括四个步骤:
项目设置
数据管道
建模与训练
服务
作者依据所支持的工作步骤对工具进行了分类。项目设置不被计算在内,因为它涉及项目管理工具,而非机器学习工具。由于一种工具可能适用于多个步骤,因此分类并不简单。
工具的时间演变
作者追溯了每种工具的发布年份。对于开源项目,她查看了首次提交的日期;对于企业,则参考了其在Crunchbase上的创办年份。接着,她绘制了随着时间推移,各类别中工具数量的变化曲线。具体如下图所示:

不出所料,数据显示,自2012年深度学习复兴以来,该领域开始呈现爆炸式增长。
AlexNet之前(2012年之前)
直到2011年,该领域仍以建模和训练工具为主导,某些框架(如scikit-learn)依然非常受欢迎,另一些则对当前框架(Theano)产生了影响。2012年以前开发的一些工具要么完成IPO(如Cloudera、Datadog和Alteryx),要么被收购(Figure Eight),要么成为受社区欢迎并持续开发的开源项目(如Spark、Flink和Kafka)。
开发阶段(2012-2015)
随着机器学习社区采用“让我们把数据扔给它”的方法,机器学习领域逐渐转变为数据领域。调查每个类别中每年开发的工具数量时,这一点愈加明显。2015年,57%(82个工具中有42个)的工具为数据管道工具。具体如下图所示:

生产阶段(2016年至今)
人们普遍认识到基础研究的重要性,但大多数公司无法支持研究人员进行纯技术探索,除非能够看到短期商业利益。随着机器学习研究、数据和已训练模型数量的增多,开发者和机构的需求不断增加,市场对机器学习工具的需求也随之大幅增长。
2016年,谷歌宣布将神经机器学习技术应用于谷歌翻译,这是深度学习在现实世界中首次落地的重要标志。
这一全景图仍不完整
虽说AI创业公司已如雨后春笋般涌现,但大多数都专注于技术落地,而非提供开发工具。在福布斯2019年公布的50大AI初创企业中,只有7家以机器学习开发工具为主业。
对于大多数人来说,应用显得更为直观。你可以走进公司,告诉他们:“我们可以自动化你们一半的客服工作。”工具所实现的价值总是间接的,却深深植根于整个生态系统。尽管市场中有许多公司提供相似的应用,但其背后用到的工具却寥寥无几。
经过大量搜索与对比,作者只列出了200余个AI工具,相较于传统计算机软件工程而言,这个数字显得微不足道。如果你想评测传统的Python应用开发,几分钟内就能在谷歌上找到至少20个工具,但若想尝试机器学习模型,则情况完全不同。
机器学习工具面临的问题
许多传统软件工具可用于开发机器学习应用,但在机器学习应用中,也存在许多独特的挑战,需要特殊的工具来应对。
在传统软件开发流程中,编写代码是最具挑战性的步骤,而在机器学习工作中,编写代码仅占整个流程中的一小部分。开发一个在现实世界中可落地的新模型,且能显著提升性能,耗时且成本高昂。大多数公司更倾向于直接使用现成的模型,而非开发新模型。
在机器学习领域,使用最多或最佳的数据的应用总能脱颖而出。因此,与其专注于提升深度学习算法,大多数公司更愿意花费大量时间提高数据质量。由于数据变化迅速,机器学习应用需快速开发与部署。在许多情况下,甚至需要每天部署新的模型。
此外,ML算法的规模也是一个问题。预训练的大规模BERT模型拥有3.4亿参数,大小为1.35GB。尽管BERT模型可以在手机等消费级设备上运行,但在新样本上进行推理所需的时间却使其在众多现实应用中无用。
想象一下,如果自动补全模型提示下一个字符所花费的时间比用户自己键入的时间还要长,那么使用这个模型还有什么意义呢?
Git通过逐行差异比较实现版本控制,因此对大多数传统软件工程程序的效果很好。然而,Git并不适用于数据库或模型检查点的版本控制。Pandas对大多数传统数据框操作效果良好,但在GPU上却无法发挥作用。
CSV等基于行的数据格式在使用较少数据的应用中表现良好,但如果你的样本具有许多特征,且你只想利用其中的某个子特征,使用基于行的数据格式依然需要加载所有特征。PARQUET和OCR等柱状文件格式针对这种用例进行了优化。
机器学习应用面临的一些问题包括:
监测:如何知道数据分布已经改变,并需要重新训练模型?
数据标注:如何快速标注新数据,或者为新模型重新标注现有数据?
CI/CD测试:由于不能花费几天时间等待模型训练和收敛,如何运行测试以确保每次更改后模型正常运行?
部署:如何封装和部署新模型,或替换现有模型?
模型压缩:如何压缩ML模型以便适配消费级设备?
推理优化:如何加速模型的推理时间?是否可以将所有操作融合在一起?是否可以采用更低精度?缩小模型可能会加速推理过程。
边缘设备:硬件运行ML算法速度快且成本低。
隐私:如何在保护隐私的同时利用用户数据训练模型?如何确保流程符合《通用数据保护条例》(GDPR)?
下图中,作者根据开发工具能够解决的主要问题列出了它们的数量:

一大部分集中在数据管道上,包括数据管理、标签、数据库/查询、数据处理和数据生成。数据管道工具可能也希望成为一体化平台。由于数据处理是项目中最耗费资源的阶段,一旦用户在你的平台上放置数据,便很可能会提供预构建或预训练的模型。
建模与训练工具大多为框架。目前,深度学习框架的竞争已趋于平静,主要集中在PyTorch和TensorFlow之间,以及基于这两者解决NLP、NLU和多模态问题等特定任务的更高级框架。分布式训练领域也有一些框架。谷歌推出的新框架JAX,备受厌倦TensorFlow的员工青睐。
一些独立工具专用于实验追踪,而一些流行的深度学习框架也内置了实验追踪功能。超参数调整至关重要,因此专门用于超参数调整的工具层出不穷,但似乎没有哪个工具真正流行起来。因为超参数调整的瓶颈在于所需的计算能力,而非设置。
最令人兴奋但尚未解决的问题集中在部署和服务领域。缺乏服务方法的原因之一是研究人员与生产工程师之间缺乏沟通。在有能力进行AI研究的公司,研究团队与部署团队通常是分开的,两个团队之间仅通过以P开头的经理进行沟通。而那些能够看到整个堆栈的小公司会受到即时产品需求的限制。
只有少数几家初创公司能够弥补这一差距,这些公司往往由已有成就的研究人员创立,并拥有足够的资金雇佣优秀的工程师。而这样的初创公司将占据人工智能工具市场的相当大一部分。
开源与开放内核
在作者选择的202种工具中,有109种为开源软件,且未开源的工具也常常与其他开源工具绑定在一起。
开源软件的出现和发展受到多种原因的推动,透明度、协作、灵活性以及伦理道德等都是支持者多年来讨论的主题。客户可能不愿意使用无法获取源代码的新工具。否则,如果没有开放源代码的工具无法使用,则必须重写代码。这是初创公司常常面临的情况。
开源软件并不等于非盈利和免费,开发者有更深远的目的。需要注意的是,维护开源软件耗时且成本高昂。传闻TensorFlow团队的人数接近1000人。一家企业提供的开源软件必定有其商业目的,比如,越来越多人使用某家公司的开源软件,便有助于提升该公司的知名度和信任度,最终可能会促使用户购买其专有工具,甚至加入其团队。
这样的例子比比皆是。谷歌不遗余力地推广其工具,目的在于让用户使用其云服务。英伟达维护cuDF,旨在售卖更多的GPU。
