讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在Python中监控TensorFlow各个GPU的核心利用率

老墨同学_4181

老墨同学_4181

发布时间:2026-10-26 09:22:38

|

704人浏览过

|

来源于php中文网

原创

必须用 nvidia-smi 获取 GPU-Util:通过 subprocess.run(['nvidia-smi', '--query-gpu=index,utilization.gpu', '--format=csv,noheader,nounits'], timeout=3) 调用,解析时需 strip() 防空格错误,建议另起线程每1–2秒轮询并存入队列。

如何在python中监控tensorflow各个gpu的核心利用率

用 nvidia-smi 实时抓取每个 GPU 的 GPU-Util(核心利用率)

TensorFlow 本身不暴露底层 GPU 核心利用率(即 nvidia-smi 显示的 GPU-Util 百分比),它只提供内存占用和部分计算图执行统计。真正反映“核心忙不忙”的指标,必须从驱动层获取——nvidia-smi 是唯一稳定、跨 TensorFlow 版本可用的方式。

关键点:不要尝试用 tf.config.list_physical_devices('GPU') 或 tf.test.is_gpu_available(),它们完全不返回利用率数据。

实操建议:

macOS UI 自动化技能包 —— 用 Python 控制你的 Mac
macOS UI 自动化技能包 —— 用 Python 控制你的 Mac

让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限

下载
  • 用 subprocess.run(['nvidia-smi', '--query-gpu=index,utilization.gpu', '--format=csv,noheader,nounits'], capture_output=True, text=True) 获取原始输出
  • 解析 CSV 输出时注意空格和换行,str.strip().split(',') 前要先 line.strip(),否则可能因首尾空格导致索引错误
  • 每行格式为 "0, 42"(GPU 索引 + 利用率数值),注意第二字段前可能有空格

在 Python 循环中安全调用 nvidia-smi 避免阻塞或超时

nvidia-smi 默认响应很快,但若 GPU 正在重置、驱动异常或被其他进程锁死,可能卡住数秒甚至更久。直接裸调用 subprocess.run 会导致监控线程挂起,拖慢主训练流程。

立即学习“Python免费学习笔记(深入)”;

实操建议:

  • 务必加 timeout=3 参数,例如:subprocess.run(..., timeout=3)
  • 捕获 subprocess.TimeoutExpired 异常,并返回 None 或上一次有效值(避免监控断档)
  • 不要在训练 step 内同步调用;建议另起一个 threading.Thread 每 1–2 秒轮询一次,结果存入 queue.Queue 或 threading.local() 变量供主逻辑读取
  • 避免高频调用(如 nvidia-smi 本身有内部采样周期(默认 ~1s),太密无意义且加重 PCI-e 负载

区分 utilization.gpu 和 utilization.memory 的实际含义

很多人误以为 utilization.memory 表示显存带宽占用率,其实不是:utilization.memory 是显存控制器的使用率(即 DRAM read/write 请求活跃度),和显存容量占用(memory.used)无关。而 utilization.gpu 才是 CUDA Core / Tensor Core 的实际计算饱和度。

典型误导场景:

  • 模型跑得慢但 utilization.gpu 只有 10%,说明瓶颈在数据加载、CPU 预处理或 kernel launch 开销,不是算力不足
  • utilization.gpu 长期 95%+ 但 loss 下降慢,可能是 batch size 太小导致 kernel 过小、无法填满流多处理器(SM)
  • 多个模型共用 GPU 时,nvidia-smi 显示的是所有进程总和,无法精确归因到某个 tf.function 或 tf.GradientTape 调用

TensorFlow 2.x 下配合 tf.summary 可视化 GPU 利用率曲线

你可以把每轮采集到的 utilization.gpu 值写入 TensorBoard,但要注意:不能直接写 raw 数值,需包装成 tf.Summary.Value 或用 tf.summary.scalar(在 eager mode 下)。

实操建议:

  • 创建独立 tf.summary.create_file_writer,路径与训练日志分离(如 logs/gpu_util),避免混杂
  • 记录时用 with writer.as_default(): tf.summary.scalar('gpu_0_util', val, step=step),其中 step 推荐用训练 global step,而非监控时间戳
  • 如果多卡,为每张卡单独建 scalar(如 gpu_1_util),TensorBoard 会自动分图
  • 注意 tf.summary 不是实时刷盘,需手动 writer.flush() 或设 flush_millis=10000

最易被忽略的一点:GPU 核心利用率低 ≠ 代码写得差。TF 的 XLA 编译、混合精度、tf.data.Dataset.prefetch 等优化,都可能让 utilization.gpu 看似“不高”,但吞吐反升——要看 end-to-end throughput 和 step time,而不是盯着那个百分比猛调。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1811

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

4784

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1769

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

28477

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3427

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3427

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1203

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

616

2023.08.10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn