谷歌投资“算法商店”创始人:打造AI操作系统(PPT)

【新智元导读】作为拿到谷歌 AI 初创公司风险基金首笔投资的项目(1050万美元),“算法商店”Algorithmia 的创始人兼 CEO 日前做了题为《为 AI 打造操作系统》的报告。

笔记本电脑上的操作系统同时运行几十个或者几百个进程。它会给每一个进程分配所需要的资源(RAM、CPU 和 IO)。它会将它们隔离在自己的虚拟空间中,将它们锁定到一组预定义的权限,允许它们进行通信,并允许用户安全地监视和控制它们。

操作系统会抽象出硬件层(写入闪存驱动器与写入硬盘驱动器相同),并且不关心用于编写这些应用程序的编程语言或技术堆栈——它只是顺利地统一地运行它们。

随着机器学习逐渐渗透到企业,许多公司很快就会发现自己在生产越来越多的模型,并且更快地剪辑。随着时间的推移,部署效率,资源规模,监测和审计将开始变得更加困难和昂贵。来自公司不同部门的数据科学家将各自拥有自己的一套首选技术(R,Python,Julia,Tensorflow,Caffe,deeplearning4j,H2O等),数据中心战略将从一个云转向混合。以一种类似云的方法运行、扩展、监管多样模型,负责地说,与操作系统很像,这就是我们想说的 。

在 Algorithmia.com 上,我们运行3,500多种算法(每种都有多个版本,最多可以获得40k +独特的REST API端点)。任何API端点都可以从一天一次到每秒1,000次以上的突发,具有完全无限制的体验。这些算法以我们今天支持的八种编程语言中的任何一种编写,可以基于CPU或GPU,可以在任何云端运行,可以读取和写入任何数据源(S3,Dropbox等),并以标准硬件 〜15ms。

我们将 Algorithmia.com 视为我们的AI操作系统版本,这篇文章将分享我们的一些想法。

目录

• 训练 VS 推理

• 无服务器 FTW

• Kernel 和 Shell

• Kernel #1 弹性伸缩

• Kernel #2 Runtime Abstraction

• Kernel #3 Cloud Abstraction

• 总结

训练VS推理

机器学习和深度学习由两个独特的阶段构成:训练和推理。前者关于搭建模型,后者是关于在产品中运行这些模型。

训练模型是一个非常依赖框架的迭代过程。一些机器学习工程师在GPU上使用Tensorflow,其他人在CPU上使用scikit-learn 。这类似于构建应用程序,其中应用程序开发人员有一个精心整合的开发工具链和库,不断编译和测试他们的代码。培训需要很长的计算周期(数小时到数天),通常是固定的负载输入(意味着你不需要从一台机器扩展到X机器以响应触发器),并且理想地是一个有状态的过程,数据科学家将需要反复保存训练进度,如神经网络检查点。

另一方面推理是将该模型规模扩展到多个用户。当同时运行多个模型时,每个模型都以不同的框架和语言编写,它类似于操作系统。操作系统将负责调度工作,共享资源和监视这些工作。 “工作”是一个推理事务,与训练的情况不同,需要一个短暂的计算周期(类似于SQL查询),弹性负载(机器需要与推理需求成比例地增加/减少),而且它是无状态的,其中先前事务的结果不会影响下一个事务的结果。

我们将重点放在推理方面。

无服务器 FTW

我们将为我们的操作系统使用无服务器计算,所以让我们花一点时间来解释为什么无服务器架构对于AI推理是有意义的。

正如我们在上一节中所解释的,机器学习推理需要一个短的计算突发。这意味着作为REST API服务的服务器将处于空闲状态。例如,当接收到请求时,要对图像进行分类,它会在短时间内突然出现CPU / GPU利用率,返回结果,然后恢复为空闲状态。此过程与数据库服务器相似,该服务器在接收到SQL查询之前是空闲的。

由于这个要求,AI推理是非常适合无服务器计算的。无服务器架构具有明显的扩展优势和经济优势。例如,假设您已经构建了一个名为“SeeFood”的应用程序,它可以将图像分为是热狗和不是热狗。您的APP会被虚拟化,现在位列图表上方。以下是您的日常应用使用情况:

“SeeFood”每日应用程序的使用情况。午餐时间非常受欢迎。

Y轴为“每秒呼叫”。 X轴是每天的时刻。

