Main Content

在 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 设备后,将 trainsim 函数的 '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 的限制。这样可以将神经网络应用于非常大的问题。