我目前正在使用 tensorflow 2.0 中的分发策略,如下所述https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/distribute/Strategy
我想知道什么必须进入一个with ...scope()
块,什么是“可选”。
具体操作如下。我是否必须将 ... 放入 a with ...scope()
for distribution 才能工作?:
我玩了一会儿,即使我根本不使用,我的代码似乎也能工作with ...scope
。我很困惑这是否有一些我现在没有看到的副作用。
没有的代码scope
:
strat = tf.distribute.MirroredStrategy()
BATCH_SIZE_PER_REPLICA = 5
print('Replicas: ', strat.num_replicas_in_sync)
global_batch_size = (BATCH_SIZE_PER_REPLICA * strat.num_replicas_in_sync)
dataset = tf.data.Dataset.from_tensors(tf.random.normal([100])).repeat(1000).batch(
global_batch_size)
g = Model('m', 10, 10, 1, 3)
dist_dataset = strat.experimental_distribute_dataset(dataset)
@tf.function
def train_step(dist_inputs):
def step_fn(inputs):
print([(v.name, v.device) for v in g.trainable_variables])
return g(inputs)
out = strat.experimental_run_v2(step_fn, args=(dist_inputs,))
for inputs in …
Run Code Online (Sandbox Code Playgroud) 我希望把我_model_fn
对Estimator
成多GPU解决方案.
有没有办法在Esitmator API中执行此操作,或者是否必须显式编写设备放置和同步代码.
我知道我可以用tf.device('gpu:X')
我的模型在GPU上X
.我也知道我可以循环使用可用的GPU名称来跨多个GPU复制我的模型.我也知道我可以为多个GPU使用单个输入队列.
我不知道的是哪些部分(优化器,损耗计算),我实际上可以移动到GPU以及我必须同步计算的地方.
从Cifar10
示例中我可以看出,我只需要同步渐变.
特别是在使用时
train_op = tf.contrib.layers.optimize_loss(
loss=loss,
global_step=tf.contrib.framework.get_global_step(),
learning_rate=learning_rate,
learning_rate_decay_fn=_learning_rate_decay_fn,
optimizer=optimizer)
Run Code Online (Sandbox Code Playgroud)
我不能再打电话optimizer.compute_gradients()
或optimizer.apply_gradients()
手动打电话,因为这是由内部处理的.optimize_loss(..)
我想知道如何在cifar10示例Cifar10-MultiGPU中完成平均渐变,或者这是否是正确的方法Estimator
.
鉴于以下两个示例,在签名时是否有性能改进tf.data.Dataset
?
数据集不在 tf.function 中
import tensorflow as tf
class MyModel(tf.keras.Model):
def call(self, inputs):
return tf.ones([1, 1]) * inputs
model = MyModel()
model2 = MyModel()
@tf.function
def train_step(data):
output = model(data)
output = model2(output)
return output
dataset = tf.data.Dataset.from_tensors(tf.ones([1, 1]))
for data in dataset:
train_step(data)
Run Code Online (Sandbox Code Playgroud)
tf.function 中的数据集
import tensorflow as tf
class MyModel(tf.keras.Model):
def call(self, inputs):
return tf.ones([1, 1]) * inputs
model = MyModel()
model2 = MyModel()
@tf.function
def train():
dataset = tf.data.Dataset.from_tensors(tf.ones([1, 1]))
def train_step(data):
output = model(data) …
Run Code Online (Sandbox Code Playgroud)