jetson nano 爬坑

         经过长达两周时间的不停踩坑、爬坑,今天总算在jetson nano上成功安装运行了TensorFlow-GPU和Keras,经过不断测试,目前框架未发现问题,过程充满艰辛和玄学。现在把我安装过程中的坑总结出来,特别是系统、软件、依赖包安装中碰到的坑,希望给有需要的同学一点帮助。鉴于上手教程网上比较多,因此建议想入坑jetson nano的同学先看看别的安装教程(https://blog.csdn.net/qianbin3200896/article/details/103760640

https://www.jianshu.com/p/a5f49b307dcf),碰到问题再翻翻本博客。

         关于硬件,黄教主官方卖的jetson nano虽然便宜,但是电源、电扇、必要的tf卡等等一概没有,所以建议有需要的同学直接去某宝或者某东买个套餐,不贵,一般1000出头就可以拿下。我的套餐包括如下配件:

         建议大家参考店家给的安装说明,很容易。这里给一张我的硬件安装图片,供参考,这部分工作没有太大坑,需要注意的就是前后安装顺序,确保在封盖之前内部走线合理。当然,还有电源,这里没有贴出来,jetson nano可以买电源,也可以用下面图中这种usb插头(必须是5V 2A电源)供电。

         我的没有网卡,因为家里网络一直是无线,后来调试安装很尴尬,只能一直在客厅的路由器旁边,因此,建议大家直接配无线网卡,省时省力。

         下面,我把碰到的各种坑都列一下:

(1)首先是TF卡烧录系统,去NVIDIA官网下载(https://developer.nvidia.com/embedded/downloads)jetson nano安装所需的镜像文件。这里我碰到了jetson nano安装的第一个大坑,就是镜像文件的cuda版本问题。在网上所有jetson nano的上手或者入门教程中,一般都会建议大家去官网直接下载最新的镜像文件,开始我也是这么做的,后来发现最新的镜像文件是JP4.4,提供的已经是cuda10.2,悲催的是,TensorFlow-gpu版本,没有一个能够支持这个cuda版本。

因此,如果镜像文件是这个版本,那后面无论如何,都会碰到一堆或明或暗的问题。解决方法很简单,下载JP4.3版本或者4.2版本。

         (2)系统烧录,强烈推荐两个软件,一个是镜像烧录软件Etcher,一个是SD格式化工具SD Card Formatter 5.0.1 Setup.exe,简直是神器。先用格式化工具把TF卡格式化,TF卡格式建议选择exFAT或NTFS。正常流程可以参考这个文档。

格式化之后,在用Etcher直接烧录,先选择镜像文件,下载的zip文件不需解压,可以直接导入,选择格式化之后的TF盘符,点击“Flash”,等待即可(usb 3.0的口大约需要10分钟,usb 2.0的口据说时间更长)。

         第二坑如下,如果在你自己TF卡烧录了一个错误的镜像,不得不重新烧录时候,可能会发现,在用SD格式化TF时,已经找不到盘符了。这里一个小技巧,可以先用Etcher试着烧录,你会发现,SD Card Formatter找不到的盘符,Etcher可以找到。同样步骤,一直到Flash,等待几秒,停止。然后再在SD Card Formatter中,就可以找到TF卡了。再走一遍格式化——烧录的程序,就OK了。

         (3)系统启动,将烧录好的TF卡,通过转接头插入jetson nano,接入电源,启动程序,设置用户名密码时间等等,见到下面的画面就OK了。到这一步,硬件的设置基本结束,下面是系统和软件的安装配置。

         (4)修改环境变量。这一步是为了把cuda路径设置好,很多教程都有,这里不多介绍,总的来说,就是

命令行执行:

sudo gedit ~./bashrc

最后添加:

export PATH=/usr/local/cuda-10.0/bin:$PATH

export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-10.0

再执行:

source ~./bashrc

nvcc –V

就可以看到CUDA版本了,如果是10.0,就可以继续。

(5)系统更新的坑。系统的更新一定要完全、彻底,不然后面会有各种意想不到的错误。这里强烈推荐采用系统自带的更新源。因为Jetson Nano采用的是aarch64架构的Ubuntu 18.04.2 LTS系统,与AMD架构的Ubuntu系统不同,因此很多教程中建议使用的国内源方法有不少坑,我曾经尝试了包括中科大、清华、阿里云、华中科技等几个源,都不是很完美。因此,这里首先建议大家用自带的源地址,如果实在接受不了漫长的更新过程,那我建议大家这么做:

         A、采用国内中科大镜像先更新一遍,在路径/etc/apt/下有source.list文件,将其备份

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

         sudo vi /etc/apt/sources.list

将如下中科大的镜像源拷贝覆盖原镜像源

deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe

deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverse restricted universe

deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe

deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe

deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe

deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe

deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverse restricted universe

deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe

deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe

走一遍系统更新的程序,因为用了国内镜像,这一步速度明显快了很多。

sudo apt-get update

sudo apt-get upgrade

B、走了一遍系统更新之后,如果幸运,那所有的源都可以安装。这时,我们把系统的源换回Ubuntu自带的。即

sudo cp /etc/apt/sources.list.bak /etc/apt/sources.list

然后,再次执行

sudo apt-get update

sudo apt-get upgrade

切记,直到全部源都安装才OK。一会大家会发现,几乎所有TensorFlow环境配置过程中碰到的问题,都来源于这一步没有搞彻底。

 

(6)安装pip3

sudo apt-get install python3-pip python3-dev

安装之后直接更新到最新版,

python3 -m pip install --upgrade pip

目前版本已经到21了,所以有些网上教程中的所谓更改pip3 bug的方法

就不需要了,千万不要改。

(7)安装机器学习库

sudo apt-get install python3-pandas

sudo apt-get install python3-sklearn

sudo apt install htop screen nano

到这里还是可以正常运行的,如果有问题,那一定是步骤(5)系统更新出问题。

(8)更新numpy

将numpy由1.13.X版本升级到1.18.X版本:

pip3 install -U numpy==1.18

(9)安装scipy

pip3 install scipy  –i  http://pypi.mirrors.ustc.edu.cn/simple/

新的坑如下:

安装scipy最高版本时,需要将安装包重新编译,此时会报错“no lapack/blas resources found”,那就安装吧:

sudo apt-get install liblapack-dev 

此时,建议同时安装一个gfortran编译器,这都是因为jetson nano采用了特殊的架构导致的:

sudo apt-get install gfortran

(10)安装一些必要的依赖包

sudo apt-get install python3-pip libhdf5-serial-dev hdf5-tools

sudo apt-get install libhdf5-serial-dev hdf5-tools zlib1g-dev zip libjpeg8-dev libhdf5-dev  python3-pip

(11)pip3安装依赖库文件

可以用国内镜像加速安装过程,豆瓣、中科大、清华都合适。

pip3 install cython #这个问题不大

pip3 install -U h5py # 需要编译安装,用时长

pip3 install -U grpcio absl-py py-cpuinfo psutil portpicker six mock requests gast astor termcolor

(12)安装TensorFlow-GPU

直接下载whl文件,然后可以直接安装,当然中间还需要一些依赖包,慢慢等,不要急。

(13)安装keras

pip3 install keras==2.1.5 –i http://pypi.mirrors.ustc.edu.cn/simple/

到此基本OK了,可以随便从网上弄个测试程序看看安装是否完美。

(14)其它的坑

A、“E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用)”,这是在系统更新切换镜像源地址时候可能出现的问题,在未完成下载的情况下将terminal close。此时apt-get进程可能没有结束。如果再次运行apt-get install 命令安装软件时,出现如上错误。即有另一个程序正在占用apt-get install进程,由于它在运行时,会占用软件源更新时的系统锁(简称‘系统更新锁’),此时资源被锁解决方法如下。

sudo rm /var/cache/apt/archives/lock 

sudo rm /var/lib/dpkg/lock

B、在pip3安装一些压缩包形式而非whl文件时候,可能出现python.h找不到的问题(这个问题非常诡异,命令行会出现一片片红色的报错信息,但只有中间一小句话说明出现找不到python.h的提示),执行如下指令即可:

apt-get install python3-dev

C、碰到下面这种有未满足的依赖关系怎么办,“E:无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系”

解决这个问题的过程充满了玄学,大方向是系统更新的锅,所以按照如下步骤进行:重启板子——打开命令行——接触锁定(14 A中的方法 )——更新系统(Ubuntu、中科大、清华各种源都要试试)sudo apt-get update——安装所需依赖库(sudo apt-get install XXX)。这个方法不保证一次性成功,但大方向是对的,核心的锅还是系统更新问题。

 

OK,收工!