问题描述:如题,通过代码
import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = "-1" #CUDA从0开始编号,将其改为任意非负整数便可用于调整可见GPU设备
可将代码的运行(可见)设备由默认的GPU更改为CPU。但在Jupyter notebook和Spyder中,使用上述代码将可能出现仍采用GPU的情况,代码的运行设备可由下述任意一段代码进行验证:
from tensorflow.python.client import device_lib
print(device_lib.list_local_devices()) #将列出所有可见设备
import tensorflow as tf
tf.test.is_gpu_available() #旧版本代码,True表示有可见GPU设备
tf.config.list_physical_devices('GPU') #较新版本中已替换为该代码,将返回当前的GPU设备信息,如无可见GPU设备则返回[]
import tensorflow as tf
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
# Tensorflow1,返回运行设备信息
sess = tf.compat.v1.Session(config=tf.compat.v1.ConfigProto(log_device_placement=True))
# Tensorflow2,Tensorflow2已弃用Session,如需调用需采用该格式调用
解决方案:
①每次通过代码调整运行设备时,需要重启Jupyter notebook或Spyder的kernel内核,否则禁用或重启gpu的代码将无效;此外需注意将下述更改运行设备的代码块放在代码的最开始位置。
import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
②建立新的环境安装Tensorflow2.-cpu,可实现完全禁用GPU的效果
注意,Tensorflow2.不再区分是否为gpu,除非安装Tensorflow2.-cpu(即cpu only版本),否则当检测到gpu并安装cuda后,Tensorflow2.仍将自动调用gpu。
③采用代码
with tf.device("/cpu:0"):
调整每个子代码块的运行设备。需注意,通过问题描述中三种代码获取的运行设备不代表子代码块的运行设备,请改为使用 变量.device 获取运行设备。