主要内容

在并行、gpu和云上扩展深度学习

训练深度网络需要大量的计算,可能需要数小时的计算时间;然而,神经网络本质上是并行算法。您可以通过使用高性能gpu和计算机集群并行运行来利用这种并行性。

建议使用一个或多个GPU进行训练。如果没有GPU,只能使用单CPU或多CPU。在训练和推断方面,cpu通常比gpu慢得多。运行在单个GPU上通常比运行在多个CPU核上提供更好的性能。

如果没有合适的GPU,可以通过租用高性能GPU和云中的集群来实现。有关如何访问MATLAB的更多信息®在云端进行深度学习,见云中的深度学习

使用GPU或并行选项需要并行计算工具箱™。使用GPU还需要支持的GPU设备。有关支持的设备的信息,请参见GPU计算要求(并行计算工具箱).使用远程集群也需要MATLAB并行服务器™

提示

trainNetwork工作流,GPU支持是自动的。默认情况下,trainNetwork函数在可用的情况下使用GPU。如果可以访问具有多个gpu的计算机,请指定ExecutionEnvironment培训选项为“multi-gpu”

运行自定义培训工作流,包括dlnetwork工作流,在GPU上使用minibatchqueue自动将数据转换为gpuArray对象。

您可以使用并行资源来扩展单个网络的深度学习。您还可以同时训练多个网络。以下部分展示了在MATLAB中并行进行深度学习的可用选项:

请注意

如果您在单个远程机器上运行MATLAB,例如,通过ssh或远程桌面协议连接到的云计算机,那么请遵循本地资源的步骤。有关连接到云资源的更多信息,请参见云中的深度学习

并行训练单一网络

利用本地资源并行训练单个网络

下表显示了使用本地工作站上的单个网络进行训练和推断的可用选项。

资源 trainNetwork工作流 定制培训流程 所需的产品2022世界杯八强谁会赢?
单CPU

无GPU时自动设置。

不建议使用单个CPU进行训练。

不建议使用单个CPU进行训练。

  • MATLAB

  • 深度学习工具箱™

多个CPU核

如果使用GPU,不建议使用多个CPU核进行训练。

如果使用GPU,不建议使用多个CPU核进行训练。

  • MATLAB

  • 深度学习工具箱

  • 并行计算工具箱

单一的GPU

自动的。默认情况下,如果GPU可用,训练和推理将在GPU上运行。

或者,指定ExecutionEnvironment培训选项为“图形”

使用minibatchqueue自动将数据转换为gpuArray对象。有关更多信息,请参见在GPU上并行运行自定义训练循环

示例请参见使用自定义训练循环训练网络

多个gpu

指定ExecutionEnvironment培训选项为“multi-gpu”

示例请参见使用自动多gpu支持训练网络

用尽可能多的可用gpu启动一个本地并行池。有关更多信息,请参见基于MATLAB的多gpu深度学习

使用parpool用小批的一部分对每个工人执行训练或推断。将每个小部分数据转换为gpuArray对象。对于训练,在每次迭代后聚合梯度、损失和状态参数。有关更多信息,请参见在GPU上并行运行自定义训练循环

示例请参见与自定义训练循环并行的训练网络.设置executionEnvironment变量来“汽车”“图形”

利用远端集群资源并行训练单个网络

下表显示了使用远程集群上的单个网络进行训练和推断的可用选项。

资源 trainNetwork工作流 定制培训流程 所需的产品2022世界杯八强谁会赢?
多个cpu

如果使用GPU,不建议使用多个CPU核进行训练。

如果使用GPU,不建议使用多个CPU核进行训练。

  • MATLAB

  • 深度学习工具箱

  • 并行计算工具箱

  • MATLAB并行服务器

多个gpu

指定所需的集群作为默认集群配置文件。有关更多信息,请参见管理集群概要文件和自动池创建

指定ExecutionEnvironment培训选项为“平行”

