实现的训练过程的效果

因为主要目的是为了节点通讯,所以其他地方没改,下图是四个节点训练过程

1. 目的

使用OpenMPI进行节点间的通讯,搭建参数服务器,实现4节点同时训练一个模型

2. 思路

采用最简单的基于同步的并行数据训练。

首先分布数据,每个节点负责一部分数据,在每个节点上面算出一些局部统计量,然后整合出全局统计量,并且再分配给各个节点去进行下一轮的训练。

所以我们首先要改的是与图片数据分配有关的image_data_layer.cpp文件;

然后改的是与训练迭代有关的solver.cpp文件

3. 修改image_data_layer.cpp

因为是数据并行训练,需要把数据分布给不同的节点,只需要小改load_batch批处理函数

  • 每行数据分配给一个进程
  // modified 1, 数据分配,lines_id代表数据文件中某行数据,每行数据分配给一个节点int rank, numproc;MPI_Comm_rank(MPI_COMM_WORLD, &rank);MPI_Comm_size(MPI_COMM_WORLD, &numproc);lines_id_ = (lines_id_ + rank) % lines_.size();
  • 注意 lines_id_ 递增遍历完整个文件后从头开始遍历
     // modified 2, 每个进程循环跳到数据文件种自己相应的下一个lines_idint count = 0;while (count++ < numproc) {lines_id_++;if (lines_id_ >= lines_size) {// We have reached the end. Restart from the first.DLOG(INFO) << "Restarting data prefetching from start.";lines_id_ = 0;if (this->layer_param_.image_data_param().shuffle()) {ShuffleImages();}}

4. 修改solver.cpp

主要是Step函数的修改,第一次训练前,把节点0的参数用于初始化所有节点;以后每次训练结束,都要强制同步,整合所有节点的各层参数的梯度。

4.1 增加的辅助函数有SyncParameter,Display

函数 作用
SyncParameter 把节点0的参数广播到所有节点
Display 打印每次迭代每个节点的信息,实际是从Step函数中抽离出来的代码

4.2 修改的函数有Init,Step,SnapshotFilename

函数 改后新增的作用
Init 初始化MPI环境
Step ①训练开始前用节点0的参数权值初始化全部节点 ②每轮迭代结束强制同步整合各节点各层参数的残差和梯度
SnapshotFilename 根据当前迭代数和相应节点序号,生成相应快照文件名用于Snapshot

5. 两个文件代码

涉及改动的只有这两个源文件,不贴代码了
cpp以及hpp文件

caffe 搭建参数服务器(1)—— 用MPI实现多节点同时训练一个模型相关推荐

  1. 简单易上手搭建ETH服务器教程,实现中转私有化节点,加密运行

    一.安装 注:以下安装操作需要在服务器VPS上进行,不是在本机运行,如果购买的是Ubuntu的主机,那么请看Linux安装教程 Linux: 好处:适合又想要Linux稳定性的,又不懂Linux的小白 ...

  2. 搭建C++开发图像算法的环境——利用C++调用Pytorch训练后模型

    本文主要介绍如何搭建C++开发图像算法的环境,使用到CMake + libtorch + OpenCV + ITK等.旨在构建一个可融合深度学习框架,可开发图像处理算法且易于跨平台编译的环境. 准备条 ...

  3. 参数服务器——分布式机器学习的新杀器

    转自:微信公众号 数据极客 在大规模数据上跑机器学习任务是过去十多年内系统架构师面临的主要挑战之一,许多模型和抽象先后用于这一任务.从早期的MPI,到后来的Hadoop,乃至于目前使用较多的Spark ...

  4. 【Go Web学习笔记】第一章 搭建Web服务器

    前言:大家好,以下所有内容都是我学习韩茹老师的教程时所整理的笔记.部分内容有过删改, 推荐大家去看原作者的文档进行学习, 本文章仅作为个人的学习笔记,后续还会在此基础上不断修改.学习Go Web时应该 ...

  5. nfs协议制作服务器,搭建NFS服务器(Setup NFS Server)

    评论 # re: 搭建NFS服务器(Setup NFS Server) 2010-11-09 00:43 nfs-setup hello- Thank you for your hard work a ...

  6. 在IIS上搭建WebSocket服务器(三)

    在IIS上搭建WebSocket服务器(三) 原文:在IIS上搭建WebSocket服务器(三) 编写客户端代码 1.新建一个*.html文件. ws = new WebSocket('ws://19 ...

  7. ROS学习小笔记(Topic通信 ,service通信,参数服务器)

    (菜鸡整理的学习笔记,原文链接已经挂上,不小心过来的朋友建议去博主那边学习,谢谢) 原文链接:https://blog.csdn.net/LoongEmbedded/article/details/1 ...

  8. ROS系列(四):ROS通信机制系列(3):参数服务器

    参数服务器在ROS中主要用于实现不同节点之间的数据共享.参数服务器相当于是独立于所有节点的一个公共容器,可以将数据存储在该容器中,被不同的节点调用,当然不同的节点也可以往其中存储数据,关于参数服务器的 ...

  9. python ray定时_使用 Ray 用 15 行 Python 代码实现一个参数服务器

    使用 Ray 用 15 行 Python 代码实现一个参数服务器 参数服务器是很多机器学习应用的核心部分.其核心作用是存放机器学习模型的参数(如,神经网络的权重)和提供服务将参数传给客户端(客户端通常 ...

最新文章

  1. 关于“Xshell连接linux(deepin)时提示ssh服务器拒绝了密码,请再试一次”的问题...
  2. 自定义JWT认证过滤器
  3. linux mysql 分区_Linux :linux磁盘分区(普通分区2T以内),安装免安装版mysql(tar.gz)...
  4. PHP商城数据库安全事务处理方法
  5. 进阶04 4 Collection集合类+Iterator迭代器+增强for+泛型
  6. AI相亲,让爱变得简单
  7. idea console窗口不见了_Python 闲谈 14——安利下IDEA开发神器中好用到爆的插件
  8. NTKO控件安装:“不能装载文档控件,请在检查浏览器的选项中检查浏览器的安全设置”问题
  9. 不用U盘,给自己的电脑重装一个win10系统
  10. 微信小程序详细教程-10分钟完成微信小程序开发部署发布
  11. umount target is busy
  12. 耗油是什么,怎么用?
  13. 杨紫富豪男友曝光 张一山结婚系剧照乌龙
  14. 搭建k8s集群完整流程,云服务器、虚拟机均可参考
  15. 梅科尔工作室-江凌宇-鸿蒙笔记4
  16. IT管理所遇到的问题收集(软件篇)
  17. win32进程共享内存
  18. 火山PC_火山视窗0基础入门课程23课
  19. 华为cmr一al09升级鸿蒙,华为平板 M5 10.8英寸 全网通(CMR-AL09)一键刷机教程,看教程秒懂刷机...
  20. 中国全自动洗地机器行业现状调研及趋势分析报告

热门文章

  1. 机器人导航技术的研究现状和发展趋势
  2. 【腾讯Bugly干货分享】QFix探索之路—手Q热补丁轻量级方案
  3. 什么是微信防火墙_【听课】第4节 什么是“合并单元”(MU)?智能站中的合并单元有什么作用?...
  4. Python字符串的索引与切片
  5. SMIL 2.0 基础教程
  6. 第七篇 SQL从安装到卸载
  7. MATLAB fprintf 函数输出希腊字母/特殊字符
  8. 用c语言实现的FFT
  9. 代价敏感 数据不均衡_数据质量差的代价
  10. DeepNet :Scaling Transformers to 1000 Layer