140.深度学习分布式计算框架-3

article/2025/10/20 5:26:52

140.1 Horovod

  • Horovod是 Uber 开源的又一个深度学习工具,它的发展吸取了 Facebook「一小时训练 ImageNet 论文」与百度 Ring Allreduce 的优点,可为用户实现分布式训练提供帮助。
  • Horovod 支持通过用于高性能并行计算的低层次接口 – 消息传递接口 (MPI) 进行分布式模型训练。有了 MPI,就可以利用分布式 Kubernetes 集群来训练 TensorFlow 和 PyTorch 模型。
  • 分布式 TensorFlow 的参数服务器模型(parameter server paradigm)通常需要对大量样板代码进行认真的实现。但是 Horovod 仅需要几行。下面是一个分布式 TensorFlow 项目使用 Horovod 的示例:
import  tensorflow as tf
import horovod.tensorflow as hvd
# Initialize Horovod
hvd.init()
# Pin GPU to be used to process local rank (one GPU per process)
config = tf.ConfigProto()
config.gpu_options.visible_device_list = str(hvd.local_rank())
# Build model…
loss = …
opt = tf.train.AdagradOptimizer(0.01)
# Add Horovod Distributed Optimizer
opt = hvd.DistributedOptimizer(opt)
# Add hook to broadcast variables from rank 0 to all other processes during
# initialization.
hooks = [hvd.BroadcastGlobalVariablesHook(0)]
# Make training operation
train_op = opt.minimize(loss)
# The MonitoredTrainingSession takes care of session initialization,
# restoring from a checkpoint, saving to a checkpoint, and closing when done
# or an error occurs.
with tf.train.MonitoredTrainingSession(checkpoint_dir=“/tmp/train_logs”,config=config,hooks=hooks) as mon_sess:while not mon_sess.should_stop():# Perform synchronous training.mon_sess.run(train_op)

在该示例中,粗体文字指进行单个 GPU 分布式项目时必须做的改变:

  • hvd.init() 初始化 Horovod。
  • config.gpu_options.visible_device_list = str(hvd.local_rank()) 向每个 TensorFlow 流程分配一个 GPU。
  • opt=hvd.DistributedOptimizer(opt) 使用 Horovod 优化器包裹每一个常规 TensorFlow 优化器,Horovod 优化器使用 ring-allreduce 平均梯度。
  • hvd.BroadcastGlobalVariablesHook(0) 将变量从第一个流程向其他流程传播,以实现一致性初始化。如果该项目无法使用 MonitoredTrainingSession,则用户可以运行 hvd.broadcast_global_variables(0)。
  • 之后,可以使用 mpirun 命令使该项目的多个拷贝在多个服务器中运行:
$ mpirun -np 16 -x LD_LIBRARY_PATH -H 
server1:4,server2:4,server3:4,server4:4 python train.py
  • mpirun 命令向四个节点分布 train.py,然后在每个节点的四个 GPU 上运行 train.py。

140.2 BigDL

  • BigDL是一种基于Apache Spark的分布式深度学习框架。它可以无缝的直接运行在现有的Apache Spark和Hadoop集群之上。BigDL的设计吸取了Torch框架许多方面的知识,为深度学习提供了全面的支持;包括数值计算和高级神经网络;借助现有的Spark集群来运行深度学习计算,并简化存储在Hadoop中的大数据集的数据加载。
  • BigDL优点:
    • 丰富的深度学习支持。模拟Torch之后,BigDL为深入学习提供全面支持,包括数字计算(通过Tensor)和高级神经网络 ; 此外,用户可以使用BigDL将预先训练好的Caffe或Torch模型加载到Spark程序中。
    • 极高的性能。为了实现高性能,BigDL在每个Spark任务中使用英特尔MKL和多线程编程。因此,在单节点Xeon(即与主流GPU 相当)上,它比开箱即用开源Caffe,Torch或TensorFlow快了数量级。
    • 有效地横向扩展。BigDL可以通过利用Apache Spark(快速分布式数据处理框架),以及高效实施同步SGD和全面减少Spark的通信,从而有效地扩展到“大数据规模”上的数据分析
  • BigDL缺点:
    • 对机器要求高 jdk7上运行性能差 在CentOS 6和7上,要将最大用户进程增加到更大的值(例如514585); 否则,可能会看到错误,如“无法创建新的本机线程”。
    • 训练和验证的数据会加载到内存,挤占内存
  • BigDL满足的应用场景:
    • 直接在Hadoop/Spark框架下使用深度学习进行大数据分析(即将数据存储在HDFS、HBase、Hive等数据库上);
    • 在Spark程序中/工作流中加入深度学习功能;
    • 利用现有的 Hadoop/Spark 集群来运行深度学习程序,然后将代码与其他的应用场景进行动态共享,例如ETL(Extract、Transform、Load,即通常所说的数据抽取)、数据仓库(data warehouse)、功能引擎、经典机器学习、图表分析等。

