当前位置: 首页 > 编程日记 > 正文

200 个工具分析机器学习十年:开源是大势,工程师是核心

【编者按】人工智能和机器学习经过十年多的发展,在过去的几年间,各类工具数量迎来了持续的爆发式的增长,机器学习也正式由科研走进工业生产阶段。本文作者 —— 来自硅谷一家初创公司的计算机科学家 Chip Huyen 梳理挖掘出 202 个机器学习工具,并进行分类研究,总结出了至关重要的两点:

  • 开源已经变成一种行业标准,任何一个刚起步的公司,都必须与现有的开源工具进行竞争;

  • 如果必须在人工智能专家和工程师之间做一个选择,那么请选择工程师。

作者 | Chip Huyen,本文已获作者翻译授权

译者 | 罗昭成,编辑 | 唐小引

题图 | 东方 IC

出品 | AI科技大本营(ID:rgznai100)

为了更好地理解现在的机器学习、人工智能的工具,更好地预测它们的前景。我收集了所有我能收集到的有关人工智能与机器学习的资料。这些资源来源以下几个方面:

  • 全栈深度学习,https://github.com/alirezadir/Production-Level-Deep-Learning

  • LF AI 基金会全景图,https://landscape.lfai.foundation/

  • 人工智能与数据全景图,http://dfkoz.com/ai-data-landscape/

  • 媒体列出的众多 AI 初创公司

  • 我在 Twitter(https://twitter.com/chipro/status/1202815757593108480)和 LinkedIn(https://www.linkedin.com/posts/chiphuyen_machinelearning-machinelearningproduction-activity-6608605129010753536-bdZ7)中收到的回复

  • 其他人(朋友、网友、风投等)与我分享的内容

我从中过滤掉使用机器学习做产品的公司(如,使用机器学习提供数据分析的公司)、不常用的工具或没有人使用的工具之后,还有 202 个机器学习的工具。这里(https://docs.google.com/spreadsheets/d/1OV0cMh2lmXMU9bK8qv1Kk0oWdc_Odmu2K5sOULS9hHQ/)有完整的列表。如果有你觉得应该包含但我没有列出来的工具,请告诉我。

免责申明

  • 这个列表是我在 2019 年的时候整理的,在过去的 6 个月,市场中可能会有一些变化。

  • 有一些科技公司有大量的工具,我并不能一一列举。如 Amazon Web Services 提供了超过 165 种完整的服务。

  • 有许多不知名或者已经不存在的公司并没有在此分析的数据之中。

本文包含以下 6 部分内容:

  • 概述

  • 机器学习的发展历史

  • 机器学习前途未卜

  • 机器学习运维(MLOps)面临的问题

  • 开源与开放核心

  • 总结

概述

创建一个机器学习的产品(https://github.com/chiphuyen/machine-learning-systems-design),包含以下 4 个步骤:

  • 项目立项

  • 数据处理

  • 建模与训练

  • 提供产品服务

我将我统计出来的机器学习工具,根据这些工具对上面步骤的支持情况,对所有机器学习工具进行分类。当然,这里面不包含项目立项相关的内容,它需要的是项目管理工具,而不是机器学习工具。分类这件事情并没有看起来那么简单,很多工具都可以帮助你完成多个事情。并且它们模棱两可的解释,也并不能让我们很好理解它的作用,像下面的这些描述:“我们突破了数据科学的极限”,“我们将 AI 项目转变成商业成果”,“像呼吸一样,随意使用你的数据”,还有我最喜欢的一句:“我们驰骋在数据科学中。”

每个工具都有它最擅长的部分,我将包含多种能力的工具分类到它最擅长的那一类中。如果它擅长所有部分,我就将它们放在 N 合一这个类别中。当然,分类中还包含基础设施提供商,他们提供训练与存储的基础设施,并且大部分都是云服务提供商。

机器学习的发展历史

首先,我将这些工具发布的时间进行了整理。如果这个工具是一个开源项目,我从该项目的第一次提交开始,查找项目公开的时间;如果是一家公司,我使用它在 Crunchbase 上注册的时间作为工具的发布时间。基于这些数据,我绘制了各类工具每年发布的数量图。

工具数量图

不出所料,数据中可以看到,随着深度学习的发展,在 2012 年开始迎来爆发式的增长。

  • 前卷积神经网络时代(2012 年之前)

直到 2011 年,机器学习主要工作都是在建模和训练模型上,那时的一些框架,到现在还很流行(如:Scikit-Learn),当然还有一些框架为现在的发展留下了深远的影响。很多机器学习工具开始于 2012 年前,一直持续优化迭代到今天,直到它们 IPO(Cloudera、Datadog、Alteryx)或者被收购,或者成为社区流行的开源项目(Spark、Flink、Kafka)。

  • 高速发展阶段(2012 - 2015 年)

当机器学习的社区采用“数据驱动”的方法时,机器学习的发展就变成了数据处理的发展。每年在每个类别中工具的发布数量,也清晰地展现出了这一点。在 2015 年,有 57% 数据处理工具。

工具数量增长曲线

  • 生产阶段(2016 年至今)

纯粹的技术研究对机器学习领域来说非常重要,但是大多数公司并没有足够的研究经费支持技术研究,除非对应的技术研究能在短期内应用在真实的商业场景中。随着机器学习的研究与发展,海量的数据与处理模型的增长,使得机器学习越来越触手可得。越来越多的人为他们的应用找到使用机器学习的场景,这也近一步增加了我们对机器学习工具的需求。

在 2016 年,Google 宣布使用神经网络来提高 Google 翻译的准确度(https://ai.googleblog.com/2016/09/a-neural-network-for-machine.html),这也是深度学习应用在真实商业场景中的先例之一。从那时起,有很多的机器学习工具被开发出来,帮助我们更好的做人工智能的产品。

机器学习前途未卜

现在有很多人工智能相关的初创公司,它们中大多数都是将机器学习用于它们的产品(如提供业务分析或客户支持等产品),而不是做机器学习工具的初创公司(创建工具来帮助其他人实现产品)。用投资人的话来说,他们大多数都是在人工智能的垂直领域。在 2019 年福布斯排行榜中,50 家人工智能公司,其中只有 7 家是做机器学习工具的公司。

当你去一家公司,告诉他们,使用你的产品可以减少一半客户支持的投入,因此应用类的产品能够更好的售卖、商业化。但是机器学习相关的工具却很难卖出去,但是这些工具对人工智能的影响非常大,因为他们的目标不是做某一个单一的应用程序,而是在做一个生态。许多公司可以提供相似的人工智能产品,但是在创建机器学习产品的流程中,通常很少有工具能够共存。

经过我广泛的搜索调查,我却只能找到大约 200 多个人工智能的工具,与传统软件相比,这点工具是非常微不足道的。如果你想找一个传统 Python 应用程序的测试工具,花两分钟时间,你在 Google 上至少能找到 20 个。但是如果你想找一个测试机器模型的工具,你就很难能够找到了。

机器学习运维(MLOps)面临的问题

很多传统软件开发的工具也可以用于人工智能产品的开发中,但是,人工智能产品中有很多独有的挑战,它们需要特有的工具去处理。

对于传统的软件工程师来说,写代码是最难的一部分。但对于机器学习来说,写代码只是挑战中很小的一部分。开发一个可以在商业中使用的模型非常困难,并且成本很高。大多数公司并不会将重点放在模型的开发上,而是使用现有的模型。

对于机器学习来说,使用更多、更好的数据,能够实现更好效果的应用程序。大多数的公司都将重点放在数据优化上,而不是机器学习算法的优化上。由于数据的快速变化,我们的机器学习应用程序也需要快速的进行发布。在很多机器学习应用的场景中,你需要每天都进行模型更新。

机器学习算法的大小也是一个问题。一个大型的 BERT 模型有 340M 的参数,整个算法大小约为 1.35GB。即使这个模型可以在你用户的设备(如手机)上安装,这个模型在新的样本上进行推理所花费的时间也有可能使得应用程序毫无用处。举个例子:在使用输入法的时候,算出建议字符花费的时间比你手动输入的时间还长,那自动完成的模型就一点用都没有。

Git 使用了一行一行的比较形式,比较两个文本文件的差异,因此它对传统软件程序开发非常友好。然而它并不适用数据集以及模型之间的差异比对。又如 Pandas 能够很好地进行数据处理,但是它不支持在 GPU 上运行。

CVS 等基于行的数据格式,非常适合在数据量小应用程序中使用。但如果你的应用程序有许多功能,并且这些功能只需要使用数据中的一个子集,这种情况下,使用基于行格式的方式仍需要加载所有的数据。PARQUET 和 OCR 等列格式的工具,针对上述的场景进行了相应的优化。

机器学习产品在发布上也面临着很多问题:

  • 监控:如何知道你的数据分布发生了变化,你需要重新训练模型?例如:Dessa,Alex Krizhevsky 基于AlexNet 开发的,在 2020 年被 Square 收购;

  • 数据标签:如何快速的给新的数据打标,或将已经存在的数据进行重新打标来支持新的模型训练?例如:Snorkel;

  • 持续集成、持续交付:如何保证你的模型在每一次修改后都能够按照预期的进行工作,你不可能花费好几天的时间去等待训练收敛的结果?例如:Argo;

  • 交付:如何打包并发布你的新模型?例如:OctoML;

  • 模型压缩:如何将你的机器学习模型进行压缩,让他能够在客户的设备上运行?例如:Xnor.ai 这家公司,由艾伦研究所拆分出来,专注模型压缩的初创企业,在 2018 年 5 月,估值 6200 万美元,获得 1460 万美元的融资。在 2020 年 1 月, 苹果以 2 亿美元收购了它,并关闭了它的网站。

  • 推理优化:如何提高你的模型推理速度?多步融合?低精度?减小模型可以使推理速度变得更快。例如:TensorRT;

  • 边缘设备:硬件设计让机器学习算法能够更快速地运行在更廉价的设备上。例如:Coral SOM;

  • 隐私:如何使用用户的数据进行训练并且保证用户的隐私?如何让你的应用程序满足 GDPR ?例如:PySyft。

我根据这些机器学习工具主要解决的问题绘制了下图:

工具数量

这些工具很大一部分都聚焦在数据处理上:数据管理、标记、数据查询、数据处理、数据生成等。这些数据处理工具旨在构建一个平台,数据处理是项目中资源最密集的阶段。如果有人在你的平台上,给你提供数据,你就能很容易为他们提供预先构建的训练模型。

建模和训练模型主要是框架来实现的。而深度学习框架竞争已经逐渐趋于冷却,现主要是 PyTorch 和 TensorFlow 之间的竞争。以及一些基于这两个框架的更高层次的框架之间的竞争,它们围绕这两个框架来处理特定的任务:NLP 与 NLU 以及多模态问题。这些框架都是分布式训练框架。这还有一个新的框架 JAX,很多讨厌 TensorFlow 的 Google 开发者都使用它。

现在有很多独立的工具用于一些实验跟踪,并且流行的框架中都内置有他们自己的实验跟踪的功能。超参数是一个非常重要的功能,有些人注意到他们也不奇怪,但是他们似乎都没有抓住重点,超参数的瓶颈并不是设置参数,而是高效的计算能力。

另一个没有被解决的重要问题是在部署与服务上,在这一方面缺乏解决方案的原因在于研究人员与运维人员之间缺少沟通。在有能力从事人工智能研究的公司中(通常是大公司),研发团队与运维团队几乎都是分开的,两个团队之前的合作只能通过(产品、项目)经理来实现。而在小公司中,员工能看到全局,但是他们会受到产品需求的限制。只有少数初创公司,这些公司聘请了有经验的运维工程师和有经验的研究人员一起协同办公,成功的解决了这一问题。并且这些初创公司占据了人工智能很大一部分市场。

开源与开放核心

在 202 个工具中,其中有 109 个是开源软件(OSS)。即使有些工具不是开源的,它们大多数也会附带一些开源的工具。

这里有几个开源软件的原因:一是所有支持开源的人多年来一直都在说的原因,透明、协作、灵活,但这一个原因似乎只是一个道德上的约束。另一个是,客户并不想在看不到源代码的情况下使用新的工具,因为在看不到源代码的情况下,如果这个工具被关闭,他们将不得不重写代码,实现这个功能。

开源并不意味着不盈利,也不意味着免费。开源的维护很费时,并且成本也很高。据说,TenserFlow 团队有接近 1000 人。公司不会在没有商业目标的情况下提供开源软件。如果有更多的人使用他们的开源工具,就会有更多的人了解他们,信任他们的技术,并且会购买他们的专有工具,并且也能让更多的人希望加入他们公司。

Google 通过推广 TenserFlow,希望能够让更多的人使用他们的云服务。NVIDIA 维护 cuDF 库也是希望有更多的人来买他们的 GPU。Databricks 免费提供 MLflow,但出售他们的数据分析平台。Netflix 最近成立了专门的机器学习团队,发布他们自研的 Metaflow 框架,用以吸引人才。自然语言处理工具 SpaCy 是免费的,但是 Prodigy 却是收费的。

开源已经变成了一种行业标准,创业公司很难从中找到一种可行的商业模式。任何一个刚起步的公司,都必须与现有的开源工具进行竞争。如果你也仅仅只开放核心,你需要仔细思考,哪些特性是要包含在开源软件中,而哪些是要放在付费的版本中。既要让用户不觉得你贪婪,也要能够让免费用户付费。

总结

关于人工智能的泡沫是否会破灭,人们也是议论纷纷。现在,人工智能上很大一部分投资都在自动驾驶上,但是到现在仍然没有一款完全自主驾驶的汽车出现。一些人认为投资者将会对人工智能失去希望,Google 也冻结了在机器学习上的人员招聘,Uber 解雇了一半的人工智能研究团队。有传闻说,学习机器学习相关的人员远多于机器学习相关的工作岗位。

现在是进入人工智能领域的好时机吗?我相信,现在是有在炒作人工智能的概念,但在某一个时刻,会冷静下来。有可能这个时间点已经发生了。我不相信机器学习会消失,有能力进行机器学习研究的公司会越来越少,但是绝不会缺乏将机器学习现有的工具引入产品的公司。

如果必须在人工智能专家和工程师之间做一个选择,那么请选择工程师。对于工程师来说,学习人工智能相关知识会很容易,但是对于人工智能专家来说,成为一个很好的工程师要困难得多。如果你是一个优秀的工程师,并且能够为构建人工智能工具而努力,我会由衷地感谢你。

致谢:感谢 Andrey Kurenkov 在我撰写本文时所做出的指导。感谢 Luke Metz 的审校。

英文:What I learned from looking at 200 machine learning tools

链接:https://huyenchip.com/2020/06/22/mlops.html

作者:Chip Huyen,计算机科学家,现就职于硅谷的一家人工智能初创公司,专注于机器学习生产流程。

推荐阅读
  • 图灵奖得主Judea Pearl:从“大数据革命”到“因果革命”

  • 90行Python代码,让张小龙的微信地球转起来

  • 独家揭秘!抖音爆款漫画变身特效的背后技术

  • 时隔 15 年,苹果的自研 ARM 芯片为何能取代 Intel 处理器?

  • 从微信「拍一拍」,我想到了那些神奇的一行代码功能

  • 科普 | 哈希函数的过去、现在与未来

你点的每个“在看”,我都认真当成了AI

相关文章:

将调用密集型的 COM 组件迁移到托管代码

.NET Framework 提供了一个简单的方法与传统的 COM 组件进行交互。其优点是可以在保留现有投资的同时利用新的平台。但是在某些情况下,保留旧组件的性能开销使得将组件迁移到托管代码是值得的。每一情况都是不一样的,决定是否需要迁移组件的最好方法是对…

性能优化工具 MVC Mini Profiler

MVC MiniProfiler是Stack Overflow团队设计的一款对ASP.NET MVC、WebForm 以及WCF 的性能分析的小程序。可以对一个页面本身,及该页面通过直接引用、Ajax、Iframe形式访问的其它页面进行监控,监控内容包括数据库内容,并可以显示数据库访问的SQL&#xff…

刷新UITableView

【from】http://www.superqq.com/blog/2015/08/18/ios-development-refresh-uitableview/ UITableView对于iOS开发者来说一定不会陌生,很有可能你的APP很多界面都用到它。关于UITableView的文章,想必已经不计其数,没事可以多看看。特别是UITa…

算术运算中隐式类型转换

转载于:https://www.cnblogs.com/strider/articles/2220313.html

高文、张钹、杨强隔空论道:AI精度与隐私的博弈

出品 | AI科技大本营(ID:rgznai100)AI时代,如何保护大众的隐私?以联邦学习为代表的AI技术能否实现AI协作,提升模型精度的同时,实现数据隐私的保护?中国如何抢占人工智能安全发展的制高点&#x…

避免单线程单元 (STA) COM 组件

默认情况下,ASP.NET 不允许任何 STA COM 组件在页面内运行。若要运行它们,必须在 .aspx 文件内将 ASPCompattrue 属性包含在 Page 指令中。这样就将执行用的线程池切换到 STA 线程池,而且使 HttpContext 和其他内置对象可用于 COM 对象。前者…

将 SQL Server 存储过程用于数据访问

在 .NET Framework 提供的所有数据访问方法中,基于 SQL Server 的数据访问是生成高性能、可缩放 Web 应用程序的推荐选择。使用托管 SQL Server 提供程序时,可通过使用编译的存储过程而不是特殊查询获得额外的性能提高。

centos下安装apache + subversion(转)

目录: 一.安装apr跟apr-util 二.安装apache服务器 三. 安装subversion 四. 配置subversion 五. 配置apache的httpd.conf 六. 验证安装 七.导入数据到资料库八.版本库服务器的同步(新加入的) 附:安装过程中遇到的问题 一.安装apr、…

真香!3个月0基础转型大厂数据分析师,他做对了什么?

年初的黑天鹅打乱了我的求职阵脚,专业不对口,无实习经验,在求职路上的竞争优势几乎为0,然而,开启自救模式后,我顺利成为了头条数据分析师,下面我就讲讲人生是怎么开挂的。随着人工智能普及&…

OpenStack快速入门

OpenStack云计算快速入门(1)该教程基于Ubuntu12.04版,它将帮助读者建立起一份OpenStack最小化安装。我是五岳之巅,翻译中多采用意译法,所以个别词与原版有出入,请大家谅解。我不是英语专业,我觉…

将 SqlDataReader 类用于快速只进数据游标

SqlDataReader 类提供了一种读取从 SQL Server 数据库检索的只进数据流的方法。如果当创建 ASP.NET 应用程序时出现允许您使用它的情况,则 SqlDataReader 类提供比 DataSet 类更高的性能。情况之所以这样,是因为 SqlDataReader 使用 SQL Server 的本机网…

微软小冰从上海音乐学院音工系毕业,师从于阳、陈世哲

6月29日,经上海音乐学院音乐工程系评定,人工智能微软小冰和她的人类同学——上音音乐工程系音乐科技专业毕业生一起毕业,并授予微软小冰上海音乐学院音乐工程系2020届“荣誉毕业生”称号。微软小冰和上海音乐学院的毕业生们一起参加了于6月29…

Typedef用法学习

不管实在C还是C代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中。typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些C/C的学习者的博客&#x…

开发板tftp:timeout问题

想要从PC上面tftp文件的时候遇到了tftp:timeout的问题: >: tftp -gr gprsapp 192.168.1.38tftp: timeout 检查了网络,可以ping的通PC。PC的tftp服务器也已经打开了,测试从开发板上面向PC上tftp传送数据也是可以的:说明开发板上…

选择适合页面或应用程序的数据查看机制

根据您选择在 Web 窗体页显示数据的方式,在便利和性能之间常常存在着重要的权衡。例如,DataGrid Web 服务器控件可能是一种显示数据的方便快捷的方法,但就性能而言它的开销常常是最大的。在某些简单的情况下,您通过生成适当的 HTM…

Android强制设置横屏或竖屏

全屏 在Activity的onCreate方法中的setContentView(myview)调用之前添加下面代码requestWindowFeature(Window.FEATURE_NO_TITLE);//隐藏标题 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置全屏 横屏 …

免费直播:1小时带你体验Python车牌识别实战

Python基础学会了,实战又是爬虫?太枯燥?别无聊,CSDN学院邀请章秀淞老师开设技术直播课:1小时带你体验车牌识别实战。让你从众多车中,能用Python技术找到夏树上的那辆叔叔的奔驰车牌(玩笑&#x…

centos上tensorflow一键安装脚本

鉴于tensorflow在centos上安装相当麻烦,特地制作了一个脚本方便以后移植到其它机器上,脚本含有其它python常用包: #! /bin/bash sudo yum install -y gcc g gtk-devel libjpeg-devel libtiff-devel jasper-devel libpng-devel zlib-devel cmake unzip sqlite-devel readline-…

谷歌AI专家爆料:90%的人都不知道,写不出好代码,是输在了这点上!

工作压力大、大牛实力碾压,、外行人的偏见......2020年,程序员的心很累!而Python和AI的初学者,心更累!最近几年,我看过市面上很多 Python和人工智能的教程和书籍,它们大都这样讲:先从…

只要可能,就缓存数据和页输出

ASP.NET 提供了一些简单的机制,它们会在不需要为每个页请求动态计算页输出或数据时缓存这些页输出或数据。另外,通过设计要进行缓存的页和数据请求(特别是在站点中预期将有较大通讯量的区域),可以优化这些页的性能。与…

系统基本安全优化

1、删除系统特殊的的用户帐号和组帐号: userdel adm userdel lp userdel sync userdel shutdown userdel halt userdel news userdel uucp userdel operator userdel games userdel gopher groupdel adm groupdel lp groupdel news groupdel uucp groupdel games gr…

VMware12中安装CentOS7.2的详细过程

标签:Linux 虚拟机 CentOS1.什么是虚拟机虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。流行的虚拟机软件有VMware(VMWare ACE)、Virtual Box和Virtual PC&#xf…

对于广泛依赖外部资源的应用程序,请考虑在多处理器计算机上启用网络园艺

ASP.NET 进程模型帮助启用多处理器计算机上的可缩放性,将工作分发给多个进程(每个 CPU 一个),并且每个进程都将处理器关系设置为其 CPU。此技术称为网络园艺。如果应用程序使用较慢的数据库服务器或调用具有外部依赖项的 COM 对象…

深耕智能制造和超高清视频领域,思谋科技获数千万美元融资

6月29日,思谋科技对外宣布完成数千万美元Pre-A轮融资,由IDG资本领投,真格基金和联想创投跟投。据悉,本轮融资主要用于基于AI技术的智能制造、超高清视频等系统产品研发、人才招聘和市场拓展。 思谋科技成立于2019年12月&#xff…

[转] JavaScript仿淘宝智能浮动

转载自: http://www.williamlong.info/archives/2864.html 我们经常在淘宝网看到这样的特效,商品列表特别长,而商品列名称始终保持在最顶端。如果你把滚动条滚动至最上边了,那么它会自动判断是否到顶端了,然后一直置顶从而不怕遮挡…

《高效团队开发工具与方法》

一直以来都在用所谓的敏捷开发,但是也只是简单的说,用什么用什么,从开始感觉不方便,到后来感觉习惯了,可没有考虑过到底能带来什么改变,所以最近在上下班的地铁上在看完了《高效团队开发工具与方法》&#…

java image filters[02]-过滤器初探

图片缩放应用比较多,我们看看imageFilters提供的ScaleFilter怎么完成这项工作。 首先了解怎么调用过滤器,实例代码如下: public void imageScale(String fromPath, String toPath, int width, int height)throws IOException {// 定义“缩放过…

一定要禁用调试模式

在部署生产应用程序或进行任何性能测量之前,始终记住禁用调试模式。如果启用了调试模式,应用程序的性能可能受到非常大的影响。

Java“拍了拍”你,面试其实没那么难...

后疫情时代,连程序员这个多金的职业也遭受到了一定程度的打击。从各大招聘网站和多次面试经历中,相信大家已经意识到,面试官对程序员技能体系和项目经验考核似乎更严苛了。你在面试中常常为什么苦恼呢?简历撰写?数据算…

单据自动转换并审核的方法示例

需求要点:在单据A的界面点击“自动转换”,则自动产生审核态的单据B;若单据B不满足审核条件,则维持“提交”态;若单据B不满足保存校验,则维持“暂存”态;若转换失败,给出界面提示。实…