示例请参见采用自动并行支持的云中列车网络

在所需的集群中启动一个并行池,使用尽可能多的可用gpu。有关更多信息,请参见基于MATLAB的多gpu深度学习

使用parpool用小批中的一部分对每个工人执行训练或推断。将每个小部分数据转换为gpuArray对象。对于训练,在每次迭代后聚合梯度、损失和状态参数。有关更多信息,请参见在GPU上并行运行自定义训练循环

示例请参见与自定义训练循环并行的训练网络.设置executionEnvironment变量来“汽车”“图形”

利用深度网络设计器和实验管理器并行训练单个网络

您可以使用深度网络设计器并行训练单个网络。您可以使用本地资源或远程集群进行培训。

  • 当需要使用多个gpu进行本地培训时,需要设置ExectionEnvironment选项multi-gpu在培训选项对话框中。

  • 如果需要使用远程集群进行培训,请设置ExectionEnvironment选项平行在培训选项对话框中。如果当前没有并行池,软件将使用默认的集群配置文件启动一个并行池。如果池可以访问GPU,那么只有具有唯一GPU的工作者执行训练计算。如果池中没有gpu,那么将对所有可用的CPU工作人员进行培训。

您可以使用实验管理器使用多个并行工作程序运行单个试验。有关更多信息,请参见使用实验管理器并行训练网络

并行训练多个网络

使用本地或远端集群资源并行训练多个网络

要并行训练多个网络,可以在不同的并行工作者上训练每个网络。您可以修改每个worker的网络或训练参数,以并行执行参数扫描。

使用parfor(并行计算工具箱)parfeval(并行计算工具箱)在每个工人身上训练单一的网络。要在后台运行而不阻塞您的本地MATLAB,请使用parfeval.方法可以绘制结果OutputFcn培训的选择。

可以在本地运行,也可以使用远程集群。使用远程集群需要MATLAB并行服务器

资源 trainNetwork工作流 定制培训流程 所需的产品2022世界杯八强谁会赢?
多个cpu

指定所需的集群作为默认集群配置文件。有关更多信息,请参见管理集群概要文件和自动池创建

使用parforparfeval同时对每个工人进行训练或推断。指定ExecutionEnvironment培训选项为“cpu”对于每个网络。

有关示例,请参见

指定所需的集群作为默认集群配置文件。有关更多信息,请参见管理集群概要文件和自动池创建

使用parforparfeval同时对每个工人进行训练或推断。有关更多信息,请参见在GPU上并行运行自定义训练循环

  • MATLAB

  • 深度学习工具箱

  • 并行计算工具箱

  • (可选)MATLAB并行服务器

多个gpu

在所需的集群中启动一个并行池,使用尽可能多的可用gpu。有关更多信息,请参见基于MATLAB的多gpu深度学习

使用parforparfeval在每个worker上同时执行一个网络。指定ExecutionEnvironment培训选项为“图形”对于每个网络。

有关示例,请参见

在所需的集群中启动一个并行池,使用尽可能多的可用gpu。有关更多信息,请参见基于MATLAB的多gpu深度学习

使用parforparfeval同时对每个工人进行训练或推断。有关更多信息,请参见在GPU上并行运行自定义训练循环

将每个小批数据转换为gpuArray.使用minibatchqueue并设置OutputEnvironment财产“图形”自动将数据转换为gpuArray对象。

使用实验管理器并行训练多个网络

您可以使用实验管理器在多个并行工作程序上同时运行试验。设置并行环境并启用使用并行选项,然后运行您的实验。实验管理器运行与并行池中工作人员数量相同的同步测试。有关更多信息,请参见使用实验管理器并行训练网络

批量深度学习

方法可以将深度学习计算卸载到后台运行批处理(并行计算工具箱)函数。这意味着当你的计算在后台运行时,你可以继续使用MATLAB,或者你可以关闭你的客户端MATLAB并稍后获取结果。

