张量流的 XLA_GPU 和 XLA_CPU 是啥

Posted

技术标签:

【中文标题】张量流的 XLA_GPU 和 XLA_CPU 是啥【英文标题】:what is XLA_GPU and XLA_CPU for tensorflow张量流的 XLA_GPU 和 XLA_CPU 是什么 【发布时间】:2019-03-27 08:43:22 【问题描述】:

我可以列出使用以下 tensorflow 代码的 gpu 设备:

import tensorflow as tf
from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())

结果是:

[name: "/device:CPU:0"
 device_type: "CPU"
 memory_limit: 268435456
 locality 
 
 incarnation: 17897160860519880862, name: "/device:XLA_GPU:0"
 device_type: "XLA_GPU"
 memory_limit: 17179869184
 locality 
 
 incarnation: 9751861134541508701
 physical_device_desc: "device: XLA_GPU device", name: "/device:XLA_CPU:0"
 device_type: "XLA_CPU"
 memory_limit: 17179869184
 locality 
 
 incarnation: 5368380567397471193
 physical_device_desc: "device: XLA_CPU device", name: "/device:GPU:0"
 device_type: "GPU"
 memory_limit: 21366299034
 locality 
   bus_id: 1
   links 
     link 
       device_id: 1
       type: "StreamExecutor"
       strength: 1
     
   
 
 incarnation: 7110958745101815531
 physical_device_desc: "device: 0, name: Tesla P40, pci bus id: 0000:02:00.0, compute capability: 6.1", name: "/device:GPU:1"
 device_type: "GPU"
 memory_limit: 17336821351
 locality 
   bus_id: 1
   links 
     link 
       type: "StreamExecutor"
       strength: 1
     
   
 
 incarnation: 3366465227705362600
 physical_device_desc: "device: 1, name: Tesla P40, pci bus id: 0000:03:00.0, compute capability: 6.1", name: "/device:GPU:2"
 device_type: "GPU"
 memory_limit: 22590563943
 locality 
   bus_id: 2
   numa_node: 1
   links 
     link 
       device_id: 3
       type: "StreamExecutor"
       strength: 1
     
   
 
 incarnation: 8774017944003495680
 physical_device_desc: "device: 2, name: Tesla P40, pci bus id: 0000:83:00.0, compute capability: 6.1", name: "/device:GPU:3"
 device_type: "GPU"
 memory_limit: 22590563943
 locality 
   bus_id: 2
   numa_node: 1
   links 
     link 
       device_id: 2
       type: "StreamExecutor"
       strength: 1
     
   
 
 incarnation: 2007348906807258050
 physical_device_desc: "device: 3, name: Tesla P40, pci bus id: 0000:84:00.0, compute capability: 6.1"]

我想知道XLA_GPUXLA_CPU是什么?

【问题讨论】:

这是文档。 tensorflow.org/xla 【参考方案1】:

如文档中所述,XLA 代表“加速线性代数”。这是 Tensorflow 相对较新的优化编译器,可以通过将过去的多个 CUDA 内核合并为一个来进一步加快 ML 模型的 GPU 操作(简化,因为这对您的问题并不重要)。

对于您的问题,我的理解是 XLA 与默认的 Tensorflow 编译器足够分离,它们分别注册 GPU 设备,并且对它们视为可见的 GPU 的约束略有不同(有关此内容的更多信息,请参阅 here)。查看您运行的命令的输出,看起来 XLA 正在注册 1 个 GPU,而普通 TF 正在注册 3 个。

我不确定您是遇到问题还是只是好奇,但如果是前者,我建议您查看我在上面链接的问题和 this one。 Tensorflow 对哪些 CUDA/cuDNN 版本可以完美运行非常挑剔,并且您可能正在使用不兼容的版本。 (如果您没有问题,那么希望我的回答的第一部分就足够了。)

【讨论】:

这是否意味着如果“XLA”在设备(CPU或GPU)中被tensorflow注册,我们不需要使用docs中所示的命令/装饰器显式编译我们的代码,即如果tensorflow这样注册设备,代码会自动用XLA编译吗? 如果我正确理解了这个问题,那么没有。实际上要获得 XLA 的好处需要遵循这些文档中列出的路径之一。 这是否意味着识别为 XLA 的 gpu 没有运行 CUDA/CuDNN? 不,所以我认为抽象层在这里混淆了。如上所述,如果您的机器有 1 个与 XLA 兼容的 GPU,则 TF 将在该命令的输出中显示两个 GPU - 1 个用于常规 CUDA 使用,1 个用于 XLA 使用。我不知道是否有可能拥有一个不运行 CUDA 的兼容 XLA 的 GPU(我对此表示怀疑但不确定),但识别为 XLA 的 GPU 只是意味着它与 XLA 兼容。据我了解,对 CUDA 兼容性没有任何影响。 从this comment 引用有关 Github 相关问题的内容:“XLA 为系统上的每个存在创建一个 XLA_GPU 设备,而 TF 仅为适合计算的 GPU 创建一个 GPU 设备(即忽略较慢的 GPU),所以这可以解释您所看到的。TF 在执行此增强过滤时会注销“忽略可见 gpu 设备”,因此您应该在日志中看到它。”

以上是关于张量流的 XLA_GPU 和 XLA_CPU 是啥的主要内容,如果未能解决你的问题,请参考以下文章

带有张量流的 keras 运行良好,直到我添加回调

用于在应用程序中实现张量流的不同的.tflite文件和.txt文件

使用张量流的最佳案例

张量流的变量在循环中产生错误

LSTM 网络张量流的输入

为啥尽管损失衰减且评估结果合理,但张量流的“准确度”值始终为 0