Jetson专用SDK文档教程
包拉拉啦啦啦 发布于2020-07-27 浏览:2415 回复:6
0
收藏
最后编辑于2020-11-02

本文档介绍EasyEdge/EasyDL的Jetson SDK的使用方法。Jetson SDK支持的硬件包括Jetson nano,Jetson TX2,和Jetson AGX Xavier。在EasyDL平台模型训练时,选择“专项硬件适配SDK-Jetson(Nano/TX2/Xavier)“部署方式,待训练完成后,可按照下述操作教程完成集成。

第一阶段 环境依赖安装
1.请先参考介绍文档,了解产品构造和开机流程。

【Jetson SDK介绍文档链接】:https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit  

2.以Windows系统为例,在上述链接的第三目录“Write Image to the microSD Card”中

下载【SD Memory Card Formatter for Windows】以及【Etcher】

 

3.下载对应镜像系统JetPack。【下载链接】:https://developer.nvidia.com/embedded/downloads
注意:安装JetPack版本必须是平台文档中SDK所要求的版本,并且是支持多个版本的,选择其中一个JetPack版本进行刷机。【平台文档链接地址】:https://ai.baidu.com/ai-doc/EASYDL/Dka3ky0an

4.准备就绪后,用下载好的软件SD Card Formatter,格式化SD卡两遍,再用Etcher把刚下载好的对应版本系统烧录到sd卡内。
注意若使用SDK Manager安装方法,在刷机的时候务必把CUDA、cuDNN、TensorRT、OpenCV这些系统组件也安装上去,因为这些组件是EasyDL的SDK运行所必须依赖的。Nano或Xavier NX使用SD Card Image安装的不用担心,这些系统组件会自动安装上去。

5.注意连接电源的方式有两种:使用microusb或直流电源口供电,使用直流电源口的时候需要把J48引脚用跳线帽短接。

6.安装cmake,可以通过apt-get安装。注意,如果提示无法定位软件包之类的问题,记得先执行update这条命令。
$ sudo apt-get update
$ sudo apt-get install cmake g++

第二阶段 编译并运行SDK提供的demo
SDK内目前已经提供了三个demo文件和CMakeLists.txt,可以直接编译运行。

demo文件介绍:

  • demo_batch_inference.cpp:提供了一个对批量图片预测的能力,这个cpp文件是最常用的,也是推理速度最快的,注意编译产出的对应可执行文件命名为easyedge_batch_inference,这个在CMakeLists.txt里可以看到,也可以对其进行修改。
  • demo_multi_thread.cpp:这个demo文件功能多一些,可以支持单机多线程,对应demo中的run_multi_infer函数,通常不建议使用,因为资源抢占会导致推理时间不稳定,而且基本上可以断定不如上面demo_batch_inference的推理效率高。但如果把max_concurrency设置为1,其实就变成和demo_batch_inference一样效果了。
  • demo_serving.cpp:这个demo文件提供了一个起http服务的功能,服务起来之后就可以使用其他语言或在其他项目中直接调用http api直接对图片做推理,api会返回预测时间和预测结果。

1.序列号
注意编译之前一定要把序列号正确填写到cpp文件里,否则无法通过鉴权,也就无法执行推理。

2.编译流程如下:
# 1. 首先进入demo目录
$ cd /home/work/easydl/sdk/demo
# 2. 创建build文件夹并进入
$ mkdir build && cd build
# 3. 执行编译
$ cmake ..
$ make -j3
# 4. 执行安装,把lib文件安装到系统路径,需要sudo权限
# 也可以选择不执行安装,把lib路径加为环境变量即可
$ sudo make install
# 5. 这时候应该会产出demo编译的可执行文件,直接执行可以查看需要的参数
$ ./easyedge_batch_inference {res_dir} {image/image_dir}
# 或
$ ./easyedge_multi_thread {res_dir} {image/image_dir}
# 或
$ ./easyedge_serving {res_dir} {serial_key} {host, default 0.0.0.0} {port, default 24401}


demo运行效果:


SDK运行参数配置
SDK的一些运行选项可以通过config来配置。config的定义可以在SDK里的include/easyedge/easyedge.h里找到,是一个名为TensorRTConfig的结构体。
具体使用方式可以参考三个demo的实现。这里仅列举几个比较重要且常用的选项:

  • max_batch_size:通过修改config里面的max_batch_size,可以设置支持的最大batch size,不过这个值最好设置为实际需要传入图片的个数,因为这个值越大占用的资源越多,相应的预测速度也会有所下降,虽然不明显。如果不需要同时预测多张图片或不使用batch,建议max_batch_size设置为1。
  •  max_concurrency:这个选项可以支持多个线程并发,但是并发会相互竞争计算资源,所以如果使用batch能满足需求,尽量不要设置这个选项,值保持为1就好。若模型比较大,比如使用yolov3这种网络,在Nano上一定不要开通这个选项。
  • compile_level:模型第一次加载会比较慢,加载完之后会有缓存保存,下一次运行速度就会提升,这种策略是通过compile_level来控制的,你可以控制是否使用缓存,并且也可以通过设置cache_name来控制缓存的命名。

 

