当前位置: 首页 > 科技观察

用于分布式机器学习的参数服务器

时间:2023-03-20 13:22:05 科技观察

介绍许多机器学习问题都依赖于大量数据进行训练,然后进行推理。大型Internet规模的公司使用TB或PB级数据进行训练,并从中创建模型。这些模型包含在大多数情况下将优化推理误差的权重。权重/参数的数量大约为数十亿到数万亿。在如此大的模型中,不可能在一台机器上同时进行学习和推理。拥有一个可用于分布式学习和推理的框架是很有用的。由于参数需要在多个节点之间共享,然后用于执行和细化它们的计算以更新它们,因此在共享时,大量数据可能成为瓶颈。共享在带宽、顺序机器学习(ML)算法的同步和机器的容错方面代价高昂,故障率高达10%。Parametersever(https://www.cs.cmu.edu/~muli/file/parameter_server_osdi14.pdf)提出了一个新的框架来解决这些问题并构建分布式机器学习算法。主要设计理念ParameterServer提出以下设计需求:高效通信:异步任务模型和API,可以降低机器学习(ML)算法的整体网络带宽灵活的一致性模型:松散一致性有助于降低同步成本。它还允许开发人员在算法收敛性和系统性能之间进行选择。添加资源的弹性:允许在不重新启动整个计算的情况下添加更多容量。高效容错:在故障率高、数据量大的情况下,如果机器故障不是灾难性的,任务可以在一秒左右快速恢复。易于使用:API的结构支持ML结构,例如稀疏向量、矩阵或张量。分布式机器学习算法示例一个经典的监督式机器学习(ML)问题涉及在给定标记数据训练集的情况下优化成本函数。改变和调整许多样本的成本函数,以减少或最小化预测误差。计算偏导数/梯度以调整模型或减少错误。这些梯度有助于在正确的方向上移动权重以最小化错误。对于“d”维特征向量,该模型尝试使用以下公式预测先前未见过的x的结果:对于每个i=1到d,∑xi*wi。为确保模型泛化能力相对较好(即它不能单独在训练数据上表现良好),将正则化组件添加到预测函数中。所以上面提到的函数就变成了Σxi*wi+?*Norm(w)。这里?用于惩罚在训练数据上找到的权重。这削弱了学习到的权重,从而避免过度拟合并有助于泛化到以前看不见的数据。本文更侧重于框架的系统方面。让我们看看如何使用分布式随机梯度下降来解决上述预测算法。下图描述了迭代算法并行化工作的高级过程:分布式训练算法该系统由一些服务器节点和工作节点组成。每个工作人员加载一些数据子集,不同的工作人员加载不同的样本。每个工作人员计算本地数据的梯度以优化损失函数。然后每个工作人员将这些部分梯度发送到服务器节点。服务器节点聚合从许多工作节点接收到的梯度。完成服务器节点后,工作节点可以从服务器节点中提取新的一组权重并再次进行梯度计算。大部分时间花在计算g1,g2,...,gm梯度上。这些是使用transpose(X)*w计算的。如果w的数量级为数十亿到数万亿,则此计算在任何单个节点上都是不可行的。然而,每个节点只处理数据的一个子集的一个很好的副作用是它们只需要相应的权重,例如数据。如果有人试图预测用户点击广告的内容,那么像“正则化者”这样的词就不那么有趣了,而且大多数工作人员不会更新权重。正如您在上图中所看到的,在给定节点,只有x的权重(w)存在/与点积相关的特征需要发送到工作节点(参见每个工作节点中的x和相应的列稀疏权重向量w)。在高层次上,该算法在每个worker上看起来像这样:在每个worker上,计算数据子集的梯度??(偏导数)将这个梯度子集推送到服务器当服务器准备好时从服务器拉取提取一个每个服务器上的新权重集:聚合所有“m”个工人的梯度,例如g=Σginew_weights=old_weights-learning_rate*(g+?*Norm(old_weights))架构高层架构ParameterServer由服务器组组成,便于在系统中运行多种算法。服务器组中的每个服务器节点负责分区键空间/数据。服务器可以相互通信以迁移/复制数据以实现可扩展性和可用性。服务器管理器负责维护服务器组的一致视图。它执行活性检查并将密钥空间的所有权分配给每个服务器节点。通常应用程序被分配到工作组。多个worker节点组成一个workergroup,它与servergroup通信以提取参数并推送梯度,如上一节所述。工作组不需要相互通信。调度程序查看工作组并将任务分配给它们。通常,相同的工作节点通过在同一数据集上运行迭代算法来利用本地存储的数据。参数命名空间可用于进一步并行化跨多个工作组的工作。此外,同一个参数命名空间可以在多个组之间共享:一个典型的例子是一个组支持实时推理,而其他工作组可以支持模型的开发和共享参数的更新。让我们看一下构建此类架构所需的一些原语。键值API在撰写本文时,现有系统使用键值对来传递共享参数。一个例子是feature-id及其权重。传统上,这是使用memcached或其他键值存储实现的。重要的见解是值主要是一些线性代数原语,例如向量或矩阵,能够优化这些构造上的操作是有用的。典型的操作是点积、矩阵乘法、L-2范数等。因此,将键值语义和赋值保持为向量,矩阵对于优化最常见的机器学习(ML)操作非常有用。Rangebasedpushandpull从服务器节点提取的权重和梯度被推送到服务器节点,如前面的算法所述。支持基于范围的推送和拉取将优化网络带宽使用。因此,系统支持w.push(R,destination)、w.pull(R,destination)提取数据。在这两种情况下,RangeR中的key对应的值都会从目的节点push和pull。将R设置为单个键,提供简单的键值读写语义。由于梯度g与w具有相同的键,因此可以使用w.push(R,g,destination)将局部梯度推送到目的地。异步任务和依赖任务可以看作是RPC。任何推送或拉取请求都可以是任务或正在执行的远程功能。任务通常是异步的,程序/应用程序可以在发出任务后继续执行。一旦收到(键,值)对中的响应,任务就可以标记为已完成。只有当给定任务所依赖的所有子任务都已返回时,才能将任务标记为已完成。任务依赖性有助于应用程序的整体控制流。灵活的一致性模型从上面的模型可以看出,任务是并行运行的,通常是在远程节点上。因此,在各种任务之间存在数据依赖性的情况下,旧版本的数据可能最终会被拉取。在机器学习中,有时使用旧的或不太旧的权重而不是最近的权重并没有太大的危害。Parameterserver允许实施者选择他们追求的一致性模型。如下图所示,支持三种一致性模型。在顺序一致性中,所有任务都一个接一个地执行。在最终一致性中,所有任务都是并行启动并最终聚合的。在有界延迟中,只要任何任务开始超过“t”次已完成,任务就会启动-下图c显示有界延迟为1。一致性模型实现细节向量时钟:对于容错和恢复,需要一些时间戳在系统中。Parameterserver使用矢量时钟在系统中建立特定的事件序列。基于节点数(m)和参数数(p),即O(m*p),矢量时钟可能很昂贵。考虑到系统中的大量参数,这可能非常大。由于大多数操作都可以使用范围来完成,因此可以为每个范围分配一个矢量时钟,而不是为每个范围分配一个矢量时钟。如果系统中存在唯一区间,则可以通过这种机制进一步降低复杂度,即O(m*r)。系统一开始只有m个时钟,所以属于该节点的整个密钥空间只有一个向量时钟。这可能会减慢恢复过程。因此,当在系统中创建更多范围时,更新的矢量时钟被分配给这些范围分区。消息:系统中的消息表示为(VectorClock(R),R中的所有键和值)。由于数据密集型机器学习(ML)应用程序中的大量通信,可以通过缓存减少带宽。在迭代算法中多次传递相同的密钥,因此节点可以缓存密钥。在迭代过程中,这些值也可能包含很多不变的值,因此可以有效地压缩它们。ParameterServer使用snappy压缩来有效地压缩大量的零。一致性哈希:一致性哈希用于轻松添加和删除系统的新节点。哈希环上的每个服务器节点负责一些密钥空间。密钥空间的分区和所有权由服务器管理器管理。复制:复制由相邻节点完成。每个节点复制其k个邻居的键空间。负责密钥空间的主服务器通过同步通信与邻居协调以维护副本。每当主人拉取关键范围时,它都会被复制到它的邻居。当工作人员将数据推送到服务器时,直到数据被复制到从属服务器后,任务才会被确认为完成。显然,每次推拉都这样做会很乏味。因此,系统也允许在聚合一定数量的数据后进行复制。这种聚合如下图所示。s1和s2之间只交换一条复制消息。是x和y都被push到S1之后,然后是S1上的函数计算任务,然后是复制最后一条消息,然后是acknowledgement(4,5a,5b)回流到worker1和worker2完成任务。聚合后的复制服务器节点管理:能够通过向系统添加新的服务器节点来进行扩展是很有用的。发生这种情况时,服务器管理器会为新节点分配一个键空间。这个密钥可以来自之前终止的某个节点,或者来自一个负载很重的服务器节点的密钥空间。然后这个新节点拉取它负责的键空间,并从k个邻居拉取副本作为从属。通常,可能需要两阶段提取来提取在被该新节点提取时被覆盖的数据。服务器管理器然后将这个所有权分配消息广播到环上的其他节点,然后这些其他服务器节点可以根据这个新的所有权分配缩减它们的密钥空间使用。对于离开节点,服务器管理器将密钥空间分配给一些新的传入节点。服务器管理器通过心跳来维护节点健康。Worler节点:添加新的工作节点相对简单。任务调度程序将数据范围分配给工作节点。这个新节点将从NFS或其他一些工作程序中提取数据。调度程序然后将此消息广播给其他工作人员,以便其他工作人员可以通过放弃一些训练数据来回收一些空间。当工作节点离开时,恢复数据将取决于算法的所有者——取决于数据的大小。结束语本文阐述了分布式机器学习的一些重要概念。从系统的角度来看,本文结合使用了一些不错的技术,例如一致性哈希。基于范围的通信和支持消息传递的本机机器学习(ML)构造似乎是构建高效机器学习(ML)框架的良好见解。