主要内容

深度学习与MATLAB在多个gpu

MATLAB®金宝app支持培训一个深层神经网络使用多个gpu并行执行。这可以通过使用多个gpu在本地机器上,或者在一个集群或云使用gpu的并行的工作。使用多个gpu可以显著加快培训。决定如果你期望multi-GPU训练性能,考虑以下因素:

  • 每个GPU上的迭代有多长?如果每个GPU迭代是短暂的,那么增加的开销GPU之间的通信可以占主导地位。试着增加每个迭代的计算通过使用一个更大的批量大小。

  • 在单个机器上所有的gpu吗?gpu之间的沟通在不同的机器上引入了一个重要的通信延迟。你可以减轻这个如果你有合适的硬件。有关更多信息,请参见先进的快速支持多节金宝app点GPU沟通

提示

训练一个网络使用多个gpu在本地机器上,您可以简单地指定ExecutionEnvironment选择“multi-gpu”在不改变代码的其余部分。trainNetwork自动使用您的可用gpu计算训练。

当你训练一个远程集群,指定ExecutionEnvironment选择“平行”。如果集群能够访问一个或多个gpu,trainNetwork只有使用gpu进行训练。工人没有一个独特的GPU从来都不是用来训练计算。

如果你想使用更多的资源,你可以扩大深度学习培训集群或云。了解更多关于并行选项,看看并行扩展深度学习,在gpu上,在云端。尝试一个例子,看看列车网络在云中使用自动并行的支持金宝app

使用GPU或平行的选项需要并行计算工具箱™。使用GPU还需要支持GPU设备。金宝app支持设备的信息,请参阅金宝appGPU的金宝app支持版本(并行计算工具箱)。还需要使用远程集群MATLAB并行服务器™

在本地机器上使用多个gpu

请注意

如果你运行在云中MATLAB在单个机器上通过ssh连接到或远程桌面协议(RDP),然后执行和培训网络使用相同的代码,如果你是在本地机器上运行。

如果你访问一个有多个gpu的机器,您可以简单地指定ExecutionEnvironment选择“multi-gpu”:

  • 培训使用trainNetwork,可以使用trainingOptions函数设置ExecutionEnvironment名称选择“multi-gpu”

  • 推理使用分类预测,设置ExecutionEnvironment名称选择“multi-gpu”

“multi-gpu”选项允许您使用多个gpu在当地平行池。如果没有当前并行池,trainNetwork,预测,分类自动启动一个本地集群并行池使用默认配置文件设置。池中有尽可能多的工人提供gpu的数量。

如何执行自定义信息培训使用多个gpu在你的本地机器上,看到的在GPU上运行自定义训练循环和并行

使用多个集群gpu

培训和推理与多个远程集群gpu,使用“平行”选择:

  • 培训使用trainNetwork,可以使用trainingOptions函数设置ExecutionEnvironment名称选择“平行”

  • 推理使用分类预测,设置ExecutionEnvironment名称选择“平行”

如果没有当前并行池,trainNetwork,预测,分类自动启动一个平行池使用默认集群配置文件设置。如果池访问GPU,那么只有工人有着独特的GPU计算执行培训。如果池没有gpu,那么培训工人发生在所有可用的CPU。

如何执行自定义信息培训使用多个远程集群gpu,明白了在GPU上运行自定义训练循环和并行

优化Mini-Batch大小和学习速率

卷积神经网络通常使用mini-batches图像迭代训练。这是因为整个数据集通常是适合GPU内存太大。为了获得最佳性能,您可以尝试通过改变mini-batch大小MiniBatchSize名称选择使用trainingOptions函数。

最优mini-batch大小取决于实际的网络中,数据集,和GPU硬件。当训练多个gpu,每张图片批gpu之间的分布。这有效地增加了总GPU的可用内存,允许更大的批量大小。推荐的做法是加大mini-batch大小线性与GPU的数量,以保证负载在每个GPU常数。例如,如果您正在训练一个GPU使用mini-batch大小为64,和你想扩大培训四个相同类型的GPU,可以mini-batch大小增加到256个,这样每个GPU处理64观察每迭代。

