我的桌面有两个gpus,可以使用规范/gpu:1
或/gpu:0
运行Tensorflow。但是,如果我没有指定运行代码的gpu,Tensorflow默认会调用/gpu:0
,我们都知道。
现在我想设置系统,以便它可以根据每个gpu的空闲内存动态分配gpu。例如,如果脚本没有指定运行代码的gpu,则系统首先为其分配/gpu:0
;然后如果另一个脚本现在运行,它将检查/gpu:0
是否有足够的可用内存。如果是,它会继续为其分配/gpu:1
,否则会将background-image: radial-gradient(blue 40%, darkblue 60%);
分配给它。我怎样才能实现它?
后续处理: 我相信上面的问题可能与GPU的虚拟化问题有关。也就是说,如果我可以将桌面中的多个GPU虚拟化为一个GPU,我就能得到我想要的东西。因此,除了Tensorflow的任何设置方法之外,任何关于虚拟化的想法也是受欢迎的。
答案 0 :(得分:0)
TensorFlow通常假设它不与任何人共享GPU,所以我没有看到从TensorFlow内部做到这一点的方法。但是,您可以从外部执行以下操作 - 调用nvidia-smi的shell脚本,用更多内存解析GPU k,然后设置“CUDA_VISIBLE_DEVICES = k”并调用TensorFlow脚本
答案 1 :(得分:0)
灵感来自: How to set specific gpu in tensorflow?
def leave_gpu_with_most_free_ram():
try:
command = "nvidia-smi --query-gpu=memory.free --format=csv"
memory_free_info = _output_to_list(sp.check_output(command.split()))[1:]
memory_free_values = [int(x.split()[0]) for i, x in enumerate(memory_free_info)]
least_busy_idx = memory_free_values.index(max(memory_free_values))
# update CUDA variable
gpus =[least_busy_idx]
setting = ','.join(map(str, gpus))
os.environ["CUDA_VISIBLE_DEVICES"] = setting
print('Left next %d GPU(s) unmasked: [%s] (from %s available)'
% (leave_unmasked, setting, str(available_gpus)))
except FileNotFoundError as e:
print('"nvidia-smi" is probably not installed. GPUs are not masked')
print(e)
except sp.CalledProcessError as e:
print("Error on GPU masking:\n", e.output)
在导入tensorflow之前添加对此函数的调用