/ PYTORCH, JETSON, COMPUTERVISION

Jetson Xavier NX 的使用记录

一. 远程桌面

在windows10远程上操作jetson Xavier,远程的前提:jetson xavier和Windows的PC在同一个局域网内(我这里是直接在windows10上开启热点)。

  • 安装xrdp:sudo apt-get install xrdp vnc4server xbase-clients

1.1:桌面共享没反应

桌面共享其实就是一个vnc-server(因此没有必要再在linux上安装vnc-server了),如果要远程,必须要先开启共享,允许其他人控制自己电脑。

这里发现双击了桌面共享,没反应

解决方案

  • 安装dconf-editor:sudo apt-get install dconf-editor
  • 运行dconf-editor,更改系统配置,org ==> gnome ==> desktop ==> remote-access,关闭以下两个:promotion-enabledrequre-encryption
  • 开启桌面共享:/usr/lib/vino/vino-server

1.2 开启远程

  • 在Windows10上安装vnc-client,官网地址:https://www.realvnc.com/en/connect/download/viewer/windows/

  • 输入linux的ip后,直接连接即可。

1.3 建立双击可执行文件.desktop

由于每次我开启远程桌面的时候,都需要在命令行输入相关指令,很麻烦,就想说有没有可以直接在像windows一样快捷方式

  • 写一个shell脚本来开启桌面共享:vim ~/vnc-server.sh

    #!/bin/sh
    /usr/lib/vino/vino-server
    
  • 在桌面上新建一个.desktop文件:vim ~/Desktop/vnc-server.desktop

    [Desktop Entry]
    Encoding=UTF-8
    Type=Application
    Categories=true
    Version=1.0
    Name=vnc-server
    Exec=sh /home/yy/vnc-server.sh #注意这里是绝对路径
    Path=/home/yy
    Terminal=false # 是否保留终端
    StartupNotify=true # 开机自启动
    
  • 给.desktop文件加上可执行权限:sudo chmod +x ~/Desktop/vnc-server.desktop

1.4 开机自动开启

  • 创建开机自启动文件夹:mkdir ~/.config/autostart
  • 复制.desktop文件到该文件夹下:cp ~/Desktop/vnc-server.desktop ~/.config/autostart/
  • 给.desktop文件加上可执行权限:sudo chmod +x ~/.config/autostart/vnc-server.desktop

二. 配置cuda和cuDNN

  • 用JetPack刷机(本人选用的是Jetpack4.4.1),jetpack地址:https://developer.nvidia.com/embedded/jetpack-archive

  • 安装完成后,我们可以查看jetpack的版本:cat /etc/nv_tegra_release,同时已经给我们安装好了CUDA 10.2 、cudnn 8.0 、opencv、python3.6。

2.1 设置cuda环境变量

​ 查询cuda版本:nvcc -V基本就能看到cuda信息了,但是这里却报错没有nvcc指令。解决方案:将cuda添加到环境变量中

  • sudo vim /etc/profile ,这里说下其实在/usr/local下有2个cuda相关文件夹,分别是cudacuda-10.2,你会发现其实是一致的。

    export PATH=/usr/local/cuda-10.2/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64$LD_LIBRARY_PATH
    export CUDA_HOME=/usr/local/cuda-10.2
    
  • source /etc/profile,再去命令行输入nvcc -V就可以看到cuda10.2的信息了

2.2 设置cuDNN

安装好的cuDNN的头文件:/usr/include/cudnn.h 安装好的cuDNN的库文件:/usr/lib/aarch64-linux-gnu/libcudnn*

(1) 而这些头文件和库文件都不在cuda目录下,因此要复制到cuda目录下:

  • 复制头文件:sudo cp /usr/include/cudnn.h /usr/local/cuda/include
  • 复制库文件:sudo cp /usr/lib/aarch64-linux-gnu/libcudnn* /usr/local/cuda/lib64/

(2) 修改文件权限:sudo chmod 777 /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

(3) 重新软连接:

   cd /usr/local/cuda/lib64
   sudo ln -sf libcudnn.so.8.0.0 libcudnn.so.8
   sudo ln -sf libcudnn_ops_train.so.8.0.0 libcudnn_ops_train.so.8
   sudo ln -sf libcudnn_ops_infer.so.8.0.0 libcudnn_ops_infer.so.8
   sudo ln -sf libcudnn_adv_infer.so.8.0.0 libcudnn_adv_infer.so.8
   sudo ln -sf libcudnn_cnn_infer.so.8.0.0 libcudnn_cnn_infer.so.8
   sudo ln -sf libcudnn_cnn_train.so.8.0.0 libcudnn_cnn_train.so.8
   sudo ln -sf libcudnn_adv_train.so.8.0.0 libcudnn_adv_train.so.8

   sudo ln -sf libcudnn_ops_train.so.7.3.1 libcudnn_ops_train.so.7
   sudo ln -sf libcudnn_ops_infer.so.7.3.1libcudnn_ops_infer.so.7
   sudo ln -sf libcudnn_adv_infer.so.7.3.1 libcudnn_adv_infer.so.7
   sudo ln -sf libcudnn_cnn_infer.so.7.3.1 libcudnn_cnn_infer.so.7
   sudo ln -sf libcudnn_cnn_train.so.7.3.1 libcudnn_cnn_train.so.7
   sudo ln -sf libcudnn_adv_train.so.7.3.1 libcudnn_adv_train.so.7

(4) 编译与验证:

sudo ldconfig
sudo cp -r /usr/src/cudnn_samples_v8/ ~/
cd ~/cudnn_samples_v8/mnistCUDNN
sudo chmod 777 ~/cudnn_samples_v8
sudo make clean
sudo make
./mnistCUDNN # 验证cuDNN

(5) 查询cuDNN版本:cat /usr/include/cudnn.h | grep CUDNN_MAJOR -A 2

三. 配置torch和torchvision

3.1 配置torch

这里安装torch的方式和普通的windows和linux下安装不一样,pytorch有专门的jetson版本

Pytorch的jetson版本下载地址:https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-9-0-now-available/72048

  • 下载完成后直接使用pip进行安装:sudo pip3 install numpy torch-1.9.0-cp36-cp36m-linux_aarch64.whl

  • 安装必须的依赖:sudo apt-get install libopenblas-base libopenmpi-dev

3.2 配置torchvision

由于安装的是1.9.0版本的pytorch,直接安装于其对应的torchvision(0.10.0):sudo pip3 install torchvision==0.10.0

3.3 验证GPU可用

  • 命令行打开python,导入torch包:import torch

  • 查看pytorch可调用的cuda版本:torch.version.cuda
  • 查看cuda是否可用:torch.cuda.is_available()

3.4 使用yolo遇到的问题

问题:RuntimeError: No such operator torchvision::nms

实验过程:在网上搜到的都是torch和torchvision的版本不对,要升级torchvision之类的,实验将torchvision升级到0.10.0,依旧不行。

解决方案:其实在使用yolo时的非极大值抑制的时候,可以将utils.general.py中nms相关代码替换

  • 原始代码:i = torch.ops.torchvision.nms(boxes, scores, iou_thres)

  • 替换代码:

    import torchvision
    i = torchvision.ops.nms(boxes, scores, iou_thres)