在线部署卷积报错
收藏
快速回复
AI Studio平台使用 其他算力相关 2295 15
在线部署卷积报错
收藏
快速回复
AI Studio平台使用 其他算力相关 2295 15

版本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
收藏
回复
全部评论(15)
时间顺序
AIStudio810258
#2 回复于2020-03

我遇上的这种类似的问题一般是两个原因:

1.paddle的版本兼容。

2.内存溢出。

0
回复
l
li_gyh
#3 回复于2020-03
我遇上的这种类似的问题一般是两个原因: 1.paddle的版本兼容。 2.内存溢出。

....对..我真的感觉奇怪。可能和版本有点关系,这个模型在1.6的最后一个版本还有1.7上都可以跑..其他的还没试过

我曾在输入转换部分尝试用fluid.data结果提示不存在..不得已只能用fluid.layers.data

..查了下 1.6开始引入fluid.data...我猜测可能是上面版本某些操作和当前版本不一样,数据精度和现在不一样,尝试在conv2d强制cast到float32试一下

0
回复
水水水的老师
#4 回复于2020-03

内存溢出。

0
回复
水水水的老师
#5 回复于2020-03
我遇上的这种类似的问题一般是两个原因: 1.paddle的版本兼容。 2.内存溢出。

第二个问题怎么解决

0
回复
AIStudio810261
#6 回复于2020-03

请问是使用AIStudio平台上的在线部署功能的过程中, 遇到这个错误的吗?

0
回复
l
li_gyh
#7 回复于2020-03
请问是使用AIStudio平台上的在线部署功能的过程中, 遇到这个错误的吗?

是的,是在部署测试的时候出现的问题

0
回复
l
li_gyh
#8 回复于2020-03
第二个问题怎么解决

我试了转成float32还是不行..我这res50后面还套着一串的deconv...可能是内存溢出吧..

内存溢出的话我不太知道太多的办法..

减小batch,操作能用尽量用inplace

要不就用网络压缩那一群方法也行....我倾向用量化和剪枝.其他的不太熟悉..

0
回复
AIStudio810258
#9 回复于2020-03
第二个问题怎么解决

这个问题8楼比我懂得多。我一般都是从程序层面解决。有次是因为参数(规模很大,保存了模型权值等)深拷贝导致了模型不能正常运行。

0
回复
水水水的老师
#10 回复于2020-03
li_gyh #8
我试了转成float32还是不行..我这res50后面还套着一串的deconv...可能是内存溢出吧.. 内存溢出的话我不太知道太多的办法.. 减小batch,操作能用尽量用inplace 要不就用网络压缩那一群方法也行....我倾向用量化和剪枝.其他的不太熟悉..
展开

也尝试了

0
回复
水水水的老师
#11 回复于2020-03
li_gyh #8
我试了转成float32还是不行..我这res50后面还套着一串的deconv...可能是内存溢出吧.. 内存溢出的话我不太知道太多的办法.. 减小batch,操作能用尽量用inplace 要不就用网络压缩那一群方法也行....我倾向用量化和剪枝.其他的不太熟悉..
展开

还是不行

0
回复
水水水的老师
#12 回复于2020-03
li_gyh #8
我试了转成float32还是不行..我这res50后面还套着一串的deconv...可能是内存溢出吧.. 内存溢出的话我不太知道太多的办法.. 减小batch,操作能用尽量用inplace 要不就用网络压缩那一群方法也行....我倾向用量化和剪枝.其他的不太熟悉..
展开

他每一个notebook应该是一个docker  他设置的这个docker的内存就不大

0
回复
l
li_gyh
#13 回复于2020-03
他每一个notebook应该是一个docker  他设置的这个docker的内存就不大

哭了...跑了一次batchsize=25,看到是峰值内存占用不到300m..不过也有可能是因为top刷新是按秒来的,真正峰值占用的时候恰好没显示到....

-----------------------------

我觉得我破案了,应该是版本问题

平台上版本是1.5.2,看来就是版本问题了

0
回复
AIStudio810261
#14 回复于2020-03
li_gyh #13
哭了...跑了一次batchsize=25,看到是峰值内存占用不到300m..不过也有可能是因为top刷新是按秒来的,真正峰值占用的时候恰好没显示到.... ----------------------------- 我觉得我破案了,应该是版本问题 平台上版本是1.5.2,看来就是版本问题了
展开

现在在线部署的确版本比较低, 正在抓紧修复. 26号上线. 

0
回复
l
li_gyh
#15 回复于2020-03
现在在线部署的确版本比较低, 正在抓紧修复. 26号上线. 

超级感谢!我正想着用老版本重新写一遍呢hhhhh

0
回复
AIStudio810261
#16 回复于2020-03
li_gyh #15
超级感谢!我正想着用老版本重新写一遍呢hhhhh

很抱歉, 26号上线的内容不包括这块, 应该是4月中旬的内容. 我看错了. ....

0
回复
在@后输入用户全名并按空格结束,可艾特全站任一用户