Ubuntu 20.04 (WSL) TensorFlow 环境搭建#

说明#

30系显卡仅支持CUDA11以上的版本,目前最新的Tensorflow和PyTorch虽然都可以直接使用,然而谷歌不再维护的tensorflow1.x却无法安装在CUDA11环境下。好在NVIDIA一直在维护一个1.15版本的`nvidia-tensorflow <NVIDIA/tensorflow>`_可以使用在30系显卡上。具体安装要求如下:

image.png

如果WIN平台下安装了支持WSL2的显卡驱动,则WSL下的Ubuntu会自带驱动,不需要再次安装,同时`nvidia-tensorflow <NVIDIA/tensorflow>`_ 这个项目已经集成cuda和cudnn以支持最新的nvidai驱动,因此也不需要再安装cuda和cudnn, 查询 Ubuntu 是否已经安装了显卡驱动。

image.png

经过测试此方案可以安装官方最新的显卡驱动。

安装 Miniconda#

下载并安装最小集成版本的 anaconda ,这里选择python3.8版本

image.png
bash Miniconda3-py38_23.1.0-1-Linux-x86_64.sh

添加环境变量

vim ~/.bashrc
# 最后一行添加
export PATH=/home/xxx/miniconda3/bin/:$PATH

source ~/.bashrc
conda --version

配置tensorflow1.x环境#

创建环境

conda create --name nvidia-tf1.x python==3.8.16
conda install python==3.8 -n "nvidia-tf1.x"
# 激活 conda
source activate
# 退出 conda 或 conda环境
conda deactivate
conda env list

配置环境

source activate
conda  activate nvidia-tf1.x
pip install --upgrade pip
pip install nvidia-pyindex
pip install nvidia-tensorflow[horovod]
pip install nvidia-tensorboard==1.15
vim ~/tensorflow1-gpu.py
python tensorflow1-gpu.py
# 退出nvidia-tf1.x环境
conda deactivate
# 退出conda环境
conda deactivate
conda remove -n nvidia-tf1.x --all
# tensorflow1-gpu.py
import tensorflow as tf
import tensorboard

tf.enable_eager_execution()
a = tf.random.uniform([1000, 1000])
b = tf.random.uniform([1000, 1000])

print("tensorflow version:",tf.__version__)
print("gpu:",tf.test.is_gpu_available())
print("cuda:",tf.test.is_built_with_cuda())
print(tf.matmul(a, b))
image.png

关于 TFLite 支持的问题#

NVIDIA/tensorflow/issues/16

NVIDIA 为了兼容最新的显卡驱动,舍弃了对 TFLite 的支持。

image.png

因此不得不安装 TF2 来提供模型转换功能的支持,而anaconda可以很方便的管理多个版本的python环境,这也是前面使用anaconda安装 TF1的原因。在此暂时不建议使用NVIDIA提供的Docker方式安装。

  1. 查阅版本要求

`tensorflow <https://tensorflow.google.cn/install/source?hl=zh-cn#gpu>`_查询支持的配置,以避免不必要的麻烦 。

image.png

配置环境

conda create --name nvidia-tf2.x python=3.9
source activate
conda  activate nvidia-tf2.x
pip install --upgrade pip

# 查看可以用来安装的cudatoolkit的所有版本都有哪些
conda search cudatoolkit
# 查看所有列出来的cudatoolkit的详细信息,包括版本号version,文件网址url,依赖项dependencies
conda search cudatoolkit --info
conda install cudatoolkit=11.3

conda search cudnn --info
conda install cudnn=8.2

conda search keras --info

# conda search tensorflow-gpu --info# 只更新到了2.4版本,改用pip安装
pip install tensorflow-gpu==2.6
vim ~/tensorflow2-gpu.py
python tensorflow2-gpu.py

# 退出nvidia-tf1.x环境
conda deactivate
# 退出conda环境
conda deactivate
# tensorflow2-gpu.py
import tensorflow as tf
import tensorboard

#tf.enable_eager_execution()
a = tf.random.uniform([1000, 1000])
b = tf.random.uniform([1000, 1000])

print("tensorflow version:",tf.__version__)
print("gpu:",tf.test.is_gpu_available())
print("cuda:",tf.test.is_built_with_cuda())
print(tf.matmul(a, b))
image.png

备份安装好的系统#

wsl --export Ubuntu-20.04 D:\WindowsSubsystemLinux\img\Ubuntu-20.04-tf-backup.tar

常见问题FAQ#

下载速度巨慢,或因为超时问题而安装失败,可以尝试以下解决方案。

  1. 使用默认源,合理配置代理

Clash for Windows 规则模式代理配置

parsers: # array
  - url: https://linkuserssnk.xxyjx.cc/link/XmCwv00Wm03z5eup?clash=1
    yaml:
      prepend-rules:
        - DOMAIN-SUFFIX,nvidia.com,🔰国外流量
        - DOMAIN-SUFFIX,typingclub.com,🔰国外流量
        - DOMAIN-SUFFIX,pypi.org,🔰国外流量
        - DOMAIN-SUFFIX,pythonhosted.org,🔰国外流量
        - DOMAIN-SUFFIX,ubuntu.com,🔰国外流量
        - DOMAIN-SUFFIX,launchpad.net,🔰国外流量
        - DOMAIN-SUFFIX,readthedocs.io,🔰国外流量
        - DOMAIN-SUFFIX,pjreddie.com,🔰国外流量
        - DOMAIN-SUFFIX,bazel.build,🔰国外流量
        - DOMAIN-SUFFIX,googleapis.com,🔰国外流量
  1. 更改系统源,改到合适为止