配置NVIDIA Jetson AGX Xavier

     首先查看CPU的每个核是否在工作,如果其中没有工作的,修改对应的online文件,例如CPU0,修改/sys/devices/system/cpu/cpu0/online,把里面的0改成1,以此类推,然后重启,即可把没启用的CPU核用起来。

     其次,调整一个Xavier的运行模式和风扇速度,Xavier加电时默认没有启动风扇,运行一段时间后会非常烫,长期这样可能容易坏,所以至少需要把风扇启动起来。Xavier的Ubuntu18.04桌面的右上方有菜单可以选择设置运行的功耗模式:

也可以使用下面的nvpmodel命令来设置:

     sudo nvpmodel --query  #查看当前的模式,默认为2, 功耗15W
     sudo nvpmodel -m 0    #设置满功率运行,MAX

如果你没有使用JetPack SDK Manager重装Ubuntu18.04,默认的/home/nvidia/下面莺歌有个jetson_clocks.sh文件,可以执行西面的命令来启动风扇,不管你设置的什么风扇速度值(0-255),Xavier加电时并没有去读取它,而是需要设置(可以手工执行命令或者在~/.bashrc里增加设置命令):

     sudo  ~/jetson_clocks.sh  #强制风扇启动

 我重装了Xavier的Ubuntu18.04,创建了自己的用户robot,所以/hom/robot/下并没有jetson_clocks.json这个文件了(我查了一下原因,应该是NVIDIA的疏忽,通过JetPack SDK Manager下载的安装包中,linux的文件系统模板里没有提供这个文件,当然在重装后就没有这个文件了),但是/usr/bin/jetson_clocks这个二进制可执行文件是存在的,于是可使用它来设置风扇速度:

       sudo jetson_clocks --show    #查看设置
       sudo jetson_clocks --store    #把设置值保存到 /home/robot/l4t_dfs.conf
手工修改 /home/robot/l4t_dfs.conf这个文件里的风扇值(0-255,  0  停止,255 最大速度),例如:
             /sys/devices/pwm-fan/target_pwm:200

然后执行
        sudo jetson_clocks --restore

即可听到风扇呼呼地响起来了,风扇起来一会儿,Xavier的外壳就不发烫变冷了。

然后把上面这句加入到~/.bashrc里,以让Xavier每次加电启动时自动启动风扇散热。

 

         因为Xavier内置的32G eMMC存储在安装Ubuntu18.04等软件后所剩空间不是很多,对于需要做实验安装很多软件部署很多模型来说,空间是不够的,现在高速SD卡很便宜了,所以可以买张64G或128G的高速SD卡 (例如某品牌的128GB TF(MicroSD)存储卡U3 C10 4K EVO升级版 传输速度100MB/s ,网上现在卖129元)作为数据盘,

插到背后的SD卡插槽里:

重启动系统,查看新加的卡的设备路径:

上面的/dev/mmcblk0p1是Xavier内置的eMMC存储,/dev/mmcblk1p1则是新加的SD卡。格式化成ext4文件系统,然后新创建/data目录,修改Linux配置文件/etc/fstab把这卡在Linux启动时挂载到/data路径下,然后重启Ubuntu即可以看到SD卡自动挂载到/data下:

     mkdir /data

     mkfs.ext4  /dev/mmcblk1p1
     sudo vi /etc/fstab

     #增加下面这行
     /dev/mmcblk1p1 /data  default 0 0
     reboot

后面把新加的SD卡作为数据盘使用,所有的数据集和模型等大文件全部存/data下,第一步就是要把docker的数据存储路径从/var/lib/docker移到/data下去,不然,docker数据存储在eMMC上,docker镜像一般都很大,创建几个image就会把eMMC空间会爆掉。改变docker的数据存储位置有多种办法,例如修改/etc/docker/daemon.json文件增加路径设置,不过考虑到daemon.json可能被多次修改而误覆盖,我觉得采用下面的软连接方式虽然最粗暴但最快捷最可靠:

     sudo mv /var/lib/docker /data/
     cd /var/lib 
     sudo ln -s /data/docker docker

