并行、gpu和云中扩展深度学习
训练深度网络是计算密集型的,可能需要数小时的计算时间;然而,神经网络本质上是并行算法。您可以通过使用高性能gpu和计算机集群并行运行来利用这种并行性。
建议使用一个或多个图形处理器进行训练。如果没有GPU,只能使用单个CPU或多个CPU。在训练和推断方面,cpu通常比gpu慢得多。运行在单个GPU上通常比运行在多个CPU内核上提供更好的性能。
如果没有合适的GPU,可以在云中租用高性能GPU和集群。有关如何访问MATLAB的更多信息®在云端进行深度学习,请参见云中的深度学习.
使用GPU或并行选项需要并行计算工具箱™。使用GPU还需要支持的GPU设备。万博1manbetx有关受支持设备的信息,请参见万博1manbetxGPU计算要求(并行计算工具箱).使用远程集群也需要MATLAB并行服务器.
提示
为trainNetwork
工作流,GPU支持自动。万博1manbetx默认情况下,trainNetwork
函数使用GPU(如果有的话)。如果可以访问具有多个gpu的计算机,请指定ExecutionEnvironment
培训选择为“multi-gpu”
.
运行自定义培训工作流,包括dlnetwork
工作流,GPU上,使用minibatchqueue
自动将数据转换为gpuArray
对象。
您可以使用并行资源来扩展单个网络的深度学习。你也可以同时训练多个网络。以下部分展示了MATLAB中并行深度学习的可用选项:
请注意
如果您在一台远程机器上运行MATLAB(例如,通过ssh或远程桌面协议连接到的云计算机),那么请遵循本地资源的步骤。有关连接到云资源的更多信息,请参见云中的深度学习.
并行训练单一网络
利用本地资源并行训练单个网络
下表显示了在本地工作站上使用单个网络进行训练和推断的可用选项。
资源 | trainNetwork 工作流 |
定制培训流程 | 所需的产品s manbetx 845 |
---|---|---|---|
单CPU | 如果没有可用的GPU,则自动。 不建议使用单个CPU进行训练。 |
不建议使用单个CPU进行训练。 |
|
多CPU核 | 如果您可以使用GPU,则不建议使用多个CPU内核进行训练。 |
如果您可以使用GPU,则不建议使用多个CPU内核进行训练。 |
|
单一的GPU | 自动的。默认情况下,如果GPU可用,训练和推理将在GPU上运行。 或者,指定 |
使用 有关示例,请参见使用自定义训练循环训练网络. |
|
多个gpu | 指定 有关示例,请参见训练网络使用自动多gpu支持万博1manbetx. |
用尽可能多的可用gpu启动一个本地并行池。有关更多信息,请参见基于MATLAB的多gpu深度学习 使用 有关示例,请参见与定制训练循环并行的训练网络.设置 |
使用远端集群资源并行训练单个网络
下表显示了使用远程集群上的单个网络进行训练和推断的可用选项。
资源 | trainNetwork 工作流 |
定制培训流程 | 所需的产品s manbetx 845 |
---|---|---|---|
多个cpu | 如果您可以使用GPU,则不建议使用多个CPU内核进行训练。 |
如果您可以使用GPU,则不建议使用多个CPU内核进行训练。 |
|
多个gpu | 指定所需的集群作为默认集群配置文件。有关更多信息,请参见管理集群配置文件和自动创建池 指定 有关示例,请参见使用自动并行支持的云中列车网络万博1manbetx. |
在所需的集群中启动一个并行池,其worker数量与可用gpu数量一样多。有关更多信息,请参见基于MATLAB的多gpu深度学习 使用 有关示例,请参见与定制训练循环并行的训练网络.设置 |
使用深度网络设计器和实验管理器并行训练单个网络
您可以使用Deep network Designer并行训练单个网络。您可以使用本地资源或远程集群进行培训。
如果需要使用多个图形处理器进行本地训练,可以设置
ExectionEnvironment
选项multi-gpu
在培训选项对话框中。若要使用远程集群进行训练,请设置
ExectionEnvironment
选项平行
在培训选项对话框中。如果当前没有并行池,软件将使用默认集群配置文件启动一个并行池。如果池可以访问GPU,那么只有具有唯一GPU的工作者才能执行训练计算。如果池中没有gpu,则对所有可用的CPU worker进行培训。
您可以使用实验管理器使用多个并行工作人员运行单个试验。有关更多信息,请参见使用实验管理器并行训练网络.
并行训练多个网络
使用本地或远程集群资源并行训练多个网络
要并行训练多个网络,请在不同的并行worker上训练每个网络。您可以修改每个worker上的网络或训练参数,以并行执行参数扫描。
使用parfor
(并行计算工具箱)或parfeval
(并行计算工具箱)对每个工人进行单一网络培训。要在不阻塞本地MATLAB的情况下在后台运行,请使用parfeval
.方法绘制结果图OutputFcn
培训的选择。
您可以在本地运行,也可以使用远程集群。使用远程集群需要MATLAB并行服务器.
资源 | trainNetwork 工作流 |
定制培训流程 | 所需的产品s manbetx 845 |
---|---|---|---|
多个cpu | 指定所需的集群作为默认集群配置文件。有关更多信息,请参见管理集群配置文件和自动创建池 使用 有关示例,请参见 |
指定所需的集群作为默认集群配置文件。有关更多信息,请参见管理集群配置文件和自动创建池 使用 |
|
多个gpu | 在所需的集群中启动一个并行池,其worker数量与可用gpu数量一样多。有关更多信息,请参见基于MATLAB的多gpu深度学习 使用 有关示例,请参见 |
在所需的集群中启动一个并行池,其worker数量与可用gpu数量一样多。有关更多信息,请参见基于MATLAB的多gpu深度学习 使用 将每个小批数据转换为 |
使用实验管理器并行训练多个网络
您可以使用实验管理器在多个并行工作者上同时运行试验。设置并行环境并启用使用并行在进行实验前选择。实验管理器同时运行的试验数量与并行池中的工作人员数量相同。有关更多信息,请参见使用实验管理器并行训练网络.
批量深度学习
方法可以将深度学习计算卸载到在后台运行批处理
(并行计算工具箱)函数。这意味着当您的计算在后台运行时,您可以继续使用MATLAB,或者您可以关闭客户端MATLAB并稍后获取结果。
您可以在本地或远程集群中运行批处理作业。要卸载深度学习计算,请使用批处理
提交在集群中运行的脚本或函数。您可以将任何类型的深度学习计算作为批处理作业执行,包括并行计算。有关示例,请参见将深度学习批处理作业发送到集群
若要并行运行,请使用包含与在本地或集群中并行运行相同代码的脚本或函数。例如,您的脚本或函数可以运行trainNetwork
使用“ExecutionEnvironment”、“平行”
选项,或并行运行自定义训练循环。使用批处理
将脚本或函数提交到集群并使用池
选项,指定要使用的工人数量。有关运行并行计算的详细信息批处理
,请参阅运行批处理并行作业(并行计算工具箱).
为了在多个网络上运行深度学习计算,建议为每个网络提交单个批处理作业。这样做避免了在集群中启动并行池所需的开销,并允许您使用作业监视器分别观察每个网络计算的进度。
您可以提交多个批处理作业。如果提交的作业需要比集群中当前可用的作业更多的工人,那么后面的作业将排队,直到前面的作业完成。当有足够多的工作人员可以运行作业时,排队作业就会启动。
工作者的默认搜索路径可能与您的客户端MATLAB不相同。为确保集群中的工作者能够访问所需的文件,例如代码文件、数据文件或模型文件,请使用AdditionalPaths
选择。
要在作业完成后检索结果,请使用fetchOutputs
(并行计算工具箱)函数。fetchOutputs
检索批处理工作空间中的所有变量。当您将批处理作业作为脚本提交时,默认情况下,工作区变量将从客户端复制到工作线程。要避免工作空间变量的递归,请将批作业作为函数而不是脚本提交。
您可以使用日记
(并行计算工具箱)在运行批作业时捕获命令行输出。方法时,这可能很有用trainNetwork
函数与详细的
选项设置为真正的
.
管理集群配置文件和自动创建池
并行计算工具箱预先配置了集群概要文件流程
用于在本地桌面计算机上运行并行代码。默认情况下,MATLAB使用流程
集群配置文件。如果要在远程集群上运行代码,则必须使用远程集群配置文件启动并行池。可以使用集群概要文件管理器管理集群概要文件。有关管理集群概要文件的详细信息,请参见发现集群并使用集群概要文件(并行计算工具箱).
一些函数,包括trainNetwork
,预测
,分类
,parfor
,parfeval
可以自动启动并行池。要利用自动创建并行池的优势,请在cluster profile Manager中将所需的集群设置为默认集群配置文件。或者,您也可以手动创建池,并在创建池时指定所需的集群资源。
如果您希望在远程集群中使用多个gpu并行地训练多个网络或进行自定义训练循环,最佳实践是在所需的集群中手动启动一个并行池,其中的worker与可用gpu一样多。有关更多信息,请参见基于MATLAB的多gpu深度学习.
深度学习精度
为了获得最佳性能,建议所有深度学习工作流都使用GPU。由于gpu的单精度和双精度性能可能存在很大差异,因此了解执行哪种精度计算非常重要。通常,gpu在单精度计算方面提供了更好的性能。
如果只使用GPU进行深度学习,那么单精度性能是GPU最重要的特性之一。如果你也使用GPU进行并行计算工具箱的其他计算,那么高的双精度性能是很重要的。这是因为MATLAB中的许多函数默认使用双精度算法。有关更多信息,请参见在单精度执行计算(并行计算工具箱)
当你训练一个网络使用trainNetwork
函数,或者当您使用预测或验证函数时DAGNetwork
而且SeriesNetwork
对象,该软件使用单精度浮点运算来执行这些计算。用于训练、预测和验证的函数包括trainNetwork
,预测
,分类
,激活
.当您使用cpu和gpu训练网络时,该软件使用单精度算法。
对于自定义训练工作流,建议将数据转换为用于训练和推断的单一精度。如果你使用minibatchqueue
要管理小批量,默认情况下,您的数据将转换为单精度。
另请参阅
trainingOptions
|minibatchqueue
|trainNetwork
|深度网络设计器|实验管理器