我想指定GPU来运行我的进程。我把它设置如下:
import tensorflow as tf
with tf.device('/gpu:0'):
a = tf.constant(3.0)
with tf.Session() as sess:
while True:
print sess.run(a)
然而,它仍然在我的两个GPU中分配内存。
| 0 7479 C python 5437MiB
| 1 7479 C python 5437MiB
9条答案
按热度按时间dzjeubhm1#
有3种方法可以实现这一点:
1.使用
CUDA_VISIBLE_DEVICES
环境变量。通过设置环境变量CUDA_VISIBLE_DEVICES="1"
,只显示设备1,通过设置CUDA_VISIBLE_DEVICES="0,1"
,显示设备0和1。在python中,导入os
包后,可以使用os.environ["CUDA_VISIBLE_DEVICES"]="0,1"
行来完成此操作。1.使用
with tf.device('/gpu:2')
并创建图形。然后它将使用GPU设备2运行。1.使用
config = tf.ConfigProto(device_count = {'GPU': 1})
,然后使用sess = tf.Session(config=config)
。这将使用GPU设备1。6psbrbz92#
TF会在每个可见的GPU上分配所有可用的内存,如果不告诉你的话。这里有5种方法可以坚持只使用一个(或几个)GPU。
CUDA_VISIBLE_DEVICES=0,1
:mask_unused_gpus
。它将根据当前内存使用情况过滤掉GPU。这样,您可以一次运行脚本的多个示例,而无需更改代码或设置控制台参数。该功能:
局限性:如果你一次启动多个脚本可能会导致冲突,因为当你构造一个会话时内存不会立即分配。如果你遇到问题,你可以使用一个随机版本,就像在原始的source code: mask_busy_gpus()中一样
pkmbmrz73#
我相信你需要设置
CUDA_VISIBLE_DEVICES=1
。或者你想使用哪一个GPU。如果你只让一个GPU可见,不管你把环境变量设置成什么,你都会在张流中把它称为/gpu:0
。有关该环境变量的详细信息:https://devblogs.nvidia.com/cuda-pro-tip-control-gpu-visibility-cuda_visible_devices/
xqkwcwgp4#
您可以通过在python脚本的开头添加以下内容来修改GPU选项设置:
“0”是你想要使用的GPU的名称。你可以在终端提示符中输入命令nvidia-smi来得到可用GPU的列表。
有了Keras,这2个功能允许选择CPU或GPU,在GPU的情况下,将使用内存的分数。
gywdnpxw5#
参见https://www.tensorflow.org/api_docs/python/tf/config/list_physical_devices
gkn4icbw6#
pxq42qpu7#
在我的多核gpu设置中,我所见过的最优雅、最简洁的方式是:
这将任务分配给gpu设备1。
类似地,在线条上做某事:
os.environ命令可以被看作是一种只暴露你想要运行代码的GPU设备的方法,第二个命令只选择你指定的第一个可用设备。
kyxcudwk8#
唯一的事情,我工作干净,从进程内分配特定的GPU到每个进程在一个池。
3z6pesqy9#
TF 2.9
及更高版本的tensorflow
已更改API,因此更新相同的API,