paddle version: 2.1.2
import paddle paddle.randn((2*16, 640*640/16, 128))
第二个参数会是浮点数,会报以下错误:
SystemError: (Fatal) Operator gaussian_random raises an struct paddle::memory::allocation::BadAlloc exception.
The exception content is
:ResourceExhaustedError:
Out of memory error on GPU 0. Cannot allocate 400.000244MB memory on GPU 0, 2.361126GB memory has been allocated and available memory is only 3.638874GB.
Please check whether there is any other process using GPU 0.
- If yes, please stop them, or start PaddlePaddle on another GPU.
- If no, please decrease the batch size of your model.
(at C:\home\workspace\Paddle_release3\paddle\fluid\memory\allocation\cuda_allocator.cc:79)
. (at C:\home\workspace\Paddle_release3\paddle\fluid\imperative\tracer.cc:192)
放在cpu上依然不会抛出类型错误,只会出现bad alloc
5条答案
按热度按时间gxwragnw1#
您好,我们已经收到了您的问题,会安排技术人员尽快解答您的问题,请耐心等待。请您再次检查是否提供了清晰的问题描述、复现代码、环境&版本、报错信息等。同时,您也可以通过查看官网API文档、常见问题、历史Issue、AI社区来寻求解答。祝您生活愉快~
Hi! We've received your issue and please be patient to get responded. We will arrange technicians to answer your questions as soon as possible. Please make sure that you have posted enough message to demo your request. You may also check out the API,FAQ,Github Issue and AI community to get the answer.Have a nice day!
roqulrg32#
可以试试自行编一个 develop 的版本,报错信息已经更新。
ValueError: (InvalidArgument) gaussian_random(): argument (position 1) must be list of int, but got float at pos 1
p8h8hvxi3#
函数
randn
的签名为:其中对
shape
参数的要求是:就是说要求
shape
中的元素为整型。但是当shape
中的元素为float
时,并不会出错,是会成功创建tensor
的。这是因为在动态图模式下,即:不会做任何
shape
—check_shape(...)
和dtype
—check_dtype(...)
的检查。原因如下:在动态图模式下,
randn
只是将shape
强制转化为list
,然后调用_C_ops
下的gaussian_random
:在调用
convert_shape_to_list
时,如果shape
是list
或tuple
的话,shape
只是统一变成了list
并没有数据类型的转换,如果shape
是一个Tensor
的话,倒是显示的将数据类型转换成了int
,convert_shape_to_list
定义如下:也就是说,这里的
randn
在调用gaussian_random
时,shape
只是转换成了一个list
,里面元素的数据类型并没有变,即[int, float, int]
。当打印tensor
的shape
时,我们发现,shape
第二个元素向下取整变成了int
。也就是说,在动态图模式下,shape
的处理放在了gaussian_random
函数里了。不过很遗憾,我没有在_C_ops
模块里找到gaussian_random
函数的定义和实现,可能它应该是一个C++
函数吧,我不太清楚Python
是如何调用C++
函数的。可以的话,希望官方能告知gaussian_random
的定义和实现在哪里,以及_C_ops
是怎么调用gaussian_random
的呢?camsedfj4#
python调用_C_ops.xxx的代码是自动生成出来的,自动生成代码在如下文件中:
这个https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/pybind/op_function_generator.cc
如果你用develop自己编译,编译完成后可以找到一个文件:paddle/fluid/pybind/op_function_impl.h,gaussian_random定义在这个文件中。
w1jd8yoj5#
python调用_C_ops.xxx的代码是自动生成出来的,自动生成代码在如下文件中:
这个https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/pybind/op_function_generator.cc
如果你用develop自己编译,编译完成后可以找到一个文件:paddle/fluid/pybind/op_function_impl.h,gaussian_random定义在这个文件中。
好哒,谢谢啦!我试一下~