albert环境配置之tf2

关于albert的运行环境

用python3.6和tensorflow1.15.0训练时,使用CPU一切正常,一旦使用GPU就一直报Blas GEMM launch failed,试了各种方法都没解决,有说cuda版本不匹配的,我瞅着都挺好都挺匹配。 我恨,索性就换了tensorflow2.6.0(其实是2.5.0版本安装好后代码又有bug,只有2.6.0光荣成功。

我运行的代码版本是:brightmart/albert_zh

一. 安装tensorflow2.6.0

首先,安装好 2.6.0 版本,记得是gpu版,只需要添加清华镜像源就可以嘎嘎快。

这是镜像源地址,pip时只需要加 -i 。

https://pypi.tuna.tsinghua.edu.cn/simple

其次,tensorflow-estimator这个库也需要手动安装为2.6版本,安装tf的时候会自动安装一个高版本的,运行代码的时候有报错,降低到2.6就可以了。

二. 修改代码

第一步,使用2.0的库运行1.0的代码, 需要修改以下内容:

# import tensorflow as tf

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

第二步,直接运行,看报错。或者像我这样修改,只需要修改modeling.py, optimization_finetuning.py,run_classifier.py三个文件的代码就可以了。将用到的contrib库全部用其他库替代,因为contrib这个库在2.0版本中被弃用了。

  1. run_classifier.py所有的tf.contrib.tpu. 替换为 tf.estimator.tpu.
  2. 修改layer_norm函数
def layer_norm(input_tensor, name=None):
    """Run layer normalization on the last dimension of the tensor."""
    # return tf.contrib.layers.layer_norm(
    #     inputs=input_tensor, begin_norm_axis=-1, begin_params_axis=-1, scope=name)
    layer = tf.keras.layers.LayerNormalization(axis=-1)
    return layer(input_tensor)
  1. 修改main函数的is_per_host参数
    # is_per_host = tf.contrib.tpu.InputPipelineConfig.PER_HOST_V2
    is_per_host = True

目前就遇到了这些问题。
参考: tf2的contrib平替
超有用,降版本思维方式

全部完成后,自信一波,直接运行起飞。
突然查起nvidia-smi,GPU利用率为0。忐忑停掉程序,键入。

 print(tf.test.is_gpu_available())

生活给我当头一棒。

False

进入下一步,探索原因。
为什么CUDA装好了,Tensorflow-GPU不能用?,里面有段代码巨有用

import tensorflow as tf

print(tf.__version__)  # 查看tensorflow版本
print(tf.__path__)     # 查看tensorflow安装路径

a = tf.test.is_built_with_cuda()  # 判断CUDA是否可以用
b = tf.test.is_gpu_available(
    cuda_only=False,
    min_cuda_compute_capability=None
)  # 判断GPU是否可以用

print(a) # 显示True表示CUDA可用
print(b) # 显示True表示GPU可用

# 查看驱动名称
if tf.test.gpu_device_name():
    print('Default GPU Device: {}'.format(tf.test.gpu_device_name()))
else:
    print("Please install GPU version of TF")

也就是这段代码告诉我,Could not load dynamic library ‘libcudnn.so.8‘,我的cudnn有问题!

二. 下载配置Cudnn

(1)检查cuda

nvcc -V

在这里插入图片描述
cuda是11.2,很好,继续查找cudnn版本。

(2)检查cudnn

怎么查看是否安装cuDNN?

打开终端或命令行窗口。输入以下命令:
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2 。
很好,我的是一片空白,找到问题了,找不到原来安装过没有,直接重新安装cudnn。

正常来说应该是这样的。
cudnn

(3)安装cudnn

cuda是11.2,查找对应cudnn版本,查到了!需要下载8.1的cuDNN。
cuda-tf
cuda、cudnn、tensorflow对应版本查询

cudnn下载网址

先用邮箱注册一下,整整1.2个G,给他找个temp文件夹下载上存住了。将下载后的文件解压缩到/home/wzh/cuda/t/这个文件夹。

解压缩: sudo tar -xzvf /home/wzh/cuda/temp/cudnn-11.2-linux-x64-v8.1.0.77.tgz -C /home/wzh/cuda/t/
不加sudo不行,说我权限不够。

(4)配置cudnn

进入 /usr/local目录,就可以看到cuda的各种版本了。

修改软链接

使用软链接可以轻松修改使用的cuda版本!
因为我之前就用过软链接了,直接删掉整新的。参考的网页找不到了,sorry~
/usr/local/cuda-11.2是需要的cuda版本。

rm -rf /usr/local/cuda   #删除之前创建的软链接
sudo ln -s /usr/local/cuda-11.2 /usr/local/cuda  #创建新的软链接

执行

cp /home/wzh/cuda/t/cuda/include/cudnn.h  /usr/local/cuda/cuda-11.2/include/  
cp /home/wzh/cuda/t/cuda/lib64/libcudnn*  /usr/local/cuda/cuda-11.2/lib64
chmod a+r /usr/local/cuda/cuda-11.2/include/cudnn.h  /usr/local/cuda/cuda-11.2/lib64/libcudnn*

cp就是将前面的内容(解压缩的cudnn中的文件)复制到后面(软链接中的cuda),/home/wzh/cuda/t/就是用户刚才解压缩自己指定的目录,/cuda/include/cudnn.h是解压缩的内容。chmod这个命令跟这两个文件的权限有关,不必关心。如果执行这两句被拒绝,显示权限不够,就添加sudosudo永远的神。

其实这里更详细:安装CUDA和cuDNN

首先 vi ~/.bashrc

追加这些

export PATH=/usr/local/cuda/cuda-11.2/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda/cuda-11.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

然后 source ~/.bashrc

这里的地址是软链接的地址,完成这步就大功告成了。我在进行到这里的时候一直不成功,一直连接到cuda-10.0,原来是bashrc文件开头我就配置了10.0的连接,添加在文件最后面的11.2一直没有生效。

在此,我万分激动,因为GPU不运行的问题不止出现了一次。上次,我放弃了tensorflow,换成了pytorch。这次,我痛定思痛,没有半途而废,直接干掉最大的敌人,我们都有美好的未来。
总结一下,换 tf 版本, 安装cudnn,进行软连接,这三步缺一不可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值