TensorFlow 2.0教程05:跨多个节点的分布式培训

2023-10-29

分布式训练允许扩大深度学习任务,因此可以学习更大的models或以更快的速度进行训练。在之前的教程中,我们讨论了如何MirroredStrategy在单个节点(物理机器)内实现多GPU训练。在本教程中,我们将解释如何在多个节点之间进行分布式训练。本教程包括:

  • 用于多节点分布式培训的代码样板。
  • 示例代码在多台计算机上运行。

要重现本教程,请参考TensorFlow 2分布式培训 github repository

 

代码样板

与单节点内的多GPU训练相似,多节点训练也使用分布式策略。在这种情况下,tf.distribute.experimental.MultiWorkerMirroredStrategy。多节点训练还需要设置TF_CONFIG环境变量。请注意,每个节点上的环境变量都会略有不同。例如,这是worker 0两节点分布式培训作业中的设置:

 

os.environ["TF_CONFIG"] = json.dumps({
    'cluster': {
        'worker': ["10.1.10.58:12345", "10.1.10.250:12345"]
    },
    'task': {'type': 'worker', 'index': 0}
})

 

本质上,TF_CONFIG是一个JSON字符串,代表集群并标识该机器在该集群中的角色。上面的代码设置了TF_CONFIG环境变量,也可以使用命令行导出或将其作为shell命令的前缀进行设置,例如:

TF_CONFIG='{"cluster": {"worker": ["10.1.10.58:12345", "10.1.10.250:12345"]}, "task": {"index": 0, "type": "worker"}}' python worker.py

 

cluster所有节点上的字段均相同。它描述了如何设置群集。在这种情况下,我们的集群只有两个工作节点,其IP:port信息列在worker阵列中。该task场从节点到不同的节点。它指定节点的类型和索引,然后将其用于从cluster字段中获取详细信息,并提供给任务管理器以划分工作。在这种情况下,此配置文件指示培训作业在工作程序0上运行,即"10.1.10.58:12345"

我们需要为每个节点自定义此python代码段。因此,第二个节点将具有'task': {'type': 'worker', 'index': 1}

然后,我们需要创建分布式策略:

strategy = tf.distribute.experimental.MultiWorkerMirroredStrategy()

 

注意,此行必须TF_CONFIG在定义数据管道和模型之后以及在定义数据管道和模型之前完成。否则,Collective ops must be configured at program startup将触发错误。

代码样板的最后一部分定义了策略范围内的模型:

with strategy.scope():
  model = resnet.resnet56(img_input=img_input, classes=NUM_CLASSES)
  model.compile(
            optimizer=opt,
            loss='sparse_categorical_crossentropy',
            metrics=['sparse_categorical_accuracy']) 
model.fit(train_dataset,
          epochs=NUM_EPOCHS)

 

 

进行训练

要运行分布式培训,需要自定义培训脚本并将其复制到所有节点。为了更加清楚,我们可以使用前缀语法设置环境变量。各个节点的设置不同。

确保节点可以在不要求密码的情况下相互连接。最方便的方法是使用ssh密钥而不是密码身份验证。如何使用ssh键。

最后,在两个节点上同时运行脚本。

# On the first nodeTF_CONFIG='{"cluster": {"worker": ["10.1.10.58:12345", "10.1.10.250:12345"]}, "task": {"index": 0, "type": "worker"}}' python worker.py# On the second nodeTF_CONFIG='{"cluster": {"worker": ["10.1.10.58:12345", "10.1.10.250:12345"]}, "task": {"index": 1, "type": "worker"}}' python worker.py

训练现在分布在多个节点上。由于使用了该Mirrored策略,因此两个节点的输出已同步。

 

总结

本教程说明了如何在TensorFlow 2中进行分布式训练。关键是设置TF_CONFIG环境变量并使用MultiWorkerMirroredStrategy来限定模型定义的范围。

在本教程中,我们需要在每个节点上手动运行定制的TF_CONFIG训练脚本。可以看到,随着节点数量的增加,设置环境变量很快变得乏味。有更高级的方法可以在大量节点上部署分布式培训作业,例如Horovod,带有TF-flow的Kubernetes,OpenMPI或使用诸如Ansible的部署脚本。要在本教程中重现结果,请参考此TensorFlow 2分布式培训教程github repository.

