Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

服务请求返回 array has incorrect number of dimensions: 3; expected 4 #962

Closed
solomance opened this issue Jan 9, 2021 · 12 comments
Closed
Assignees
Labels
install Install issue

Comments

@solomance
Copy link

调用OCR服务返回 array has incorrect number of dimensions: 3; expected 4
请问这是什么问题?

@github-actions
Copy link

github-actions bot commented Jan 9, 2021

Message that will be displayed on users' first issue

@TeslaZhao
Copy link
Collaborator

你好,你的Serving版本是? (运行 pip list | grep serving)

升级到client,server升级到v0.4.0版本,app升级到v0.2.0
paddle-serving-app 0.2.0
paddle-serving-client 0.4.0
paddle-serving-server 0.4.0

@TeslaZhao TeslaZhao self-assigned this Jan 11, 2021
@TeslaZhao TeslaZhao added the install Install issue label Jan 11, 2021
@solomance
Copy link
Author

你好,你的Serving版本是? (运行 pip list | grep serving)

升级到client,server升级到v0.4.0版本,app升级到v0.2.0
paddle-serving-app 0.2.0
paddle-serving-client 0.4.0
paddle-serving-server 0.4.0

Hi,pip list | grep serving 看到的版本是0.0.0:

paddle-serving-app 0.0.0
paddle-serving-client 0.0.0
paddle-serving-server-gpu 0.0.0.post10

我试了下单张图片可以没问题:
feed = [{"image": padding_im}]

不过batch预测就返回错误:
feed = [{"image": padding_im}, {"image": padding_im}]

大佬麻烦看看,谢谢!

@TeslaZhao
Copy link
Collaborator

你需要升级一下版本,注意paddle-serving-server-gpu安装要和cuda版本一致
pip install paddle-serving-client==0.4.0
pip install paddle-serving-server==0.4.0
pip install paddle-serving-app==0.2.0
pip install paddle-serving-server-gpu==0.4.0.post9 # GPU with CUDA9.0
pip install paddle-serving-server-gpu==0.4.0.post10 # GPU with CUDA10.0
pip install paddle-serving-server-gpu==0.4.0.100 # GPU with CUDA10.1+TensorRT

@solomance
Copy link
Author

你需要升级一下版本,注意paddle-serving-server-gpu安装要和cuda版本一致
pip install paddle-serving-client==0.4.0
pip install paddle-serving-server==0.4.0
pip install paddle-serving-app==0.2.0
pip install paddle-serving-server-gpu==0.4.0.post9 # GPU with CUDA9.0
pip install paddle-serving-server-gpu==0.4.0.post10 # GPU with CUDA10.0
pip install paddle-serving-server-gpu==0.4.0.100 # GPU with CUDA10.1+TensorRT

大佬,更新了之后还是出现这个问题,不能支持batch预测:

pip list | grep serving

paddle-serving-app 0.2.0
paddle-serving-client 0.4.0
paddle-serving-server-gpu 0.4.0.post10

模型输入:3, 48, 192

serving_server_conf.prototxt

feed_var {
name: "image"
alias_name: "image"
is_lod_tensor: false
feed_type: 1
shape: 3
shape: 48
shape: 192
}
fetch_var {
name: "save_infer_model/scale_0.tmp_0"
alias_name: "save_infer_model/scale_0.tmp_0"
is_lod_tensor: true
fetch_type: 1
shape: -1
}
fetch_var {
name: "save_infer_model/scale_1.tmp_0"
alias_name: "save_infer_model/scale_1.tmp_0"
is_lod_tensor: true
fetch_type: 0
shape: -1
}

padding_im = np.zeros((3, 48, 192), dtype=np.float32)

返回正常结果:feed = [{"image": padding_im}]
返回错误结果:feed = [{"image": padding_im}, {"image": padding_im}]

错误信息:
ValueError: array has incorrect number of dimensions: 3; expected 4

@TeslaZhao
Copy link
Collaborator

你运行的Server和OCR示例ocr_web_server.py一致吗,如果有改动请贴一下你的代码?

@solomance
Copy link
Author

solomance commented Jan 11, 2021

你运行的Server和OCR示例ocr_web_server.py一致吗,如果有改动请贴一下你的代码?

Server代码:https://github.com/PaddlePaddle/PaddleOCR/tree/develop/deploy/pdserving
Server配置:serving_server_conf.prototxt
feed_var {
name: "image"
alias_name: "image"
is_lod_tensor: false
feed_type: 1
shape: 3
shape: 48
shape: 192
}
fetch_var {
name: "save_infer_model/scale_0.tmp_0"
alias_name: "save_infer_model/scale_0.tmp_0"
is_lod_tensor: true
fetch_type: 1
shape: -1
}
fetch_var {
name: "save_infer_model/scale_1.tmp_0"
alias_name: "save_infer_model/scale_1.tmp_0"
is_lod_tensor: true
fetch_type: 0
shape: -1
}

Server代码和ocr_web_server.py应该一致,client的predict函数貌似需要设置batch=True。

另外我试了一下两种调用方式:

方式1:
padding_im.shape: [batch_size, C, H, W]
feed = [{"image": padding_im}]

返回结果:[batch_size, 1, 640, 640]

方式2:
padding_im.shape: [1, C, H, W]
feed = [{"image": padding_im}, {"image": padding_im}, ...]

返回结果:[1, 1, 640, 640]

请问batch预测用的是第一种方式吗?但第二种方式返回结果为什么batch_size=1?

paddle_serving_client/init.py
https://github.com/PaddlePaddle/Serving/blob/v0.4.0/python/paddle_serving_client/__init__.py
这里可以看到,client是会处理 feed 每个 dict :
for i, feed_i in enumerate(feed_batch):

谢谢~~

@solomance
Copy link
Author

请问配置文件里,name 和 alias_name 有什么区别?我看到对于 feed_var 这两个一般是一样的,但对于 fetch_var 这两个好像不一样。

@TeslaZhao
Copy link
Collaborator

name是网络结果中变量的名称,调整网络结构之后name会变,为了解决这个问题设置alias_name作为var字典的key,不受模型训练epoch的次数影响。

@TeslaZhao
Copy link
Collaborator

您给的case,我本周找时间试一下

@solomance
Copy link
Author

name是网络结果中变量的名称,调整网络结构之后name会变,为了解决这个问题设置alias_name作为var字典的key,不受模型训练epoch的次数影响。

好的,意思是网络结构变了之后,变量名字可能会变化,但是变量在字典里的key不会变?可以举个例子吗?

@solomance
Copy link
Author

请问 client.predict() 是线程安全的吗?
app_instance.before_first_request 里初始化了client,self.launch_web_service()
如果设置flask启动为多进程或多线程,会不会有问题?
例如:
app_instance.run(host="0.0.0.0", port=self.args.port, threaded=False, processes=2)

@paddle-bot paddle-bot bot closed this as completed Apr 16, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
install Install issue
Projects
None yet
Development

No branches or pull requests

2 participants