关于人工智能:宝典相授无错在手-昇思MindSpore报错调试宝典六网络构建与训练类报错之资源不足

3次阅读

共计 2791 个字符,预计需要花费 7 分钟才能阅读完成。

上一期解说了网络构建与训练类报错之算子执行谬误该如何定位解决,置信如输出异样、算子实现谬误之类算子执行问题曾经难不倒大家了。那么本期咱们看看网络构建与训练类报错常见的最初一个问题分类,即资源有余方面的报错,如遇到资源有余方面的报错,如 Out Of Memory、memory isn’t enough 等等资源问题应该如何剖析呢。本期以神经网络训练过程中呈现的资源问题为例来解说下定位解决的办法。具体案例请参考下图~

文字内容:小孢子:你好呀,昇思 MindSpore!我又来啦。这次的问题是,神经网络训练模型脚本在执行过程中报错退出了,你帮我看看是哪里出了问题?MindSpore:好呀!让我看看你的环境信息、脚本代码与报错日志~ 小孢子:环境信息是这样的:Hardware Environment(Ascend/GPU/CPU): GPU

Software Environment:

— MindSpore version (source or binary): 2.0.0-alpha

— Python version (e.g., Python 3.7.5): 3.7.5

— OS platform and distribution (e.g., Linux Ubuntu 16.04): Ubuntu 4.15.0-74-generic 复制局部训练脚本信息:01 def datapipe(path, batch_size): #④

02    image_transforms = [

03        vision.Rescale(1.0 / 255.0, 0),

04        vision.Normalize(mean=(0.1307,), std=(0.3081,)),

05        vision.HWC2CHW()

06    ]

07    label_transform = transforms.TypeCast(ms.int32)

08

09    dataset = MnistDataset(path)

10    dataset = dataset.map(image_transforms, ‘image’)

11    dataset = dataset.map(label_transform, ‘label’)

12    dataset = dataset.batch(batch_size)

13    return dataset

14

15 train_dataset = datapipe(‘MNIST_Data/train’, 64)  #③复制报错信息:cudaStreamCreate failed, ret[2], out of memory  #①


……

RuntimeError: Alloc device memory [16121856] faild.  #②


C++ Call Stack: (For framework developers)


Mindspore/ccsrc/plugin/device/gpu/hal/device/gpu_memory_allocator.cc:88 AllocDeviceMem 复制 MindSpore:首先先看下报错信息,1.①中看到 out of memory,提醒内存溢出。2.②依据报错提醒,查看执行机内存大小以及是否有其余过程占用内存,发现没有多余内存可用。3.③、④看到 batch_size 值有些大,而在肯定条件下,batch_size 过大,会导致 OOM 解决办法,将③代码中的 train_dataset = datapipe(‘MNIST_Data/train’, 64) 批改为 train_dataset = datapipe(‘MNIST_Data/train’, 32)。最终残缺代码如下:01 def datapipe(path, batch_size):

02    image_transforms = [

03        vision.Rescale(1.0 / 255.0, 0),

04        vision.Normalize(mean=(0.1307,), std=(0.3081,)),

05        vision.HWC2CHW()

06    ]

07    label_transform = transforms.TypeCast(ms.int32)

08

09    dataset = MnistDataset(path)

10    dataset = dataset.map(image_transforms, ‘image’)

11    dataset = dataset.map(label_transform, ‘label’)

12    dataset = dataset.batch(batch_size)

13    return dataset

14

15 train_dataset = datapipe(‘MNIST_Data/train’, 32) 复制小孢子:好了,执行没有报错,程序能够持续进行训练了。MindSpore:总结下资源有余问题解决办法,查看日志报错提醒,确定问题景象;查看机器运行配置信息,以及其余执行程序是否有过多占用内存;查看代码行,通过参数 batch_size 的大小缩小内存占用。小孢子:好的,我明确啦,在遇到资源有余问题时,还是看具体情况,是其余程序占用、还是程序自身配置问题。MindSpore:不错,总结的很到位,真是举一反三呢。那么下次咱们交换下,分布式并行谬误剖析!小孢子:好呀,我也先回去钻研钻研,期待下次见面!报错地图:https://www.hiascend.com/forum/thread-0229108045633055169-1-1… 往期回顾:昇思 MindSpore 报错调试宝典(一):数据加载与解决类:https://www.hiascend.com/forum/thread-0215111378750918013-1-1… 报错调试宝典(二):网络构建与训练类报错之 context 配置问题:https://www.hiascend.com/forum/thread-0227112497811434016-1-1… 昇思 MindSpore 报错调试宝典(三):网络构建与训练类报错之语法问题:https://www.hiascend.com/forum/thread-0232113194535560002-1-1… 昇思 MindSpore 报错调试宝典(四):网络构建与训练类报错之算子编译谬误:https://www.hiascend.com/forum/thread-0203114399255966005-1-1… 昇思 MindSpore 报错调试宝典(五):网络构建与训练类报错之算子执行谬误:https://www.hiascend.com/forum/thread-0250115007368297037-1-1…

正文完
 0