news 2026/6/10 17:38:40

TensorFlow-v2.15一文详解:如何监控GPU利用率与内存占用情况

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TensorFlow-v2.15一文详解:如何监控GPU利用率与内存占用情况

TensorFlow-v2.15一文详解:如何监控GPU利用率与内存占用情况

1. 技术背景与监控需求

随着深度学习模型复杂度的不断提升,GPU已成为训练和推理任务的核心计算资源。在使用TensorFlow-v2.15进行模型开发时,合理监控 GPU 的利用率与内存占用情况,不仅能提升训练效率,还能有效避免资源瓶颈导致的性能下降或程序崩溃。

尽管 TensorFlow 提供了强大的自动设备管理能力,但在实际工程中,开发者仍需主动掌握 GPU 资源的运行状态。尤其是在多卡训练、模型并行或服务部署场景下,缺乏有效的监控机制可能导致显存溢出(OOM)、GPU 利用率低下等问题。

因此,本文将围绕TensorFlow-v2.15环境,系统性地介绍如何通过内置 API、外部工具以及自定义脚本,全面监控 GPU 的利用率与内存使用情况,并结合 Jupyter 与 SSH 使用方式,提供可落地的实践方案。

2. TensorFlow 中的 GPU 管理基础

2.1 查看可用 GPU 设备

TensorFlow 支持通过tf.config.experimental模块对 GPU 进行细粒度控制。首先,可以通过以下代码确认当前环境中识别到的 GPU 数量及基本信息:

import tensorflow as tf # 列出所有物理GPU设备 gpus = tf.config.experimental.list_physical_devices('GPU') print(f"检测到 {len(gpus)} 块GPU") for gpu in gpus: print(f"设备名称: {gpu.name}")

该方法返回的是物理 GPU 列表,可用于后续的设备分配与监控。

2.2 启用内存增长策略

默认情况下,TensorFlow 会尝试占用全部 GPU 显存。为避免资源浪费,建议启用“内存增长”模式,使显存按需分配:

for gpu in gpus: tf.config.experimental.set_memory_growth(gpu, True)

此设置有助于更准确地观测真实模型所消耗的显存量。

2.3 获取当前内存使用信息

虽然 TensorFlow 不直接暴露 GPU 利用率(如 CUDA 核心使用率),但可以获取每块 GPU 的已分配显存信息:

if gpus: # 获取第一块GPU的统计信息 details = tf.config.experimental.get_device_details(gpus[0]) print("设备详情:", details) # 查看当前内存使用(仅部分后端支持) try: mem_info = tf.config.experimental.get_memory_info('GPU:0') print(f"当前显存使用: {mem_info['current']} bytes") print(f"峰值显存使用: {mem_info['peak']} bytes") except NotImplementedError: print("当前平台不支持显存监控API")

注意get_memory_info在某些驱动或运行环境下可能不可用,需结合外部工具补充监控。

3. 外部工具监控 GPU 资源

由于 TensorFlow 自身对 GPU 利用率的监控能力有限,推荐结合 NVIDIA 提供的标准工具进行实时监控。

3.1 使用 nvidia-smi 命令行工具

nvidia-smi是最常用的 GPU 监控命令,可在终端中直接执行:

nvidia-smi

输出内容包括:

  • GPU 型号与驱动版本
  • 当前温度、功耗、风扇转速
  • 显存使用情况(Used / Total)
  • GPU 利用率(Utilization)
实时动态监控

使用-l参数实现周期性刷新(例如每2秒一次):

nvidia-smi -l 2
查询特定字段(JSON格式)

便于脚本解析:

nvidia-smi --query-gpu=name,temperature.gpu,utilization.gpu,memory.used,memory.total --format=csv

3.2 使用 pynvml 库进行编程式监控

pynvml是 NVIDIA Management Library 的 Python 封装,可在代码中实时读取 GPU 状态。

安装方式:

pip install pynvml

示例代码:

from pynvml import nvmlInit, nvmlDeviceGetHandleByIndex, nvmlDeviceGetUtilizationRates, nvmlDeviceGetMemoryInfo def monitor_gpu(gpu_id=0): nvmlInit() handle = nvmlDeviceGetHandleByIndex(gpu_id) util = nvmlDeviceGetUtilizationRates(handle) mem_info = nvmlDeviceGetMemoryInfo(handle) print(f"GPU {gpu_id} 利用率: {util.gpu}%") print(f"显存使用: {mem_info.used / 1024**2:.2f} MB / {mem_info.total / 1024**2:.2f} MB") print(f"显存占用率: {mem_info.used / mem_info.total * 100:.2f}%") # 调用函数 monitor_gpu(0)

该方法适合集成进训练脚本中,在每个 epoch 结束后打印资源使用情况。

4. 集成监控到训练流程中的实践方案

4.1 在 Keras 回调中嵌入 GPU 监控

我们可以自定义一个Callback,在每个训练批次或 epoch 后输出 GPU 使用状态:

import time import tensorflow as tf from tensorflow.keras.callbacks import Callback from pynvml import nvmlInit, nvmlDeviceGetHandleByIndex, nvmlDeviceGetUtilizationRates, nvmlDeviceGetMemoryInfo class GPUMonitor(Callback): def __init__(self, gpu_id=0, interval=10): super().__init__() self.gpu_id = gpu_id self.interval = interval # 每N个batch记录一次 self.batch_count = 0 nvmlInit() def on_batch_end(self, batch, logs=None): self.batch_count += 1 if self.batch_count % self.interval == 0: handle = nvmlDeviceGetHandleByIndex(self.gpu_id) util = nvmlDeviceGetUtilizationRates(handle) mem = nvmlDeviceGetMemoryInfo(handle) print(f"[Batch {self.batch_count}] " f"GPU利用率: {util.gpu}%, " f"显存使用: {mem.used/1024**2:.1f}MB/{mem.total/1024**2:.1f}MB")

使用方式:

model.fit(x_train, y_train, epochs=5, callbacks=[GPUMonitor(gpu_id=0, interval=50)])

4.2 记录日志用于后期分析

可将监控数据写入 CSV 文件,便于可视化分析:

import csv from datetime import datetime class GPUStatsLogger(Callback): def __init__(self, log_file="gpu_usage.csv"): self.log_file = log_file with open(log_file, 'w') as f: writer = csv.writer(f) writer.writerow(["timestamp", "epoch", "batch", "gpu_util", "mem_used_mb", "mem_total_mb"]) def on_batch_end(self, batch, logs=None): handle = nvmlDeviceGetHandleByIndex(0) util = nvmlDeviceGetUtilizationRates(handle) mem = nvmlDeviceGetMemoryInfo(handle) with open(self.log_file, 'a') as f: writer = csv.writer(f) writer.writerow([ datetime.now().isoformat(), logs.get('epoch', -1), batch, util.gpu, mem.used / 1024**2, mem.total / 1024**2 ])

5. 基于 Jupyter 与 SSH 的远程监控实践

5.1 在 Jupyter Notebook 中实时查看 GPU 状态

当使用提供的TensorFlow-v2.15镜像并通过 Jupyter 启动开发环境时,可以在 Notebook 单元格中直接运行监控代码:

!nvidia-smi --query-gpu=utilization.gpu,memory.used,memory.total --format=csv

或者调用前面定义的monitor_gpu()函数,实现交互式监控。

图:Jupyter 环境中执行 nvidia-smi 与 Python 监控脚本

5.2 通过 SSH 远程连接进行后台监控

若需长期运行任务,可通过 SSH 登录服务器,使用tmuxscreen创建持久会话,并启动持续监控:

ssh user@server-ip tmux new -s gpu_monitor watch -n 5 nvidia-smi

也可编写后台脚本定期采集数据:

#!/bin/bash while true; do timestamp=$(date '+%Y-%m-%d %H:%M:%S') usage=$(nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits) memory=$(nvidia-smi --query-gpu=memory.used --format=csv,noheader,nounits) echo "$timestamp, $usage%, $memory MB" >> gpu_log.csv sleep 10 done

