其他

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

2017-07-10 深度学习世界



1 新智元编译  



来源:blog.algorithmia.com

作者:Diego Oppenheimer 

编译:弗格森 熊笑

作为拿到谷歌 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


点击下方“阅读原文”下载同声译
↓↓↓

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存