神经网络是本质为并行的算法。您可以通过使用并行计算工具箱™跨越多核CPU,GPU和多个CPU和GPU的计算机集群分发培训采取这种并行的优势。
如果您可以访问具有多个gpu的机器,您可以简单地指定培训选项“multi-gpu”
使用培训选项
功能。当与多个GPU训练,每个图像批次在GPU之间分配。有关培训多GPU的更多信息,请参阅多GPU训练.
如果您想使用更多资源,可以将深度学习培训扩展到集群或云。要了解更多关于并行选项的信息,请参见并行和在云中扩展深度学习.举个例子,请看列车网络在云中使用自动并行支持万博1manbetx.
如果有多个图形处理器,可以在开始培训前选择设备,使用指定的图形处理器进行单GPU培训。使用gpuDeviceTable
(并行计算工具箱)函数来检查您的GPU并确定要使用的GPU的索引。然后,使用其索引选择GPU:
gpuDevice(索引)
Trainnetwork.
使用培训选项'executionenvironment','gpu'
.
如果您想使用机器上所有可用的gpu,只需指定培训选项“ExecutionEnvironment”、“multi-gpu”
.
如果你想培养使用多GPU的单一模式,你不希望使用所有的GPU,提前打开并行游泳池和手动选择的GPU。你可能想这样做是为了避免在性能差显示GPU训练。要选择特定的GPU,使用下面的代码,其中gpuIndices
是要使用GPU的指标:
Parpool('local',numel(gpuindices));spmd gpudevice(gpuindices(labindex));结束
Trainnetwork.
与之“multi-gpu”
execultenvironment.
(或'平行线'
对于相同的结果),培训函数使用此池并无法打开新的池。
另一种选择是选择使用“WorkerLoad”
选项培训选项
.例如:
parpool( '本地',5);OPTS = trainingOptions( 'SGDM', 'WorkerLoad',[1 1 1 0 1],...)
在这种情况下,第4个worker是池的一部分,但空闲,这不是对并行资源的理想使用。它是更有效的指定图形处理器GPudevice.
.
如果你想用一个GPU训练多个模型,为每个模型启动一个MATLAB会话,并选择一个使用的设备GPudevice.
.
或者,使用aparfor
循环:
parfor i = 1: gpuDeviceCount(“可用”)trainNetwork(…);结束
此示例示出了如何训练使用MATLAB并行训练自动支持的卷积神经网络。万博1manbetx深学习培训往往需要数小时或数天。与并行计算,则可以使用多个图形处理单元(GPU)本地或在云簇加速训练。如果你有机会获得多GPU的机器,那么你可以对数据的本地副本,完成这个例子。如果您想使用更多的资源,那么你可以扩展深度学习培训到云中。要了解更多关于您的选项并行训练,看并行和在云中扩展深度学习.这个例子指导您通过使用MATLAB自动并行支持在云中的集群中训练深度学习网络的步骤。万博1manbetx
要求
在可以运行的例子,你需要配置群集和上传数据到云中。在MATLAB中,你可以创建直接从MATLAB桌面的云团。在这一点首页标签,在平行线菜单中,选择创建和管理集群.在集群配置文件管理器中,单击创建云计算集群.或者,您可以使用MathWorks云中心来创建和访问计算群集。有关更多信息,请参阅云中心入门.之后,将数据上传到Amazon S3桶,并直接从MATLAB访问它。本示例使用已经存储在Amazon S3中的CIFAR-10数据集的副本。说明,请参阅上传深度学习数据到云.
设置并行池
启动集群中的并行池和工人数量设置为集群中的GPU的数量。如果指定的GPU更多的工人,那么剩下的工人处于闲置状态。这个例子假设您正在使用的集群设置为默认群集配置文件。检查的MATLAB默认的群集配置文件首页标签,in.平行线>选择默认集群.
numberOfWorkers = 8;parpool(numberOfWorkers);
开始使用“MyClusterInTheCloud的个人资料...连接到8名工人并行池(parpool)。
从云中加载数据集
使用。从云加载训练和测试数据集imageageAtastore.
.在这个例子中,您使用CIFAR-10数据的副本集存储在亚马逊S3。为了保证工人能够在云中的数据存储,确保为AWS凭据的环境变量设置正确。看上传深度学习数据到云.
imdstrain = imagedataStore(s3: / / cifar10cloud / cifar10 /火车',...'insertumbfolders',真的,...'labelsource',“foldernames”);imdsTest = imageDatastore('s3:// cifar10cloud / cifar10 / test',...'insertumbfolders',真的,...'labelsource',“foldernames”);
通过创建一个增强的图像数据来训练网络augmentedImageDatastore
对象。使用随机平移和水平反射。数据增强有助于防止网络过度拟合和记忆训练图像的确切细节。
imageSize = [32 32 3];pixelRange = [-4 4];imageAugmenter = imageDataAugmenter (...'randxreflection',真的,...'RandXTranslation'pixelRange,...'RandYTranslation',pixelrange);Augmentedimdstrain = AugmentedimageGedataStore(图像化,IMDstrain,...“DataAugmentation”imageAugmenter,...'OutputSizeMode','randcrop');
定义网络体系结构和培训方案
限定用于CIFAR-10数据集的网络架构。为了简化代码,使用卷积输入卷积块。汇集层下采样的空间尺寸。
blockDepth = 4;%blockDepth控制卷积块的深度netWidth = 32;% netWidth控制卷积块中过滤器的数量图层= [imageInputlayer(iconageize)卷积块(netwidth,blockdepth)maxpooling2dlayer(2,“步”,2)convolutionalBlock(2 * netWidth,blockDepth)maxPooling2dLayer(2,“步”,2)卷积块(4 * NetWidth,BlockDepth)普通Pooling2dlayer(8)全连接列(10)SoftmaxLayer分类层];
定义培训选项。使用当前群集并行列车通过将执行环境设置为平行线
.当您使用多GPU,你增加了可用的计算资源。扩展了GPU的数量的小批量大小,以保持工作量每个GPU不变。根据小批量大小缩放学习率。使用学习率如期下降的学习率随着培训的进行。打开训练进度情节培训过程中获得的视觉反馈。
miniBatchSize = 256 * numberOfWorkers;initialLearnRate = 1e-1 * miniBatchSize/256;选择= trainingOptions ('SGDM',...“ExecutionEnvironment”,'平行线',...%打开自动平行支撑。万博1manbetx'InitialLearnRate'initialLearnRate,...%设置初始学习率。“MiniBatchSize”,小匹马,...%设置MiniBatchSize。'verbose',错误的,...%不发送命令行输出。“阴谋”,“训练进步”,...打开训练进度图。“L2Regularization”1平台以及...“MaxEpochs”,50,...“洗牌”,'每个时代',...'vightationdata'imdsTest,...'验证职业',地板(Numel(Imdstrain.files)/ minibatchsize),...'LearnRateSchedule',“分段”,...'LearnRateDropFactor', 0.1,...“LearnRateDropPeriod”,45);
列车网络和使用分类
训练集群中的网络。在训练期间,情节显示了进展。
净= trainNetwork (augmentedImdsTrain、层、期权)
净= SeriesNetwork与属性:层:[43×1 nnet.cnn.layer.Layer]
确定网络的精度,通过训练的网络到本地计算机上的测试图像进行分类。那么预测的标签与实际的标签。
YPredicted =分类(净,imdsTest);精度=总和(YPredicted == imdsTest.Labels)/ numel(imdsTest.Labels)
定义辅助功能
定义一个函数在网络架构中创建一个卷积块。
功能layers =[卷积2dlayer (3,numFilters, numConvLayers)] layer =[卷积2dlayer (3,numFilters,'填充','相同的')BatchnormalizationLayer Ruilulayer];图层= Repmat(图层,NumConvlayers,1);结束
imageageAtastore.
|培训选项
|Trainnetwork.
|GPudevice.
(并行计算工具箱)|spmd
(并行计算工具箱)