目录

一、ubuntu配置

1.主节点创建共享文件夹

2.其他需要访问共享文件夹的ubuntu将本地文件连接到smb共享文件夹

二、代码实现

1.进程初始化

2.分配数据

3.拷贝模型

4.执行命令

三、解决问题

参考


一、ubuntu配置

1.主节点创建共享文件夹

(1)检查环境及更新

su root
apt-get updata
apt-get upgrade

(2)安装Samba

sudo apt-get install samba

(3)在/home目录下创建共享文件夹,名为share。修改share目录的读写权限

mkdir /home/share
sudo chmod 777 /home/share

(4)在目录/etc/samba下,在smb.conf文件底部添加如下代码。[share]为自定义共享名称

[share]path=/home/shareavailable=yesbrowseable=yespublic=yeswritable=yesguest-ok=yes

(5)重启samba服务

service smba restart

(6)测试是否创建成功

在windows系统中使用win+R,在弹出窗口输入\\192.168.0.0(这里为共享文件夹主机的ip)

2.其他需要访问共享文件夹的ubuntu将本地文件连接到smb共享文件夹

(1)安装cifs工具

sudo apt install cifs-utils

(2)挂载samba硬盘

sudo mount.cifs <//SAMBA-IP/SHARE_PATH> <本地路径> -o user=username,pass=password,rw,file_mode=0777,dir_mode=0777

例如:

sudo mount.cifs //目标ip/share /home/hadoop/jq_zhu/ -o user=hadoop,pass=123qwe,rw,file_mode=0777,dir_mode=0777

二、代码实现

# coding:utf-8
import torch
import torchvision
import torch.utils.data.distributed
from torchvision import transforms
import argparse
import os
import torch.distributed as dist
from torch.multiprocessing import Processparser = argparse.ArgumentParser()
parser.add_argument("--local_rank", default=0, type=int)
parser.add_argument("--world_size", default=2, type=int)
args = parser.parse_args()def main(rank, world_size):print('start ...... ')dist.init_process_group("gloo", init_method='tcp://192.168.***.***:12357', rank=rank, world_size=world_size)# 数据加载部分,直接利用torchvision中的datasetstrans = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (1.0,))])data_set = torchvision.datasets.MNIST("./", train=True, transform=trans, target_transform=None, download=True)train_sampler = torch.utils.data.distributed.DistributedSampler(data_set)data_loader_train = torch.utils.data.DataLoader(dataset=data_set, batch_size=256, sampler=train_sampler)# 网络搭建,调用torchvision中的resnetnet = torchvision.models.resnet101(num_classes=10)net.conv1 = torch.nn.Conv1d(1, 64, (7, 7), (2, 2), (3, 3), bias=False)net = torch.nn.parallel.DistributedDataParallel(net)# 定义loss与optcriterion = torch.nn.CrossEntropyLoss()opt = torch.optim.Adam(net.parameters(), lr=0.001)# 网络训练  for epoch in range(10):for i, data in enumerate(data_loader_train):images, labels = dataopt.zero_grad()outputs = net(images)loss = criterion(outputs, labels)loss.backward()opt.step()print("start training .... ")if i % 10 == 0:print("loss: {}".format(loss.item()))if __name__ == "__main__":main(args.local_rank, args.world_size

1.进程初始化

初始化进程组函数:

def init_process_group(backend,init_method=None,timeout=default_pg_timeout,world_size=-1,rank=-1,store=None,group_name=''):

backend:指定当前进程要使用的通信后端。这里使用支持CPU的gloo

init_method:指定当前进程组初始化方式。可选择使用tcp、env、共享文件夹方法

rank:指定当前进程的优先级,rank=0为主进程,即master节点

world_size:总进程数

2.分配数据

torch.utils.data.distributed.DistributedSampler:传统的DP是直接将batch切分到不同的卡,这种操作常见现象是第一块卡的显存比其他卡都高,尤其是训练low-level方向等需要大图训练的任务。不同于DP,这里的DistributedSampler确保dataloader只会load到整个数据集的一个特定子集,它为每一个子进程划分出一部分数据集,以避免不同进程之间数据重复。

3.拷贝模型

torch.nn.parallel.DistributedDataParallel: 这个包是实现多机多卡分布训练最核心东西,它可以帮助我们在不同机器的多个模型拷贝之间平均梯度。

4.执行命令

在多个机器上分别执行以下命令,这里设置world_size=2,使用两台机器的cpu

# master node
python3 train.py --local_rank=0 --world_size=2# node 1
python3 train.py --local_rank=1 --world_size=2

三、解决问题

问题1.[/pytorch/third_party/gloo/gloo/transport/tcp/pair.cc:799] connect [127.0.0.1]:5030: Connection refused

解决方法:使用ip addr查看网络名称为enp5s0,在命令窗口执行

export GLOO_SOCKET_IFNAME=enp5s0

参考

Pytorch多机多卡分布式训练 - 吴文灏的文章 - 知乎 https://zhuanlan.zhihu.com/p/373395654

Pytorch多机多卡分布式训练 - 谜一样的男子的文章 - 知乎 https://zhuanlan.zhihu.com/p/68717029

多机多卡分布式训练(Distributed Data DataParallel, DDP)安装踩坑记录 - xyl-507的文章 - 知乎 https://zhuanlan.zhihu.com/p/366735372

PyTorch 21.单机多卡操作(分布式DataParallel,混合精度,Horovod) - 科技猛兽的文章 - 知乎 https://zhuanlan.zhihu.com/p/158375055

PyTorch分布式训练基础--DDP使用 - kaiyuan的文章 - 知乎 https://zhuanlan.zhihu.com/p/358974461

Pytorch 分布式训练 - 会飞的闲鱼的文章 - 知乎 https://zhuanlan.zhihu.com/p/76638962

基于多机CUP分布式训练相关推荐

  1. 阿里云高性能AI服务 -- 基于Docker和EGS一键创建高性能Tensorflow分布式训练

    一. 概述 Tensorflow是目前使用最为广泛的深度学习框架之一,但是目前搭建分布式多机多卡训练比较困难,而且Tensorflow原生的分布式的性能很差,特别在云计算虚拟化环境下并行的挑战更大. ...

  2. 阿里云深度学习实验室(DL-Lab) -- 基于Docker和EGS一键创建高性能Tensorflow分布式训练

    原文链接:点击打开链接 摘要: ## 一. 概述 Tensorflow是目前使用最为广泛的深度学习框架之一,但是目前搭建分布式多机多卡训练比较困难,而且Tensorflow原生的分布式的性能很差. 为 ...

  3. Kubeflow使用Kubernetes进行机器学习GPU分布式训练

    Kubeflow使用Kubernetes进行机器学习 Kubeflow是Google推出的基于kubernetes环境下的机器学习组件,通过Kubeflow可以实现对TFJob等资源类型定义,可以像部 ...

  4. MXNet结合kubeflow进行分布式训练

    GPU集群配置MXNet+CUDA 为方便控制集群,写了脚本cmd2all.sh #!/bin/bash if [ $# -lt 3 ]; thenecho "usage: $0 [type ...

  5. MindSpore Reinforcement新特性:分布式训练和蒙特卡洛树搜索

    MindSpore Reinforcement MindSpore Reinforcement v0.5 版本提供了基于Dataflow Fragment的分布式训练能力,通过扩展新的Fragment ...

  6. 【分布式】Pytorch分布式训练原理和实战

    [分布式]基于Horovod的Pytorch分布式训练原理和实战 并行方法: 1. 模型并行 2. 数据并行 3. 两者之间的联系 更新方法: 1. 同步更新 2. 异步更新 分布式算法: 1. Pa ...

  7. PyTorch 多机多卡训练:分布式实战与技巧

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx DistributedDataParallel(DDP)是一个支持多机多卡.分布式训练的深度学 ...

  8. ios yymodel 将字典转数组模型_TensorNet——基于TensorFlow的大规模稀疏特征模型分布式训练框架

    TensorNet是什么? TensorNet是一个构建在TensorFlow之上针对广告推荐等大规模稀疏场景优化的分布式训练框架.TensorNet的目标是让所有使用TensorFlow的开发者可以 ...

  9. TensorNet——基于TensorFlow的大规模稀疏特征模型分布式训练框架

    女主宣言 今天小编为大家分享一篇有关于TensorNet的文章.TensorNet是一个构建在TensorFlow之上针对广告推荐等大规模稀疏场景优化的分布式训练框架.希望能对大家有所帮助. PS:丰 ...

最新文章

  1. 菜单样式1:鼠标悬停向下弹出列表
  2. Jwplayer 读取服务端文件的两种方式
  3. OpenStack 多节点纳管 vCenter 5.5
  4. WaitForMultipleObjects用法详解,一看就懂
  5. 用符号方法求下列极限或导数matlab,实验7答案 Matlab符号计算
  6. 【qduoj - 纳新题】小明的dp(快速幂 + 乘法原理)(简单组合数学)
  7. html5 sse java_html5----sse实现服务端推送数据给前端
  8. 互联网大厂跳槽鄙视链
  9. 6月18日,熊才权教授软件工程专业建设与示范教学
  10. 正则校验 4位数字_推荐收藏,工作中常用的正则表达式总结
  11. 移动硬盘启动win7蓝屏7b_win7启动蓝屏0X0000007B代码的解决方法
  12. HTML做一个传统节日端午节 带设计报告4500字
  13. HttpClilent整合Spring使用【配置和代码】
  14. HTML转PDF浅析
  15. JAVA核心基础笔记(上)
  16. 图片一键添加水印工具V1.0-免费版
  17. 陀螺仪、加速计和磁力计
  18. 测试团队建设,个人小总结~
  19. 行人重识别 代码阅读(来自郑哲东 简单行人重识别代码到88%准确率)
  20. 名帖220 赵孟頫 行书《光福寺重建塔记》

热门文章

  1. 南加大计算机本科学费,留学南加州大学学费多少一年
  2. 11. python入门复习教程之命名空间与作用域,再谈异常,标准库,持久化与序列化
  3. 2017-2018-1 20162316刘诚昊 实验一 线性结构
  4. [Chaosblade] chaosblade-jvm-exec和chaosblade交互
  5. python catia harness_介绍一些CATIA汽车线束设计模块的常用命令
  6. linux 4TB硬盘 只识别2T,win7只识别最多2T的分区,是不是?如果是这样,有啥办法在不分区的状况下就支持4T的硬盘?...
  7. 分布式系统以及分布式系统架构的优缺点
  8. 库克逼腾讯分成30%遭拒,苹果APP Store或将微信下架!
  9. 从面试官角度观察到的程序员技能瓶颈,同时给出突破瓶颈的建议
  10. 大国数据跨境规则博弈,谁能抢占“数据经济制高地”?