首先查看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 +
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的远程桌面,就可以不用连接显示器和键盘鼠标,远程登录使用了。