Jetson Orin 源码安装部署Paddle
部署环境
系统架构: Arm
CUDA: 11.4
cmake: 3.18.0
python:3.8
注意环境中的版本问题,之前装onnxruntime的时候cmake被升级到了3.31.0,但是编译Paddle时会报错,因此特意降级回了官方推荐的3.18.0
具体环境版本参考官方依赖表
源码下载
Paddle官方提供预编译版本的推理库,可自行查找有没有适合自己系统环境的版本。不同的Paddle版本对应的预编译库也不一样。
这里我们选择源码编译安装。经过测试,在Paddle2.3、2.6、3.0中选择了 2.3 版本,因为2.6和3.0依赖的python路径需要非常的全,尝试使用了virtualenvwrapper也不行。
下载程序源码
git clone https://github.com/PaddlePaddle/Paddle.git
cd Paddle
git checkout release/2.3
编译安装
这一步非常重要,官方文档中并没有说明ARM架构需要配置和关掉哪些选项,如果你遇到了大量莫名其妙的报错,那么大概率是cmake时的配置问题
mkdir build_cuda && cd build_cuda
cmake .. -DPY_VERSION=3.8 -DWITH_TESTING=ON -DCMAKE_BUILD_TYPE=Release -DON_INFER=ON -DWITH_PYTHON=ON -DWITH_XBYAK=OFF -DWITH_CONTRIB=OFF -DWITH_MKL=OFF -DWITH_MKLDNN=OFF -DWITH_GPU=ON -DWITH_ARM=ON -DWITH_NV_JETSON=ON -DWITH_NCCL=OFF -DCUDA_ARCH_NAME=All -DWITH_TENSORRT=ON -DTENSORRT_ROOT=/usr -DCMAKE_CXX_FLAGS='-Wno-error -w' ..
具体每个参数的含义可参考下面的错误举例
cmake成功之后开始编译,8个核时间大概一下午
make -j8
编译飞桨过程中可能会打开很多文件,如果编译过程中显示 “Too many open files” 错误时,请使用指令 ulimit -n 102400 来增大当前进程允许打开的文件数
ulimit -n 102400
编译成功后可在 dist 目录找到生成的 .whl 包
pip3 install python/dist/[wheel 包名字]
编译 C++推理库,很快
make inference_lib_dist -j4
编译成功后,所有产出均位于 build 目录下的 paddle_inference_install_dir 目录内。
更新下安装2.6版本的cmake指令
记得要先将jetson中已安装的TensorRT的头文件及lib拷贝并放在 -DTENSORRT_ROOT 路径的include/lib下。
cmake .. -DPY_VERSION=3.8 -DWITH_TESTING=OFF -DCMAKE_BUILD_TYPE=Release -DON_INFER=ON -DWITH_PYTHON=ON -DWITH_XBYAK=OFF -DWITH_CONTRIB=OFF -DWITH_MKL=OFF -DWITH_MKLDNN=OFF -DWITH_GPU=ON -DWITH_NV_JETSON=ON -DWITH_NCCL=OFF -DCUDA_ARCH_NAME=Auto -DWITH_TENSORRT=ON -DTENSORRT_ROOT=/mnt/cf/LiDAR/tensorRT -DCMAKE_CXX_FLAGS='-Wno-error -w' -DCMAKE_CXX_FLAGS="-Wno-error=class-memaccess" ..
错误举例
c++: error: unrecognized command line option ‘-m64’
:
现象:第三方库的flag.make里都带有 CXX_FLAGS = -Wno-error=deprecated-declarations -Wno-deprecated-declarations -std=c++14 -m64 -fopenmp -O3 -DNDEBUG
原因:cmake时没有启用 -DWITH_ARM=ON/Paddle/paddle/phi/backends/dynload/nvjpeg.h:14:10: fatal error: nvjpeg.h: No such file or directory
: cmake时没有启用 -DWITH_NV_JETSION=ON/usr/bin/ld: cannot find -liomp5
: cmake时没有关闭MKL,设置-DWITH_MKL=OFF -DWITH_MKLDNN=OFF/Paddle/paddle/phi/api/lib/api_gen_utils.cc:44:19: note: remove ‘std::move’ call
: cmake时没有启用-DCMAKE_CXX_FLAGS=‘-Wno-error -w’ 导致警告升级为错误
Jetson orin 安装Paddle3D 使用centerpoint
github上来看paddle3d的centerpoint已经年久失修,最后一次更新已经是三年前,因此对paddle自己新版本的适应性也很差,我分别安装过paddle2.3和2.6,都有问题,按照官方文档尝试了最低适配的版本2.4才发现可以。(后来论坛上翻出来2.5也可以)
具体的安装倒是很简单,直接参考官方安装文档,然后参照centerpoint的自定义算子库编译文档即可安装成功。
这里需要注意,编译出来的动态库libpd_infer_custom_op.so
由于未知原因在编译程序时链接不上,需要在c++部署程序中使用dlopen手动加载,否则运行时会报错NotFoundError: Operator (hard_voxelize) is not registered.
举例使用:
void *handle = dlopen("/mnt/cf/lib/libpd_infer_custom_op.so", RTLD_NOW);
if (!handle) {
fprintf(stderr, "%s\n", dlerror());
exit(EXIT_FAILURE);
}
下面举例其他paddle版本的问题避坑。
- 版本2.3的问题是 能成功的编译自定义算子库,但是程序运行时会报错
ExternalError: after determining tmp storage requirements for exclusive_scan: cudaErrorInvalidDeviceFunction: invalid device function (at /mnt/cf/LiDAR/Paddle/paddle/fluid/framework/custom_operator.cc:289) [operator < hard_voxelize > error]
- 版本2.6的问题是 无法成功生成自定义算子库,编译成功后在生成算子库的过程中会报错
fatal error: paddle/include/experimental/ext_all.h: No such file or directory
因为2.6之后跟2.3有很大的版本变化,很多接口不一样了
安装Paddle3D诸多自定义算子
在paddle3d/ops/
目录下执行 python setup.py install
可以编译paddle3d的所有自定义算子。
注意这里可能会提示些操作权限类的问题 ,拿到路径相应的权限即可。
如果安装一次不成功,需要第二次执行时,需要手动删除部分文件,不然会报错
出现这个报错首先把build文件删除 rm -rf /mnt/cf/LiDAR/paddle3.0/Paddle3D/paddle3d/ops/build/
然后去usr/local/lib/python3.8/site-packages/
路径下,把新生成的几个egg等文件删除掉重新安装就可以了
使用Paddle3D导出centerpoint模型时报错
官方文档只是提到了使用 export.py 导出静态图模型文件的指令,但是实际操作时出现了报错/paddle3d/ops/centerpoint_postprocess/postprocess.cul(147): error: too few arguments in function call
这里可能是官方源码的问题,搜索这个函数时发现有两个地方用了,因此把postprocess.cu
的第147行函数添加参数(3)
再编译发现导出时就不会报错了
参考
fatal error: nvjpeg.h: No such file or directory
nvjpeg.h: No such file or directory
Paddle官方安装文档
Jetson Jetpack6.2中编译安装基于Python API的 Paddle Inference GPU 3.0
Operator (hard_voxelize) is not registered
[安装paddle3d自定义算子库](https://github.com/PaddlePaddle/Paddle3D/issues/413)