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

news2024/11/26 16:29:58

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://www.coloradmin.cn/o/27455.html

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

相关文章

Vue脚手架环境中简单使用MarkDown(只入门)

目录 入门 高级使用 入门 1 所在终端输入 npm install vue-meditor 2 复制以下代码 先新建一个组件 <template><div><MavonEditor v-model"myMarkDownData"/><button click"submit">提交</button></div> </te…

vue配置

首先安装node.js 在cmd node -v查看 然后 cmd命令行执行 : npm install -g vue/cli // 加-g是安装到全局 安装vue cli 安装vue cli 1 看一下 这是在cmd输入的内容,参考第一条链接 在vscode中怎么配置他? 文件-打开文件夹,选择一个文件夹 这里是firstvue 在下面新建文件夹…

可变长子网划分

目录 IP地址 子网划分 可变长子网划分 IP地址 在学习子网划分之前应该先清楚什么是IP地址和IP地址的类型 IP 地址的格式0网络地址主机地址10网络地址 主机地址 110网络地址主机地址1110组播地址11110保留 A 1.0.0.0~127.255.255.255 B 128.0.0.0~191.255.255…

C++编程进阶

目录 new运算符 new关键字的使用案例 C的引用 C中引用案例 引用的注意事项 引用做函数参数 引用做函数的返回值 前言&#xff1a; 具体案例 引用的本质 常量引用 常量引用原理 经典案例 函数的提高 函数的默认参数 注意&#xff1a; 具体案例 函数的占位参数…

已解决:树莓派外接硬盘 usb 或者sata 导致wifi无法链接 无线网卡无法使用问题

我的环境是树莓派4b 买了一个有硬盘的盒子 看上图的连接方式&#xff0c;是占用了树莓派的一个usb3.1进行了sata的转接&#xff0c;实现挂载硬盘。 但是我发现&#xff0c;安装系统开机之后&#xff0c;可以看到有硬盘接入&#xff0c;但是无法连wifi&#xff0c;如果拔掉硬盘…

G. SlavicG‘s Favorite Problem(树的遍历DFS,BFS均可)

Problem - G - Codeforces 给你一棵有n个顶点的加权树。回顾一下&#xff0c;树是一个没有任何循环的连接图。加权树是一棵树&#xff0c;其中每条边都有一定的权重。这棵树是无定向的&#xff0c;它没有根。 由于树让你感到厌烦&#xff0c;你决定挑战自己&#xff0c;在给定…

java--Lambda (3)变量的访问与修改

文章目录0 写在前面1 可以直接在 Lambda 表达式中访问外层的局部变量2 在 Lambda 表达式当中被引用的变量的值不可以被更改3 在 Lambda 表达式当中不允许声明一个与局部变量同名的参数或者局部变量4 写在最后0 写在前面 学习使用在Lambda表达式&#xff0c;有些地方访问一些变…

VM系列振弦读数模块采集测量数据的一般步骤

VM 模块是通用型单振弦式传感器测量模块&#xff0c;主要功能是测量频率的传感器内置的温度传感器&#xff0c;使用默认工作参数即可自动测读绝大多数振弦传感器。 但由于传感器类型、结构、厂家、钢弦材料、线圈等影响因素不同&#xff0c;导致使用 VM 模块测量某些传感器时需…

【408专项篇】C语言笔记-第六章(指针)

文章目录第一节&#xff1a;指针的本质1. 指针的定义2. 取地址操作符与取值操作符第二节&#xff1a;指针的传递1. 指针的传递第三节&#xff1a;指针的偏移1. 指针的偏移2. 指针与一维数组第四节&#xff1a;动态指针与内存申请1. 指针与动态内存申请2. 堆空间和栈空间的差异第…

电脑无线网卡连接的无线信号不好的,经常丢包,掉线断网如何优化解决

环境&#xff1a; 电脑&#xff1a;HP480G7 系统:Win10 专业版 无线网卡&#xff1a;水星ud6s 、TP-LINK等 AP&#xff1a;锐捷RAP2200(E) 组网模式&#xff1a;AP代管AP模式 问题描述&#xff1a; 电脑无线网卡连接的无线信号不好的&#xff0c;经常断网&#xff0c;因…

