TensorFlow 1版本如何检测GPU是否被模型正常调用使用
TensorFlow 1.15 GPU调用检测方案
1. 基础环境检测:确认TensorFlow是否识别到GPU设备
首先运行以下代码验证TF是否能正常识别硬件层面的GPU:
import tensorflow as tf from tensorflow.python.client import device_lib # 打印所有可识别的本地设备 print("所有可用设备列表:") for device in device_lib.list_local_devices(): print(f"设备名称:{device.name}, 设备类型:{device.device_type}") # 快速检测GPU是否可用 print("\nGPU是否可用:", tf.test.is_gpu_available()) # 打印可用GPU的设备ID if tf.test.is_gpu_available(): print("当前使用的GPU设备:", tf.test.gpu_device_name())
如果输出中没有device_type: "GPU"的条目,说明你的CUDA、cuDNN版本和TensorFlow 1.15不匹配,TF1.15要求配套CUDA 10.0 + cuDNN 7.4,版本不对会直接导致GPU无法被识别,模型默认跑在CPU上。
2. 运算分配检测:确认模型节点是否实际调度到GPU运行
如果第一步已经识别到GPU,但使用率还是偏低,可以开启设备分配日志,打印每个运算节点的实际运行设备,替换你自己的模型代码即可:
import tensorflow as tf # 此处可以替换为你自己的模型定义代码 a = tf.random.normal(shape=[1000, 1000]) b = tf.random.normal(shape=[1000, 1000]) res = tf.matmul(a, b) # 开启Session时设置log_device_placement=True,输出所有节点的运行设备 config = tf.ConfigProto(log_device_placement=True) with tf.Session(config=config) as sess: sess.run(res)
运行后控制台会输出每个节点的分配位置,如果看到类似以下日志,说明运算确实跑在GPU上:
MatMul: (MatMul): /job:localhost/replica:0/task:0/device:GPU:0
如果所有节点都分配到/device:CPU:0,优先排查是否手动全局指定了CPU运行,或者模型中存在不支持GPU加速的自定义OP,导致整个模型回退到CPU执行。
3. GPU使用率偏低的常见排查方向
如果上述两步都确认GPU已经被正常调用,还是出现使用率低于5%的情况,优先排查以下问题:
- 批次大小(batch_size)设置过小,GPU并行算力没有被充分利用,可以逐步调大batch_size到显存占用70%~80%左右再观察
- 数据加载IO瓶颈,CPU预处理数据速度跟不上GPU的运算速度,GPU长期处于等待输入的空闲状态,可以用
tf.dataAPI优化数据加载流程,增加预处理的并行数 - 模型本身参数量、运算量极低,GPU单次运算耗时极短,宏观统计的使用率自然会偏低,属于正常情况。
内容的提问来源于stack exchange,提问作者정원용
相关产品推荐
相关产品推荐

