https://www.jianshu.com/p/ca387d0a4bb0
参考上面简书的这个网页 按着他一步一步来
参考上面简书的这个网页 按着他一步一步来
参考上面简书的这个网页 按着他一步一步来
重要事情说三遍
1.一些预备工作
a.安装vnc
sudo apt-get install x11vnc
安装完输入
x11vnc -usepw
然后会设置密码 ubuntu啦,懒得混淆
然后就可以在window打开vnc了
b. 查看Jetson TK1 L4T版本
head -n 1 /etc/nv_tegra_release
c. 查看系统位数(32/64),当然是32位的了
getconf LONG_BIT
d. 修改密码(ubuntu太长了)
sudo passwd ubuntu
(root或对应的用户名)
e. 按照上一篇教程,更新软件源(先备份官方的源)
f. 安装git 有时候直接克隆源码不用再下zip这么麻烦
sudo apt-get update
sudo apt-get install git
2. 安装CUDA 6.01(包在环境配置文件里面有)
包已经下好,照做就好
查看CUDA安装版本
nvcc -V
“Cuda compilation tools, release 6.0, V6.0.1”
3.安装cuDNN v2
(妙算是32位系统,没有lib64这一项,把命令里面的lib64的64去掉即可)
(妙算是32位系统,没有lib64这一项,把命令里面的lib64的64去掉即可)
(妙算是32位系统,没有lib64这一项,把命令里面的lib64的64去掉即可)
CUDA那时候不知道为啥就装了6.0.1,脑残又下了cuDNN的R1版本,编译有问题,后来看到连接说要cuDNN的V2版本,试了一下cp了两条指令把R1的库文件目录覆盖了之后,make没问题了,runtest至今还是不太行.
cuDNN(其实就是把cuDNN的头文件和源文件加入到CUDA的目录中,这个solitairetheme8结尾的文件,百度说cp一下直接变成压缩文件再解压就好,nvidia的文件就是nb,虽然是需要6.5的cuda但是编译能通过,不管,要是下次,一定装cuda的6.5版本)
tar -xzvf cudnn-6.5-linux-R1.tgz
cd cudnn-6.5-linux-R1
sudo cp lib* /usr/local/cuda/lib64/
sudo cp cudnn.h /usr/local/cuda/include/
以上谈到的权限问题我没有遇到,直接执行cp的两行命令就把文件复制过去了
4.安装tk1的opencv 优化包
最爽就是这两个包
sudo dpkg -i libopencv4tegra_2.4.8.2_armhf.deb
sudo dpkg -i libopencv4tegra-dev_2.4.8.2_armhf.deb
搞定!
5.最重要的一步,前期的相关环境已经配好,最后caffe编译的重头戏来了。
caffe-caffe-0.12与cuDNN V2的版本对应问题(考虑到更新速度较快,tk1的硬件过于老,所以决定用最老的版本,也不能太老就选了caffe-caffe-0.12)
a.解压Caffe源码包执行编译
进入目录,把Makefile.config.example 复制成 Makefile.config ,加入那一行信息。
b. 参数-j 4 的意思是用四核,火力全开,我最喜欢这种骚事情了。
make clean //每一次make失败之后重新make都需要该命令进行清除
make -j 4 all
make -j 4 runtest
Mnist Example:编译前请注意:,编译前请注意,编译前请注意:
1.参考https://github.com/BVLC/caffe/issues/1298
在creat_mnist.sh执行的时候又遇到了新的问题F0413 15:08:19.918817 9137 convert_mnist_data.cpp:132] Check failed: mdb_put(mdb_txn, mdb_dbi, &mdb_key, &mdb_data, 0) == 0 (-30792 vs. 0) mdb_put failed,
该问题和上面MDB_MAP_FULL的问题一样超出了边界。什么原因,就tm的是32位系统,硬件就是坑,所以解决方法:
哪里报错就把哪里的一串数字改了,这没完。还要,把回到根目录,把整个整个整个caffe (make clean make clean make clean)重新编译整个编译! 一锅老鼠屎,搞衰一锅粥!
2.编译工程要在根目录下编译就是caffe的目录下编译,不能进了example/mnist
不能进了example/mnist不能进了example/mnist
剩下就要靠自己造化了
剩下就要靠自己造化了
剩下就要靠自己造化了
Result:
训练日志: