在 CPU 和 GPU 上训练浅层网络
Parallel Computing Toolbox
提示
本主题介绍浅层网络。有关深度学习,另请参阅Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud。
神经网络训练和仿真涉及许多并行计算。多核 CPU、图形处理单元 (GPU) 以及具有多个 CPU 和 GPU 的计算机集群都可以利用并行计算。
将 Deep Learning Toolbox™ 和 Parallel Computing Toolbox™ 一起使用,您可以在单台计算机上使用多个 CPU 内核和 GPU 来加快大型问题的训练和仿真。
以下是标准单线程训练和仿真会话。(虽然并行机制的好处对于大型问题最为明显,但此示例使用 Deep Learning Toolbox 附带的一个小型数据集。)
[x, t] = bodyfat_dataset; net1 = feedforwardnet(10); net2 = train(net1, x, t); y = net2(x);
并行 CPU 工作进程
Intel® 处理器最多可有八个内核。具有两个处理器的工作站最多可有 16 个内核,将来甚至可能更多。并行使用多个 CPU 内核可以显著加快计算速度。
启动或获取当前并行池,并查看池中的工作进程数量。
pool = gcp; pool.NumWorkers
如果您没有 Parallel Computing Toolbox 的许可证,则会出错。
打开并行池后,将 train
函数的 'useParallel'
选项设置为 'yes'
,以指定在整个池中执行训练和仿真。
net2 = train(net1,x,t,'useParallel','yes'); y = net2(x,'useParallel','yes');
GPU 计算
GPU 可以在一张卡上有数千个内核,对于神经网络等并行算法非常高效。
使用 gpuDeviceCount
检查您的系统中是否有支持的 GPU 卡。使用函数 gpuDevice
查看当前选择的 GPU 信息或选择其他 GPU。
gpuDeviceCount
gpuDevice
gpuDevice(2) % Select device 2, if available
如果您没有 Parallel Computing Toolbox 的许可证,则会出现“未定义的函数或变量”错误。
选择 GPU 设备后,将 train
或 sim
函数的 'useGPU'
选项设置为 'yes'
,以在该设备上执行训练和仿真。
net2 = train(net1,x,t,'useGPU','yes'); y = net2(x,'useGPU','yes');
多 GPU/CPU 计算
您可以使用多个 GPU 来实现更高级别的并行。
打开并行池后,将 'useParallel'
和 'useGPU'
均设置为 'yes'
,以在单台计算机上使用所有 GPU 和 CPU 内核。每个与唯一 GPU 相关联的工作进程都使用该 GPU。其余工作进程在其 CPU 内核上执行计算。
net2 = train(net1,x,t,'useParallel','yes','useGPU','yes'); y = net2(x,'useParallel','yes','useGPU','yes');
对于某些问题,同时使用 GPU 和 CPU 可以获得最高的计算速度。对于其他问题,CPU 可能跟不上 GPU,因此只使用 GPU 会更快。将 'useGPU'
设置为 'only'
,以将并行计算限于独占 GPU 的工作进程。
net2 = train(net1,x,t,'useParallel','yes','useGPU','only'); y = net2(x,'useParallel','yes','useGPU','only');
使用 MATLAB Parallel Server 进行集群计算
MATLAB® Parallel Server™ 允许您利用计算机网络集群上的所有 CPU 和 GPU。要利用集群,请使用集群配置文件打开并行池。使用 MATLAB 主页选项卡环境区域的 Parallel 菜单管理和选择配置文件。
打开并行池后,通过带 'useParallel'
和 'useGPU'
选项调用 train
来训练网络。
net2 = train(net1,x,t,'useParallel','yes'); y = net2(x,'useParallel','yes'); net2 = train(net1,x,t,'useParallel','yes','useGPU','only'); y = net2(x,'useParallel','yes','useGPU','only');
负载平衡、大型问题等等
有关使用 Deep Learning Toolbox 进行并行计算的详细信息,请参阅使用并行和 GPU 计算的浅层神经网络,其中介绍了其他主题,例如如何在 CPU 和 GPU 工作进程之间手动分配数据集,以最大程度地利用计算机速度和内存的差异。
手动分配数据还允许按顺序加载工作进程数据,因此数据集的大小仅受集群总 RAM 的限制,而不受单台计算机的 RAM 的限制。这样可以将神经网络应用于非常大的问题。