保存为monitor.sh并后台运行:

nohup bash monitor.sh &

图:SSH 终端中运行 nvidia-smi 与自定义监控脚本

6. 总结

6.1 核心要点回顾

本文围绕TensorFlow-v2.15环境下的 GPU 资源监控问题,系统介绍了从框架内 API 到外部工具的多种监控手段:

  • TensorFlow 内置功能:可用于查看设备列表、启用内存增长、获取部分显存信息;
  • nvidia-smi 工具:提供完整的 GPU 状态快照,适合命令行快速诊断;
  • pynvml 库:支持编程化访问 GPU 利用率与显存数据,便于集成进训练流程;
  • 自定义回调与日志记录:实现自动化监控与历史数据分析;
  • Jupyter 与 SSH 实践:结合镜像环境特点,提供了本地交互与远程运维两种典型场景的操作指南。

6.2 最佳实践建议

  1. 开发阶段:在 Jupyter 中结合!nvidia-smi快速验证 GPU 使用情况;
  2. 训练阶段:使用GPUMonitor回调实时观察资源波动,及时发现低效训练;
  3. 生产部署:部署后台监控脚本,配合日志系统实现异常预警;
  4. 多卡环境:扩展监控逻辑至多个 GPU,确保负载均衡。

通过上述方法,开发者可以在TensorFlow-v2.15生态中构建完整的 GPU 资源可观测性体系,显著提升模型训练效率与系统稳定性。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 13:44:28

IndexTTS2最新V23版体验:没显卡别慌,云端1小时1块钱

IndexTTS2最新V23版体验:没显卡别慌,云端1小时1块钱 你是不是也和我一样,是个AI技术爱好者,看到新发布的模型就想第一时间上手试试?最近IndexTTS2的V23版本在圈子里火得不行,听说情感控制能力大幅提升&…

作者头像 李华
网站建设 2026/6/9 21:23:25

电商评论分析实战:用BGE-M3快速实现语义匹配

电商评论分析实战:用BGE-M3快速实现语义匹配 在电商平台中,用户评论是宝贵的反馈资源。然而,面对海量的非结构化文本数据,如何高效识别相似评论、挖掘用户真实意图,成为构建智能客服、商品推荐和舆情监控系统的关键挑…

作者头像 李华
网站建设 2026/6/10 12:02:15

鸡兔同笼问题自动解?DeepSeek-R1应用演示+部署教程

鸡兔同笼问题自动解?DeepSeek-R1应用演示部署教程 1. 引言:本地化逻辑推理的现实需求 在教育、编程辅助和日常决策中,逻辑推理类问题始终是自然语言处理的重要挑战。传统大模型虽具备一定推理能力,但往往依赖高性能GPU和云端服务…

作者头像 李华
网站建设 2026/6/10 12:01:36

BGE-Reranker-v2-m3数据隐私保护:敏感信息过滤实战

BGE-Reranker-v2-m3数据隐私保护:敏感信息过滤实战 1. 引言 1.1 业务场景描述 在当前的检索增强生成(RAG)系统中,向量数据库通过语义相似度快速召回候选文档,但其基于嵌入距离的匹配机制容易受到关键词干扰&#xf…

作者头像 李华
网站建设 2026/6/10 10:55:58

新手避坑指南:正确使用LCD Image Converter的方法

图像转换不翻车:嵌入式开发中正确使用 LCD Image Converter 的实战指南你有没有遇到过这种情况?UI设计师发来一张精美的PNG图标,你用工具转成C数组烧进单片机,结果屏幕上的图像颜色诡异、偏红偏绿,甚至直接全黑&#x…

作者头像 李华
网站建设 2026/6/10 10:59:15

Python通达信数据获取完整指南:从入门到实战应用

Python通达信数据获取完整指南:从入门到实战应用 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 还在为金融数据获取而烦恼吗?面对复杂的行情接口和数据格式转换&#xff0…

作者头像 李华