zoukankan      html  css  js  c++  java
  • Pytorch 多GPU训练-多计算节点并行-All you need

    概述

    本篇介绍多计算节点上的pytorch分布式训练。从环境配置到运行demo的所有步骤,step by step。没有理论原理,理论原理可以参考这里.

    基础环境

    • 多台linux计算节点,通过网络连接,不同主机之间可以相互ping通。网速越快越好,如果通信速度比较慢,就不用怎么考虑分布式训练。

    • 所有linux计算节点都包含若干GPU,GPU数量可以不一致,但是所有GPU计算速度尽量一致,否则模型的同步时会等待大量时间(短板效应)。

    • 所有计算节点都拥有Pytorch运行环境,即都可以单独的运行训练代码。

    NFS环境搭建

    这里NFS有两个作用:(1)集群初始化时作为多个进程(不同主机上)UDS(unix domain socket)的通信地址;(2)数据集统一存放在NFS目录上,所有进程都可以同时访问。

    选择一台与计算节点同一网段的linux主机作为存储节点,或者使用计算节点中的一台作为存储节点。

    存储节点操作如下:

    apt-get install nfs-kernel-server
    <path to share> *(rw,sync,no_root_squash,no_subtree_check) # insert this line to /etc/exports, save & exit
    exportfs -a 
    

    数据集保存到共享目录中。
    所有计算节点将共享目录挂载到本地:

    mkdir /mnt/nfs
    mount -t nfs <ip of storage node>:<path to share> /mnt/nfs
    

    分布式训练

    代码见: github ,需要自己更改数据集的地址。

    运行demo

    分别在三个主机上运行如下的命令。word_size 为 3,当启动的进程数少于3时,所有已经启动的进程会等待,进程数达到3时集群创建成功,训练开始。每个计算节点都使用该计算节点上的两个GPU --gpu_devices 0 1

    # node 1
    python multigpu_demo_v3.py 
        --init_method file://<absolute path to nfs file> 
        --rank 0 
        --world_size 3 
        --gpu_devices 0 1
    
    # node 2
    python multigpu_demo_v3.py 
        --init_method file://<absolute path to nfs file> 
        --rank 1 
        --world_size 3 
        --gpu_devices 0 1
    
    # node 3
    python multigpu_demo_v3.py 
        --init_method file://<absolute path to nfs file> 
        --rank 2 
        --world_size 3
        --gpu_devices 0 1
    

    更多测试细节见github

    总结

    Pytorch里的分布式训练只能实现增大batch size的作用,对于速度的提升不明显,对于Batch Norm没有帮助,如果要提升BN的效果,需要用Sync Bn

  • 相关阅读:
    struts2的结果类型
    struts2的基本配置
    struts2拦截器
    struts2入门程序
    struts2工作原理
    Mysql处理字符串函数(转)
    oracle调用java方法的例子(下面所有代码都是在sql/plus中写)
    Oracle数据库中调用Java类开发存储过程、函数的方法
    Oracle触发器反向调用Java程序
    javaweb项目打包成war包
  • 原文地址:https://www.cnblogs.com/walter-xh/p/11613031.html
Copyright © 2011-2022 走看看