历时2天 几乎踩遍各种坑
最近项目要部署在TX2上,在TX2上配好YOLOv3 GPU的版本,本来刚接手的就是刷过机的板板,but 没有装cudnn 于是乎呢就按照这篇blog:https://blog.csdn.net/dhaduce/article/details/80155121(TX2上安装cudnn)的过程,结果根本跑不起来。装好cudnn后在darknet make的时候总会报错:
skipping incompatible libcudnn.so when searching for lib64/ (具体bug描述忘记了,反正意思就是找到了这个链接,但是不兼容)
网上说的是什么so为32或64位而乌班图正好相反,但是事实证明通过objdump命令,都是64位。(但是确实板子是是ARM,下载的cudnn是x64,我之前也不懂ARM与x64是不是一样,反正按照上述blog进行做,gg。不行)无可奈何下,师兄说可能是版本不配套,主机当时有对应的cudnn版本文件,反正就是让我刷个机尝试再装一遍 于是乎先走上了我的刷机之路。
我下载的是JetPack3.2 ,在官网上下载。
https://developer.nvidia.com/embedded/jetpack
JetPack是一个强大的支持cuDNN, CUDA, TnesorRT等的集成包。
然后在home文件夹下创建了一个jetpack包,将下载下来的.run拷过去了。然后在对应的文件夹下执行
./JetPack-L4T-3.2-linux-x64_b157.run
这里会有一个bug,就是有其他教程说用sudo命令来执行这个命令,会报错,error信息会提示你建议用普通用户权限执行,所以就直接run就行。
中间还可能会缺包,少啥apt-get啥就行。然后会弹出一个安装界面,一路next的,到这里
啥都别管别问 选full。自定义坑啥的就自己踩吧反正我老老实实选的full。会安装一系列的cuda,cudnn,opencv等。然后就漫长的等待下载吧。
我第一天下午放这里等下载,第二天早上来看,下ok了。然后下面就开始了我的上午踩坑之路。
首先参考第一种教程 ,到了这一步之后一路next,就到了这个界面
大家都是选的1嘛,也就连在同一个路由器上,对于我来说我以为同一个局域网呢,因为母机跟板卡都连的实验室的wifi,也没考虑就这样next了。教程说是最好要用网线把主机跟板卡都连在同一个路由器上,找了张别人的图:
然后一路next,会跳出一个框。
下来执行下面的这一系列复杂的操作:
如果你成功进入恢复模式并连好板子和电脑了,在主机的命令行输入 lsusb 会看到NVIDIA corp的字样。然后就让跳出的框开始恢复啦。
当然我也傻兮兮的没连在一个路由器上做了这些动作,(有blog中的人很欧这样做也成了,反正我是非酋)结果就悲剧了 板子启动了我以为ok了,打开一看傻眼了 opencv cuda全都没有,简直不能再简直的东西,然后看了一下那个跳出来的小黑框。
找目的地ip ing 卡死在这里了,瞬间明白应该是网络的问题,然后退而寻找另一种方法:
下面这种方法无需连在一个路由器上,需要自己手动配置ip。 (前提,系统已经装好了,就像我第一遍reset后系统是ojbk乌班图16的。可以打开系统连上wifi,然后继续下面的步骤)
首先退出上面的那个小框框,重新执行.run文件,在安装选择的时候把 flash os 设置为no action的模式!其它都选安装,进入下一步。 此时可以手动输入TX2的IP地址,可在板子上通过ifconfig命令查看,然后会让输入板子的ip跟username password。
ip就输入你查看的ip (可以通过wifi网络信息直接看到,这个是静态ip!)user跟pwd都是nvidia。
OK网路教程到此结束,别人顺顺当当安装上了,但是我的还是找不到ip。找了好久总算在一个大哥的blog找到了只字片语关于这个的问题。需要改主机的ip。当用板卡跟主机连在一起的时候,主机上会有LET4的一个目录,里面有一个read me,按照那个read me上让你改的内容,自己把你的以太网连接配置为对应的ip。像我这边板卡ip为192.168.xx.1 read me上就建议我把以太网连接改为192.168.xx.2 掩码保持一致,设置为手动获取ip。然后ssh nvidia这个ip。输入密码之后,就可以无关机安装了。
然后就进入了漫长的安装过程,新的坑再次出现,安装到某个lib库的时候提示装不上缺少依赖文件,让我自己在板卡上get之后再continue,然而我板卡get不了,又缺乏依赖,就通过apt-get -f 修复依赖,然后继续continue。有的还是有error,不过好在没有卡在ip。装完了。
然而我重启板卡之后,/usr/local下面依旧找不到cuda,我也是醉了。于是又执行了一遍安装,这次ok了。具体原因是啥我还真的不知道,反正很懵逼。就装好了
但是装好之后跟之前一样,依旧找不到cudnn啊!明明jetpack的下载里有cudnn的deb文件,竟然没装。刚开始我又傻乎乎的去官网下载tar文件去了,因为又看到一篇blog给了我希望。那篇博客上说一定要下载arm版本的cudnn,并且给了个下载地址,我按照那个过程又装了一遍cudnn,又去yolov3里面make,依旧gg。然后就又一次删除了cuda/lib64中的链接跟cuda/include里面的cudnn.h。。。
没办法只好最后一步,(其实应该是最正确的一步,当时太傻了)我用u盘把主机上的jetpack下载的cudnn有关的两个deb文件拷在板卡上。
sudo dpkg -i libcudnn6_6.0.21-1+cuda8.0_arm64.deb
sudo dpkg -i libcudnn6-dev_6.0.21-1+cuda8.0_arm64.deb
执行之后,成功安装cudnn。 yolov3中make 编译通过!