我有计划使用分布式TensorFlow,我看到TensorFlow可以使用GPU进行训练和测试。 在群集环境中,每台计算机可能有0个或1个或更多GPU,我想在尽可能多的计算机上运行我的TensorFlow Graph到GPU。
我发现在运行tf.Session()时,TensorFlow会在日志消息中提供有关GPU的信息,如下所示:
我的问题是如何从TensorFlow获取有关当前可用GPU的信息? 我可以从日志中获取加载的GPU信息,但我希望以更复杂的程序化方式完成。 我也可以故意使用CUDA_VISIBLE_DEVICES环境变量限制GPU,所以我不想知道从OS内核获取GPU信息的方法。
简而言之,我想要一个像tf.get_available_gpus()这样的函数,如果机器中有两个可用的GPU,它将返回[’/ gpu:0’,’/ gpu:1’]。 我该如何实现呢?
我在特拉字节这个网址 https://telabytes.com/question/preview?qid=7 上找到了答案
确实有一个函数,就是device_lib.list_local_devices(),它是非官方方法,使您可以列出本地进程中可用的设备。 (注意:作为非官方的方法,这会受到向后不兼容的更改。)该函数返回DeviceAttributes Protocal Buffer对象的列表。 您可以按如下方式提取GPU设备的字符串设备名称列表:
注意(至少在TensorFlow 1.4之前),调用device_lib.list_local_devices()将运行一些初始化代码,默认情况下,它将分配所有设备上的所有GPU内存(GitHub Issue)。 要避免这种情况,首先要创建一个具有明显小的per_process_gpu_fraction或allow_growth = True的会话,以防止分配所有内存。
或者
或者
这个是在TensorFlow官方文档中有提到