分布式机器学习:异步sgd和hogwild!算法(pytorch)-编程思维

1 导引 我们在博客《分布式机器学习:同步并行SGD算法的实现与复杂度分析(PySpark)》和博客《分布式机器学习:模型平均MA与弹性平均EASGD(PySpark) 》中介绍的都是同步算法。同步算法的共性是所有的节点会以一定的频率进行全局同步。然而,当工作节点的计算性能存在差异,或者某些工作节点无法正常工作(比如死机)的时候,分布式系统的整体运行效率不好,甚至无法完成训练任务。为了解决此问题

pytorch:单卡多进程并行训练-编程思维

1 导引 我们在博客《Python:多进程并行编程与进程池》中介绍了如何使用Python的multiprocessing模块进行并行编程。不过在深度学习的项目中,我们进行单机多进程编程时一般不直接使用multiprocessing模块,而是使用其替代品torch.multiprocessing模块。它支持完全相同的操作,但对其进行了扩展。 Python的multiprocessing模块可使用f

分布式机器学习:模型平均ma与弹性平均easgd(pyspark)_orion-orion-编程思维

计算机科学一大定律:许多看似过时的东西可能过一段时间又会以新的形式再次回归。 1 模型平均方法(MA) 1.1 算法描述与实现 我们在博客《分布式机器学习:同步并行SGD算法的实现与复杂度分析(PySpark)》中介绍的SSGD算法由于通信比较频繁,在通信与计算比较大时(不同节点位于不同的地理位置),难以取得理想的加速效果。接下来我们介绍一种通信频率比较低的同步算法——模型平均方法(Mod

分布式机器学习:同步并行sgd算法的实现与复杂度分析(pyspark)_orion-orion-编程思维

1 分布式机器学习概述 大规模机器学习训练常面临计算量大、训练数据大(单机存不下)、模型规模大的问题,对此分布式机器学习是一个很好的解决方案。 1)对于计算量大的问题,分布式多机并行运算可以基本解决。不过需要与传统HPC中的共享内存式的多线程并行运算(如OpenMP)以及CPU-GPU计算架构做区分,这两种单机的计算模式我们一般称为计算并行)。 2)对于训练数据大的问题,需要将数据进行划分并分

分布式机器学习:PageRank算法的并行化实现(PySpark)-编程思维

1. PageRank的两种串行迭代求解算法 我们在博客《数值分析:幂迭代和PageRank算法(Numpy实现)》算法中提到过用幂法求解PageRank。 给定有向图 我们可以写出其马尔科夫概率转移矩阵\(M\)(第\(i\)列对应对\(i\)节点的邻居并沿列归一化) \[\left(\begin{array}{lll} 0 & 0 & 1 \\ \frac{1}{2} &a

分布式机器学习:逻辑回归的并行化实现(PySpark)-编程思维

1. 梯度计算式导出 我们在博客《统计学习:逻辑回归与交叉熵损失(Pytorch实现)》中提到,设\(w\)为权值(最后一维为偏置),样本总数为\(N\),\(\{(x_i, y_i)\}_{i=1}^N\)为训练样本集。样本维度为\(D\),\(x_i\in \mathbb{R}^{D+1}\)(最后一维扩充),\(y_i\in\{0, 1\}\)。则逻辑回归的损失函数为: \[\mathc

联邦学习中的优化算法-编程思维

导引 联邦学习做为一种特殊的分布式机器学习,仍然面临着分布式机器学习中存在的问题,那就是设计分布式的优化算法。 以分布式机器学习中常采用的client-server架构(同步)为例,我们常常会将各client节点计算好的局部梯度收集到server节点进行求和,然后再根据这个总梯度进行权重更新。 不过相比传统的分布式机器学习,它需要关注系统异质性(system heterogeneity)、统计

多任务学习分布式化及联邦学习-编程思维

1. 导言 现在多任务学习根据数据的收集方式可以粗略地被分为两种,一个是集中化的计算方法,即假定数据被事先收集到一个中心节点上然后再运行模型, 大多数基于神经网络的多任务学习应用,比如CV和NLP,主要都用的这种方法[1][2][3][4]。 另外还有一种是分布式的计算方法,这种方法假定异构的(heterogeneous)数据分别由各个任务分别以分布式的方式收集。这种方法常常被建模为在多智能体

分布式机器学习、联邦学习、多智能体的区别和联系-编程思维

一、分布式机器学习、联邦学习、多智能体介绍 最近这三个方面的论文都读过,这里写一篇博客归纳一下,以方便搞这几个领域的其他童鞋入门。我们先来介绍以下这三种机器学习范式的基本概念。 1、分布式机器学习介绍 分布式机器学习(distributed machine learning),是指利用多个计算/任务节点(Worker)协同训练一个全局的机器学习/深度学习模型。需要注意的是,分布式机器学习和传统

分布式机器学习中的模型架构-编程思维

在上一篇博文《分布式机器学习中的模型聚合》(链接:https://www.cnblogs.com/orion-orion/p/15635803.html)中,我们关注了在分布式机器学习中模型聚合(参数通信)的问题,但是对每一个client具体的模型架构设计和参数优化方法还没有讨论。本篇文章我们关注具体模型结构设计和参数优化。 首先,在我follow的这篇篇论文[1]中(代码参见[2])不同的c

分布式机器学习中的模型聚合-编程思维

论文[1]在联邦(分布式)学习的情景下引入了多任务学习,其采用的手段是使每个client/task节点的训练数据分布不同,从而使各任务节点学习到不同的模型,且每个任务节点以及全局(global)的模型都由多个分量模型集成。该论文最关键与核心的地方在于将各任务节点学习到的模型进行聚合/通信,依据模型聚合方式的不同,可以将模型采用的算法分为client-server方法,和fully decent

分布式机器学习常用数据集-编程思维

今天开始跑分布式机器学习论文实验了,这里介绍一下论文的常用数据集(因为我的研究领域是分布式机器学习,所以下面列出的数据集可能偏向这方面,做其他方向的童鞋参考下就好)。 1. CV数据集 (1)FEMINIST 任务:手写字符识别参数说明: 62种不同的字符类别 (10种数字, 26种小写, 26种大写)的像素图片, 图片全为28乘28像素大小 (可以选择将其转为128×128), 样本数80

分布式机器学习常用数据集-编程思维

今天开始跑分布式机器学习论文实验了,这里介绍一下论文的常用数据集(因为我的研究领域是分布式机器学习,所以下面列出的数据集可能偏向这方面,做其他方向的童鞋参考下就好)。 1. CV数据集 (1)FEMINIST 任务:手写字符识别参数说明: 62种不同的字符类别 (10种数字, 26种小写, 26种大写)的像素图片, 图片全为28乘28像素大小 (可以选择将其转为128×128), 样本数80