JetsonOrin源码安装部署PaddlePaddle

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值