飞桨模型部署至docker并使用FastAPI调用(二)-环境配置与模型部署
PDRS 环境配置
安装 numpy:
pip install numpy
安装 PDRS (PaddleRS):
- 具体过程见官方文档。
- 下载源码到本地并解压,拖动到 vscode 中
- 进入 PDRS 文件夹,安装 requirements.txt:
pip install -r requirements.txt
- 安装 pycocotools 报错。
- 更新 apt:
apt-get update
- 安装 GCC:
apt-get install -y gcc
- 再次安装 requirements.txt:
pip install -r requirements.txt
- 安装 lap 报错。
- 安装 G++ pip:
apt-get install -y g++
- 再次安装 requirements.txt:
pip install -r requirements.txt
- 安装 paddlepaddle
- 官方文档
安装命令:python -m pip install paddlepaddle-gpu==2.3.0 -i https://mirror.baidu.com/pypi/simple
- 我的部署环境只有 CPU,所以不应该用 GPU 版本的。空间占用:PD-GPU: 5.27G, 无PD: 3.04G, PD-CPU: 3.57G
- paddle 2.2.2-cpu 安装命令:
python -m pip install paddlepaddle==2.2.2 -i https://mirror.baidu.com/pypi/simple
- 安装 PDRS:
python setup.py install
- protobuf 版本过高,报错:
Downgrade the protobuf package to 3.20.x or lower.
- protobuf 版本过高,报错:
- 降级 protobuf:pip install protobuf~=3.19.0
- 再次安装 PDRS:
python setup.py install
- 报错:
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
- 报错:
- 安装 libgl1-mesa-glx:
apt install libgl1-mesa-glx
- 再次安装 PDRS:
python setup.py install
- 报错:
ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory
- 报错:
- 安装 libglib2.0-0:
apt-get install libglib2.0-0
- 再次安装 PDRS:
python setup.py install
飞桨静态图模型部署
- 移动测试图片与静态图模型进 docker。
- 目录树:
root
└─ code
├─ datasets
│ └─ infer
│ ├─ before.png
│ ├─ label_no_use.png
│ └─ later.png
├─ inference_model
│ ├─ .success
│ ├─ model.pdiparams
│ ├─ model.pdiparams.info
│ ├─ model.pdmodel
│ ├─ model.yml
│ └─ pipeline.yml
├─ main.py
├─ predict.py
└─ startup.py
- 推理代码 - predict.py
# modified from: https://aistudio.baidu.com/aistudio/projectdetail/4184759
from paddlers.deploy import Predictor
import numpy as np
from PIL import Image
from matplotlib import pyplot as plt
predictor = Predictor("./code/inference_model", use_gpu=False)
res = predictor.predict(("./code/datasets/infer/before.png", "./code/datasets/infer/later.png"))
cm_1024x1024 = res[0]['label_map']
# print(res)
# 从左到右依次显示:第一时相影像、第二时相影像、整图推理结果以及真值标签
# plt.figure(constrained_layout=True);
# plt.subplot(141); plt.imshow(Image.open("./code/datasets/infer/before.png")); plt.gca().set_axis_off(); plt.title("Image1")
# plt.subplot(142); plt.imshow(Image.open("./code/datasets/infer/later.png")); plt.gca().set_axis_off(); plt.title("Image2")
# plt.subplot(143); plt.imshow((cm_1024x1024*255).astype('uint8')); plt.gca().set_axis_off(); plt.title("Pred")
# plt.subplot(144); plt.imshow((np.asarray(Image.open("./code/datasets/infer/label_no_use.png"))*255).astype('uint8')); plt.gca().set_axis_off(); plt.title("GT")
plt.imshow((cm_1024x1024*255).astype('uint8')); plt.gca().set_axis_off(); plt.title("Pred")
plt.show()
plt.savefig('./code/datasets/infer/pred.png')
print("done")
执行推理代码:成功执行,但出现很多警告,且预测图像无结果。
- 报错:
TypeError: __init__() got an unexpected keyword argument 'is_scale'
- 注释掉 model.yml 中
is_scale
的那行,这个在 aistudio 上不会出报错,但注释该行也不会影响正确结果,应该又是哪个版本不同引起的。
- 注释掉 model.yml 中
- 报错:
检查报错并解决:
DeprecationWarning: Please use
spmatrixfrom the
scipy.sparsenamespace, the
scipy.sparse.basenamespace is deprecated.
- 检查发现, aistudio 上的 scipy 版本为 1.6.3,而 docker 中为 1.8.1 ,尝试降级。
- 降级 scipy:
pip install scipy~=1.6.3
DeprecationWarning: BILINEAR is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.BILINEAR instead.
检查发现, aistudio 上的 Pillow 版本为 7.1.2,而 docker 中为 9.1.1 ,尝试降级。
降级 Pillow:`pip install scipy~=7.1.2
WARNING: type object 'QuantizationTransformPass' has no attribute '_supported_quantizable_op_type'
WARNING: If you want to use training-aware and post-training quantization, please use Paddle >= 1.8.4 or develop version
- 此警告会在 paddle 版本为 2.3.0 时出现,在2.2.2版本不会出现,上面的安装命令已经改为 paddle 2.2.2 版本的了。
DeprecationWarning:
np.objectis a deprecated alias for the builtin
object. To silence this warning, use
objectby itself. Doing this will not modify any behavior and is safe.
- 此警告不是导致预测图像无结果的原因,aistudio 上亦会出现该警告,但结果正常。
[WARNING] Cannot find raw_params. Default arguments will be used to construct the model.
- 这条警告是红的,但我找不到解决的方法。
- 问题突然解决了,我更新了一下推理模型,和原本的模型就差了几KB,突然就正常推理了...可能我前面的操作都是无用功,只是模型出了点大问题罢了。
清空 pip 缓存:
rm -r ~/.cache/pip
,容器大小从 3.83G 变为 2.49G。推理模型基本完成,接下来修改为适用于 API 的推理方式。
参考文献
- ubuntu 安装pycocotools pip inastll pycocotools
- 如何在 Ubuntu 18.04 上安装 GCC 编译器
- Caffe to Tensorflow (Kaffe by Ethereon) : TypeError: Descriptors should not be created directly, but only retrieved from their parent
- [Solved] ImportError: libGL.so.1: cannot open shared object file: No such file or directory
- ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory
- PaddleRS变化检测模型部署:以BIT为例
共有 0 条评论