查询板子信息
1. 有时候我们可能不记得自己的板子刷的是哪个JetPack版本了,则可以通过下面这条命令查询L4T的版本。
# 在终端输入如下命令并回车
$ head -n 1 /etc/nv_tegra_release
# 就会输出类似如下结果
$ # R32 (release), REVISION: 2.0, GCID: 15966166, BOARD: t186ref, EABI: aarch64, DATE: Wed Jul 17 00:26:04 UTC 2019
从输出的结果来看,板子当前的L4T版本为R32.2.0,对应JetPack4.2.1

注意:L4T的版本不是JetPack的版本,但是一般可以从L4T的版本唯一对应到JetPack的版本,下面列出了最近几个版本的对应关系:
L4T R32.4.3  -->  JetPack4.4
L4T R32.4.2  -->  JetPack4.4DP
L4T R32.2.1  -->  JetPack4.2.2
L4T R32.2.0  -->  JetPack4.2.1


2. 功率模式设置与查询
不同功率模式下,执行AI推理的速度是不一样的,如果对速度需求很高,可以把功率开到最大,但记得加上小风扇散热~
# 1. 运行下面这条命令可以查询开发板当前的运行功率模式
$ sudo nvpmodel -q verbose
# $ NV Power Mode: MAXN
# $ 0
# 如果输出为MAXN代表是最大功率模式

# 2. 若需要把功率调到最大,运行下面这条命令
$ sudo nvpmodel -m 0

# 如果进入了桌面系统,也可以在桌面右上角有个按钮可以切换模式

# 3. 查询资源利用率
$ sudo tegrastats

完成上述步骤后,回到EasyDL平台根据模型的版本,找到相应【Jetson专用SDK集成文档】可进行后续测试:https://ai.baidu.com/ai-doc/EASYDL/Dka3ky0an

 

 

 

 

 

 

收藏
点赞
0
个赞
共6条回复 最后由百南晋回复于2020-11-02
#7百南晋回复于2020-11-02

什么时候可以直接python调用

0
#6里啦啦啦射手回复于2020-10-27

在jetson XAVIER NX板上运行demo,速度出奇的慢,45秒左右,请问一下demo里的参数怎样配置可以更快,到毫秒级别

0
#5188******76回复于2020-08-28

cmake的时候报错,怎么解决哇!

0
#4lujays回复于2020-07-31
#2 森木42588回复
我遇到这个问题,请各位大神帮忙,谢谢。 Scanning dependencies of target easyedge_serving [ 16%] Building CXX object CMakeFiles/easyedge_serving.dir/demo_serving.cpp.o [ 33%] Linking CXX executable easyedge_serving /usr/bin/ld: warning: libopencv_imgcodecs.so.4.1, needed by /dbdata/easyedge-jetson/cpp/jetpack4.4/demo/../lib/libeasyedge.so, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: libopencv_imgproc.so.4.1, needed by /dbdata/easyedge-jetson/cpp/jetpack4.4/demo/../lib/libeasyedge.so, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: libopencv_core.so.4.1, needed by /dbdata/easyedge-jetson/cpp/jetpack4.4/demo/../lib/libeasyedge.so, not found (try using -rpath or -rpath-link) [ 33%] Built target easyedge_serving
展开

是不是没有装OpenCV?

0
#3森木42588回复于2020-07-31

执行 ./easyedge_multi_thread 产生如下结果:

root@samuel-desktop:/home/easyedge-jetson/cpp/jetpack4.4/demo/build# ./easyedge_multi_thread
./easyedge_multi_thread: error while loading shared libraries: libeasyedge_extension.so.0.5.4: cannot open shared object file: No such file or directory

 

0
#2森木42588回复于2020-07-28

我遇到这个问题,请各位大神帮忙,谢谢。

Scanning dependencies of target easyedge_serving
[ 16%] Building CXX object CMakeFiles/easyedge_serving.dir/demo_serving.cpp.o
[ 33%] Linking CXX executable easyedge_serving
/usr/bin/ld: warning: libopencv_imgcodecs.so.4.1, needed by /dbdata/easyedge-jetson/cpp/jetpack4.4/demo/../lib/libeasyedge.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libopencv_imgproc.so.4.1, needed by /dbdata/easyedge-jetson/cpp/jetpack4.4/demo/../lib/libeasyedge.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libopencv_core.so.4.1, needed by /dbdata/easyedge-jetson/cpp/jetpack4.4/demo/../lib/libeasyedge.so, not found (try using -rpath or -rpath-link)
[ 33%] Built target easyedge_serving

0
TOP
切换版块