然后顺便在/etc/docker/daemon.json内增加国内的docker镜像源,以在pull某个镜像时能获得高速下载的效果,默认的国外的hub.docker.com有时下载太慢了:

  sudo vi /etc/docker/daemon.json

  {
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    },
    "bip":"172.17.0.1/16",
    "registry-mirrors": [
                               "https://docker.mirrors.ustc.edu.cn",
                               "https://registry.docker-cn.com",
                               "https://dockerhub.azk8s.cn",

                               "https://hub.docker.com"
                        ]

   }

然后重启docker service以将上面的改动生效:

      sudo systemctl restart docker

用hello-world镜像测试docker service是否正常:

      sudo docker run hello-world

要测试容器内是否可以正常使用GPU,使用NVIDIA的nvidia:l4t-base镜像,按照以下步骤进行测试:

首先创建nvcr.io/nvidia/l4t-base:r32.3.1镜像的容器

      xhost +       #如何xhost +报错"access control disabled, clients can connect from any host",则执行xhost + <ip> ,ip是本机地址,下面的--network host保证了容器内和主机使用同一地址。
      sudo docker run --runtime nvidia --network host -it -e DISPLAY=$DISPLAY -v /data/workspace:/home -v /tmp/.X11-unix/:/tmp/.X11-unix nvcr.io/nvidia/l4t-base:r32.3.1

然后在容器内安装g++(这个我觉得不可理解,NVIDIA为什么不在做镜像时提前安装好呢,安装g++挺耗时的,尤其网络不好时):

      apt-get update && apt-get install -y --no-install-recommends make g++

然后依次执行下面的步骤把CUDA里的samples里一个叫nbody的程序编译后跑起来,可以看到炫酷的动画效果:

      cp -r /usr/local/cuda/samples /tmp
      cd /tmp/samples/5_Simulations/nbody
      make
     ./nbody

 贴两张图展示一下:

 出现这个不断变化的星系一样的动画就表明容器内可正常使用GPU。此外,还可以编译和执行samples/1_Utilities/deviceQuery/下的deviceQuery,可以输出一些device参数,如果GPU不能使用会提示找不到GPU设备。这个测试可选。

一般PC或服务器上测试容器内是否可以正常使用GPU,使用这个命令pull nvidia/cuda这个镜像并在里面执行nvidia-smi命令:

      sudo docker run --gpus all --rm nvidia/cuda nvidia-smi

但是Xavier这样的板子上是没有nvidia-smi的,可以改成使用/usr/bin/tegrastats,将容器外物理机上的/usr/bin/tegrastats拷贝到/data/workspace/下(因为上面启动容器时是把物理机的路径/data/workspace/映射到容器内/home),然后在容器内将/home/tegrastats拷贝到/usr/bin/下,然后执行 tegrastats|grep GR3D,可以看到不算输出一些信息。这个步骤不是必须的。

     但是tegrastats输出的信息是不直观很难看的,也没有对系统全局的监控效果,我们可以使用Jetson序列板卡上的jtop这个神器,需要在Xavier的Ubuntu上直接安装jtop,在容器里安装jtop可以安装成功但是跑不起来报错,首先是容器内/usr/bin/下没有jetson_clocks,但是即使把jetson_clocks从容器外物理机上拷贝进来放到/usr/bin/下,也会报新的错误,看错误感觉应该是跟CUDA的只读挂载方式引起的,没时间细究是否可以解决这个问题,反正在容器外看监控也是一样的,CPU、RAM、GPU以及存储等设备的使用情况和CUDA、cuDNN版本等信息一目了然。

      首先,确保Xavier上的Ubuntu里pip/pip3安装了(根据需要安装对应的版本):

         sudo apt-get install python-pip
         sudo apt-get install python3-pip

      然后执行 sudo -H pip install jetson-stats  或sudo -H pip3 install jetson-stats安装jtop,但是pip直接安装包的方式经常连不上,所以可以使用源码方式安装,这样很快:

      git clone https://github.com/rbonghi/jetson_stats.git
      sudo python setup.py build     #或 sudo python3 setup.py build
      sudo python setup.py install   #或 sudo python3 setup.py install

然后执行 sudo jtop,即可以看到弹出窗口,有5个页面,分别显示不同信息:

 再参考我前面写的这篇文章配置Ubuntu18.04的远程桌面,就可以不用连接显示器和键盘鼠标,远程登录使用了。

 

      

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页