SageMaker算法如何推动机器学习民主化
系统支持高效更新、并行化及稳定扩展。
某机构SageMaker是一项云服务,让客户能够快速、轻松地构建机器学习模型并部署在云端。它包含一套标准的机器学习算法,如k-means聚类、主成分分析、神经主题建模和时间序列预测。
在上周举行的数据系统领域重要会议SIGMOD/PODS上,我与同事们描述了支撑这些算法的系统设计。
基于云的机器学习模型运行的上下文环境很少是静态的。随着新的训练数据可用或出现新的用例,模型通常需要更新;有些模型甚至每小时都需要更新。
然而,仅在新数据上重新训练模型可能会侵蚀模型先前获得的知识。在新旧数据的组合上重新训练模型可以避免这个问题,但这可能非常耗时。
SageMaker的系统设计有助于解决这一僵局。它还使得模型训练的并行化更易实现,并且能更高效地优化模型的“超参数”——即模型的结构性特征,其变化会影响性能。
例如,在神经网络中,超参数包括网络层数、每层节点数以及网络的学习率等特征。模型超参数的最佳设置因任务而异,而为特定任务调整超参数通常是一个繁琐的试错过程。
我们的系统设计通过区分模型和模型状态来解决这些问题。在此上下文中,状态是模型迄今所见数据的一个执行摘要。
以一个简单例子说明,假设一个模型正在计算输入数字流的运行平均值。模型的状态将包括它所见所有数字的总和以及数量。如果模型存储此状态,那么当新一周有新的数字流到来时,它只需继续递增这两个值,无需重新添加已见过的数字。
当然,大多数机器学习模型执行的任务比简单平均复杂得多,状态必须捕获的信息也因任务而异:例如,它可以包括从所见数据中提取的代表性样本。使用SageMaker,我们为支持的每种机器学习算法确定了独立的状态变量。
跟踪状态的优势之一是模型稳定性。状态的大小是固定的:模型可能看到越来越多的数据,但状态对数据的摘要始终占用相同的内存空间。
这意味着模型训练的时间和系统资源成本与新训练数据量成线性关系。如果训练时间呈超线性增长,足够大量的数据可能导致训练超时而失败。
平均的例子还说明了系统的另一个方面:它需要在流式数据上运行。也就是说,每个训练样本可能只被看到一次,并且样本序列可能在任意点中断。在任何这样的中断点,它都应该能综合所学内容,生成一个有效且最新的模型。
分布式状态
我们的系统支持这种学习范式。但它也能在标准的机器学习设置中完美运行,即将训练样本分成固定大小的批次,模型多次遍历同一训练集,直到其性能停止提升。
当系统并行训练模型时,每个并行处理器会收到自己的一份状态副本,并在本地更新。为了同步本地存储的状态更新,我们使用了一个名为参数服务器的开源框架。
同步调度同样是算法特定的。例如,使用k-means聚类和主成分分析时,给定的处理器在完成所有计算之前,无需向参数服务器报告其状态更新。而对于神经网络这种训练涉及寻找全局最优解的任务,则需要更频繁地进行同步。
正如状态的数据摘要能够高效地重新训练模型一样,它们也能高效地估算不同超参数设置对模型性能的影响。这就是SageMaker能够自动化超参数调优的原因。
在论文中,我们报告了将系统与相同机器学习技术的一些标准实现进行比较的实验结果。
我们发现,平均而言,我们的方法在资源效率上要高得多。例如,对于线性学习器(一种学习线性模型如线性回归和多类分类的算法),我们的方法使并行化效率提高了八倍。
而对于用于数据点聚类的k-means聚类技术,我们的方法使训练效率提高了近十倍。实际上,在我们的实验中,大于100GB的数据集导致现有实现崩溃。FINISHED