MindSpore张量运算失败报错RuntimeError:Malloc for kernel output failed, Memory isn’t enough, node:Default/Add-op0

1 系统环境

硬件环境(Ascend/GPU/CPU): GPU
MindSpore版本: mindspore=1.10.1
执行模式(PyNative/ Graph):PyNative
Python版本: Python=3.7.5
操作系统平台: linux

2 报错信息

2.1 问题描述

在python的交互界面下运行脚本,环境显存为24G,在执行print(ms.ops.add(a,b))语句前显存占用为0,在执行完毕print(ms.ops.add(a,b))语句后,抛出错误,显存占用为18647M,未得到释放。

2.2 报错信息

RuntimeError:Malloc for kernel output failed, Memory isn’t enough, node:Default/Add-op0复制

2.3 脚本代码

import mindspore as ms
import numpy as np

ms.set_context(device_target="GPU")
a=ms.Tensor(np.ones([999,999,999]))
b=ms.Tensor(np.ones([999,999,999]))

print(ms.ops.add(a,b))

3 根因分析

根据执行报错,问题是由于显存不足:
1、a和b的维度是(999, 999, 999),数据类型是float64,a和b各自占用空间= 999 * 999 * 999 * 8
2、两个输入,一个输出累计占用内存接近24GB

4 解决方案

将a和b的数据类型修改为float32,修改后单个Tensor的显存约占用4GB,共计12GB

import mindspore as ms
import numpy as np

ms.set_context(device_target="GPU")
a=ms.Tensor(np.ones([999,999,999], np.float32))
b=ms.Tensor(np.ones([999,999,999], np.float32))

print(ms.ops.add(a,b))