系统win11, 想在vscode里用python调用tensorflow,同时还需要用到GPU提高模型训练速度;既要又要还要
step1:安装vscode,直接找到微软官网进行安装,这里安装最新版本即可
Visual Studio Code - Windows官方下载 | 微软应用商店 | Microsoft Store
step2: 安装wsl
step3:安装ubuntu
Windows Subsystem for Linux (WSL, Ubuntu) 最新安装教程(2024.11 更新)-CSDN博客
参考上面链接,在Microsoft Store中找到ubuntu,版本使用Ubuntu 24.04.2 LTS
step4: 在ubuntu中安装依赖包
这里需要注意,第一,使用venv,这是官方推荐的方法,更合理;第二,因为是在linux系统中运行tensorflow,因此不需要过多考虑windows下的tensorflow-gpu安装中的版本匹配问题;所以按照指导一步步安装即可,tensorflow版本2.18.x,安装完成后版本如下


step5:windows中安装cuda,nvidia显卡驱动
CUDA Toolkit 12.8 Update 1 Downloads | NVIDIA Developer
同时可以参考此链接步骤
windows系统CUDA的详细安装教程_windows安装cuda-CSDN博客
根据官方推荐,按照自己的系统选择即可,本人选择版本如下CUDA:12.6.25

驱动版本561.17:

实际cuda保证大版本号12即可,对应驱动版本找到最新的就行
step6:安装linux版的CUDA Toolkit
这里需要注意,因为在实际调试中,用以下代码验证发现前五个步骤走完,tensorflow运行起来没有调用GPU,验证命令如下(这里使用wsl启动vscode,在venv环境中建立一个.py文件然后执行)
# print("TensorFlow版本:", tf.__version__)
# print("支持CUDA编译:", tf.test.is_built_with_cuda()) # 检查TensorFlow是否编译了CUDA支持:ml-citation{ref="4,5" data="citationList"}
# gpus = tf.config.list_physical_devices("GPU")
# if not gpus:
# print("未检测到GPU,请检查驱动或环境配置")
# else:
# print("检测到以下GPU设备:", gpus)
# tf.config.set_visible_devices(gpus, "GPU") # 显式指定使用第一个GPU
运行后可以发现wsl没有找到gpu,经过尝试,最终定位需要在wsl中安装CUDA Toolkits
CUDA Toolkit 12.8 Update 1 Downloads | NVIDIA Developer

选择版本之后,下方会出现对应的命令行,在wsl命令行中输入执行即可

注意下面的Dirver Installer不用执行,因为我们是通过wsl进行训练,linux中的tensorflow会调用windows下的cuda驱动
step7:linux环境下安装cuDNN
仍然在官网找到cuDNN最新版本即可CUDA Deep Neural Network (cuDNN) | NVIDIA Developer
安装方法与CUDA Toolkits相同,即在wsl中执行官方给出的命令行即可,注意最后一个命令执行使用的是cuda12


完成所有安装后,在自己的脚本中可以执行step6给出的代码段,打印会给出GPU信息,表示wsl中的tensorflow已经可以正确使用gpu了。
在开始训练过程中,可以打开windows的资源管理器,观察GPU使用情况,如果使用率起来了,表示GPU顺利被调用,也可以通过将如下代码放在训练模型语句前面,在训练过程中,会打印输出当前训练使用的是GPU还是CPU
# 打印出tensor在执行时用的设备,gpu或者cpu
# tf.debugging.set_log_device_placement(True)
wsl+vscode是目前比较方便的使用windows环境进行tensorflow的方案,在windows中直接使用tensorflow-gpu版本,有很多未知问题无法解决,包括环境搭建不友好,需要tensorflow和cuda有严苛的版本对齐,其中还牵扯到pip/numpy等版本的对齐;在实际使用中,发现由于tensorflow-gpu在windows版本过老,训练模型和一些官方给出的实例结果不一致的问题。
1548

被折叠的 条评论
为什么被折叠?