docker logs命令详解

docker 命令官档如下&#xff1a; https://docs.docker.com/engine/reference/commandline/docker/ docker logs官档如下 https://docs.docker.com/engine/reference/commandline/logs/#retrieve-logs-until-a-specific-point-in-time 一、常用命令 1. 可以查看命令用法 doc…

英国访问学者|签证申请详细步骤简述

英国访问学者签证流程是怎么样的&#xff1f;下面就随知识人网老师一起来看一看英国访问学者签证申请详细步骤简述。 第1步&#xff1a;英国签证申请中心只接受在线填写的申请表&#xff0c;不接受手写表格。请访问官网完整填写申请表。(必须使用英文大写填写) 第2步&#xff…

数据库系统 整体结构化 的理解

数据库系统实现整体数据的结构化&#xff0c;这是数据库的主要特征之一&#xff0c;也是数据库系统与文件系统的本质区别。 在文件系统中&#xff0c;文件中的记录内部具有结构&#xff0c;但是记录的结构和记录之间的联系被固化在程序中&#xff0c;需要由程序员加以维…

jenkins配置maven+git自动构建jar包

进入页面 安装maven插件 需要使用maven插件构建项目,所以安装maven插件 步骤如下图&#xff1a; 点击安装后跳转至安装页面&#xff0c;等待在线安装完成即可 安装完成配置当前服务器中安装的maven 下滑到最下面点击新增maven 配置完成点击应用完成 配置当前服务器中安装的gi…

ADB 命令结合 Monkey 的使用

1、什么是monkey Monkey 是Android SDK提供的一个命令行工具&#xff0c;可以简单方便的发送伪随机的用户事件流&#xff0c;对Android APP做压力&#xff08;稳定性&#xff09;测试。主要是为了测试app是否存在无响应和崩溃的情况。 2、adb结合 monkey 的常用命令 adb shel…

如何选择跨平台桌面应用开发框架

受益于开源技术的发展&#xff0c;以及响应快速开发的实际业务需求&#xff0c;跨平台开发不仅限于移动端跨平台&#xff0c;桌面端虽然在市场应用方面场景不像移动端那么丰富&#xff0c;但也有市场的需求。 相对于个人开发者而言&#xff0c;跨平台框架的使用&#xff0c;主…

干货!一次伪静态页面的SQL注入!白帽黑客实战 。

涉及技能点 SQL注入基础原理 盲注常用函数及思路 burpsuite基础知识 过程记录 1.发现 在翻阅一EDU站点时&#xff0c;发现路径中带有明显的数字参数 好像与我们平时习惯的xxx.php?id不同呃 2.尝试注入 按照以往习惯&#xff0c;先用order by探探底&#xff0c;结果翻车了…

SPARKSQL3.0-PhysicalPlan物理阶段源码剖析

一、前言 阅读本节需要先掌握【SPARKSQL3.0-Optimizer阶段源码剖析】 本质&#xff1a;物理计划阶段将optimizer阶段优化后的逻辑算子树【LogicalPlan】进行进一步转换&#xff0c;生成物理算子树【SparkPlan】&#xff0c;物理算子树的节点可以直接生成 RDD 或对 RDD 进行 t…

javaweb 使用element + vue 完善项目 servlet 优化

我们先定义一个BaseServlet,继承HttpServlet 重写Service方法 &#xff08;因为HttpServlet就是在Service方法里做的通过请求方式进行方法分发&#xff0c;我们就重写改成通过请求路径分发&#xff09; 根据资源路径进行方法分发&#xff0c;利用反射得到调用者的class字节码文…

C++-指针:void*(不确定类型指针)简介【void *可以接受任何类型的赋值】【void *可以赋值给任何类型的变量】【void *不可以解引用】

void* 是一种特殊的指针类型&#xff0c;可用于存放任意对象的地址。一个 void* 指针存放着一个地址&#xff0c;这一点和其他指针类似。 void *可以接受任何类型的赋值&#xff0c;任何类型的指针都可以直接赋值给void *型指针&#xff0c;无需进行强制类型转换&#xff0c;相…