140.3 Petastorm

  • Petastorm是一个由 Uber ATG 开发的开源数据访问库。这个库可以直接基于数 TB Parquet 格式的数据集进行单机或分布式训练和深度学习模型评估。Petastorm 支持基于 Python 的机器学习框架,如 Tensorflow、Pytorch 和 PySpark,也可以直接用在 Python 代码中。
  • 即使是在现代硬件上训练深度模型也很耗时,而且在很多情况下,很有必要在多台机器上分配训练负载。典型的深度学习集群需要执行以下几个步骤:
    • 一台或多台机器读取集中式或本地数据集。
    • 每台机器计算损失函数的值,并根据模型参数计算梯度。在这一步通常会使用 GPU。
    • 通过组合估计的梯度(通常由多台机器以分布式的方式计算得出)来更新模型系数。
  • 通常,一个数据集是通过连接多个数据源的记录而生成的。这个由 Apache Spark 的 Python 接口 PySpark 生成的数据集稍后将被用在机器学习训练中。Petastorm 提供了一个简单的功能,使用 Petastorm 特定的元数据对标准的 Parquet 进行了扩展,从而让它可以与 Petastorm 兼容。
  • 有了 Petastorm,消费数据就像在 HDFS 或文件系统中创建和迭代读取对象一样简单。Petastorm 使用 PyArrow 来读取 Parquet 文件。
  • 将多个数据源组合到单个表格结构中,从而生成数据集。可以多次使用相同的数据集进行模型训练和评估。
  • 为分布式训练进行分片
    • 在分布式训练环境中,每个进程通常负责训练数据的一个子集。一个进程的数据子集与其他进程的数据子集正交。Petastorm 支持将数据集的读时分片转换为正交的样本集。
  • 本地缓存
    • Petastorm 支持在本地存储中缓存数据。当网络连接速度较慢或带宽很昂贵时,这会派上用场。
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sapkxS3X-1669085154833)(https://upload-images.jianshu.io/upload_images/19745945-bf69005adbadb39e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

140.4 TensorFlowOnSpark

  • TensorFlowOnSpark为 Apache Hadoop 和 Apache Spark 集群带来可扩展的深度学习。 通过结合深入学习框架 TensorFlow 和大数据框架 Apache Spark 、Apache Hadoop 的显着特征,TensorFlowOnSpark 能够在 GPU 和 CPU 服务器集群上实现分布式深度学习。
  • 满足的应用场景:
    • 为了利用TensorFlow在现有的Spark和Hadoop集群上进行深度学习。而不需要为深度学习设置单独的集群。

  • 优点:
    • 轻松迁移所有现有的TensorFlow程序,<10行代码更改;
    • 支持所有TensorFlow功能:同步/异步训练,模型/数据并行,推理和TensorBoard;
    • 服务器到服务器的直接通信在可用时实现更快的学习;
    • 允许数据集在HDFS和由Spark推动的其他来源或由TensorFlow拖动;
    • 轻松集成您现有的数据处理流水线和机器学习算法(例如,MLlib,CaffeOnSpark);
    • 轻松部署在云或内部部署:CPU和GPU,以太网和Infiniband。
    • TensorFlowOnSpark是基于google的TensorFlow的实现,而TensorFlow有着一套完善的教程,内容丰富。
  • 劣势:
    • 开源时间不长,未得到充分的验证。

大数据视频推荐:
网易云课堂
CSDN
人工智能算法竞赛实战
AIops智能运维机器学习算法实战
ELK7 stack开发运维实战
PySpark机器学习从入门到精通
AIOps智能运维实战
腾讯课堂
大数据语音推荐:
ELK7 stack开发运维
企业级大数据技术应用
大数据机器学习案例之推荐系统
自然语言处理
大数据基础
人工智能:深度学习入门到精通


http://chatgpt.dhexx.cn/article/5Z0Z0BTt.shtml

相关文章

【MapReduce】分布式计算框架MapReduce

分布式计算框架MapReduce 什么是MapReduce? MapReduce起源是2004年10月Google发表了MapReduce论文,之后由Mike Cafarella在Nutch(爬虫项目)中实现了MapReduce的功能。它的设计初衷是解决搜索引擎中大规模网页数据的并行处理问题,之后成为Apache Hadoop的核心子项目。 它…

【Hadoop】MapReduce——分布式计算框架

文章目录 一、MapReduce设计理念二、MpaReduce计算流程1 原始数据File2 数据块Block3 切片Split4 MapTask5 环形数据缓冲区KvBuffer6 分区Partation7 排序Sort8 溢写Spill9 合并Merge10 组合器Combiner11 拉取Fetch12 合并 merge13 归并Reduce14 写出Output15 MapReduce过程图解…

python-17-并行计算和分布式计算框架dask

dask入门教程 并行计算库Dask官方教程&#xff08;中文翻译&#xff09; dask和numpy的计算对比 1 并行计算和分布式计算 1.1 并行计算parallel computing 并行计算&#xff1a;这是一台计算机的概念&#xff0c;即一台计算机中多个处理器被组织起来&#xff0c;大任务下达的…

大数据技术入门:MapReduce(分布式计算框架)

大家好&#xff0c;我是百思不得小赵。 创作时间&#xff1a;2022 年 7 月 7 日 博客主页&#xff1a; &#x1f50d;点此进入博客主页 —— 新时代的农民工 &#x1f64a; —— 换一种思维逻辑去看待这个世界 &#x1f440; 今天是加入CSDN的第1222天。觉得有帮助麻烦&#x1…

05-分布式计算框架

目录 一&#xff0c;MapReduce 1&#xff0c;简介 2&#xff0c;原理 2.1 基本概念 2.2 程序执行过程 2.3 作业运行模式 二&#xff0c;Spark 1&#xff0c;简介 1.1 背景 1.2 概念 1.3 特点 2&#xff0c;原理 2.1 编程模型 2.2 运行模式 2.3 运行过程 2.4 DA…

大数据之Hadoop分布式计算框架MapReduce

这里写目录标题 一、MapReduce概述二、MapReduce编程模型简述三、MapReduce词频统计案例mvn clean package 四、词频统计案例进阶之Combiner五、词频统计案例进阶之Partitioner六、案例二介绍 一、MapReduce概述 Hadoop MapReduce 是一个分布式计算框架&#xff0c;用于编写批处…

分布式系列之分布式计算框架Flink深度解析

Flink作为主流的分布式计算框架&#xff0c;满足批流一体、高吞吐低时延、大规模复杂计算、高可靠的容错和多平台部署能力。本文简要介绍了Flink中的数据流处理流程以及基本部署架构和概念&#xff0c;以加深对分布式计算平台的了解。 1、Flink概述 Apache Flink是一个框架和分…

分布式计算框架——MapReduce

一、MapReduce概述 Hadoop MapReduce 是一个分布式计算框架&#xff0c;用于编写批处理应用程序。编写好的程序可以提交到 Hadoop 集群上用于并行处理大规模的数据集。 MapReduce 作业通过将输入的数据集拆分为独立的块&#xff0c;这些块由 map 以并行的方式处理&#xff0c…

【学习笔记1】分布式计算技术及框架

一.定义及描述 分布式计算(Distributed Computing)&#xff0c;又称分散式计算&#xff0c;指通过分布式系统进行计算的方式。分布式系统中的每一个运算单元存在于不同的计算机/处理器上&#xff0c;通过调度算法进行信息传递、协作以实现一件大而繁的目标。 简单来说&#x…

C#之简易计算器的制作

在一些问题中有时会用到计算器,今天我们可以用C#做一个简易的计算器 用到的开发工具为Visual Studio 2019(我用的是2019,其他版本的也可以) 1.首先新建一个项目文件. 2.在Form1.cs文件(Winform框架基础文件)中添加所用到的控件. 3.添加TextBox和ComboBox以及Button控件 4.对But…

JS原生——编写简易计算器

一个非常适合新手练习的小案例&#xff01;&#xff01;&#xff01; 使用JS的ES5语法HTMLCSS及企业级代码规范&#xff0c;方便后续良好的代码习惯养成&#xff01;&#xff01;&#xff01; 先来看一下样式吧&#xff01;&#xff01;&#xff01;&#xff08;后附代码&…

Java 实现简易计算器

前言&#xff1a; 出此文章是因为楼主之前在面试中遇到一个笔试题&#xff0c;当时一时半会没想出来&#xff0c;所以后续研究出来了&#xff0c;发出来希望对大家能有所帮助~ 题目&#xff1a;设计一个计算器&#xff0c;可以接收用户输入两个数字与 - * / 的符号&#xff0c…

Matlab设计简易计算器

效果如如下&#xff1a; 整个工程还是挺简单的&#xff0c;之前一直都是用matlab做信号处理&#xff0c;由于要做课程设计&#xff0c;就学了一下matlab的GUI。下面总结几个关键的地方。 &#xff08;1&#xff09;控件拉到自己喜欢的位置&#xff0c;并将控件的Text和Tag改好…

简易计算器(有界面)

&#xff08;没有括号和优先级&#xff0c;简易计算器&#xff09;界面&#xff1a; package javaprogram;import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import j…

Andriod设计简易计算器

1&#xff0e;设计任务及要求 &#xff08;1&#xff09;设计一款基于Android系统下的计算器&#xff0c;实现加减乘除算法&#xff0c;以及清零、撤销操作。界面设计应该就尽量简洁而美观&#xff0c;具有良好的交互性&#xff0c;程序应具有较好的稳健性&#xff1b; &a…

java实现简易计算器

Java简易计算器 用java语言写的一个简易计算器&#xff0c;实现了最基本的、-、*、/ 运算。 先来看下效果&#xff1a; 界面简述&#xff1a; 整个面板的由一个JTextFiled组件16个JButton组件构成&#xff0c;外加一个JPanel组件存放16个按钮&#xff0c;其布局为4x4的网格…

做一个简易计算器(VB版)

今天小编来带大家用VB做一个简易计算器 废话不多说&#xff0c;下面就是具体步骤了 1、创建控件组的方法首先创建一个命令按钮&#xff0c;调整其大小&#xff08;觉得合适就行&#xff09;&#xff0c;名称为Command1&#xff0c;Caption 属性为数字 0 &#xff1b;然后进行…

简易计算器的设计_C#课程设计

以下内容可且仅可供参考&#xff0c;如有错误欢迎指正。 部分内容借鉴自百度 侵删致歉 位切换键盘的实现用了复杂的拖64给label的方法&#xff0c;此功能可以在自己计算机上的计算器里找到。 目录 一、设计简介 1.设计背景 2.开发工具及环境 二、需求分析 1.设计功能要求 …

Python制作简易计算器(GUI)---Tkinter

Python制作简易计算器&#xff08;GUI&#xff09;---Tkinter Tkinter简介Tkinter 与 PyQt5 的比较TkinterPyQt5 项目展示导入模块函数封装1. 运算公式的拼接与展示2. 将显示框的内容删除3. 使用eval()函数对表达式求值 主逻辑1. 布局窗口2. 布局表达式展示区域3. 布局按钮 代码…

自制个性计算器

一、布局文件xml的制作。 如图&#xff1a;是布局之后的一个效果图 完全可以自定义自己喜欢的各种类型的图片。 代码如下&#xff1a; 正所谓每一个鲜艳靓丽app背后都有成堆的代码支撑这句话是没有错的。由于没有长截屏软件只能用短截屏了&#xff0c;大家谅解一下&#…