目录
一、目标:创建一个 Python 3.7 + TensorFlow 2.7 的环境
2.1 首先查看目标的 Python 版本和 TensorFlow 版本是否匹配
2.2 接下来查看本机显卡即驱动是否 支持 cudatoolkit11.2
综上共要安装:python3.7,cudatoolkit11.2,cudnn8.1,tensorflow2.7。
3.2 Pycharm 使用 Anaconda 中 TensorFlow2.7 环境
四、配置 cudatoolkit11.2,cudnn8.1,tensorflow2.7 环境
4.1 在 Pycharm 中安装 cudatoolkit11.2 和 cudnn8.1
6.1 未找到:TensorFlow 2.6以上的版本对应表。
一、目标:创建一个 Python 3.7 + TensorFlow 2.7 的环境
电脑环境
笔记本 | 系统 | NVIDIA 显卡 | 显卡驱动版本 | 驱动支持最高CUDA版本 |
联想小新 15 | Windows 11 家庭中文版 | NVIDIA GeForce MX350 | 472.19 | 11.4 |
二、确定安装版本
2.1 首先查看目标的 Python 版本和 TensorFlow 版本是否匹配
在 TensorFlow 官网 上查询 Windows 中 GPU 版本的 TensorFlow 和 Python 版本对应表(部分)。
得到我们需要的版本对应信息。
Version | Python version | Compiler | Build tools | cuDNN | CUDA |
tensorflow_gpu-2.7.0 | 3.7-3.9 | MSVC 2019 | Bazel 3.7.2 | 8.1 | 11.2 |
MSVC 2019:(Microsoft Visual C++ Compiler)是微软的编译器。
Bazel 5.1.1:是 Google 开发的一种构建工具,可以自动化地构建和测试大型代码库。
本文使用 Anaconda3 工具安装 CUDA 所以不涉及到这两个。
cuDNN: 深度神经网络库(CUDA Deep Neural Network library)主要作用是在CUDA平台上加速深度神经网络的训练和推理过程。
CUDA:是 NVIDIA 的并行计算平台和应用编程接口(API)。
CUDA Toolkit:是由 NVIDIA 提供的一套工具集合,它包含了编写、编译、调试和优化 CUDA 应用程序所需要的各种组件。简言之,目标环境中需要安装 CUDA Toolkit 。当提到 CUDA 版本时,通常是指 CUDA Toolkit 的具体版本号。所以 CUDA Toolkit 版本为11.2。
2.2 接下来查看本机显卡即驱动是否 支持 cudatoolkit11.2
打开 命令提示符 [win + r -> cmd -> 确定]。
vidia-smi命令用于查询 NVIDIA GPU 的状态和信息。
nvidia-smi
显示驱动版本为472.19,可安装 CUDA 的最高版本为11.4,满足目标环境要求。
综上共要安装:python3.7,cudatoolkit11.2,cudnn8.1,tensorflow2.7。
三、配置 Python3.7 环境
使用到的软件:Anaconda3 + PyCharm 2024.1.4(Professional Edition)
3.1 Anaconda 创建 Python3.7 环境
3.1.1 Anaconda Navigator 方式
Environments -> Create -> Packags选择3.7.x(x表示任意),名字任意即可。
3.1.2 Anaconda Prompt 方式
命令行 conda create -n 名称 python=版本号
具体步骤
(1)打开 Anaconda Prompt
(2)输入命令:
conda create -n TensorFlow2.7 python=3.7
y
(3)安装完成后,可按照提示 conda activate TensorFlow2.7 切换到 TensorFlow2.7 环境下输入命令行继续安装。本文使用 PyCharm 连接到新建的 TensorFlow2.7 环境后继续安装其他包。
3.2 Pycharm 使用 Anaconda 中 TensorFlow2.7 环境
之后点击确定,加载完毕后再点击确定。这样就可以在 Pycharm 中使用 TensorFlow2.7 环境。
四、配置 cudatoolkit11.2,cudnn8.1,tensorflow2.7 环境
4.1 在 Pycharm 中安装 cudatoolkit11.2 和 cudnn8.1
(1)打开本地终端
(2)下载 cudatoolkit11.2 和 cudnn8.1
先查找
conda search cudatoolkit
但是没有对应版本
(TensorFlow2.7) PS D:\CSDN\TensorFlow2.7_workspace> conda search cudatoolkit
Loading channels: done
# Name Version Build Channel
cudatoolkit 8.0 4 pkgs/main
cudatoolkit 9.0 1 pkgs/main
cudatoolkit 9.2 0 pkgs/main
cudatoolkit 10.0.130 0 pkgs/main
cudatoolkit 10.1.168 0 pkgs/main
cudatoolkit 10.1.243 h74a9793_0 pkgs/main
cudatoolkit 10.2.89 h74a9793_0 pkgs/main
cudatoolkit 10.2.89 h74a9793_1 pkgs/main
cudatoolkit 11.0.221 h74a9793_0 pkgs/main
cudatoolkit 11.3.1 h59b6b97_2 pkgs/main
cudatoolkit 11.8.0 hd77b12b_0 pkgs/main
所以用
conda search cudatoolkit -c conda-forge
查询到
cudatoolkit 11.2.0 h608a323_7 conda-forge
cudatoolkit 11.2.0 h608a323_8 conda-forge
cudatoolkit 11.2.1 h7a7aa70_8 conda-forge
cudatoolkit 11.2.2 h7d7167e_10 conda-forge
cudatoolkit 11.2.2 h7d7167e_11 conda-forge
cudatoolkit 11.2.2 h7d7167e_12 conda-forge
cudatoolkit 11.2.2 h7d7167e_13 conda-forge
cudatoolkit 11.2.2 h933977f_10 conda-forge
cudatoolkit 11.2.2 h933977f_8 conda-forge
cudatoolkit 11.2.2 h933977f_9 conda-forge
这句命令行是在 conda-forge 通道(channel)中搜索可用的 cudatoolkit 包。(conda 默认的 channel 是defaults,但这个channel包不全。)
接下来同样用 conda-forge channel 下载 cudatoolkit 11.2.0 。
conda install cudatoolkit==11.2.0 -c conda-forge
输入y(同意安装),等待一段时间后,显示done说明安装成功。
按照同样方法下载 cudnn8.1,命令行为:
conda search cudnn -c conda-forge
conda install cudnn==8.1.0.77 -c conda-forge
之后可以检查下是否安装成功,即
conda list
显示如下,说明安装成功。
cudatoolkit 11.2.0 h608a323_8 conda-forge
cudnn 8.1.0.77 h3e0f4f4_0 conda-forge
(3)安装 tensorflow2.7
发现,conda search 不到 tensorflow2.7
conda search tensorflow-gpu
conda search tensorflow-gpu -c conda-forge
于是使用 Python 的包管理工具 pip。
pip index versions tensorflow-gpu
得到
Available versions: 2.12.0, 2.10.1, 2.10.0, 2.9.3, 2.9.2, 2.9.1, 2.9.0, 2.8.4, 2.8.3, 2.8.2, 2.8.1, 2.8.0, 2.7.4, 2.7.3, 2.7.2, 2.7.1, 2.7.0, 2.6.5, 2.6.4, 2.6.3, 2.6.2, 2.6.1, 2.6
.0, 2.5.3, 2.5.2, 2.5.1, 2.5.0, 2.4.4, 2.4.3, 2.4.2, 2.4.1, 2.4.0, 2.3.4, 2.3.3, 2.3.2, 2.3.1, 2.3.0, 2.2.3, 2.2.2, 2.2.1, 2.2.0, 2.1.4, 2.1.3, 2.1.2, 2.1.1, 2.1.0, 2.0.4, 2.0.3, 2.0.2, 2.0.1, 2.0.0, 1.15.5, 1.15.4, 1.15.3, 1.15.2, 1.15.0, 1.14.0, 1.13.2, 1.13.1
所以,直接下载 2.7.0 即可。
pip install tensorflow-gpu==2.7.0
等待下载完毕后,完成目标环境的配置。
五、测试环境安装
让GPT生成个简单的测试程序
import tensorflow as tf
# 打印TensorFlow版本
print("TensorFlow version:", tf.__version__)
# 列出所有物理设备
physical_devices = tf.config.list_physical_devices()
# 打印所有物理设备
for device in physical_devices:
print(device)
# 检查是否有GPU设备
gpus = tf.config.list_physical_devices('GPU')
if gpus:
print("GPUs Found:")
for gpu in gpus:
print(gpu)
else:
print("No GPUs found.")
# 创建两个张量
a = tf.constant(2.)
b = tf.constant(4.)
# 在默认设备上执行乘法操作
result = a * b
print(result)
运行结果
TensorFlow version: 2.7.0
PhysicalDevice(name='/physical_device:CPU:0', device_type='CPU')
PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')
GPUs Found:
PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')
2024-07-23 21:21:33.269228: I tensorflow/core/platform/cpu_feature_guard.cc:151] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX AVX2
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2024-07-23 21:21:33.793438: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1525] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 1321 MB memory: -> device: 0, name: NVIDIA GeForce MX350, pci bus id: 0000:01:00.0, compute capability: 6.1
tf.Tensor(8.0, shape=(), dtype=float32)
红字部分表示 成功 检测并初始化了 NVIDIA GeForce MX350 GPU 作为计算设备。
再测试个能用到 GPU 的程序。构建和训练一个卷积神经网络(CNN)以识别 CIFAR-10 数据集的图像。
import tensorflow as tf
from tensorflow.keras import datasets, layers, models
# Check GPU availability
print("Num GPUs Available: ", len(tf.config.list_physical_devices('GPU')))
# Load and prepare the CIFAR10 dataset
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()
# Normalize pixel values to be between 0 and 1
train_images, test_images = train_images / 255.0, test_images / 255.0
# Build the CNN model
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))
# Compile and train the model
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
history = model.fit(train_images, train_labels, epochs=10,
validation_data=(test_images, test_labels))
# Evaluate the model
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print('\nTest accuracy:', test_acc)
运行时,查看任务管理器,发现用到了 GPU 的一些内存。所以到此为止,目标环境安装成功。
六、常见问题
6.1 未找到:TensorFlow 2.6以上的版本对应表。
将网站右上角语言改为 English 即可,可能中文网页还没更新。
七、注
7.1 包管理工具冲突
本文共可能涉及到 pip、conda默认通道、conda-forge通道,下载各种包,有概率导致不同方式下载的包不完全兼容。这个暂时没遇到,不会解决,或许可以尝试卸载之后重新换下载方式。
可以参考 替换 conda install cudatoolkit 的 pip 备选方案 和 设置优先使用conda-forge 这些文章。
也可以看看知乎的讨论——为什么有些人宁愿花费很多时间去自己手工配置Python环境, 也不用Anaconda?。