【发布时间】:2016-10-20 00:15:58
【问题描述】:
我有两个 GPU,想通过 ipynb 同时运行两个不同的网络,但是第一个笔记本总是分配两个 GPU。
使用 CUDA_VISIBLE_DEVICES,我可以隐藏 python 文件的设备,但是我不确定如何在笔记本中执行此操作。
有没有办法将不同的 GPU 隐藏到运行在同一台服务器上的笔记本中?
【问题讨论】:
标签: python environment-variables tensorflow
我有两个 GPU,想通过 ipynb 同时运行两个不同的网络,但是第一个笔记本总是分配两个 GPU。
使用 CUDA_VISIBLE_DEVICES,我可以隐藏 python 文件的设备,但是我不确定如何在笔记本中执行此操作。
有没有办法将不同的 GPU 隐藏到运行在同一台服务器上的笔记本中?
【问题讨论】:
标签: python environment-variables tensorflow
您可以使用os.environ 在笔记本中设置环境变量。在初始化 TensorFlow 之前执行以下操作以将 TensorFlow 限制为第一个 GPU。
import os
os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID" # see issue #152
os.environ["CUDA_VISIBLE_DEVICES"]="0"
您可以仔细检查您是否拥有对 TF 可见的正确设备
from tensorflow.python.client import device_lib
print device_lib.list_local_devices()
我倾向于从 notebook_util 等实用程序模块中使用它
import notebook_util
notebook_util.pick_gpu_lowest_memory()
import tensorflow as tf
【讨论】:
只需使用magics,您就可以在不导入任何内容的情况下更快地做到这一点:
%env CUDA_DEVICE_ORDER=PCI_BUS_ID
%env CUDA_VISIBLE_DEVICES=0
注意所有的环境变量都是字符串,所以不需要使用"。您可以通过运行:%env <name_of_var> 来验证是否设置了 env-variable。或者使用%env查看所有这些。
【讨论】:
env设置会影响其他python脚本吗?因为它看起来像改变 os 的环境变量。
您还可以启用多个 GPU 内核,如下所示:
import os
os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"]="0,2,3,4"
【讨论】: