推荐系统学习笔记-推荐系统分布式离线训练

news2024/11/19 21:25:47

背景

在推荐、广告、搜索等互联网场景下,动则TB甚至PB级数据量。导致几乎不可能在传统单机环境下完成机器学习模型的训练。分布式机器学习训练成为称为唯一选择。

主要手段

• Spark MLlib
• Parameter Server
• Tensorflow

Spark MLlib

MLlib从功能上说与Scikit-Learn等机器学习库非常类似,但计算引擎采用的是Spark,即所有计算过程均实现了分布式,这也是它和其他机器学习库最大的不同。

• 把当前模型参数广播到各个数据Partition(worker)
• 把各计算节点进行数据抽样得到mini batch的数据,
分别计算梯度,再通过treeAggregate操作汇总梯度,
得到最终梯度gradientSum
• 利用gradientSum更新模型参数

在这里插入图片描述
局限性:
• 采用全局广播的方式,在每轮迭代前广播全部模型参数,非常消耗带宽资源
• 采用阻断式梯度下降方式,每轮梯度下降由最慢的节点决定(同步问题)
Spark MLlib的mini batch过程是在所有节点计算完各自的梯度之后逐层聚合,最终汇总生成全局的梯度。
也就是说如果出现数据倾斜导致某个节点计算梯度时间过长,那么这一过程将阻断其他所有节点。
• Spark MLlib并不支持复杂深度学习网络结果结构和大量可调超参
Spark MLlib在其标准库里只支持标准的MLP的训练,并不支持RNN、LSTM等复杂网络结构,
而且无法选择不同的激活函数等大量超参。

Parameter Server

概念:参数服务器是个编程框架,用于方便分布式并行程序的编写,其中重点是对大规模参数的分布式存储和协同的支持。工业界需要训练大型的机器学习模型,一些广泛使用的特定的模型在规模上的两个特点:1. 参数很大,超过单个机器的容纳能力(比如大型Logistic Regression和神经网络)2. 训练数据巨大,需要分布式并行提速(大数据)这种需求下,当前类似MapReduce的框架并不能很好适合。因此需要自己实现分布式并行程序,其实在Hadoop出来之前,对于大规模数据的处理,都需要自己写分布式的程序(MPI)。 之后这方面的工作流程被Google的工程师总结和抽象成MapReduce框架,大一统了。参数服务器就类似于MapReduce,是大规模机器学习在不断使用过程中,抽象出来的框架之一。重点支持的就是参数的分布式,毕竟巨大的模型其实就是巨大的参数。

• 用异步非阻断式的分布式梯度下降策略替代同步阻断式的梯度下降策略。
• 实现多server节点的架构,避免单master节点带来的带宽瓶颈和内存瓶颈
• 实现使用一致性哈希,参数范围pull,参数范围push等工程手段实现信息
的最小传递,避免广播操作带来全局性网络网络阻塞和带宽浪费

服务器节点组

  • 每个服务器节点负责保存一部分模型参数,接受工作节点的局部梯度来汇总计算全局梯度,并更新模型参数
  • 节点间可通信
  • manager node负责metadata的一致性,如节点状态,参数分配
    工作节点组
  • 每个工作节点保存部分训练数据,拉取对应服务器节点模型参数并计算当前梯度,然后上传对应该服务器节点
  • 工作节点组间,以及工作节点组内部的任务节点之间并不通信,任务节点只与server通信
  • task scheduler负责为工作节点分配任务监控工作节点运行情况,当有新的工作节点加入或者退出时,!负责重新分配任务
    资源管理中心组
  • 负责维护和分配各节点资源

物理架构
在这里插入图片描述

并行训练示意图
在这里插入图片描述

同步的SGD的实现
在这里插入图片描述
异步的SGD的实现
在这里插入图片描述

在这里插入图片描述
Sequential:
任务之间是有顺序的,只有上一个任务完成,才能开始下一个任务(同步)
Eventual:
所有任务之间没有顺序,各自独立完成自己的任务(异步)
Bounded Delay:
Sequentia跟 Eventual 之间的trade-off,设置一个 𝜏 作为最大的延时时间,
只有 𝜏 之前的任务都被完成了,才能开始一个新的任务
𝜏 = 0, 情况就是 Sequential
𝜏 = ∞, 情况就是 Eventual

在这里插入图片描述
Vector Clock

