我很困惑,如果输入数据应该使用ParameterServerStrategy
时分片。围绕分布式培训文档的语言建议所有多工作者培训都应该分割输入数据:
在多工作者训练中,数据集分片需要保证收敛性和性能。
表示ParameterServerStrategy
应该对数据进行分片。然而,ParameterServerStrategy
教程声明:
Keras模型。配合参数服务器训练假设每个工作人员接收相同的数据集,除非它被不同地洗牌。因此,通过调用Dataset。Shuffle,确保对数据进行更均匀的迭代。
这意味着我不应该对输入数据进行分片?这是如何工作的呢?
数据应该这样分片:
def dataset_fn(input_context):
dataset = tf.data.Dataset.from_generator(generator, output_types=output_types)
dataset = dataset.shard(input_context.num_input_pipelines, input_context.input_pipeline_id)
dataset = dataset.repeat().shuffle(shuffle_buffer_size)
dataset = dataset.batch(batch_size)
dataset = dataset.prefetch(tf.data.AUTOTUNE)
return dataset
distributed_dataset = tf.keras.utils.experimental.DatasetCreator(dataset_fn)
您不需要传递input_context,它由ParameterServerStrategy
处理