【问题标题】:Change default GPU in TensorFlow更改 TensorFlow 中的默认 GPU
【发布时间】:2016-04-16 19:06:24
【问题描述】:

根据文档,默认 GPU 是 id 最低的那一个:

如果您的系统中有多个 GPU,那么最低的 GPU 默认会选择ID。

是否可以通过命令行或一行代码更改此默认设置?

【问题讨论】:

  • 你可以使用CUDA_VISIBLE_DEVICES env var 让一些 GPU 对 tensorflow 不可见

标签: python tensorflow


【解决方案1】:

Suever's answer 正确显示了如何将您的操作固定到特定 GPU。但是,如果您在同一台机器上运行多个 TensorFlow 程序,建议您在启动进程之前设置 CUDA_VISIBLE_DEVICES 环境变量以暴露不同的 GPU。否则,TensorFlow 将尝试在所有可用的 GPU 上分配几乎全部内存,这会阻止其他进程使用这些 GPU(即使当前进程没有使用它们)。

注意,如果使用CUDA_VISIBLE_DEVICES,设备名称"/gpu:0""/gpu:1"等指的是当前进程中的第0个和第1个可见设备。

【讨论】:

  • 我刚刚做了export CUDA_VISIBLE_DEVICES="0" ,如果我只想使用 GPU = 0,它似乎可以工作。对吗?
  • 如果我想替换默认设置?
  • unset CUDA_VISIBLE_DEVICES 将恢复后续python 会话的默认行为。
  • 数字、0、1等是否按照PCI总线顺序?
【解决方案2】:

只是为了明确环境变量CUDA_VISIBLE_DEVICES的使用:

要仅在 GPU 1 上运行脚本 my_script.py,您可以在 Linux 终端中使用以下命令:

username@server:/scratch/coding/src$ CUDA_VISIBLE_DEVICES=1 python my_script.py 

More 语法示例:

Environment Variable Syntax      Results
CUDA_VISIBLE_DEVICES=1           Only device 1 will be seen
CUDA_VISIBLE_DEVICES=0,1         Devices 0 and 1 will be visible
CUDA_VISIBLE_DEVICES="0,1"       Same as above, quotation marks are optional
CUDA_VISIBLE_DEVICES=0,2,3       Devices 0, 2, 3 will be visible; device 1 is masked
CUDA_VISIBLE_DEVICES=""          No GPU will be visible

仅供参考:

【讨论】:

  • 如果在支持 GPU 计算和 DirectML 的 WSL2 下运行,请将 CUDA_VISIBLE_DEVICES 替换为 DML_VISIBLE_DEVICES
【解决方案3】:

in the documentation 所述,您可以使用tf.device('/gpu:id') 指定默认设备以外的设备。

# This will use the second GPU on your system
with tf.device('/gpu:1'):
    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)
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
print sess.run(c)

【讨论】:

  • 如果使用with tf.device('/gpu:1'),那么每次你想使用不同的GPU时都必须修改代码。
【解决方案4】:

如果您想在第二个 GPU 上运行代码,假设您的机器有两个 GPU,您可以执行以下技巧。

  1. 打开终端

  2. 输入tmux打开tmux(你可以通过sudo apt-get install tmux安装)

  3. tmux 中运行这行代码:CUDA_VISIBLE_DEVICES=1 python YourScript.py

注意:默认情况下,tensorflow 使用第一个 GPU,因此通过上述技巧,您可以在第二个 GPU 上单独运行另一个代码。

希望对您有所帮助!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多