接下来,给大家介绍一下租用GPU做实验的方法,我们是在智星云租用的GPU,使用体验很好。具体大家可以参考:智星云官网: http://www.ai-galaxy.cn/,淘宝店:https://shop36573300.taobao.com/公众号: 智星AI

 

参考文献:

https://lambdalabs.com/blog/tensorflow-2-0-tutorial-05-distributed-training-multi-node/

https://github.com/lambdal/TensorFlow2-tutorial/tree/master/05-distributed-training

https://debian-administration.org/article/530/SSH_with_authentication_key_instead_of_password

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TensorFlow 2.0教程05:跨多个节点的分布式培训 的相关文章

  • WebService+Rxjava

    最近公司有了个新项目 是之前有个项目需要迭代 由于这个项目比较老 所以用的是WebService的接口 我之前都是写的是restful的接口 没有接触过WebServiece 看到之前的代码我也有点闷逼 于是就花了几天去研究了下WebSer
  • 补码乘法,补码乘法计算详细解说

    1 补码与真值得转换公式 补码乘法因符号位参与运算 可以完成补码数的 直接 乘法 而不需要求补级 这种直接的方法排除了较慢的对2求补操作 因而大大加速了乘法过程 首先说明与直接的补码乘法相联系数学特征 对于计算补码数的数值来说 一种较好的表
  • CMake 学习笔记(子目录 续)

    这篇博客接着上篇 我们的目录结构和上一个例子完全相同 CMakeLists txt MathFunctions CMakeLists txt MathFunctions cxx MathFunctions h mysqrt cxx mysq
  • STM32的Bootloader实现和遇到的情况

    目录 0 概述 1 keil设置 2 IAP跳转函数 3 APP重定向中断向量表 3 1 标准库 3 2 HAL库 4 一些小问题 4 1 从IAP跳转到APP后运行异常 4 2 没有SCB gt VTOR设置中断向量表 0 概述 实际中通
  • opencv---曲线断点检测(八邻域断点检测)

    前言 该方法适用于激光照射的背景图像 没有交叉 仅限一条曲线断裂检测 原始图像 原始图像越干净 简单 检测效果越好 原始图像越干净 简单 检测效果越好 原始图像越干净 简单 检测效果越好 原始图像越干净 简单 检测效果越好 预处理 很重要
  • Java怎么设置代理ip

    在Java中设置代理IP可以通过使用Java系统属性来实现 具体步骤如下 1 设置代理地址和端口号 System setProperty https proxyHost 代理地址 System setProperty https proxy
  • vue3-vite使用lib-flexible(amfe-flexible)总结

    创建完vue3项目也安装了flexible插件页面就是不转化rem 搞了好久才发现还要另外配置文件 记录一下 安装插件 安装postcss pxtorem npm install postcss pxtorem save dev 安装lib
  • Arduino ESP32和ESP8266开发板安装教程

    视频教程链接 https www bilibili com video BV1dT411G7XX 1 安装第三方Arduino Package 下面以安装ESP32和ESP8266为示例 方式1 在线安装 第1步 打开ArduinoIDE
  • window配置weex项目的android studio环境

    weex 虽然做的是前端的工作但是越往后面觉的如果不会一门移动端的框架是多么的无力 于是就开始了之前非常看好的weex框架 该框架起初是由阿里巴巴内部开源的 后面移交给apache成长历程可谓是一波三折 和react native比起来有些
  • 第十二届蓝桥杯省赛B组(C/C++)试题G砝码称重

    题目 原题链接 问题描述 有一架天平和 n 1 n 100 n 1 leq n l
  • 数据结构 每日一练:编程

    先来个简单的练练手吧 欢迎大佬们交流探讨 给出一个有序的整数数组 A 和有序的整数数组 B 请将数组 B 合并到数组 A 中 变成一个有序的升序数组 数据范围 m n属于 0 100 注意 1 保证 A 数组有足够的空间存放 B 数组的元素
  • LeetCode 42. 接雨水

    题目链接 42 接雨水 思路分析 与程序员面试金典 面试题 17 21 直方图的水量相同 class Solution public int trap vector
  • js中字符串常用方法

    1 concat 用于将一个或多个字符串拼接成一个新字符串 不改变原字符串 返回结果为新字符串 2 slice 提取某个字符串的一部分 并返回一个新的字符串 且不改变原字符串 只有一个参数时 取值范围为指定位置到字符串结尾 两个参数时取头不
  • Transformers学习笔记4

    Tokenizer nlp任务的输入都是raw text model的输入需要是inputs id 所以tokenzier将句子转换成inputs id 怎么转换呢 有3种方式 word based split the text 按照空格来
  • Linux网络性能评估工具iperf 、CHARIOT测试网络吞吐量

    目录 一 Iperf能做什么 1 TCP方面 2 UDP方面 二 Iperf的安装与使用 1 安装iperf 2 iperf参数介绍 三 Iperf应用实例 1 测试TCP吞吐量 2 测试UDP丢包和延迟 四 利用IXCHARIOT进行网络
  • 大规模线性方程组求解

    常将线性方程组表示为 A x b A为已知N N的矩阵 通常称为刚度矩阵 刚度是力学中的概念 电磁 热等也习惯性这么称呼 b为已知向量 x为待求向量 解线性方程组的操作基本围绕矩阵A展开 首先介绍一些相关术语 1 矩阵条件数 条件数是一个表
  • json.dump(json_obj, f, ensure_ascii=False),报错UnicodeEncodeError: ‘gbk‘ codec can‘t encode character

    python报错json文件时报错 json dump json obj f ensure ascii False 报错UnicodeEncodeError gbk codec can t encode character 这个错误是因为在
  • transition-group过渡动画

    安装lodash库 cnpm install lodash S 安装lodash type cnpm install types lodash D
  • TAP 系列文章4

    基于Backstage的开发者门户 随着云原生的理念和技术逐渐深入人心 很多企业都在思考和实践如何落地 实实在在地达成云原生所承诺的目标 使工程师能够轻松地对系统作出频繁和可预测的重大变更 越来越多的企业认识到 以Kubernetes为代表
  • 微软1G网盘注册方法

    微软提供免费网盘 可作外链 可用迅雷 很好的存储地方 拥有1G的空间 单个文件限制大小为50MB 支持外链 需要传到Public folders里面 支持迅雷下载 经过我本人测试 下载速度还是蛮快的 能达到180k每秒 不过跟其他国内的网盘