可以在本地或远程集群中运行批处理作业。要卸载深度学习计算,请使用批处理提交在集群中运行的脚本或函数。您可以将任何类型的深度学习计算作为批处理作业执行,包括并行计算。示例请参见发送深度学习批作业到集群

要并行运行,请使用包含本地或集群中并行运行的相同代码的脚本或函数。例如,您的脚本或函数可以运行trainNetwork使用“ExecutionEnvironment”、“平行”选项,或者并行运行自定义训练循环。使用批处理向集群提交脚本或函数,并使用选项指定要使用的工作人员数量。有关运行并行计算的更多信息批处理,请参阅运行批处理并行作业(并行计算工具箱)

要在多个网络上运行深度学习计算,建议为每个网络提交单个批处理作业。这样做可以避免在集群中启动并行池所需的开销,并允许使用作业监视器分别观察每个网络计算的进度。

可以提交多个批处理作业。如果提交的作业需要比集群中当前可用的更多的工作人员,则后面的作业将排队,直到前面的作业完成。当有足够的工作人员可以运行作业时,将启动排队作业。

工作者的默认搜索路径可能与您的客户机MATLAB的路径不相同。方法指定要添加到工作者的路径,以确保集群中的工作者能够访问所需的文件,例如代码文件、数据文件或模型文件AdditionalPaths选择。

要在作业完成后检索结果,请使用fetchOutputs(并行计算工具箱)函数。fetchOutputs检索批处理工作空间中的所有变量。当您将批处理作业作为脚本提交时,默认情况下,工作区变量将从客户机复制到工作者。要避免工作空间变量的递归,请将批处理作业作为函数而不是脚本提交。

您可以使用日记(并行计算工具箱)在运行批处理作业时捕获命令行输出。方法时,这可能很有用trainNetwork函数详细的选项设置为真正的

管理集群概要文件和自动池创建

集群配置文件预先配置了“并行计算工具箱”流程用于在本地桌面计算机上运行并行代码。默认情况下,MATLAB使用流程集群配置文件。如果希望在远程集群上运行代码,则必须使用远程集群配置文件启动并行池。您可以使用集群配置文件管理器管理集群配置文件。有关管理集群概要文件的详细信息,请参见发现集群并使用集群概要文件(并行计算工具箱)

一些函数,包括trainNetwork预测分类parfor,parfeval可以自动启动并行池。要利用自动并行池创建的优势,请在集群配置文件管理器中将所需的集群设置为默认集群配置文件。或者,您可以手动创建池,并在创建池时指定所需的集群资源。

如果您希望在远程集群中使用多个gpu并行地训练多个网络或进行自定义训练循环,那么最佳实践是在所需的集群中手动启动一个并行池,使用与可用gpu相同数量的工作者。有关更多信息,请参见基于MATLAB的多gpu深度学习

深度学习精度

为了获得最佳性能,建议在所有深度学习工作流中使用GPU。由于gpu的单精度和双精度性能可能存在很大差异,因此了解执行哪种精度计算非常重要。通常,gpu在单精度计算方面提供更好的性能。

如果只使用GPU进行深度学习,那么单精度性能是GPU最重要的特性之一。如果您还使用GPU进行其他使用并行计算工具箱的计算,那么高的双精度性能是重要的。这是因为MATLAB中的许多函数默认使用双精度算法。有关更多信息,请参见执行单精度计算(并行计算工具箱)

训练网络时使用trainNetwork函数,或者在使用预测或验证函数时DAGNetwork而且SeriesNetwork对象,该软件使用单精度浮点算术执行这些计算。用于训练、预测和验证的函数包括trainNetwork预测分类,激活.当你使用cpu和gpu训练网络时,该软件使用单精度算法。

对于自定义训练工作流,建议将数据转换为单个精度,用于训练和推断。如果你使用minibatchqueue为了管理小批量,默认情况下,您的数据被转换为单精度。

另请参阅

||||

相关的话题

Baidu
map