前言
自tensorflow2.10版本后已不再支持windows本机环境了,而 Windows 10 19044 或更高版本上的 WSL2 支持具有 GPU 访问权限的 TensorFlow。这对应于 Windows 10 版本 21H2,即 2021 年 11 月的更新。所以你要是想用新一点的版本又想用GPU训练的话那就只能在WSL2里面装了。
WSL2说白了你可以理解为和windows共用一套文件系统的linux操作系统,它可以使用linux系统执行windows系统里面的文件,下面开始配置基于WSL2的tensorflow gpu环境,首先确认你有N卡,不要拿着核显或者A卡来搞这个。
安装WSL2
完整的安装步骤请参考安装 WSL | Microsoft Learn,官方的基本是最准的,这里介绍一种更简洁的安装方式,先打开控制面板,选择程序,程序和功能,按下图选择
然后进microsoft store,搜索wsl,选一个你要的点击安装,它就自己安装好了,这里我安装的是ubuntu22.04LTS
接下来win+r,打开powershell,先输入wsl --update,更新内核,接着输入wsl进系统,开始进去会要你注册用户名和密码,自己输入注册就是,然后进系统,差不多就是这个界面
然后输入nvidia-smi看看可不可以看见N卡,有下面的显示就是可以,之后记住你的cuda version,后面安装的cuda版本一定要低于这个cuda version!,比如我的cuda version是12.7,那我的cuda版本安装就不能大于12.7,一定记住不要装错了
配置cuda环境
先刷新下系统,执行
sudo apt update
之后去nvidia官网CUDA Toolkit 12.6 Update 2 Downloads | NVIDIA Developer,如果是其他版本就去这里找你要的版本CUDA Toolkit Archive | NVIDIA Developer,按下面的选择
下面会有安装指令,一行一行执行它们
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.6.2/local_installers/cuda-repo-wsl-ubuntu-12-6-local_12.6.2-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-12-6-local_12.6.2-1_amd64.deb
sudo cp /var/cuda-repo-wsl-ubuntu-12-6-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-6
完了输入
vim ~/.bashrc
在最下面输入这几句话
export PATH=/home/yyf/.local/bin:$PATH
export CUDA_HOME=/usr/local/cuda-12.6
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
完事了输入刷新环境
source ~/.bashrc
之后输入验证环境
nvcc -V
出现这个就证明cuda安装成功了
配置tensorflow环境
先上官网Install TensorFlow with pip,别看中文版,内容很落后,我也不知道为什么。。。
刷新pip
pip install --upgrade pip
之后执行
pip install tensorflow[and-cuda]
完事后terminal里面执行它
python3 -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"
有下面的显示就大功告成了
或者你也可以执行它
import tensorflow as tf
print("Num GPUs Available: ", len(tf.config.list_physical_devices('GPU')))
有这句Num GPUs Available: 1证明成功了
完结撒花!