4. 技术案例¶
4.1. 飞桨 FastDeploy¶
4.1.1. 介绍¶
FastDeploy 是一款全场景、易用灵活、极致高效的 AI 推理部署工具。提供开箱即用的云边端部署体验, 支持超过 150+ Text, Vision, Speech和跨模态模型,并实现端到端的推理性能优化。包括图像分类、物体检测、图像分割、人脸检测、人脸识别、关键点检测、抠图、OCR、NLP、TTS等任务,满足开发者多场景、多硬件、多平台的产业部署需求。
目前 FastDeploy 初步支持 rknpu2,可以在 RK3588 平台上推理部分模型,其他模型还在适配中,具体支持列表和进度请前往:github
4.1.2. RK3588 端¶
4.1.2.1. 编译与安装¶
说明:本文测试是基于 RK3588 Firefly Ubuntu20.04 v1.0.4a 固件,采用 python 方式安装与部署,python 版本为 3.8 。因为固件中自带 rknpu2 v1.4.0 环境,因此本文跳过了准备 rknpu2 部分。其他部署方式、准备 rknpu2 等内容请查看官方文档: https://github.com/PaddlePaddle/FastDeploy/blob/develop/docs/cn/build_and_install/rknpu2.md
4.1.2.1.1. 准备环境¶
sudo apt update
sudo apt install -y python3 python3-dev python3-pip gcc python3-opencv python3-numpy
这里提供一个提前编译好的 python 包用于快速测试:前往下载 提取码:1234
使用这个包的话可以跳过编译步骤,直接进行安装(上一步准备环境还是需要的)。该包基于 FastDeploy v1.0.0 (commit id c4bb83ee)
注意:此项目处于快速迭代中,这里提供的预编译包可能已经过时,仅供快速了解、测试。实际开发使用请从最新源码编译:
4.1.2.1.2. RK3588 上编译¶
sudo apt update
sudo apt install -y gcc cmake
git clone https://github.com/PaddlePaddle/FastDeploy.git
cd FastDeploy/python
export ENABLE_ORT_BACKEND=ON
export ENABLE_RKNPU2_BACKEND=ON
export ENABLE_VISION=ON
export RKNN2_TARGET_SOC=RK3588
python3 setup.py build
python3 setup.py bdist_wheel
如果你使用的 RK3588 内存比较小,编译可能会出现 OOM 错误,可以在python3 setup.py build
命令后面追加-j N
来控制编译线程数量。
4.1.2.1.3. RK3588 上安装¶
编译完成后可以在 FastDeploy/python/dist 下找到安装包,或者使用之前提供的预编译包。使用 pip3 安装
pip3 install fastdeploy_python-*-linux_aarch64.whl
4.1.2.2. 推理模型¶
在完成安装后,这里提供了3个已经调整好的 demo,前往下载,提取码:1234
注意:此项目处于快速迭代中,这里提供的模型可能已经过时,仅供快速了解、测试。实际开发使用请前往本文开头官方 github 获取最新内容
解压后可以直接运行推理:
Picodet 物体检测模型
cd demos/vision/detection/paddledetection/rknpu2/python
python3 infer.py --model_file ./picodet_s_416_coco_lcnet/picodet_s_416_coco_lcnet_rk3588.rknn \
--config_file ./picodet_s_416_coco_lcnet/infer_cfg.yml \
--image 000000014439.jpg
Scrfd 人脸检测模型
cd demos/vision/facedet/scrfd/rknpu2/python
python3 infer.py --model_file ./scrfd_500m_bnkps_shape640x640_rk3588.rknn \
--image test_lite_face_detector_3.jpg
PaddleSeg 人像分割模型
cd demos/vision/segmentation/paddleseg/rknpu2/python
python3 infer.py --model_file ./Portrait_PP_HumanSegV2_Lite_256x144_infer/Portrait_PP_HumanSegV2_Lite_256x144_infer_rk3588.rknn \
--config_file ./Portrait_PP_HumanSegV2_Lite_256x144_infer/deploy.yaml \
--image images/portrait_heng.jpg
4.1.3. PC 端¶
上一章节在 RK3588 上进行部署的只是运行环境,demo 是提前在 PC 端转换与调整好的。也就是说进一步的开发例如模型转换、参数调整等,是需要在 PC 端进行,所以还需要在 x86_64 Linux PC 上安装 FastDeploy。
4.1.3.1. 编译与安装¶
需求:Ubuntu18 及以上,python 环境 3.6 或 3.8
4.1.3.1.1. 安装 rknn-toolkit2¶
建议使用 conda 或 virtualenv 新建一个虚拟环境进行安装!安装 conda 或 virtualenv 的方法百度有很多,这里跳过。
首先前往下载 rknn_toolkit2 安装包:github
sudo apt install -y libxslt1-dev zlib1g zlib1g-dev libglib2.0-0 libsm6 libgl1-mesa-glx libprotobuf-dev gcc g++
# 创建虚拟环境
conda create -n rknn2 python=3.6
conda activate rknn2
# rknn_toolkit2对numpy存在特定依赖,因此需要先安装numpy==1.16.6
pip3 install numpy==1.16.6
# 安装 rknn_toolkit2
pip3 install rknn_toolkit2-1.4.0-*cp36*-linux_x86_64.whl
4.1.3.1.2. 编译安装 FastDeploy¶
pip3 install wheel
sudo apt install -y cmake
git clone https://github.com/PaddlePaddle/FastDeploy.git
cd FastDeploy/python
export ENABLE_ORT_BACKEND=ON
export ENABLE_PADDLE_BACKEND=ON
export ENABLE_OPENVINO_BACKEND=ON
export ENABLE_VISION=ON
export ENABLE_TEXT=ON
# OPENCV_DIRECTORY可选,不指定会自动下载FastDeploy提供的预编译OpenCV库
export OPENCV_DIRECTORY=/usr/lib/x86_64-linux-gnu/cmake/opencv4
python setup.py build
python setup.py bdist_wheel
pip3 install dist/fastdeploy_python-*-linux_x86_64.whl
pip3 install paddlepaddle
4.1.3.2. 例子与教程¶
FastDeploy/examples 下有丰富的例子,每一层的 README.md 中都有详细的使用教程。
4.2. 容器虚拟安卓¶
AIC (Android in Container) 是指在 Linux 系统中使用容器来运行安卓。RK3588 Linux 即可使用 docker 来运行安卓并支持多开。
集群服务器搭配 AIC 可以增加安卓的密度,在云手机、云游戏等场景有很大的帮助。
此处有固件可供测试:点击前往 提取码 1234
4.2.1. 使用方法¶
说明:
固件使用的宿主系统是 Ubuntu Minimal 版本,使用 debug 串口、ssh、adb shell 等方式进行交互,没有桌面显示。
安卓的交互是通过网络 adb 连接并配合 scrcpy 等投屏工具实现,不是接入鼠标键盘来操作。
操作 AIC 需要知道基础的 Linux 终端操作知识、docker 容器知识、adb 使用方法。
4.2.1.1. 创建容器¶
将下载到的 container 文件夹复制到宿主机(RK3588)的 /userdata/ 目录下,通过里面的 aic.sh 脚本进行操作。
请将设备联网,首次运行需要先初始化:
cd /userdata/container
./aic.sh -i
等待初始化完成后,将安卓镜像也复制到 /userdata/container/ (目前已经内置了一个安卓镜像)
部署容器,执行./aic.sh -r <安卓镜像.tgz> <容器数量>
./aic.sh -r rk3588_docker-android12-userdebug-super.img-20231128.1932.tgz 3
网络默认是采用端口映射方式。
<宿主ip>:1100 --> <容器0>:5555
<宿主ip>:1101 --> <容器1>:5555
......
更多内容请阅读 aic.sh 脚本
4.2.1.2. 连接容器¶
在局域网中使用任意电脑通过 adb 即可访问容器。
adb connect <host ip>:<port>
# 在上一步连接成功后
# 投屏显示
scrcpy -s <host ip>:<port>
adb 和 scrcpy 的安装方法请自行上网搜索。
4.2.1.3. 管理容器¶
使用 docker 命令管理容器即可。
# 查看所有容器
root@firefly:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cad5a331dea9 rk3588:firefly "/init androidboot.h…" 6 days ago Exited (137) 6 days ago android_1
37f60c3b6b80 rk3588:firefly "/init androidboot.h…" 6 days ago Up 13 seconds android_0
# 启动/停止容器
docker start/stop <NAMES>
# 连接到安卓终端(再次执行 exit 退出)
docker exec -it <NAMES> sh
# 删除容器
docker rm <NAMES>
4.2.2. 性能展示¶
以 root 身份执行以下命令开启性能模式可以获得更好的体验:
# 出现一个 Invalid argument 是正常的,不用管
root@firefly:~# echo performance | tee $(find /sys/devices -name *governor)
performance
tee: /sys/devices/system/cpu/cpuidle/current_governor: Invalid argument
进入安卓的终端或使用 adb shell 执行如下命令可以打印游戏渲染帧率:
# 注意,只有在游戏运行中,这个命令才会打印帧率
setprop debug.sf.fps 1;logcat -s SurfaceFlinger
单个 RK3588 使用 AIC 同时运行两个最高画质原神可达 35 帧以上:
#!INCLUDE “./rockit_avs.mdpp”