在任何当前 TPU 复制范围之外构建计算的一部分。
用法
tf.compat.v1.tpu.outside_compilation(
computation:Callable[..., Any],
*args,
**kwargs
) -> Any
参数
-
computation
一个 Python 函数,用于构建要放置在主机上的计算。 -
*args
计算的位置参数。 -
**kwargs
计算的关键字参数。
返回
- 计算返回的张量。
tf.tpu.outside_compilation()
用于在 CPU 上运行 computation
中的操作,而不是在 TPU 上运行。例如,用户可以通过将这些操作显式放置在 CPU 上来运行 TPU 不支持的操作(例如 tf.summary.write())。下面使用外部编译会将操作放在 CPU 上的 computation_with_string_ops
中。
示例用法:
def computation_with_string_ops(x):
# strings types are not supported on TPU's and below ops must
# run on CPU instead.
output = tf.strings.format('1{}', x)
return tf.strings.to_number(output)
def tpu_computation():
# Expected output is 11.
output = tf.tpu.outside_compilation(computation_with_string_ops, 1)
外部编译应该在 TPUReplicateContext 内部调用。也就是说,tf.tpu.outside_compilation()
应该在传递给 tpu.split_compile_and_replicate()
的函数内部调用——这在传递给 TPUStrategy run()
的函数内部调用外部编译时暗示。如果在 TPUReplicateContext 之外调用,则这只会返回 computation
的结果,因此将是 no-op。请注意,外部编译与tf.distribute.experimental.TPUStrategy.merge_call()
不同,因为外部编译中的逻辑是为每个副本单独复制和执行的。另一方面,merge_call()
需要 merge_fn
来聚合来自不同副本的输入,并且只执行一次。
对于放置在 TPU 设备中的变量,包括在 TPUStrategy 范围内创建的变量,外部编译逻辑不得包含变量读/写。对于放置在主机上的变量,这是通过 TPUEstimator 创建的变量的情况,只有在 TPU 计算中的任何其他操作都没有访问该变量时才允许读取/写入变量。来自外部编译集群的变量读/写在 TPU 计算中不可见,反之亦然。因此,如果外部编译逻辑包含这样的主变量读/写操作,并且如果这些变量也被 TPU 计算访问,那么这可能会导致死锁。
在内部,tf.tpu.outside_compilation()
将外部编译属性添加到 computation
中的所有操作。在稍后的图形传递期间,这些具有外部编译属性的操作被提取出来并复制到host-side 图形中。此提取 host-side 图的输入通过一对 XlaSendToHost 和 XlaRecvFromHost 操作从 TPU 计算图发送到主机图。请注意,使用 tf.tpu.outside_compilation()
可能会导致 TPU 和 CPU 之间的张量传输,从而导致不小的性能影响。
相关用法
- Python tf.compat.v1.tpu.bfloat16_scope用法及代码示例
- Python tf.compat.v1.tpu.experimental.AdamParameters用法及代码示例
- Python tf.compat.v1.tpu.experimental.embedding_column用法及代码示例
- Python tf.compat.v1.tpu.experimental.FtrlParameters用法及代码示例
- Python tf.compat.v1.tpu.rewrite用法及代码示例
- Python tf.compat.v1.tpu.shutdown_system用法及代码示例
- Python tf.compat.v1.tpu.experimental.shared_embedding_columns用法及代码示例
- Python tf.compat.v1.tpu.experimental.StochasticGradientDescentParameters用法及代码示例
- Python tf.compat.v1.tpu.shard用法及代码示例
- Python tf.compat.v1.tpu.replicate用法及代码示例
- Python tf.compat.v1.tpu.batch_parallel用法及代码示例
- Python tf.compat.v1.tpu.experimental.AdagradParameters用法及代码示例
- Python tf.compat.v1.train.FtrlOptimizer.compute_gradients用法及代码示例
- Python tf.compat.v1.train.get_or_create_global_step用法及代码示例
- Python tf.compat.v1.train.cosine_decay_restarts用法及代码示例
- Python tf.compat.v1.train.Optimizer用法及代码示例
- Python tf.compat.v1.truncated_normal_initializer.from_config用法及代码示例
- Python tf.compat.v1.train.AdagradOptimizer.compute_gradients用法及代码示例
- Python tf.compat.v1.train.init_from_checkpoint用法及代码示例
- Python tf.compat.v1.truncated_normal_initializer用法及代码示例
注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.compat.v1.tpu.outside_compilation。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。