node01分布式训练出现的问题

1 版本不适配问题

预装的tensorflow版本是1.0+版本不够,最后选的2.6版本
cuda是11.5
keras也是2.6
numpy是1.19

2 查看不到cuda和cudnn

原来的命令是:

# 查看cuda
cat /usr/local/cuda/version.txt
# 查看cudnn
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

因为最新版的version.txtcudnn.h文件不存在
所以最新的订单是:

# 查看cuda
cat /usr/local/cuda/version.json
# 或
nvcc -V

# 查看cudnn
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

3 运行分布式代码时出现以下问题

node01分布式训练出现的问题
怀疑是版本不适配的缘故(cuda和tensorflow,以及可能的python、gcc等)
检查改编版本

查看当前版本说明:

# 查看cuda见第2步

# 查看tensorflow版本
root@node01:/home/user/keras# source activate tf
(tf) root@node01:/home/user/keras# python
Python 3.6.13 |Anaconda, Inc.| (default, Feb 23 2021, 21:15:04) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> tf.__version__

# 查看python版本
python --version

# 查看GCC版本
gcc -v

查看发现gcc的版本是5.5,太低了,打算升级版本
选择下载10版本的,但出现了以下错误:

(tf) root@node01:/usr/bin# sudo add-apt-repository ppa:ubuntu-toolchain-r/test
(tf) root@node01:/usr/bin# sudo apt-get update
(tf) root@node01:/usr/bin# sudo apt-get install -y gcc-10 g++-10

node01分布式训练出现的问题
解决:
node01分布式训练出现的问题
发现有8.3.0和8会有冲突,故:

(tf) root@node01:/usr/local/cuda-11.5/targets/x86_64-linux/lib# sudo ln -sf /usr/local/cuda-11.5/targets/x86_64-linux/lib/libcudnn_adv_train.so.8.0.3 /usr/local/cuda-11.5/targets/x86_64-linux/lib/libcudnn_adv_train.so.8
(tf) root@node01:/usr/local/cuda-11.5/targets/x86_64-linux/lib# sudo ln -sf /usr/local/cuda-11.5/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8.0.3 /usr/local/cuda-11.5/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8
(tf) root@node01:/usr/local/cuda-11.5/targets/x86_64-linux/lib# sudo ln -sf /usr/local/cuda-11.5/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8.0.3 /usr/local/cuda-11.5/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8
(tf) root@node01:/usr/local/cuda-11.5/targets/x86_64-linux/lib# sudo ln -sf /usr/local/cuda-11.5/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8.0.3 /usr/local/cuda-11.5/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8
(tf) root@node01:/usr/local/cuda-11.5/targets/x86_64-linux/lib# sudo ln -sf /usr/local/cuda-11.5/targets/x86_64-linux/lib/libcudnn_ops_train.so.8.0.3 /usr/local/cuda-11.5/targets/x86_64-linux/lib/libcudnn_ops_train.so.8
(tf) root@node01:/usr/local/cuda-11.5/targets/x86_64-linux/lib# sudo ln -sf /usr/local/cuda-11.5/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8.0.3 /usr/local/cuda-11.5/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8

并且查看现存版本里边也没有刚刚下载的10版本只有5版本:

(tf) root@node01:/usr/bin# sudo update-alternatives --query gcc
Name: gcc
Link: /usr/bin/gcc
Status: auto
Best: /usr/bin/gcc-5
Value: /usr/bin/gcc-5

Alternative: /usr/bin/gcc-5
Priority: 50
# 查看是否安装下载成功
(tf) root@node01:/usr/bin# ls /usr/bin/gcc*
	/usr/bin/gcc      /usr/bin/gcc-7      /usr/bin/gcc-ar-7   /usr/bin/gcc-nm-7       /usr/bin/gcc-ranlib-7
	/usr/bin/gcc-10   /usr/bin/gcc-ar     /usr/bin/gcc-nm     /usr/bin/gcc-ranlib
	/usr/bin/gcc10.3  /usr/bin/gcc-ar-10  /usr/bin/gcc-nm-10  /usr/bin/gcc-ranlib-10
	/usr/bin/gcc-5    /usr/bin/gcc-ar-5   /usr/bin/gcc-nm-5   /usr/bin/gcc-ranlib-5
# 发现是成功的

# 安装并设置优先级为50(最高级)
(tf) root@node01:/usr/bin# sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 50

# 降低gcc5的优先级
(tf) root@node01:/usr/bin# sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 20
	update-alternatives: 使用 /usr/bin/gcc-10 来在自动模式中提供 /usr/bin/gcc (gcc)

# 再次查看
(tf) root@node01:/usr/bin# sudo update-alternatives --query gcc
Name: gcc
Link: /usr/bin/gcc
Status: auto
Best: /usr/bin/gcc-10
Value: /usr/bin/gcc-10

Alternative: /usr/bin/gcc-10
Priority: 50

Alternative: /usr/bin/gcc-5
Priority: 20

# 查看gcc版本
(tf) root@node01:/home/user/keras# gcc -v
	Using built-in specs.
	COLLECT_GCC=gcc
	COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/10/lto-wrapper
	OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa:hsa
	OFFLOAD_TARGET_DEFAULT=1
	Target: x86_64-linux-gnu
	Configured with: ../src/configure -v --with-pkgversion='Ubuntu 10.3.0-1ubuntu1~18.04~1' --with-bugurl=file:///usr/share/doc/gcc-10/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-10 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-10-xgJY7J/gcc-10-10.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-10-xgJY7J/gcc-10-10.3.0/debian/tmp-gcn/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
	Thread model: posix
	Supported LTO compression algorithms: zlib zstd
	gcc version 10.3.0 (Ubuntu 10.3.0-1ubuntu1~18.04~1)
# ok了

重新运行代码,还是一样的问题

4 解决方法

1 针对找不到libcupti.so.11.2

# 添加环境变量
(tf) root@node01:/home/user/keras# vim ~/.bashrc
# 添加下列语句
export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/usr/local/cuda-11.5/extras/CUPTI/lib64
# 使之生效
(tf) root@node01:/home/user/keras# source ~/.bashrc

# 查看是否设置成功
(tf) root@node01:/home/user/keras# echo $LD_LIBRARY_PATH
	LD_LIBRARY_PATH:/usr/local/cuda-11.5/extras/CUPTI/lib64

再次运行发现:
node01分布式训练出现的问题
程序不报错了,但之前的两个ERROR没有了。不知道为啥,再看看吧

2 查看到另一个目录下含有libcupti.so.11.5

但是没有11.2,于是打算把这个文件重命名为11.2
mv libcupti.so.11.5 libcupti.so.11.2
node01分布式训练出现的问题
运行后发现错误消失了:
node01分布式训练出现的问题
但是请注意,最后一个问题是无法执行需要解决的共享策略(数据集不可共享)。

3 数据集共享问题

和分布式tensorflow策略有关,有待深入了解之后再解决

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2022年3月31日
下一篇 2022年3月31日

相关推荐