matlab中如何使用多GPU并行计算?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab中如何使用多GPU并行计算?相关的知识,希望对你有一定的参考价值。
我已经在matlab中使用PCT包成功调用CUDA内核函数,实现在单一GPU上的并行加速。现在想在多个GPU上实现(多GPU可能在工作站集群的单个节点上,也有可能在不同节点上)。不想使用Jacket等商业软件。
参考技术A Multiple GPUs on the desktop and computer clustersusing MATLAB workers in Parallel Computing Toolbox and MATLAB
Distributed Computing Server
如果你使用MATLAB的CPU并行应该知道matlabpool
当前,在matlab中如果调用多GPU那么需要开启多个pool,一个pool对应一个GPU,也就是一个CPU worker对应一块GPU,如
matlabpool 2
spmd
gpuDevice
end
spmd
if labindex ==1
gpuDevice(2);
end
end
spmd
gpuDevice
end
Lab 1:
ans =
CUDADevice with properties:
Name: 'Quadro FX 370'
Index: 2
ComputeCapability: '1.1'
SupportsDouble: 0
DriverVersion: 5.5000
ToolkitVersion: 5
MaxThreadsPerBlock: 512
MaxShmemPerBlock: 16384
MaxThreadBlockSize: [512 512 64]
MaxGridSize: [65535 65535 1]
SIMDWidth: 32
TotalMemory: 268435456
FreeMemory: NaN
MultiprocessorCount: 2
ClockRateKHz: 720000
ComputeMode: 'Default'
GPUOverlapsTransfers: 1
KernelExecutionTimeout: 1
CanMapHostMemory: 1
DeviceSupported: 0
DeviceSelected: 1
Lab 2:
ans =
CUDADevice with properties:
Name: 'Tesla K20c'
Index: 1
ComputeCapability: '3.5'
SupportsDouble: 1
DriverVersion: 5.5000
ToolkitVersion: 5
MaxThreadsPerBlock: 1024
MaxShmemPerBlock: 49152
MaxThreadBlockSize: [1024 1024 64]
MaxGridSize: [2.1475e+09 65535 65535]
SIMDWidth: 32
TotalMemory: 5.0330e+09
FreeMemory: 4.9166e+09
MultiprocessorCount: 13
ClockRateKHz: 705500
ComputeMode: 'Default'
GPUOverlapsTransfers: 1
KernelExecutionTimeout: 0
CanMapHostMemory: 1
DeviceSupported: 1
DeviceSelected: 1
更多内容可去matlabsky论坛上发帖分享http://www.matlabsky.com/forum-83-1.html本回答被提问者采纳
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。
以上是关于matlab中如何使用多GPU并行计算?的主要内容,如果未能解决你的问题,请参考以下文章
您好有个问题请教一下cpu怎么和gpu并行计算处理好日常软件