在这个虚拟的情况下,如果我们使用传统(固定规模)架构,那么我们每天要养40台机器。这是以下绿色突出显示的区域。使用标准的云定价,这可能需要我们约$ 648 * 40 =每月25,920美元。

传统架构 - 最大设计

40台机器24小时, $ 648 * 40 = $ 25,920每月

如果我们使用自动扩展架构(我们每小时添加或删除机器),那么我们每天平均需要支付19台机器。这是以下绿色突出显示的区域。总共$ 648 * 19 = $ 12,312每月。

自动扩展架构 - 本地最大设计

19台机器24小时。 $ 648 * 40 = $ 12,312每月

最后,如果我们使用无服务器架构,那么我们将在理论上支付我们使用的金额,而不是为空闲时间付费。这是下面图表中的蓝色区域。这个虚构场景中的成本是难以计算的 - 它平均降低到21个/秒,或者相当于6台机器。这是$ 648 * 6 = $ 3,888每月。

无服务器架构 - 最小设计

平均 21次调用/秒,或相当于6台机器。 $ 648 * 6 =每月$ 3,888

在这个(虚构的)情况下,我们的云计算成本从$ 26k到$ 4k。除了更简单的开发(功能封装为原子服务),降低延迟(与边缘计算一起使用)以及滚动部署功能等其他优点之外,这也是使用无服务器计算的重要原因。

从零开始建立一个无服务器架构并不是一件特别困难的事情,特别是近期的进步。像Kubernetes和Docker这样的项目将大大简化功能即服务体系结构的分布、扩展和恢复需求。

Kernels and Shells

和由 Kernel、Shell 和 Service 构成的操作系统类似,我们的操作系统也包括这些组件。

Shell 是用户与之互动的部分,如网站或API端点。Service 是我们操作系统的可插拔组件,如认证和报告。最后一层,Kernel 是真正定义我们操作系统的部分。下面将重点关注。

我们的 Kernel 由三个主要组件组成:弹性伸缩(elastic scaling),runtime abstraction 和cloud abstraction。我们来详细探讨这些组件。

Kernel #1 智能弹性伸缩

如果我们知道算法#A总是会调用算法#B,我们如何利用这些知识?这就是应需 scaling up 的智能部分。

可组合性是机器学习和数据科学世界中非常普遍的模式。数据处理流程通常由预处理、处理和后处理阶段组成。在这种情况下,处理流程是流程上不同功能的组合。在 ensemble 中也发现了这种组合性,数据科学家运行不同的模型,然后综合最终得分。

举个例子:“SeeFood”拍摄了一张水果或蔬菜的照片,然后给出水果或蔬菜的名称。相比于为所有食物和蔬菜建立一个单一的分类器,通常将其分解为三个分类器,像这样:

在这种情况下,我们知道顶端的模型(“水果或蔬菜分类器”)将始终调用“水果分类器”或“蔬菜分类器”。如何利用这一点?一种方法是对所有资源进行测量,跟踪每个模型消耗的CPU水平、内存水平和IO水平。我们的 orchestrator 可以设计为在堆栈这些任务时使用此信息,从而减少网络或增加服务器利用率(为单个服务器适配更多的模型)。

Kernel#2 Runtime Abstraction

我们的 Kernel 的第二个组件是 runtime abstraction。在机器学习和数据科学工作流中,通常我们用某个堆栈(比如说R,GPU 上的 TensorFlow)构建一个分类器,并且在不同的堆栈上(也许是Python,CPU 上的scikit-learn)运行预处理或相邻模型。

我们的操作系统必须抽象出这些细节,并实现功能和模型之间的无缝互操作性。为此,我们使用RESTAPI ,并使用JSON或等效的通用数据表征来交换数据。如果数据太大,我们将URI传递给数据源,而不是JSONblob。

Kernel#3 Cloud Abstraction

如今我们不期望程序员是devops。我们甚至不期望数据科学家理解不同云供应商的所有复杂细节。处理不同的数据源是这种抽象的一个很好的例子。

想象一下,数据科学家创建了一个分类图像模型。该模型的消费者可能有三种不同的角色:(a)后端制作工程师可能正在使用S3;(b)数据科学家可能使用Hadoop;(3)不同组织中的BI用户可能正在使用Dropbox。要求该模型的作者为每一个源构建一个数据连接器(并保留它,以备未来新数据源之需)会分散他们工作的注意力。而我们的操作系统可以提供读写不同数据源的 DataAdapter API。

