云计算机器学习平台提供的多种功能可以支持完整的机器学习生命周期。
为了创建有效的机器学习和深度学习模型,组织需要获取大量的数据,并对其执行特征工程的方法,以及在合理的时间内训练数据模型的方法。然后,组织需要一种方法来部署模型,监视它们是否随时间的推移而改变,以及根据需要重新训练它们。
如果组织已经在计算资源和加速器(例如GPU)上进行了投资,则可以在内部部署基础设施完成所有这些操作,但是可能会发现,如果资源足够,它们在很多时间都处于闲置状态。另一方面,有时在云平台中运行整个管道,根据需要使用大量计算资源和加速器,然后释放它们,可能更具成本效益。
主要的云计算提供商(以及其他云计算提供商)已投入大量精力来构建其机器学习平台,以支持从计划项目到维护生产模型的完整机器学习生命周期。组织如何确定哪些云平台可以满足其需求?每个端到端机器学习平台都应提供以下12种功能。
1.接近自己的数据
如果组织拥有建立精确模型所需的大量数据,则不希望将其传输到世界各地。这里的问题并不是距离,而是时间:数据传输速度最终受到光速限制,即使在带宽无限的完美网络上也是如此。长距离意味着等待时间更长。
对于非常大的数据集,理想的情况是在已经存在数据的地方建立模型,从而不需要传输大量数据。一些数据库在一定程度上支持这一点。
下一个最佳情况是数据与模型构建软件位于同一高速网络上,这通常意味着在同一数据中心内。如果组织拥有TB或更大容量的数据,即使将数据从一个数据中心迁移到云计算可用性区域内的另一个数据中心,也可能会造成严重的延迟。组织可以通过执行增量更新来缓解这种情况。
最坏的情况是,组织必须在带宽受限和高延迟的路径上远程移动大量数据。而在这方面,澳大利亚为此部署的跨太平洋电缆的工程令人惊叹。
2.支持ETL或ELT管道
ETL(导出、转换和加载)和ELT(导出、加载和转换)是数据库领域中常见的两种数据管道配置。机器学习和深度学习扩大了对这些内容的需求,尤其是转换部分。当转换需要更改时,ELT为组织提供更大的灵活性,因为加载阶段通常是大数据最耗时的阶段。
通常情况下,没有进行处理的数据很嘈杂,需要过滤。此外,这些数据的范围也有所不同:一个变量的大值可能高达数百万,而另一个变量的范围可能是-0.1至-0.001。对于机器学习来说,必须将其变量转换为标准化的范围,以防止较大范围的变量控制模型。具体的标准化范围取决于模型使用的算法。
3.支持在线环境进行模型构建
传统的观点是,组织应该将数据导入桌面设备以进行模型构建。建立良好的机器学习和深度学习模型所需的大量数据改变了局面:组织可以将一小部分数据样本下载到桌面设备上,以进行探索性数据分析和模型构建,但是对于生产模型,则需要访问完整的模型数据。
Jupyter Notebooks、JupyterLab和Apache Zeppelin等基于Web的开发环境非常适合模型构建。如果组织的数据与笔记本电脑环境位于同一云平台中,则可以对数据进行分析,以很大程度地减少数据移动的时间。
4.支持扩展训练
除了训练模型之外,笔记本电池的计算和内存要求通常很小。如果笔记本可以生成在多个大型虚拟机或容器上运行的训练作业,则将大有帮助。如果训练可以访问加速器(例如GPU、TPU和FPGA),也将有很大帮助;这些模型可以将数天的训练过程变成数小时。
5.支持AutoML和自动特征工程
并不是每个组织都擅长于选择机器学习模型、选择特征(模型使用的变量),以及从原始观察中设计新特征。即使组织擅长这些任务,它们也很耗时,而且可以在很大程度上实现自动化。
AutoML系统经常尝试使用许多模型来查看哪些模型可以产生优秀目标函数值,例如回归问题的最小平方误差。出色的AutoML系统还可以执行功能工程,并有效地利用它们的资源,以尽可能多的特征集合来追求优质的模型。
6.支持优质的机器学习和深度学习框架
大多数数据科学家拥有用于机器学习和深度学习技术的很喜欢的框架和编程语言。对于喜欢Python的人来说,Scikit学习通常是机器学习的最爱,而TensorFlow、PyTorch、Keras、MXNet通常是深度学习的首选。在Scala中,Spark MLlib往往是机器学习的首选。在R中,有许多原生机器学习包,以及与Python的良好接口。而在Java中,H2O.ai的评价很高,Java-ML和Deep Java Library也是如此。
云计算机器学习和深度学习平台往往拥有自己的算法集合,并且它们通常以至少一种语言或作为具有特定入口点的容器来支持外部框架。在某些情况下,组织可以将自己的算法和统计方法与平台的AutoML功能集成在一起,这非常方便。
一些云平台还提供了自己的主要深度学习框架的调整版本。例如,AWS公司拥有TensorFlow的优化版本,该公司声称可以为深度神经网络训练提供近乎线性的可扩展性。
7.提供预训练的模型并支持转移学习
并非每个人都希望花费时间和资源来训练自己的模型,而即使当预训练的模型可用时,他们也不应该如此。例如,ImageNet数据集非常庞大,并且要针对其训练比较先进的深度神经网络可能要花费数周的时间,因此在可能的情况下使用预先训练的模型是有意义的。
另一方面,经过预训练的模型可能无法始终标识组织关心的对象。转移学习可以帮助组织针对特定数据集自定义神经网络的最后几层,而无需花费更多时间和资金来训练整个网络。
8.提供优化的人工智能服务
主要的云平台为许多应用程序提供了功能强大且经过优化的人工智能服务,而不仅仅是图像识别。其示例包括语言翻译、语音转换到文本、文本转换到语音、预测和推荐。
这些服务已经经过训练和测试,其使用的数据量超出了企业通常可获得的数据量。它们还已经部署在具有足够计算资源(包括加速器)的服务端点上,以确保在全球负载下具有良好的响应时间。
9.管理实验
为组织的数据集找到优秀模型的唯一方法是尝试采用所有方法,无论是人工还是使用AutoML。这就留下了另一个问题:管理实验。
良好的云计算机器学习平台将为组织提供一种方式,可以查看和比较每个实验的目标函数值(训练集和测试数据)以及模型和混淆矩阵的大小。而能够绘制所有这些图表具有一定的优势。
10.支持模型部署以进行预测
一旦组织有了根据自己的条件选择优秀实验的方法,就需要一种简单的方法来部署模型。如果组织出于同一目的部署多个模型,则还需要一种在它们之间分配流量的方法来进行a/b测试。
11.监控预测效果
数据随着世界的变化而变化。这意味着组织无法部署模型而忘记它。与其相反,组织需要监视为预测而提交的数据。当数据从原始训练数据集的基线开始发生明显变化时,组织需要重新训练模型。
12.控制成本
最后,组织需要一些方法来控制模型产生的成本。部署用于生产推理的模型通常占到深度学习成本的90%,而训练仅占成本的10%。
控制预测成本的优秀方法取决于组织的负载和模型的复杂性。如果负载很高,则可以使用加速器来避免添加更多虚拟机实例。如果负载可变,则随着负载的增加或减少,组织可能能够动态更改大小或实例或容器的数量。而且,如果组织的负载较少,则可以使用带有部分加速器的非常小的实例来处理预测。