问题标签 [tensorflow-xla]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
tensorflow - 在运行时更改 TensorFlow 操作设备的位置?
据我所知,TensorFlow 的设计目的是在单个tf.Session.run()
. 是否有一个已知的理想位置来插入代码以即时更改操作设备的位置?
我知道 python 级别的静态方法,但我正在寻找 C++ 级别的东西,以便我可以做类似于负载平衡的事情。
例如,假设我希望 TensorFlow 以交替的方式调度 CPU 和 GPU 的操作(我知道这不太理想)。我如何在运行时执行此操作,以便解决操作依赖性并安排更多操作,将操作的环境更新为不同的设备?这是否最好在操作启动之前使用DeviceMgr
为给定操作的环境更改执行设备来完成ExecutorState::Process(TaggedNode tagged_node, int64 scheduled_usec)
(第 1651 行executor.cc
)?还是我误解了何时计划通过 XLA 执行操作以及我可以更改设备放置的最晚时间是什么时候?
tensorflow - TensorFlow Conv2D 实现?
我试图找到实际 Conv2D 操作的实现在哪里,以便我可以评估内存访问模式。环顾四周,看起来 Conv2D 操作的执行通过contract()
函数调用进入 Eigen。问题是,我似乎无法在 TensorFlow 或 Eigen 源中找到函数的定义或声明。
哪些函数主要负责在 TensorFlow 中执行 Conv2D 操作?我想看看它是如何瘫痪的,一般的内存访问模式是什么,以及原始计算是如何完成的。
此查询专门针对 CPU,因为我已经在一定程度上研究了 GPU 执行。
tensorflow - tensorflow XLA 不生成点文件
我正在尝试遵循有关 XLA 和 JIT 的教程(https://www.tensorflow.org/performance/xla/jit)。根据https://www.tensorflow.org/performance/xla/jit#step_3_run_with_xla,当我运行命令时
它应该产生一个输出,其中包含 XLA 图表的位置。但是,我的输出不包含此信息。
仅生成时间线文件。
构建:Tensor flow r1.3 with XLA JIT for CPU
tensorflow - 张量流中两个相同等级张量之间的广播
我有两个张量x
和s
形状:
我想在维度之间x
和s
通过维度广播点积1
,如下所示:
在哪里
我有这个实现:
我知道这在内存中效率不高,因为tile
. 此外,reshape
's、transpose
'selement-wise
和reduce_sum
s 操作会损害较大张量的性能。有没有其他方法可以让它更干净?
python - Tensorboard 未在 Windows 上填充图形
我编写了简单的 python 程序来将两个值相乘,并期望填充张量板图。
我正在使用 Windows - CPU 机器。
然后在执行我的程序后,它在日志目录路径中生成了所需的图形事件文件,名称为events.out.tfevents.1504266616.L7
我使用以下命令启动 tensorboard:
但是, 下没有图表http://127.0.0.1:5626/#graphs
。
我做错了什么?
tensorflow - 张量流中的索引比收集慢
我正在尝试索引张量以从一维张量中获取切片或单个元素。我发现使用numpy
索引[:]
和slice vs tf.gather
(几乎 30-40% )的方式时存在显着的性能差异。
我还观察到,tf.gather
与 tensor 相比,在标量(循环未堆叠的张量)上使用时会产生很大的开销。这是一个已知的问题 ?
示例代码(低效):
与示例代码(高效)相反:
我知道第一个低效的实现是做更多的拆栈、堆叠然后循环和更多的收集操作,但是当我正在操作的节点顺序是几百个节点时,我没想到会减速 100 倍(拆栈和收集的开销在这么慢的单个标量上,在第一种情况下,我有更多的收集操作,每个操作都在单个元素上操作,而不是偏移张量)。是否有更快的索引方式,我尝试了 numpy 和 slice,结果比收集慢。
tensorflow - 如何转储 tensorflow XLA LLVM IR?
我曾经在 Tensorflow 1.2 中使用以下命令:
export TF_XLA_FLAGS='--dump_ir_before_passes=true --dump_temp_products_to=./tmp'
用于在 Tensorflow 中转储 LLVM IR。但是,这个标志link_to_the_flag_definition的定义文件在 Tensorflow 1.3 中被删除了,我现在想知道如何获得 LLVM IR 转储?
为了您的方便,这里有一个测试文件:
tensorflow - 如何在 fp16 中使用在 fp32 中训练的模型进行 tensorflow 推理
在 NV V100/P100 中是否有任何无缝方式可以实现最佳 fp16 性能?例如,我有一个在 fp32 中训练的模型和实现。该应用程序完美运行。现在,我想探索一下fp16的体验。有什么简单的方法可以实现这一点。
c++ - 无法使用 tensorflow AOT 编译为 CPU 后端创建最终二进制文件
我在这里按照教程进行操作:TensorFlow AOT 编译
根据步骤1和2,我编译了subgraph,生成了header( test_graph_tfmatmul.h
)和object( test_graph_tfmatmul.o
)文件;
根据步骤 3,我使用示例代码(命名为my_code.cc
)来调用子图;
根据第 4 步,我将代码片段添加cc_binary
到现有BUILD
文件 ( //tensorflow/compiler/aot/tests/BUILD
),并尝试使用以下命令创建最终二进制文件:
但我收到以下错误:
欢迎任何建议。谢谢。
tensorflow - 有什么方法可以在 dnn 的 gpu 上融合全连接层(gemm)和激活层(relu/sigmoid)?
通常 dnn 中的一层由 MatMul、BiasAdd、Relu组成,cuBlas 为 MatMul 提供了 Gemm,我们可以在另一个内核中为 GPU 做 BiasAdd 和 Relu。它们是两个 GPU lanuch 调用,有没有办法将它们融合在一起并使其成为一个?我查看了cuBlas, cudnn,但没有找到任何东西。我认为这并不难,因为 BiasAdd 和 Relu 只是元素方面的操作,而融合使其更高效。
这是背景:
我正在开发一个在线预测服务,它是多 dnn 模型集合。通过分析我的程序,我发现我的 CPU 和 GPU 都没有得到充分利用,而是在 GPU 相关的函数调用(如 lanuchKernel)上请求块。似乎libcuda 中有一个大锁。我正在使用 tensorflow,启用了 XLA,所以我使用 nvprof 和 tensorflow HLO 来可视化 GPU 调用,并且只有点和融合(即biasadd 和 relu)操作。虽然做了内核融合,但还是有太多的 lanuchKernel 调用,GPU 利用率只有 60%。我在一个过程中尝试了多 cuda 上下文,改进是微不足道的。
顺便说一句,我正在使用一个 GPU,Tesla P100。