解决CUDA10以后的GPU对于Tensorflow-1.x-gpu的依赖失败
Last Update:
Word Count:
Read Time:
Page View: loading...
写在前面
工业界对于Tensorflow的喜爱是超乎我的意料的,可以说是因为TF1.x的运行前的静态编译使得对于代码和设备的优化能够更加细致,也可以说是大部分在21世纪10年代蓬勃发展的公司——尤其是中国的——都使用的是Nvidia的Volta架构,比如说V100/T4,这也可以说是在第一批贸易战禁令产物。
其次是当年Meta(from 2021.10.28)还是Facebook,Google的TF有广大的市场,且启蒙我的《Deep Learning with Python》作者François Chollet领衔了Keras的集成进入TF. 以及轰轰烈烈的TF的2.x版本。
彼时就觉得需要同时兼容pyhton+GPU编译+对应版本的TF库十分麻烦,尤其是对于初学者和便捷的Windows笔记本用户随时拉取一下github的项目测试一下,同时现在Docker越来越受到欢迎因此,姑且本文先通过Docker来省去一切的“为什么我的设备运行不了”的问题来列出解决步骤。
废话就这么多,七步以内搞定。
在Windows上使用Docker运行TensorFlow 1.15并启用GPU加速
本指南以TF1.15为例,将帮助你在Windows上使用Docker运行TensorFlow 1.15,并充分利用你的NVIDIA GPU进行加速。将从安装Docker和NVIDIA支持开始,逐步引导完成整个过程。
极简叙述
- 安装Docker Desktop for Windows。
- 安装NVIDIA GPU驱动程序,确保系统支持CUDA。
- 拉取Docker镜像, >> docker pull tensorflow/tensorflow:1.15.0-gpu-py3
- 启动Docker,>> docker run --gpus all -it --rm tensorflow/tensorflow:1.15.0-gpu-py3 bash
- 确认Docker内CUDA和cuDNN,>> nvcc -V
- 检查GPU可用, >> python -c “import tensorflow as tf; devices = tf.config.experimental.list_physical_devices(‘GPU’); print(devices)”
- 输出为你的电脑的GPU数目即可。
- !!!该方法并不能够解决编译静态graph时候卡住的问题
详细展开与特殊情况
步骤1:安装Docker和NVIDIA Docker支持
安装Docker Desktop for Windows
- 下载并安装 Docker Desktop<—点击进入,选择自己的机器对应的型号(通常Windows带了Nvidia的GPU的笔记本都是AMD64)。
- 启动Docker并确保它在后台运行。输出理应格式如下:
1
docker --version
1
Docker version 20.10.17, build 100c701
安装NVIDIA驱动程序和CUDA支持
- 确保安装了最新版本的 NVIDIA GPU驱动程序<—点击进入,选择自己的机器对应的型号。
只是为了能够运行查看当前的机器是不是有GPU!!
如果没有请按照正常的tensorflow(默认cpu版本)安装就可以。
在Windows本机环境下运行输出理应格式如下:1
nvidia-smi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 566.14 Driver Version: 566.14 CUDA Version: 12.7 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Driver-Model | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 4060 ... WDDM | 00000000:01:00.0 On | N/A |
| N/A 49C P4 8W / 109W | 2301MiB / 8188MiB | 2% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A ... C+G D:\Microsoft VS Code\Code.exe N/A |
| ... N/A N/A ... ... ... ... |
+-----------------------------------------------------------------------------------------+
- 确保安装了最新版本的 NVIDIA GPU驱动程序<—点击进入,选择自己的机器对应的型号。
步骤2:拉取Docker镜像
打开命令行工具并运行以下命令来获得docker镜像:
1
docker pull tensorflow/tensorflow:1.15.0-gpu-py3
注意:其中的格式为docker pull tensorflow/tensorflow:1.xx-suffix_1-suffix_2
其中,tensorflow:1.xx-suffix_1,表示需要的版本,suffix_1一般添加gpu(不然你来看这干啥呢是吧)
其次,-suffix_2可以省略,由于其默认的下载是由Python2中的tensorflow包,是由Python2(e.g. 2.7.15+)版本编译的对于需要额外的Python3的语法项目存在部分冲突,所以建议添加此项为-py3。等待下载完成后,运行Docker的镜像:
1
docker run --gpus all -it --rm tensorflow/tensorflow:1.15.0-gpu-py3 bash
步骤3:拉取TensorFlow镜像
拉取适用于Python 3环境的TensorFlow 1.15 GPU镜像:
1 |
|
输出大致为:1
2
3
4
5
6
7
8
9
10
11
12
13
14________ _______________
___ __/__________________________________ ____/__ /________ __
__ / _ _ \_ __ \_ ___/ __ \_ ___/_ /_ __ /_ __ \_ | /| / /
_ / / __/ / / /(__ )/ /_/ / / _ __/ _ / / /_/ /_ |/ |/ /
/_/ \___//_/ /_//____/ \____//_/ /_/ /_/ \____/____/|__/
WARNING: You are running this container as root, which can cause new files in
mounted volumes to be created as the root user on your host machine.
To avoid this, run the container by specifying your user's userid:
$ docker run -u $(id -u):$(id -g) args...
root@container_id:/# **后续的所有的代码运行位置,输入Ctrl^D推出docker镜像
这时候已经在镜像内了,一切格式都与Linux保持一致
运行1
python -c "import tensorflow as tf; devices = tf.config.experimental.list_physical_devices('GPU'); print(devices)"
理应输出最后行格式如下:1
2
3...blablabla
2025-01-21 13:57:35.258965: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1746] Adding visible gpu devices: 0
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
gpu编号和列表编号一致从0开始,即说明成功啦!