在这个虚拟的情况下,如果我们使用传统(固定规模)架构,那么我们每天要养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 (责任编辑:本港台直播) |