在 python 的运行脚本中关闭 GPU

Posted

技术标签:

【中文标题】在 python 的运行脚本中关闭 GPU【英文标题】:Switch off the GPU in a running script in python 【发布时间】:2021-07-22 22:27:03 【问题描述】:

以下代码激活 GPU 0 并加载必要的库,如 Cuda 等。

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'

当不再需要 GPU 时,如何在运行脚本中关闭它?例如,因为训练模型的评估需要在 CPU 上运行。 我试图改变环境变量。

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'

但是这段代码并没有在运行脚本中关闭 GPU。只能在计算初期使用。

非常感谢任何想法

提前致谢

【问题讨论】:

这通常不会像您已经发现的那样工作。这种方式的器件选择是粗略的。它依赖于 CUDA 运行时在初始化时采样 一次 的环境变量。此后,对 env var 的更改无效。但是 CUDA 有其他方法来选择要使用的设备,即程序化的。因此,如果你想在 TF 中切换 GPU,一个更好的方法是让你的 TF 脚本be aware of multi-gpu usage( 这,我的朋友,实际上是我正在寻找的东西!谢谢 我也尝试使用-1。然后 list_physical_devices('GPU') 显示 0 并且我的 GPU 内存没有使用,但是....我的 GPU 处理器仍在使用,我的工作运行速度提高了 3 倍(小型神经网络)。 【参考方案1】:

在 python 中选择 GPU 的标准方法并不单一,这取决于您在 python 中使用的框架来访问 GPU。

您描述的environment variable 用法有些粗略,其行为与您描述的一样。环境变量会在 CUDA 初始化时影响 CUDA 行为,这通常只会发生一次,通常是在 python 脚本的开头。此后,对环境变量的更改将无效。 CUDA 在初始化时只对其采样一次。然而,在其他方面,这种效果应该或多或少是一致的,与您在 python 中使用 GPU 的方式无关。

除此之外,我们需要讨论一个特定的框架。底层 CUDA 技术 (CUDA C++) 允许框架开发人员动态控制可以在特定点使用哪些 GPU(来自那些通过环境变量“暴露”的 GPU;您不能覆盖它。)这种动态的方法暴露的控制会因框架而异。由于您的问题被标记为tensorflow,因此您可以找到关于 TF 如何公开 GPU 选择/控制here 的一个很好的概述。

具体来说,您要问的是不使用 GPU。我建议您参考“手动设备放置”section。请注意,此处的“设备”指的是 CPU 和 GPU,因此在此方法中“关闭”GPU 使用的方法是使用 CPU 设备,示例如下:

如果您希望特定操作在您选择的设备上运行,而不是自动为您选择的设备,您可以使用 tf.device 创建设备上下文,该上下文中的所有操作都将在相同的指定设备。

tf.debugging.set_log_device_placement(True)

# Place tensors on the CPU
with tf.device('/CPU:0'):
  a = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
  b = tf.constant([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])

# Run on the GPU
c = tf.matmul(a, b)
print(c)

Executing op MatMul in device /job:localhost/replica:0/task:0/device:GPU:0
tf.Tensor(
[[22. 28.]
 [49. 64.]], shape=(2, 2), dtype=float32)

您将看到现在 a 和 b 已分配给 CPU:0。由于没有为 MatMul 操作明确指定设备,TensorFlow 运行时将根据操作和可用设备(本示例中为 GPU:0)选择一个设备,并在需要时自动在设备之间复制张量。

如果您希望 tf.matmul 操作不使用 GPU,只需将其移动到前面的 with 语句的范围内即可。

【讨论】:

以上是关于在 python 的运行脚本中关闭 GPU的主要内容,如果未能解决你的问题,请参考以下文章

Windows处理如果我尝试在python中关闭当前窗口,则关闭整个浏览器

在Android Studio中关闭手机上的应用程序时如何不关闭套接字

我无法在二十一点游戏中关闭我的while循环[关闭]

如何在 GPU 上启用 php 运行 python 脚本? [关闭]

在tkinter中关闭窗口之前执行某个命令[重复]

在 python 中关闭 OSK (tabtip)