在线部署卷积报错
收藏
版本1.7.0 py3
推理模型在notebook里用cpu测试没有出现问题,但在在线推理上报错,conv_bn_layer来自官方resnet模型:
System error: Invoke operator conv2d error.
Python Call stacks:
File \"/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/framework.py\", line 2488, in append_op
attrs=kwargs.get(\"attrs\", None))
File \"/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/layer_helper.py\", line 43, in append_op
return self.main_program.current_block().append_op(*args, **kwargs)
File \"/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/layers/nn.py\", line 2803, in conv2d
\"data_format\": data_format,
File \"\", line 128, in conv_bn_layer
data_format=data_format)
File \"\", line 64, in net
data_format=data_format)
...
C++ Call stacks:
op conv2d does not have kernel for data_type[float]:data_layout[NCHW]:place[CPUPlace]:library_type[PLAIN] at [/paddle/paddle/fluid/framework/operator.cc:979]
PaddlePaddle Call Stacks:
0 0x7ff1225fc788p void paddle::platform::EnforceNotMet::Init(std::string, char const*, int) + 360
1 0x7ff1225fcad7p paddle::platform::EnforceNotMet::EnforceNotMet(std::string const&, char const*, int) + 87
2 0x7ff123958b99p paddle::framework::OperatorWithKernel::ChooseKernel(paddle::framework::RuntimeContext const&, paddle::framework::Scope const&, boost::variant const&) const + 1289
3 0x7ff123959c38p paddle::framework::OperatorWithKernel::RunImpl(paddle::framework::Scope const&, boost::variant const&, paddle::framework::RuntimeContext*) const + 728
4 0x7ff12395a241p paddle::framework::OperatorWithKernel::RunImpl(paddle::framework::Scope const&, boost::variant const&) const + 529
5 0x7ff1239551e4p paddle::framework::OperatorBase::Run(paddle::framework::Scope const&, boost::variant const&) + 260
6 0x7ff12277c11ep paddle::framework::Executor::RunPreparedContext(paddle::framework::ExecutorPrepareContext*, paddle::framework::Scope*, bool, bool, bool) + 206
7 0x7ff12277f1afp paddle::framework::Executor::Run(paddle::framework::ProgramDesc const&, paddle::framework::Scope*, int, bool, bool, std::vector > const&, bool) + 143
...
看起来是conv2d对某些参数没注册?不过既然cpu上能测得过没道理啊....
notebook上测试:
[inference_program, feed_target_names, fetch_targets] = fluid.io.load_inference_model('work/Online3', exe)
inputImg_data = np.zeros(25, 3, 640, 640).astype(np.uint8)
results = exe.run(inference_program, feed={feed_target_names[0]: inputImg_data}, fetch_list=fetch_targets)
输入转换器,输入数据是图像base64:
def reader_infer(data_args):
"""
reader_inter
示例为目标检测数据预处理
:param data_args: 接口传入的数据,以k-v形式
:return [[]], feeder
"""
def reader():
"""
reader
:return:
"""
inImg = fluid.layers.data('inImg', shape=[-1, 3, 640, 640], dtype='uint8')
feeder = fluid.DataFeeder(place=fluid.CUDAPlace(0), feed_list=[inImg])
img = base64_to_image(data_args["inImg"])
# do something
assert imgSet.shape[2] == imgSet.shape[3] and imgSet.shape[2] == 640
return [[imgSet]], feeder # imgSet.shape:(25, 3, 640, 640)
return reader
0
收藏
请登录后评论
我遇上的这种类似的问题一般是两个原因:
1.paddle的版本兼容。
2.内存溢出。
....对..我真的感觉奇怪。可能和版本有点关系,这个模型在1.6的最后一个版本还有1.7上都可以跑..其他的还没试过
我曾在输入转换部分尝试用fluid.data结果提示不存在..不得已只能用fluid.layers.data
..查了下 1.6开始引入fluid.data...我猜测可能是上面版本某些操作和当前版本不一样,数据精度和现在不一样,尝试在conv2d强制cast到float32试一下
内存溢出。
第二个问题怎么解决
请问是使用AIStudio平台上的在线部署功能的过程中, 遇到这个错误的吗?
是的,是在部署测试的时候出现的问题
我试了转成float32还是不行..我这res50后面还套着一串的deconv...可能是内存溢出吧..
内存溢出的话我不太知道太多的办法..
减小batch,操作能用尽量用inplace
要不就用网络压缩那一群方法也行....我倾向用量化和剪枝.其他的不太熟悉..
这个问题8楼比我懂得多。我一般都是从程序层面解决。有次是因为参数(规模很大,保存了模型权值等)深拷贝导致了模型不能正常运行。
也尝试了
还是不行
他每一个notebook应该是一个docker 他设置的这个docker的内存就不大
哭了...跑了一次batchsize=25,看到是峰值内存占用不到300m..不过也有可能是因为top刷新是按秒来的,真正峰值占用的时候恰好没显示到....
-----------------------------
我觉得我破案了,应该是版本问题
平台上版本是1.5.2,看来就是版本问题了
现在在线部署的确版本比较低, 正在抓紧修复. 26号上线.
超级感谢!我正想着用老版本重新写一遍呢hhhhh
很抱歉, 26号上线的内容不包括这块, 应该是4月中旬的内容. 我看错了. ....