以上代码分别显示了不带 abstraction 和带有 abstraction的数据读取

在第一个块中,没有存储抽象需要我们为每个数据源(在这种情况下为S3)编写一个连接器,并在我们的模型中进行硬编码。在第二个块中,我们使用DataAdapter API,它接收到数据源的URI,并自动注入正确的数据连接器。那些URI可以指向S3,Azure Blob,HDFS,Dropbox 或其他任何东西。

总结

到目前为止,我们的操作系统是自动伸缩、可组合、自动优化且与云无关的。监控您的数百或数千种模型也是至关重要的任务。不过它还在做另外一件事:可见性。

可见性是发现以下各方创建的模型和功能的能力:

  • 操作系统的第一方用户(您的同事)
  • 第三方供应商(学术界、开源、独立开发商)

操作系统不是产品,而是平台。从打孔卡片到机器语言到汇编语言,操作系统慢慢地爬上了抽象的梯子。抽象,是关于如何将事物看成是模块化组件,鼓励重用,并使得高级工作流更易于访问。这就是为什么最新一波的操作系统(如 iOS 和 Android)都附带了内置的 AppStore。

出于同样的原因,我们的操作系统必须重视可见性和可重用性。这就是为什么我们创建了CODEX,我们 AI 的首选操作系统,以及 Algorithmia.com,算法和模型的应用程序商店。我们帮助公司提高其算法的可见性,同时让这些公司(和独立开发人员)通过 Algorithmia.com 访问最佳的第三方算法。

编译来源:https://blog.algorithmia.com/wp-content/uploads/2017/07/geekwire-os-for-ai.pdf

PPT 下载:https://blog.algorithmia.com/wp-content/uploads/2017/07/geekwire-os-for-ai.pdf

原文发布于微信公众号 - 新智元(AI_era)

原文发表时间:2017-07-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT技术精选文摘

使用Kafka在生产环境中构建和部署可扩展的机器学习

17670
来自专栏新智元

TensorFlow 2.0来了!动态图处理大幅升级,支持更多语言和平台

【新智元导读】TensorFlow2.0,终于要来了!开发团队决定于今年下半年发布TensorFlow2.0预览版,更好的满足广大用户的需求。本文介绍了Tens...

16820
来自专栏瞎说开发那些事

RPA与AI认知--Microsoft Text Analysis

24460
来自专栏CVer

TensorFlow 2.0 要来啦!

自 2015 年开源发布以来,TensorFlow 已成为全球应用最广泛的机器学习框架,可满足广泛的用户和用例需求。在此期间,TensorFlow 随着计算硬件...

13420
来自专栏互联网技术栈

数据仓库模型说明

数据仓库的建设是一个过程,而不是一个项目。在这个过程中我们需要形成自己的规范,以方便管理和维护。在数据仓库的建设过程中,不仅会面临着公司业务迅速发展,业务系统迭...

41930
来自专栏Petrichor的专栏

如何画 软件工程 流程图

个人推荐一款常用的免费在线绘图工具:ProcessOn 。之前也看过比较过其他的 流程图绘图工具 ,要么是功能不够强大,要么就是伸手向咱学生党要钱,或者只给个短...

29430
来自专栏IT技术精选文摘

基于Redis的推荐系统开发

介绍 推荐系统并不总是需要用到复杂的机器学习技术.只要手头上有足够的数据,你就可以花很少的功夫开发一个推荐系统.一个最简单的推荐系统可以只是从用户感兴趣的表中查...

89980
来自专栏章鱼的慢慢技术路

What exactly can you do with Python? Here are Python’s 3 main applications._你能用Python做什么?下面是Python的3

网站框架将帮助你创建基于Python的服务器端代码(后端代码),这些代码将在你的服务器上运行,与用户的设备和浏览器截然相反(前端代码)。像Django和Flas...

12910
来自专栏linux驱动个人学习

Cache 和 Buffer 都是缓存,主要区别是什么?【转】

23840
来自专栏后端技术探索

Uber工程技术栈(三):看曾经的独角兽背后用了哪些技术

Argos是我们的内部异常检测工具,负责分析进来的度量指标,并基于历史数据,将它们与预测模型进行比对,从而确定当前数据是不是在预期范围内。

9520

扫码关注云+社区

领取腾讯云代金券