当前位置:网站首页>NVIDIA Jetson测试安装yolox过程记录
NVIDIA Jetson测试安装yolox过程记录
2022-07-07 22:41:00 【submarineas】
引言
此篇想总结一下关于nvidia jetson边缘盒子的一些使用过程,主要想就从连上盒子ssh环境到跑通yolox的过程进行一个记录,如果之后还有相关业务的话可以参考。
jetson内容介绍
本篇主要测试环境并不是在宿主机上,而是会选择nvidia针对jetson出的镜像,原因有很多,第一是环境隔离,宿主机因为并不是我一个人用,第二个是宿主机上遇到很多的bug,针对我想用的包,有太多环境需要修改,而宿主机预安装好的基于arm架构的python3里面有太多环境没有,并且大多都是依赖,比如shapely的关于地理的libgeos_c.so动态库都基本缺失,所以我还是选择了官方的docker镜像。至于宿主机上,我刚开始装arm的conda遇到坑后就转了docker,所以踩坑不多。
预安装环境
这里预安装的环境一般边缘盒子到手后基本就有了,就我目前拿到的两台jetson xavier nx是这样的,即有jtop以及相应的一些基础依赖,vim还需要自己安装,其它的大致上也没了,主要是jtop这个性能监测工具需要装上,就像主机服务器上的rtx显卡监测工具nvtop,这两个是非常优秀的插件。
如果在没有的情况下,我也根据网上一些资料,从python3服务到jtop安装笔记,最快的安装方式如下:
"""1. 基础依赖"""
sudo apt-get install git cmake
sudo apt-get install python3-dev
sudo apt-get install libhdf5-serial-dev hdf5-tools
sudo apt-get install libatlas-base-dev gfortran
"""2. pip3安装"""
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python3-pip
"""3. pip安装"""
pip3 install jetson-stats
"""4. 源码编译jtop(如果3失败)"""
git clone https://github.com/rbonghi/jetson_stats.git
cd jetson_stats/
sudo python3 ./setup.py install
上述过程是安装插件全过程,当然如果全部都能用apt或者pip走通那当然好,不过有些人喜欢源码编译安装,那么从python开始到jetson,也可以全部走源码编译,过程就看apt的速度和编译速度哪个快了。安装好后,在终端输入jtop即可进入页面:
刚进去的页面为数字键1显示的all页面,相应的还有数字键2 GPU可视化页面,数字键3 CPU可视化页面,数字键4 内存管理页面,数字键5 控制风扇以及功率转速等设置页面,最后的6是显示边缘盒子信息的页面:
jetson环境安装
这里将分为三个部分,第一个是从宿主机进入docker镜像过程,第二个是容器里pytorch和torchvision这两个环境的更新,因为容器内部基本没有和当前代码匹配的版本,最后一个就是直接跑起来yolox。
docker镜像
一般边缘盒子也是会预安装docker的,但可能是19.03以下的版本,如果在使用过程中遇到库函数问题,也是可以重装的,因为在docker官网下,arm架构和x86的安装方式基本一致,即根据官网的命令是可以根据当前ubuntu系统选择合适的架构进行安装。
目前我就在deepin系统上装docker出现过识别不出服务器架构,需要自己手动,nvidia jetson在我更新过后基本没什么问题了。安装过程可以看我之前的docker使用笔记(1):docker介绍与安装 安装成功后,可以查看版本信息与info,如果docker --version没有问题,正确显示版本,那么久可以去nvidia官网选择镜像了:
在官网下进入nvidia的container目录,搜索jetson,会出现很多基于L4T的镜像,这些就是能直接使用于jetson的,网页链接为:
https://catalog.ngc.nvidia.com/containers?filters=&orderBy=dateModifiedDESC&query=jetson%20
我这里选择的NVIDIA L4T ML,因为在装完docker后,我更新了一下docker的保存路径,nvidia jetson盒子的磁盘比较小,加了一块机械盘,然后把存储路径都丢过去了,所以L4T ML这个镜像我记得好像是有接近10个G,但越大说明环境越完整,越不容易出bug,这个就仁者见仁智者见智了,pull tag命令为:
docker pull nvcr.io/nvidia/l4t-ml:r34.1.1-py3
拉下来后,跟x86架构的启动命令一样,只需要加上-e参数将gpu加入就行了,具体详细的可以看我之前写得docker学习笔记(9):nvidia-docker安装、部署与使用:
我的命令为:
docker run -it --net=host --name jetson --runtime nvidia --restart always --privileged=true -e LD_LIBRARY_PATH=/usr/local/ffmpeg/lib/ --entrypoint="./home//program/xxx/start.sh" submarineas/nvidia:v5.0 /bin/bash
这里可能还存在一个cuda版本问题,不过jetson默认宿主机与镜像都是基于cuda 10.2的,我装完后才想到,结果发现完全一致,可以在装完后检查一下镜像和宿主机驱动环境问题:
nvcc -V
cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
pytorch以及torchvision安装
进入docker,因为我上面容器选择的是基本包含所有依赖与ml有关的pip包,这里我进去看到的torch版本为0.6.0,而torchvision比它高0.1,这是适配上的,但是yolox需要的torch版本必须要0.9.0来着,我记得,那么就需要卸载重装,这里的顺序为先装pytorch,再装torchvision,因为如果换一个顺序,torchvision装的还是基于CPU的版本,pip默认走的pypi,我就犯了一个错误。 因为pypi网页上是有编译好的arm架构的pytorch安装包,我当时没看拉下来直接装了:
正确方法还是在nvidia官网,它提供了所有pytorch版本,链接为:
https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-11-now-available/72048
拉下pytorch的whl离线版本进行安装,然后进一步再安装torchvision,这里的步骤来源于torchvision的GitHub,源码编译安装,不然会跟我上面一样,直接pip install可以装上,但torch.cuda.is_available()为false。
$ sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev
$ git clone --branch <version> https://github.com/pytorch/vision torchvision # see below for version of torchvision to download
$ cd torchvision
$ export BUILD_VERSION=0.x.0 # where 0.x.0 is the torchvision version
$ python3 setup.py install --user
$ cd ../ # attempting to load torchvision from build dir will result in import error
$ pip install 'pillow<7' # always needed for Python 2.7, not needed torchvision v0.5.0+ with Python 3.6
yolox环境安装
安装完了torch与torchvision后,剩下的包基本不会再有问题。同样与GitHub中:
git clone [email protected].com:Megvii-BaseDetection/YOLOX.git
cd YOLOX
pip3 install -v -e . # or python3 setup.py develop
至此,镜像环境就安装完成。
边栏推荐
- 服务器防御DDOS的方法,杭州高防IP段103.219.39.x
- Coindesk comments on the decentralization process of the wave field: let people see the future of the Internet
- paddle一个由三个卷积层组成的网络完成cifar10数据集的图像分类任务
- 如果在构造函数中抛出异常,最好的做法是防止内存泄漏?
- Visual Studio Deployment Project - Create shortcut to deployed executable
- Introduction to paddle - using lenet to realize image classification method I in MNIST
- Experience of autumn recruitment in 22 years
- How can CSDN indent the first line of a paragraph by 2 characters?
- Reading notes 004: Wang Yangming's quotations
- Relevant methods of sorting arrays in JS (if you want to understand arrays, it's enough to read this article)
猜你喜欢
Deep dive kotlin synergy (XXII): flow treatment
ReentrantLock 公平锁源码 第0篇
他们齐聚 2022 ECUG Con,只为「中国技术力量」
取消select的默认样式的向下箭头和设置select默认字样
new和delete的底层原理以及模板
深潜Kotlin协程(二十二):Flow的处理
爬虫实战(八):爬表情包
STM32F1与STM32CubeIDE编程实例-旋转编码器驱动
51 communicates with the Bluetooth module, and 51 drives the Bluetooth app to light up
赞!idea 如何单窗口打开多个项目?
随机推荐
C language 005: common examples
韦东山第二期课程内容概要
Visual Studio Deployment Project - Create shortcut to deployed executable
Summary of weidongshan phase II course content
22年秋招心得
浪潮云溪分布式数据库 Tracing(二)—— 源码解析
手写一个模拟的ReentrantLock
[programming problem] [scratch Level 2] 2019.09 make bat Challenge Game
测试流程不完善,又遇到不积极的开发怎么办?
Single machine high concurrency model design
Daily question brushing record (16)
服务器防御DDOS的方法,杭州高防IP段103.219.39.x
Development of a horse tourism website (realization of login, registration and exit function)
C language 001: download, install, create the first C project and execute the first C language program of CodeBlocks
Emotional post station 010: things that contemporary college students should understand
Development of a horse tourism website (optimization of servlet)
如果在构造函数中抛出异常,最好的做法是防止内存泄漏?
If an exception is thrown in the constructor, the best way is to prevent memory leakage?
爬虫实战(八):爬表情包
他们齐聚 2022 ECUG Con,只为「中国技术力量」