昨天开始升级hpc的tensorflow,中间踩了个大坑。到现在才弄顺,mark一下。
gpu版的tf,可以在github上下载,然后按照教程使用pip安装。但需要更新很多系统包
升级cuda 8 及cudnn8
- 到官网下载 https://developer.nvidia.com/cuda-downloads
按照教程直接安装就可以。
2.下载cudnn5.1 https://developer.nvidia.com/cudnn
tar -xzvf cudnn-8.0-linux-x64-v5.1.tgz
cd cudnn-8.0-linux-x64-v5.1
sudo cp lib64/* /usr/local/cuda/lib64/
sudo cp cudnn.h /usr/local/cuda/include/
升级glibc
glibc掌管着系统很多基础命令,例如ls,rm等,是系统的基础库。我也是被它坑的不浅。
先说正确的步骤:
wget http://ftp.gnu.org/pub/gnu/glibc/glibc-2.23.tar.xz
xz -d glibc-2.23.tar.xz
tar -xvf glibc-2.23.tar
cd glibc-2.23
mkdir build
cd build
../configure –prefix=/usr –disable-profile –enable-add-ons –with-headers=/usr/include –with-binutils=/usr/bin (博客显示有问题,应该是双横线。不行手敲吧)
make
make check (结果有错误,没有理它)
make install
我出错的问题:最初下载了一个6.23的包,make install 失败了,在lib64下产生了libc-2.23.so,但是没有完成libc.so.6的链接更新。 我想手动做这个软链接,就rm -f libc.so.6, 然后想使用ln, 但发现删除libc.so.6删除后,系统很多命令(包括ln)无法使用了,提示relocation error: libc.so.6: symbol _dl_starting_up, version GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2 with link time reference。 按照某篇博客的说法,执行了ldconfig,问题出现了。 ld出错了。 应该用LD_PRELOAD重新把原先的libc.so.6恢复。但错误已经发生了,系统都无法登录了。 最终更新/lib64/ld-linux-x86-64.so.2,才是系统可以重启。 这中间还遇到 “/lib64/libm.so.6: invalid ELF header”、 “/lib64/libm.so.6: invalid ELF header”这两个的问题,g++都无法使用了。
最终按照上面说的步骤,把glibc更新完,谢天谢地
升级GLIBCXX
错误:/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21’ not found
解决方法: 上述错误是因为libstdc++.so.6太久。 现在 libstdc++.so.6已经被纳入gcc安装包中,所以安装更新版本的gcc即可。 gcc 5.2就包含GLIBCXX_3.4.21的libstdc++.so.6
步骤:
1. wget http://ftp.gnu.org/gnu/gcc/gcc-5.2.0/gcc-5.2.0.tar.bz2
2. tar -xf gcc-5.2.0.tar.bz2
3. cd gcc-5.2.0
4. ./contrib/download_prerequisites
5. mkdir gcc-temp
6. ../configure –enable-checking=release –enable-languages=c,c++ –disable-multilib (博客显示有问题,双横杠)
7. make (大概一个小时)
8. make install
更新完gcc后,libstdc++.so.6并没有被更新,需要手动完成,如下:
1. find / -name “libstdc++.so*”
发现有个
/home/gcc-5.2.0/gcc-temp/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
/home/gcc-5.2.0/gcc-temp/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/home/gcc-5.2.0/gcc-temp/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21 //最新动态库
……
2. cp /home/gcc-5.2.0/gcc-temp/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21 /usr/lib64
3. cd /usr/lib64
4. rm -rf libstdc++.so.6
5. ln -s libstdc++.so.6.0.21 libstdc++.so.6
6. 执行strings /usr/lib64/libstdc++.so.6 | grep GLIBC就可以看到了
如果gpu还是用不了,可以检查下显卡驱动是否需要更新 http://blog.csdn.net/leiting_imecas/article/details/61414313
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/9344.html