分布式机器学习的参数服务器
任务可以看作是rpc。任何push或pull请求都可以是任务,也可以是正在执行的远程函数。任务通常是异步的,程序/应用程序可以在发出任务后继续执行。一旦接收到(键、值)对中的响应,就可以将任务标记为已完成。只有当给定任务所依赖的所有子任务返回时,才能将任务标记为已完成。任务依赖有助于实现应用程序的总体控制流。 灵活的一致性模型 从上面的模型中可以看出,任务是并行运行的,通常在远程节点上运行。因此,在各种任务之间存在数据依赖关系的情况下,可能最终会拉出旧版本的数据。在机器学习中,有时用旧的或不太旧的权重,而不是最近的权重,并不是太有害。Parameterserver允许实现者选择它们所追求的一致性模型。如下图所示,支持三种类型的一致性模型。在顺序一致性中,所有任务都是一个接一个地执行。在最终的一致性中,所有的任务都是并行开始并最终聚合的。在有界延迟中,只要任何任务开始大于“t”次已经完成,任务就会启动 - 下面的图c显示有界延迟为1。 ![]() 一致性模型 实施细节 向量时钟: 对于容错和恢复,系统中需要一些时间戳。Parameterserver使用向量时钟来建立系统中的某些事件顺序。基于节点数(m)和参数数量(p)即O(m * p),向量时钟可能很昂贵。考虑到系统中的大量参数,这可能非常大。由于大多数操作可以使用ranges完成,因此可以为每个range分配一个向量时钟,而不是每个range获得一个。如果系统中存在唯一的range,则通过该机制可以进一步降低复杂性,即O(m * r)。系统最初仅以m个时钟开始,因此属于该节点的整个密钥空间具有一个向量时钟。这可能会减慢恢复过程。因此,当在系统中创建更多ranges时,将更新的向量时钟分配给这些ranges分区。 消息:系统中的消息表示为(VectorClock(R),R中的所有键和值)。由于数据密集型机器学习(ML)应用程序中的通信量很大,因此可以通过高速缓存来减少带宽。在迭代算法中多次传递相同的密钥,因此节点可以缓存密钥。在迭代期间,这些值也可能包含许多未更改的值,因此可以有效地压缩。ParameterServer使用snappy compression 来有效地压缩大量零。 一致哈希:一致哈希用于轻松添加和删除系统的新节点。散列环上的每个服务器节点都负责一些密钥空间。密钥空间的分区和所有权由服务器管理器管理。 复制: 复制是由相邻节点完成的。每个节点复制它的k个相邻节点的键空间。负责密钥空间的主服务器通过同步通信与neighbors保持协调,以保持副本。每当master拉key ranges时,它将被复制到它的neighbors。当worker将数据推送到服务器时,在数据复制到从服务器之前,任务不会被确认为已完成。很明显,如果每次推和拉的时候都这样做的话,就会变得很繁琐。因此,系统还允许在聚合一定数量的数据之后进行复制。这个聚合如下图所示。s1和s2之间只交换一条复制消息。它是在x和y都被推送到S1之后,然后是S1上的函数计算任务,然后是复制的最后一条消息,随后确认(4,5a, 5b)流回worker1和worker2以完成任务。 ![]() 聚合后复制
结论 本文阐述了分布式机器学习的一些重要概念。从系统的角度来看,本文结合使用了一些很好的技术,比如一致哈希。基于范围的通信和支持消息传递的本机机器学习(ML)构造似乎是构建高效机器学习(ML)框架的良好洞察力。 【编辑推荐】
点赞 0 (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |