似乎与trainNetwork GPU内存不足问题。
26日视图(30天)
显示旧的评论
麦斯
2023年5月3日
我有一个特斯拉P100 16 GB的RAM。昨天,我跑trainNetwork()与不同层achitectures和一些不同的输入数据。它工作。然后我试着一个更大的输入数据集,但得到的内存错误:
错误使用trainNetwork
GPU内存不足。尝试减少MiniBatchSize使用trainingOptions函数。
错误A1_B1_C1a_D2(第152行)
[净,netinfo] = trainNetwork (trainInput、trainTarget层,选择);
引起的:
错误使用gpuArray / hTimesTranspose
内存设备。查看更多细节在GPU可用内存,使用“gpuDevice ()”。如果问题仍然存在,重置GPU通过调用“gpuDevice (1)”。
我试着做建议,但它没有帮助。我曾经尝试过很多不同的较低的方法,做了重新启动,我甚至已经回到了脚本,用于正常工作。
现在没有工作。
任何建议排除硬件故障或保护状态?
0评论
接受的答案
马特·J
2023年5月3日
编辑:马特·J
2023年5月3日
然后我试着一个更大的输入数据集,但得到的内存错误:
如果你让你的数据越来越大,最终会耗尽内存。也许减少MiniBatchSize设置。
13个评论
麦斯
2023年5月3日
这是我所做的第一次。没有帮助。然后我和gpuDevice重置(1)。没有帮助。重启。没有帮助。数据规模越来越小。没有帮助。过滤器和层越来越少。没有帮助。 Then returned to the run scripts that I used and ran with no problems yesterday, to see if I could run them at least. I couldn't.
神骑士
2023年5月4日
嗨,麦斯。这很难诊断没有更多细节。你需要提供1)前后gpuDevice错误的输出,2)你的MATLAB版本,3)一些示例代码,再现了这一问题。
GPU通常不会耗尽内存,除非它的内存,所以无论你做更大的数据集对记忆有可能离开你的GPU低。如果关闭所有应用程序和重新启动MATLAB不修复它那么很有可能你是无意中还使用了内存的运行代码。例如,也许你是加载所有数据,并把它在GPU上而不是允许
trainNetwork
这样做。
麦斯
2023年5月4日
你好神。谢谢。这是我很难给这些细节。gpuDevice返回后在内存中全容量错误……结果到空闲状态。
我能够重新运行/火车一个更老的数据集。gpu的输入数据是1.6820 e + 10个字节,
TotalMemory: 17071734784 (17.07 GB)
AvailableMemory: 16340589072 (16.34 GB)
如果它不是“可用内存”,设置限制然后我不知道这意味着什么。但就像我说的我与更高的记忆训练的网络负载,甚至高于极限。所以我猜是可能的(某种程度上),让matlab分开它只发送块gpu而不是整个训练和验证数据数组……?但是因为我只是增加了数组的大小,直到我得到了内存错误,没有其他优化参数我感觉失去了什么是错的。
神骑士
2023年5月4日
我们需要确定你的问题就是你的网络需要太多内存,或者有别的东西,所以你应该在出行是否当你回到你的原始代码继续看到错误,即使重置装置。
您还可以运行
analyzeNetwork
在你输入多少参数大小的网络和中间激活在训练。
麦斯
2023年5月11日
如前所述,我设法跑。做了两个培训与大型数据集一分为二保持较低的内存。
然后我把训练有素的净转移到另一个。为了训练少,但outputside略大的情况下。
这没有工作。我在搜索扩展新的数据集到一个荒谬的低量,minibatch 10 ~ 300 MB,和使用。
数组大小是:验证…
s1 =
64 64 100
s2 =
100 10256
和火车……
s3 =
64 64 800
s4 =
800 10256
TotSize =
302342400
但错误是一样的:
错误使用trainNetwork(第184行)
GPU内存不足。尝试减少MiniBatchSize使用trainingOptions函数。
错误A1_B1_C1d_D1(第97行)
[净,netinfo] = trainNetwork (trainInput、trainTarget层,选择);
引起的:
错误使用gpuArray / hTimesTranspose
内存设备。查看更多细节在GPU可用内存,使用
“gpuDevice ()”。如果问题仍然存在,重置GPU通过调用“gpuDevice (1)”。
显然,错误的说明是错误的。但什么是错了吗?
神骑士
2023年5月11日
不知道为什么你认为错误的描述是错误的。你肯定是耗尽内存。
所以你的训练数据和验证数据一起有3亿个元素。双精度的数据吗?所以可能是2.4 gb。你把它在GPU在你开始培训?
麦斯
2023年5月12日
这是我运行的脚本…或者想要运行:
temp =负载(
“…一些以前的净....垫的
);
%这加载我的培训和验证数据
[trainInput, trainTarget] = LoadInputTargetFiles (Folder_C_input_DL [1],
“火车”
);
[validateInput, validateTarget] = LoadInputTargetFiles (Folder_C_input_DL [1],
“验证”
);
元= 641;
transferLayers = temp.net.Layers (1:6);
层= [
transferLayers
reluLayer
fullyConnectedLayer (Nt * 2 * 8)
reluLayer
fullyConnectedLayer (Nt * 2 * 8)
clipLayer (1,
“myclip”
)
regressionLayer
];
层(8)。WeightLearnRateFactor = 10;
%的提示从视频
层(8)。WeightL2Factor = 1;
层(8)。BiasLearnRateFactor = 20;
层(8)。BiasL2Factor = 1;
选择= trainingOptions (
…
“个”
,
…
“MaxEpochs”
,1000,
…
“InitialLearnRate”
,0.006,
…
“动量”
,0.95,
…
“洗牌”
,
“every-epoch”
,
…
“ValidationData”
{validateInput, validateTarget},
…
“ValidationPatience”
正,
…
“ValidationFrequency”
,500,
…
“L2Regularization”
1的军医,
…
“阴谋”
,
“训练进步”
,
…
“CheckPointPath”
Folder_D_run_DL_checkpoints,
…
“ExecutionEnvironment”
,
“图形”
,
“MiniBatchSize”
10);
gpu = gpuDevice ();
重置(gpu);
gpu = gpuDevice ();
disp (gpu)
s1 =大小(validateInput)
s2 =大小(validateTarget)
s3 =大小(trainInput)
s4 =大小(trainTarget)
TotSize = prod (s1) +刺激(s2) +刺激(s3) +刺激(s4);TotSize = TotSize * 4
% 4,因为它是类型单一
[净,netinfo] = trainNetwork (trainInput、trainTarget层,选择);
麦斯
2023年5月12日
所以前面的净输入大小相同的训练(每例)64 x64x18(单),但在320年e3培训和40例子e3例子进行验证。
在输出端尺寸1360 x1(单一)。
在新的训练我测试与一个小的数据集,上面的脚本加载只有培训800例和100例进行验证。这里输入的大小都是一样的(/)64 x64x18(单),但输出的大小是10256 x1(单一)。
相比之下我已经能够训练一个网络输出大小和更多的训练数据加载到gpu实例。
所以…
这是一个截图来自这样一个净的一个检查点。
![](http://www.tatmou.com/matlabcentral/answers/uploaded_files/1381049/image.png)
更多的答案(0)
另请参阅
一个错误发生
无法完成的行动,因为页面所做的更改。重新加载页面更新状态。
你也可以从下面的列表中选择一个网站
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。