使用GPU训练tensorflow/keras模型,Memory 您所在的位置:网站首页 专用gpu内存利用率怎么提升速度 使用GPU训练tensorflow/keras模型,Memory

使用GPU训练tensorflow/keras模型,Memory

2024-06-07 12:45| 来源: 网络整理| 查看: 265

目录 如何使用 gpu 训练模型使用 nvidia-smi 指令查看 gpu 利用率提升 GPU-Util 利用率以及模型训练速度将任务管理器的 Copy 改为 Cuda

如何使用 gpu 训练模型

win11 系统,已安装 CUDA-11.2、cuDNN-8.1、tensorflow-gpu-2.6.0 以及 keras-2.6.0。但我在运行如下代码训练模型时,通过任务管理器看到 cpu 占用 20%左右,gpu 占用为0%。我以为此时仍是 cpu 在训练模型(其实安装好相互兼容的 CUDA、cuDNN、tensorflow-gpu、keras,代码会自动调用 gpu 训练模型,必须对任务管理器进行修改才能看到实际的 gpu 利用率)。

history = model.fit( train_generator, steps_per_epoch=100, epochs=30, validation_data=validation_generator, validation_steps=50)

我以为需要通过特殊设置才能让 gpu 训练模型,看到网上说要加上这两行代码,加上以后,cpu 和 gpu 利用率还是没变化(其实在只有一张显卡的机器上完全不用加下面的代码来指定gpu,多显卡机器才需要)。

import os os.environ["CUDA_VISIBLE_DEVICES"] = "0" 使用 nvidia-smi 指令查看 gpu 利用率

接着,我在命令行使用 nvidia-smi 指令发现在程序未运行时,GPU-Util 为 0%,但在训练模型时,GPU-Util 为 26%,并且显存占用了 6800MB。所以就是 gpu 在训练模型呀,我以为又是这垃圾 win11 的 bug,导致任务管理器显示异常。 在这里插入图片描述

提升 GPU-Util 利用率以及模型训练速度

不过,我还是不满意,显存占用那么高,为什么 gpu 利用率才 26% 呢?继续查询得知:

1. 可能是 gpu 很快就算完了,在等待 cpu 传输新的数据 2. 可以通过设置 workers(线程数)来增加数据预处理和数据传输的 cpu 个数,如下:

history = model.fit( train_generator, steps_per_epoch=100, epochs=30, validation_data=validation_generator, validation_steps=50, workers=4)

经过测试,gpu 利用率果然大幅提升,模型训练速度也大幅提升:

workers训练时间未设置2分48秒21分44秒41分11秒61分06秒81分03秒 将任务管理器的 Copy 改为 Cuda

查询过程中意外发现了训练模型时,任务管理器始终显示 gpu 利用率很低的原因:

如果你已经正确安装了 CUDA/cuDNN,那么你需要做的就是在任务管理器的下拉菜单中更改副本 --> cuda,它将显示活动 cuda 核心的数量。GPU 的其他指标在运行 tf/keras 时不会激活,因为没有视频编码/解码等工作要做;它只是在 GPU 上使用 cuda 内核,因此跟踪 GPU 使用情况的唯一方法是查看 cuda 利用率(考虑从任务管理器进行监控时) 在这里插入图片描述

参考:https://stackoverflow.com/questions/58289983/low-nvidia-gpu-usage-with-keras-and-tensorflow

如果你发现下拉菜单中没有 Cuda 选项,你需要在设置中把“硬件加速 GPU 计划”关掉并重启电脑。 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有