因为增加mini-batch大小提高每个迭代的意义,可以提高学习速率。良好的一般指导方针是提高学习速率成正比的增加mini-batch大小。根据您的应用程序中,一个更大的mini-batch大小和学习速率可以加快训练没有精度,减少了一些限制。

选择特定的gpu用于培训

如果你不想用你所有的gpu,您可以选择您想要使用的gpu培训和直接推理。这样做可以是有用的,以避免训练表现不佳GPU,例如,你的显示GPU。

如果你的gpu在你的本地机器上,您可以使用gpuDeviceTable(并行计算工具箱)gpuDeviceCount(并行计算工具箱)函数来检查你的GPU资源,并确定您想要使用GPU的索引。

针对单一GPU的训练“汽车”“图形”选项,默认情况下,MATLAB使用GPU设备与索引1。您可以通过选择使用不同的GPU设备在你开始训练。使用gpuDevice(并行计算工具箱)选择所需的GPU使用其指数:

gpuDevice(索引)
trainNetwork,预测,分类当你设置自动使用选定的GPUExecutionEnvironment选项“汽车”“图形”

为多个GPU的训练“multi-gpu”选项,默认情况下,MATLAB使用所有可用的gpu在您的本地机器上。如果你想排除gpu,你可以提前开始平行池和手动选择设备。

例如,假设您有三个gpu但你只想用指数的设备13。您可以使用下面的代码来启动一个平行池和两个工人和选择一个GPU在每个工人。

useGPUs = [1 3];parpool (“本地”元素个数(useGPUs));spmdgpuDevice (useGPUs (labindex));结束

trainNetwork,预测,分类当你设置自动使用当前并行池ExecutionEnvironment选项“multi-gpu”(或“平行”相同的结果)。

另一个选择是选择工人使用WorkerLoad名称-值参数在trainingOptions。例如:

parpool (“本地”5);选择= trainingOptions (“个”,“WorkerLoad”(1 1 1 0 1),)
在这种情况下,第四个工人是池的一部分但闲置,这并不是一个理想的使用并行资源。这是更有效的选择使用手动gpu进行训练gpuDevice

火车上的多个网络多个gpu

如果你想训练多个模型与一个GPU并行,开始每可用的GPU并行池与一名工人,和火车每个网络在不同的工人。使用parforparfeval同时每个工人上执行一个网络。使用trainingOptions函数设置ExecutionEnvironment名称选择“图形”在每一个工人。

例如,使用下面的代码形式训练在所有可用的gpu并行多个网络:

选择= trainingOptions (“个”,“ExecutionEnvironment”,“图形”);parfori = 1: gpuDeviceCount (“可用”)trainNetwork(…选项);结束

不会堵塞你当地的MATLAB在后台运行,使用parfeval。示例显示了如何训练多个网络使用parforparfeval,请参阅

先进的快速支持多节金宝app点GPU沟通

在MATLAB multi-GPU一些特性,包括trainNetwork,是直接通过快速互联通信优化改进性能。

如果你有适当的硬件连接,那么多个gpu使用快速的点对点通信之间的数据传输,包括NVLink,如果可用。

如果您使用的是Linux集群计算与机器间快速互联如Infiniband,或快速gpu在不同的机器之间的互联,如GPUDirect RDMA,您可以利用MATLAB快速多节点支持。金宝app启用这个支持所有的工人在金宝app你的池通过设置环境变量PARALLEL_SERVER_FAST_MULTINODE_GPU_COMMUNICATION1。集群中设置这个环境变量配置文件管理器。

这个特性是NVIDIA GPU NCCL库的一部分沟通。配置它,你必须设置额外的环境变量来定义网络接口协议,特别是NCCL_SOCKET_IFNAME。有关更多信息,请参见NCCL文档特别是部分NCCL环境变量

另请参阅

||(并行计算工具箱)|(并行计算工具箱)|

相关的话题