parameter server中,参数都是可以被表示成(key;value)的集合,key就是feature ID,而value就是它的权重,对于稀疏参数,不存在的key,就可以认为是0
为参数伺服器中的每个参数添加一个时间戳,来跟踪参数的更新和防止重复发送数据,基于此,通信中的梯度更新数据中也有时间戳,防止重复更新
如果每个参数都有一个时间戳,那么参数众多,时间截也众多,由于parameter server在oush和oul的时候都是range-based,那么在range里面的参数共享同一个时间戳,就可以大大降低空间复杂度

Messages

Messages是节点间交互的主要格式,条message包括[ timestamp ,(k, v),(k1, V1),…]
kev和value的压缩

节点增加或减少的一致性哈希(负载均衡

tensorflow

计算图+session
计算存在依赖关系的任务节点或者子图之间需要串行执行,不存在依
赖关系的任务节点或子图可以并行执行
TensorFlow的分布式训练模式采用parameter server策略,则各worker
节点会以数据并行方式训练
单机采用CPU+GPU多核并行

关于tensorflow,更加详细的内容可以看这个专栏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/106680.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何利用地表温度遥感数据和气象资料计算农田地表水热通量

地表水热通量主要包括感热/显热通量和潜热通量,是陆-气交互以及水-热-碳循环研究的重要变量。其中,潜热通量是地表蒸散发的能量形式,对农业水资源管理、作物水分利用效率等非常关键。由于热红外遥感对地表干湿变化、以及农业干旱响应快速&…

WeakHashMap源码解析

WeakHashMap源码解析 简介 WeakHashMap 是一种 弱引用 map,内部的 key 会存储为弱引用,当 jvm gc 的时候,如果这些 key 没有强引用存在的话,会被 gc 回收掉,下一次当我们操作 map 的时候会把对应的 Entry 整个删除掉…

金融信息科技服务外包风险管理能力成熟度评估规范 学习笔记 附录下载地址

金融信息科技服务外包风险管理的范围 本标准规定了金融业信息科技服务外包风险管理能力成熟度评估体系以及对发包方和承包方的总体要求,分别对发包方、承包方的服务外包风险管理能力成熟度进行了分级定义,并规定了对发包方和承包方进行服务外包风险管理…

《OpenGL 模型》 渲染出帅气的暗影战士

模型Assimp流程网格模型效果Assimp 3D建模工具,可以让艺术家创建复杂的形状,Assimp库用于加载,如加载obj格式的文件到我们的程序之中,下载CMAKE用于构建该库(会有很多问题),不过!我…

【小程序】小程序代码的构成

目录 项目结构 1. 了解项目的基本组成结构 2. 小程序页面的组成部分 JSON配置文件 1. JSON 配置文件的作用 2. app.json 文件 3. project.config.json 文件 4. sitemap.json 文件 5. 页面的 .json 配置文件 6. 新建小程序页面 7. 修改项目首页 项目结构 1. 了解项…

别再用过时的方式了!全新版本Spring Security,这样用才够优雅!

基本使用 我们先对比下Spring Security提供的基本功能登录认证&#xff0c;来看看新版用法是不是更好。 升级版本 首先修改项目的pom.xml文件&#xff0c;把Spring Boot版本升级至2.7.0版本。 <parent><groupId>org.springframework.boot</groupId><art…

Lua 元表(Metatable)

在 Lua table 中我们可以访问对应的 key 来得到 value 值&#xff0c;但是却无法对两个 table 进行操作(比如相加)。 因此 Lua 提供了元表(Metatable)&#xff0c;允许我们改变 table 的行为&#xff0c;每个行为关联了对应的元方法。 例如&#xff0c;使用元表我们可以定义 …

STM32程序设计规范浅析

这篇博客写到“STM32基础知识篇”里&#xff0c;一方面是一个很好地对过往工作的总结&#xff0c;另一方面也是整个专栏撰写计划的开端&#xff0c;古人云&#xff1a;良好的开端是成功的一半&#xff0c;在文章的最后详细地规划了整个专栏后期的更新计划。 笔者前段时间休息的…

无人机遥感图像拼接与处理操作技术

【内容简述】&#xff1a; 无人机遥感图像采集流程&#xff1a; 无人机遥感监测介绍 无人机航线规划设计 无人机飞行软件操作 无人机航拍一般过程 无人机遥感图像拼接软件操作&#xff1a; Photoscan软件介绍 软件基本操作与实践 遥感图像拼接的一般流程 遥感图像分组拼接与点…

【centos】安装nvida CUDA平台附带安装cudnn库

目录1.安装 CUDAToolKit2.安装cudnn库1.安装 CUDAToolKit 使用 lspci | grep -i nvidia列出所有支持的GPU 安装内核开发依赖包&#xff1a; yum install kernel-devel查看内核版本号&#xff0c;用来看与开发包版本号是否一致&#xff1a; uname -r查看nvida显卡驱动&#…

设计模式之迭代器模式

Iterator design pattern 迭代器模式的概念、迭代器模式的结构、迭代器模式的优缺点、迭代器模式的使用场景、迭代器模式的实现示例、迭代器模式的源码分析 1、迭代器模式的概念 迭代器模式&#xff0c;即提供一种方法来顺序访问聚合对象内的元素&#xff0c;而不暴露聚合对象…

LeetCode HOT 100 —— 448. 找到所有数组中消失的数字

题目 给你一个含 n 个整数的数组 nums &#xff0c;其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字&#xff0c;并以数组的形式返回结果。 思路 原地哈希&#xff08;简单模拟&#xff09;&#xff1a; 核心思路&#xff1a; 因为…

Python 和 PyQt5 实现打地鼠小游戏

Python 和 PyQt5 实现打地鼠小游戏 实现效果&#xff1a; 视频效果&#xff1a; https://live.csdn.net/v/264602https://live.csdn.net/v/264602 代码&#xff1a; import random import sysfrom PyQt5.QtCore import QBasicTimer, Qt, QTimer from PyQt5.QtGui import QCo…

CSS3【基础选择器、字体样式、文本样式、行高样式】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录基础选择器1. 标签选择器2. 类选择器3. id选择器字体和文本样式1.字体样式1.1 字体大小1.2 字体粗细1.3 字体样式&#xff08;是否倾斜&#xff09;1.4 常见字体系列…

JAVA中实现多线程-单例双重锁(DCL(Double Check Lock)双重锁检查)

一 .多线程 继承 Thread 类实现 Runnable 接口实现 Callable 接口线程池 重写run方法&#xff0c;创建对象&#xff0c;调用start()方法启动线程 1&#xff0c;新生状态 – 用new关键字建立一个线程后&#xff0c;该线程对象就处于新生状态。 – 处于新生状态的线程有自己的…

Netty前置知识

传统IO 这里以文件输入输出流&#xff1a;FileInputStream 、 FileOutputStream 来进行解释。由继承关系得知&#xff0c;这两个输入和输出类继承自 InputStream 和 OutputStream 这两个基础的输入、输出的抽象类&#xff0c;这时我们可以看到当我们需要读写文件的时候&#x…

leetcode--搜索

搜索1.深度优先搜索(DFS)&#xff08;1&#xff09;岛屿的最大面积(695)&#xff08;2&#xff09;省份数量&#xff08;3&#xff09;太平洋大西洋水流问题(417)2.回溯法&#xff08;1&#xff09;全排列(46)&#xff08;2&#xff09;组合(77)&#xff08;3&#xff09;单词搜…

C++ allocator设计内存管理器

文章目录allocator内存管理器基本属性类的设计关键功能的实现完整的内存管理器内存管理器的测试&#xff1a;设计自定义的String类。前情回顾&#xff1a; allocator内存管理类 allocator内存管理器 某些类需要在运行时分配可变大小的内存空间&#xff0c;一般来说我们使用容器…

从零搭建完整python自动化测试框架(UI自动化和接口自动化)

从零搭建完整python自动化测试框架&#xff08;UI自动化和接口自动化&#xff09; 文章目录 总体框架 PO模式、DDT数据驱动、关键字驱动 框架技术选择 框架运行结果 各用例对应的定义方式&#xff08;PO/DDT&#xff09; 测试执行结果 从零开始搭建项目 一、开发环境搭…

泪目,终于有P8大佬把困扰我多年的《计算机网络原理》全部讲明白了

前言 为什么网络协议这么重要呢&#xff1f;集群规模一大&#xff0c;我们首先想到的就是网络互通的问题&#xff1b;应用吞吐量压不上去&#xff0c;我们首先想到的也是网络互通的问题。所以&#xff0c;要成为技术牛人&#xff0c;搞定大系统&#xff0c;一定要过网络这一关&…