主要内容

深度学习与马铃薯在多个GPU上

神经网络是固有的平行算法。您可以使用并行计算工具箱™来利用此并行性,以在多核CPU,GPU和计算机集群中分发培训,其中包含多个CPU和GPU。

如果您可以访问具有多个gpu的机器,您可以简单地指定培训选项“multi-gpu”使用trainingOptions功能。当用多个GPU进行培训时,每个图像批次都分布在GPU之间。有关使用多个GPU的培训的更多信息,请参阅用多个GPU训练

如果您想使用更多资源,可以将深度学习培训扩展到集群或云。要了解更多关于并行选项的信息,请参见并行和在云中扩展深度学习.举个例子,请看使用自动并行支持云中的火车网络金宝app

选择用于培训的特定图形处理器

如果有多个图形处理器,可以在开始培训前选择设备,使用指定的图形处理器进行单GPU培训。使用gpuDeviceTable(并行计算工具箱)函数来检查GPU并确定要使用的GPU的索引。然后,使用其索引选择该GPU:

gpuDevice(索引)
要在训练时使用此GPU,请运行Trainnetwork.使用培训选项“ExecutionEnvironment”、“gpu的

如果您想使用机器上所有可用的gpu,只需指定培训选项“ExecutionEnvironment”、“multi-gpu”

如果您想使用多个GPU培训单一模型,并且您不想使用所有GPU,请提前打开并行池并手动选择GPU。您可能希望这样做,以避免培训差价显示GPU。要选择特定的GPU,请使用以下代码,在其中GPuindices.是您要使用的GPU的指数:

parpool(当地的元素个数(gpuIndices));spmd gpuDevice (gpuIndices (labindex));结束
当您运行Trainnetwork.“multi-gpu” ExecutionEnvironment(或'平行线'对于相同的结果),训练函数使用这个池,而不打开一个新的池。

另一种选择是选择使用“WorkerLoad”选项trainingOptions.例如:

Parpool('当地',5);opts = trainingOptions('sgdm','workerload',[1 1 1 0 1],......)

在这种情况下,第4个worker是池的一部分,但空闲,这不是对并行资源的理想使用。它是更有效的指定图形处理器GPudevice.

如果你想用一个GPU训练多个模型,为每个模型启动一个MATLAB会话,并选择一个使用的设备GPudevice.

或者,使用一个parfor循环:

parfor i = 1: gpuDeviceCount(“可用”)trainNetwork(…);结束

使用自动并行支持云中的火车网络金宝app

此示例显示如何使用MATLAB自动支持训练卷积神经网络进行并行培训。金宝app深度学习培训通常需要数小时或几天。通过并行计算,您可以在本地使用多个图形处理单元(GPU)或在云中的群集中加速培训。如果您可以访问具有多个GPU的机器,则可以在数据的本地副本上完成此示例。如果您想使用更多资源,那么您可以向云扩展深入学习培训。要了解有关并行培训选项的更多信息,请参阅并行和在云中扩展深度学习.这个例子指导您通过使用MATLAB自动并行支持在云中的集群中训练深度学习网络的步骤。金宝app

要求

在运行该示例之前,您需要将群集配置到云端上传数据。在MATLAB中,您可以直接从MATLAB桌面创建云中的群集。在这一点首页标签,在平行线菜单中,选择创建和管理集群.在集群配置文件管理器中,单击创建云计算集群.或者,您可以使用MathWorks Cloud Center来创建和访问计算集群。有关更多信息,请参见云中心入门.之后,将数据上传到Amazon S3桶,并直接从MATLAB访问它。本示例使用已经存储在Amazon S3中的CIFAR-10数据集的副本。说明,请参阅上传深度学习数据到云

设置并行池

在群集中启动一个并行池,并将工人的数量设置为群集中的GPU数。如果您指定的工人比GPU更多,那么剩余的工人是空闲的。此示例假定您使用的群集被设置为默认的群集配置文件。检查MATLAB上的默认集群配置文件首页选项卡,在平行线>选择默认集群

numberofworkers = 8;parpool(numberofworkers);
使用“myclusterinthecloud”配置文件启动并行池(Parpool)...连接到8名工人。

从云加载数据集

使用。从云加载训练和测试数据集imageDatastore.在此示例中,您可以使用存储在Amazon S3中的CIFAR-10数据集的副本。为了确保工人可以访问云中的数据存储,请确保正确设置AWS凭据的环境变量。看上传深度学习数据到云

imdsTrain = imageDatastore (s3: / / cifar10cloud / cifar10 /火车'...'insertumbfolders',真的,...“LabelSource”“foldernames”);imdstest = imageageataStore(s3: / / cifar10cloud / cifar10 /测试”...'insertumbfolders',真的,...“LabelSource”“foldernames”);

通过创建一个增强的图像数据来训练网络augmentedImageDatastore对象。使用随机平移和水平反射。数据增强有助于防止网络过度拟合和记忆训练图像的确切细节。

imageSize = [32 32 3];pixelRange = [-4 4];imageAugmenter = imageDataAugmenter (...“RandXReflection”,真的,...'randxtranslation'pixelRange,...'randytranslation', pixelRange);imdsTrain augmentedImdsTrain = augmentedImageDatastore(图象尺寸,...“DataAugmentation”imageAugmenter,...'outputsizeMode''randcrop');

定义网络架构和培训选项

定义CIFAR-10数据集的网络架构。为简化代码,请使用卷积卷积的卷积块。汇集层向下采样空间尺寸。

blockDepth = 4;%blockdepth控制卷积块的深度NetWidth = 32;% netWidth控制卷积块中过滤器的数量[imageInputLayer(imageSize)卷积块(netWidth,blockDepth) maxPooling2dLayer(2,“步”,2)卷大布(2 * NetWidth,BlockDepth)MaxPooling2Dlayer(2,“步”,2) convolutionalBlock(4*netWidth,blockDepth) averageepooling2dlayer (8) fulllyconnectedlayer (10) softmaxLayer classificationLayer;

定义培训选项。通过将执行环境设置为,使用当前集群并行训练网络平行.当您使用多个gpu时,您将增加可用的计算资源。根据GPU的数量扩大迷你批处理的大小,以保持每个GPU上的工作负载不变。根据小批量的大小缩放学习率。使用学习率计划,随着训练的进行降低学习率。在训练过程中打开训练进度图,获取视觉反馈。

miniBatchSize = 256 * numberOfWorkers;initialLearnRate = 1e-1 * miniBatchSize/256;选择= trainingOptions ('sgdm'...“ExecutionEnvironment”'平行线'...%打开自动并行支持。金宝app'italllearnrate'initialLearnRate,...%设置初始学习率。“MiniBatchSize”,小匹马,...%设置MiniBatchSize。'verbose'假的,...%不发送命令行输出。“阴谋”“训练进步”...打开训练进度图。“L2Regularization”1平台以及...“MaxEpochs”,50,...'洗牌'“every-epoch”...'vightationdata'imdsTest,...“ValidationFrequency”、地板(元素个数(imdsTrain.Files) / miniBatchSize),...'shownrateschedule'“分段”...'学习ropfactor', 0.1,...“LearnRateDropPeriod”,45);

火车网络和用于分类

训练集群中的网络。在训练期间,情节显示了进展。

净= trainNetwork (augmentedImdsTrain、层、期权)

net =具有属性的串行网络:图层:[43×1 nnet.cnn.layer.layer]

通过使用培训的网络来确定网络的准确性,将测试图像对本地计算机进行分类。然后将预测的标签与实际标签进行比较。

YPREDITED =分类(网络,IMDSTEST);精度= sum(ypredicted == imdstest.labels)/ numel(imdstest.labels)

定义辅助函数

定义一个函数在网络架构中创建一个卷积块。

功能layers =[卷积2dlayer (3,numFilters, numConvLayers)] layer =[卷积2dlayer (3,numFilters,'填充'“相同”) batchNormalizationLayer reluLayer];层= repmat(层numConvLayers 1);结束

另请参阅

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

相关的话题