随机推荐

  • vue整理笔记(二)

    前言 上次整理到vue的项目创建 这次就来说说vue的单文件组件创建 1 Vue 组件 1 通过命令 vue init webpack 项目名 创建一个项目 例子 vue create vue2 demo 2 打开src的文件夹 打开com
  • linux cat命令详解

    cat命令 1 cat linux txt 查看linux txt内容 2 cat n linux txt 查看linux txt文件的内容 并且由1开始对所有输出行进行编号 包括空白行 3 cat b linux txt 用法和 n 差不
  • 自己写的制作 city的语义分割tfrecord 适用于deeplabv3+

    自己写的制作 city的语义分割tfrecord 适用于deeplabv3 自用 Converts PASCAL dataset to TFRecords file format from future import absolute im
  • Python 使用 Scrapy 发送 post 请求的坑

    From https www jb51 net article 146769 htm 使用 requests 发送 post 请求 先来看看使用requests来发送post请求是多少好用 发送请求 Requests 简便的 API 意味着
  • 如何在win10上搭建本地服务器

    win10上搭建本地服务器 1 在我的电脑上 打开控制面板 2点击程序和功能 启用关闭windows功能 3 选择如下功能 4 点击确定 打开iis管理器 右键电脑 选择管理 5 找到这个 6 选择浏览网站 成功
  • linux 内存分配

    内存管理 一 malloc的底层实现 Malloc函数用于动态分配内存 为了减少内存碎片和系统调用的开销 malloc其采用内存池的方式 先申请大块内存作为堆区 然后将堆区分为多个内存块 以块作为内存管理的基本单位 当用户申请内存时 直接从
  • 信息增益计算和决策树生长过程

    信息增益计算和决策树生长过程 给定训练集S 下面以信息增益作为最佳划分的标准 演示信息增益的计算和决策树生长的过程 根节点 1 以 Outlook 被选做划分属性 总共有14条数据 打球9条 不打球的5条 根据Outlook进行划分 Sun
  • SonrLint常见解决方案

    Sonar是什么 Sonar是一个用于代码质量管理的开源平台 用于管理源代码的质量 通过插件形式 可以支持包括java C C C PL SQL Cobol JavaScrip Groovy等等二十几种编程语言的代码质量管理与检测 Sona
  • token不存在问题

    解决 添加一个token鉴权的请求头 注意 要在在缺少的文件添加该代码 const token localStorage getItem TOKEN
  • vector subscript out of range数组下标越界错误

    在使用vector二维数组时 产生 vector subscript out of range 错误 检查之 后并没有发现数组下标越界问题 百度了一下 发现原来是数组并没有初始化 赋值 没有分配空间 所以不能采用下标的方式进行访问 解决方法
  • antd 2.2.8 版本 Form表单使用useForm带星号校验和带星号不校验的写法以及不带星号不校验的写法

    1 带星号且校验
  • 02 Elasticsearch基本常用命令详解

    IK分词器 分词 把一段中文或者词组划分成一个个关键字 我们在搜索的时候会把自己的信息进行拆分 会把数据库中或者索引库中的数据进行分词 然后进行一个个匹配操作 默认的中文分词是将每一个看成一个词 比如 我爱王军 会被拆分成 我 爱 王 军
  • SSM框架下的学生管理系统--序言

    先开个博 占个坑 也是督促自己尽快提上日程 这是为初学者写的一个系列性的文章 我会不断更新 希望看到文章的人能有所收获 简单介绍下SSM 第一个S指的是Spring 第二个S指的是SpringMVC 最后一个M指的是Mybatis 我们这个
  • c++ 入门基础(一)

    第一个c 程序 include
  • MySQL5.6数据库8小时内无请求自动断开连接

    问题 最近的项目中 发现Mysql数据库在8个小时内 没有请求时 会自动断开连接 这是MySQL服务器的问题 The last packet successfully received from the server was 1 836 1
  • 从零开始做一个贪吃蛇游戏(用纯html + css + js实现,主要技术栈:vue + uniCloud)

    今天给大家分享一个贪吃蛇的小游戏 用纯html css js实现 主要技术栈 vue uniCloud 希望能对还未涉及游戏开发的小伙伴有所启发 由于技术栈很浅 希望大佬勿喷 话不多说 直接开撸 效果图如下 初始化项目 本项目是基于uni
  • 网络基础——TCP与UDP的区别

    Web基础 COOKIE与SESSION的区别 如上表格 区别总结如下 1 连接性质不同 TCP是面向有连接 而UDP是面向无连接的 所谓的面向有连接 通俗讲是指传输数据时 是否需要先建立通讯 确认对方在 并且有空接收数据 面向无连接 是不
  • 探索loss.backward() 和optimizer.step()的关系并灵活运用

    loss backward 和optimizer step 的关系及灵活运用 在deep learning的模型训练中 我们经常看到如下的代码片段 loss backward optimizer step 那么 这两个函数到底是怎么联系在一
  • layui数据可视化_利用ggplot2进行数据可视化

    2020 04 25 1 1 first step 意识到ggplot绘制其实是由一层层图层组成 一个命令即可增加一层 ggplot data mpg geom point mapping aes x displ y hwy ggplot
  • TensorFlow 2.0教程05:跨多个节点的分布式培训

    分布式训练允许扩大深度学习任务 因此可以学习更大的models或以更快的速度进行训练 在之前的教程中 我们讨论了如何MirroredStrategy在单个节点 物理机器 内实现多GPU训练 在本教程中 我们将解释如何在多个节点之间进行分布式