跳到主要内容

解决NVIDIA 30/40系列显卡与tensorflow 1.15 不兼容的问题

· 阅读需 7 分钟
Pangluo

问题起因

因为显卡与显卡驱动、CUDA版本以及cuDNN版本有着非常严格的依赖关系。

CUDA是NVIDIA推出的用于自家GPU的并行计算框架,也就是说CUDA只能在NVIDIA的GPU上运行,而且只有当要解决的计算问题是可以大量并行计算的时候才能发挥CUDA的作用。cuDNN是NVIDIA打造的针对深度神经网络的加速库,是一个用于深层神经网络的GPU加速库。如果你要用GPU训练模型,cuDNN不是必须的,但是一般会采用这个加速库。

同时坊间传言,30系列显卡只支持CUDA 11.X 及往后的版本。40系列显卡只支持CUDA 11.3及往后的版本笔者在实践中,视乎也验证了上述的传言:

30系列显卡:

image-20230729093126683

40系列显卡:

image-20230729092952955

同时tensorflow对于依赖库也会有非常严格的要求。下标为经过测试的构建配置(GPU),来源官网:https://www.tensorflow.org/install/source?hl=zh-cn#tested_build_configurations

image-20230729093339504

如果盲目直接上手,一般都会直接部署tensorflow 1.15。一般错误为cuDNN以及CUDA版本不匹配(上图为30系列,下图为40系列显卡):

image-20230729093752269

image-20230729093731526

综上所述,tensorflow的版本的对于cuDNN以及CUDA版本有着及其严格的要求。但是如果为了能够使用新购置的30/40系列显卡,就一定需要升级tensorflow版本并重写代码吗?并不一定。

解决方案

其实官方早已经提出了解决方案,也就是nvidia-tensorflow。

GitHub地址为:https://github.com/NVIDIA/tensorflow

官方网站为:https://developer.nvidia.com/deep-learning-frameworks

NVIDIA has created this project to support newer hardware and improved libraries to NVIDIA GPU users who are using TensorFlow 1.x. With release of TensorFlow 2.0, Google announced that new major releases will not be provided on the TF 1.x branch after the release of TF 1.15 on October 14 2019. NVIDIA is working with Google and the community to improve TensorFlow 2.x by adding support for new hardware and libraries. However, a significant number of NVIDIA GPU users are still using TensorFlow 1.x in their software ecosystem. This release will maintain API compatibility with upstream TensorFlow 1.15 release. This project will be henceforth referred to as nvidia-tensorflow.

Link to Tensorflow README

介绍:随着 TensorFlow 2.0 的发布,谷歌宣布 2019 年 10 月 14 日 TF 1.15 发布后,TF 1.x 分支将不再提供新的主要版本。英伟达正在与谷歌和社区合作,通过增加对新硬件和库的支持来改进 TensorFlow 2.x。然而,大量英伟达™(NVIDIA®)GPU 用户仍在其软件生态系统中使用 TensorFlow 1.x。该版本将保持与上游 TensorFlow 1.15 版本的 API 兼容。此后,该项目将被称为 nvidia-tensorflow。

安装步骤

  1. 明确自己的安装的版本。可以直接打开该项目的GitHub地址。之后在左上角可以查看历史分支,查看有没有自己的所需的版本。

image-20230729094821134

image-20230729094849381

​ 主要是查看各个历史版本的所需要的安装系统的环境。查看readme自述文件中关于安装环境的要求,如有自己所需要的TF,则按readme自述文件部署安装环境:

image-20230729095024664

image-20230729095039532

  1. 在准备好安装环境之后(推荐使用Anaconda,Miniconda安装部署所需要的环境,本文所使用的环境为Miniconda,具体操作与Anaconda一致)后输入以下命令行:

    (1)检查pip版本:

    pip --version

    ​ 如果不满足pip的需求,则需要更新pip版本:

    pip install --upgrade pip

    (2)NVIDIA wheels 不在 PyPI.org 上托管。要为 Tensorflow 安装英伟达™(NVIDIA®)wheels,请安装英伟达™(NVIDIA®)wheels索引:

    pip install --user nvidia-pyindex

    (3)安装nvidia-tensorflow

    pip install --user nvidia-tensorflow[horovod]

    ​ 输入命令行之后静静等待即可。

    ​ 如果是无限下载,也就是完整下载了某个依赖包之后又重新下载这一个依赖包,同时伴有pip报错。解决方案就是将该环境删除,重新配置。但是出现下面的情况是完好的,不用紧张,静静等待即可: image-20230729101519195

    ​ (4)验证安装。待上述的步骤安装结束之后,即可验证TF是否安装在本地。首先是保证已经进入了已经安装的TF 1.x的环境,之后操作图下:

    ​ 进入python环境:

    python

    ​ 引入TF:

    import tensorflow as tf

    ​ 验证:

    print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))
    print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('XLA_GPU')))

    ​ (5) 如果出现了如下情况就表示已经安装成功了:

    3090显卡:

    image-20230729102856243

    4090显卡:

    image-20230729102946121

    ​ 能够识别出服务器显卡的的参数即表示TF 1.x版本的安装成功

实验试跑

安装成功了,怎么能不试着跑一下呢。安装部署了自己所需的TF环境,在按照需求安装其他的依赖包,即可试着跑自己的代码。

此处,本文使用了某平台上的两个GPU服务器跑代码,配置如下:

image-20230729103439357

之后,部署其他的依赖包,直接上传代码跑实验:

image-20230729103811417

总体效果还不错。

​ 3090卡: image-20230729103922165

​ 4090卡:

image-20230729104011556

结语

挺好,不用重写代码了。

说明

我知道有机器采集网站文章,所以已经在公众号上先发了。

image-20230729093126683