You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows系统使用TensorFlow训练DeepLabV2时GPU长期闲置CPU占满问题排查

问题排查与解决方法

1. 优先验证TensorFlow GPU版本有效性

  • 运行以下命令确认当前环境仅安装GPU版本TensorFlow,避免CPU版本优先级覆盖:
    pip list | findstr tensorflow
  • 若输出中同时出现tensorflow(CPU版)和tensorflow-gpu,执行pip uninstall tensorflow删除CPU版本即可。
  • 注意:TensorFlow 2.10及以上版本不再支持Windows原生GPU训练,若你安装的是高版本TF,需降级到2.10及以下,或者使用WSL2环境运行。

2. 检查CUDA/CuDNN版本匹配性

  • 即使驱动为最新版本,也需保证CUDA、CuDNN版本与TensorFlow版本严格对应,比如TF2.10要求CUDA11.2、CuDNN8.1,版本不匹配会导致TF默认回退到CPU运行,仅能识别GPU但不会调用。
  • 核对对应关系后重新安装匹配版本即可解决。

3. 修复MKL抢占CPU资源问题

  • 你提供的numpy mkl输出显示numpy使用MKL作为计算后端,MKL默认会占用全部CPU核心进行运算,一方面会导致数据加载线程被抢占,另一方面部分默认调用numpy的运算会优先跑在CPU上,导致GPU无运算任务。
  • 临时解决方法:运行训练脚本前先设置环境变量限制MKL线程数:
set OMP_NUM_THREADS=2
set MKL_NUM_THREADS=2
  • 永久解决方法:卸载conda默认的MKL版numpy,安装OpenBLAS版numpy:
    conda install "libblas=*=*openblas" numpy

4. 验证代码设备分配逻辑

  • 检查训练代码中是否存在强制指定CPU运行的配置,比如全局设置tf.config.set_visible_devices([], 'GPU')、或者模型/数据加载部分被包裹在with tf.device('/CPU:0')上下文内。
  • 可添加测试代码验证GPU可正常执行运算:
import tensorflow as tf
tf.debugging.set_log_device_placement(True)
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
print(c)
  • 若输出显示运算跑在GPU上,则说明是代码逻辑问题,反之则是环境配置问题。

5. 优化数据加载管道

  • 如果上述配置都正常,排查数据加载逻辑是否为单线程同步加载,可启用tf.data的预加载、并行加载机制:
    • 调整num_parallel_calls参数为CPU核心数的1/2
    • 添加prefetch(tf.data.AUTOTUNE)配置,让数据加载和模型训练并行执行
    • 若使用自定义生成器加载数据,可改用多进程加载,避免数据预处理阻塞GPU运算

内容的提问来源于stack exchange,提问作者blackbug

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:36:04