From de9c460b06b437a44ebb3d795d9ff3cc20a8c4f1 Mon Sep 17 00:00:00 2001 From: Jiri Simsa Date: Wed, 3 Jul 2019 14:12:29 -0700 Subject: [PATCH] [tf.data] Cleanup of tf.data op definitions. cl/223710135 renamed some datasets ops (adding "Experimental" prefix), which introduced a backwards compatibility issue. In particular, if a graph was saved using TensorFlow before cl/223710135, restoring the graph using TensorFlow built after cl/223710135 would fail if the graph contained any of the renamed ops. To address this issue, this CL reintroduces op definitions removed by cl/223710135 and uses `compat.forward_compatible` to transition away from ops that use the (misleading) "Experimental" prefix to the corresponding ones without the prefix. In addition, this CL removes tf.data op definitions for ops that have no kernels. PiperOrigin-RevId: 256436076 --- tensorflow/contrib/data/python/ops/readers.py | 9 +- tensorflow/contrib/data/python/ops/sliding.py | 21 +- .../base_api/api_def_AssertNextDataset.pbtxt | 4 + .../base_api/api_def_AutoShardDataset.pbtxt | 32 + .../api_def_BytesProducedStatsDataset.pbtxt | 5 + .../api_def/base_api/api_def_CSVDataset.pbtxt | 4 + .../api_def_ChooseFastestDataset.pbtxt | 4 + .../base_api/api_def_DatasetCardinality.pbtxt | 21 + .../base_api/api_def_DatasetToTFRecord.pbtxt | 24 + .../api_def_DenseToSparseBatchDataset.pbtxt | 26 + .../api_def_DirectedInterleaveDataset.pbtxt | 21 + ...f_ExperimentalIdentityIndexedDataset.pbtxt | 4 - ...pi_def_ExperimentalIndexedDatasetGet.pbtxt | 4 - ...xperimentalIndexedDatasetMaterialize.pbtxt | 4 - ...mentalMaterializedIndexDatasetHandle.pbtxt | 4 - .../api_def_GroupByReducerDataset.pbtxt | 69 ++ .../api_def_GroupByWindowDataset.pbtxt | 15 + .../api_def_IgnoreErrorsDataset.pbtxt | 8 + .../base_api/api_def_IteratorGetDevice.pbtxt | 8 + .../base_api/api_def_LMDBDataset.pbtxt | 4 + .../api_def_LatencyStatsDataset.pbtxt | 5 + ...pbtxt => api_def_MapAndBatchDataset.pbtxt} | 6 +- .../api_def_MatchingFilesDataset.pbtxt | 4 + ...api_def_MaxIntraOpParallelismDataset.pbtxt | 13 + .../api_def_NonSerializableDataset.pbtxt | 4 + .../api_def_ParallelInterleaveDataset.pbtxt | 22 + .../api_def_ParseExampleDataset.pbtxt | 70 ++ .../api_def_PrivateThreadPoolDataset.pbtxt | 13 + .../base_api/api_def_RandomDataset.pbtxt | 19 + .../base_api/api_def_RebatchDataset.pbtxt | 23 + .../base_api/api_def_ScanDataset.pbtxt | 5 + .../api_def_SetStatsAggregatorDataset.pbtxt | 4 + .../base_api/api_def_SleepDataset.pbtxt | 4 + .../api_def_SlidingWindowDataset.pbtxt | 26 + .../api_def/base_api/api_def_SqlDataset.pbtxt | 23 + .../api_def_StatsAggregatorHandle.pbtxt | 5 + .../api_def_StatsAggregatorSummary.pbtxt | 5 + .../base_api/api_def_TakeWhileDataset.pbtxt | 25 + .../base_api/api_def_ThreadPoolDataset.pbtxt | 13 + .../base_api/api_def_ThreadPoolHandle.pbtxt | 35 + .../base_api/api_def_UnbatchDataset.pbtxt | 5 + .../base_api/api_def_UniqueDataset.pbtxt | 8 + ...f_ExperimentalIdentityIndexedDataset.pbtxt | 6 - ...pi_def_ExperimentalIndexedDatasetGet.pbtxt | 6 - ...xperimentalIndexedDatasetMaterialize.pbtxt | 6 - ...mentalMaterializedIndexDatasetHandle.pbtxt | 6 - ...f_ExperimentalNumaMapAndBatchDataset.pbtxt | 6 - tensorflow/core/kernels/data/dataset_ops.cc | 2 + .../experimental/assert_next_dataset_op.cc | 2 + .../experimental/auto_shard_dataset_op.cc | 2 + .../experimental/choose_fastest_dataset_op.cc | 3 +- .../data/experimental/csv_dataset_op.cc | 2 +- .../dense_to_sparse_batch_dataset_op.cc | 2 + .../directed_interleave_dataset_op.cc | 2 + .../group_by_reducer_dataset_op.cc | 4 + .../group_by_window_dataset_op.cc | 4 + .../experimental/ignore_errors_dataset_op.cc | 2 + .../data/experimental/lmdb_dataset_op.cc | 1 + .../experimental/map_and_batch_dataset_op.cc | 4 + .../experimental/matching_files_dataset_op.cc | 2 + .../non_serializable_dataset_op.cc | 2 + .../parallel_interleave_dataset_op.cc | 4 + .../experimental/parse_example_dataset_op.cc | 2 + .../data/experimental/prefetching_kernels.cc | 2 + .../data/experimental/random_dataset_op.cc | 2 + .../data/experimental/rebatch_dataset_op.cc | 2 + .../data/experimental/scan_dataset_op.cc | 2 + .../set_stats_aggregator_dataset_op.cc | 3 + .../data/experimental/sleep_dataset_op.cc | 9 + .../experimental/sliding_window_dataset_op.cc | 2 + .../data/experimental/sql_dataset_op.cc | 1 + .../data/experimental/stats_aggregator_ops.cc | 7 + .../data/experimental/stats_dataset_ops.cc | 11 +- .../experimental/take_while_dataset_op.cc | 4 + .../experimental/threadpool_dataset_op.cc | 11 + .../data/experimental/to_tf_record_op.cc | 2 + .../data/experimental/unbatch_dataset_op.cc | 2 + .../data/experimental/unique_dataset_op.cc | 2 + .../core/ops/compat/ops_history.v1.pbtxt | 183 ----- .../core/ops/compat/ops_history.v2.pbtxt | 183 ----- .../core/ops/experimental_dataset_ops.cc | 666 +++++++++++++----- .../python/data/experimental/ops/batching.py | 47 +- .../data/experimental/ops/cardinality.py | 7 +- .../data/experimental/ops/distribute.py | 32 +- .../python/data/experimental/ops/error_ops.py | 15 +- .../python/data/experimental/ops/grouping.py | 65 +- .../data/experimental/ops/interleave_ops.py | 18 +- .../data/experimental/ops/matching_files.py | 7 +- .../data/experimental/ops/optimization.py | 49 +- .../data/experimental/ops/parsing_ops.py | 33 +- .../data/experimental/ops/random_ops.py | 9 +- .../python/data/experimental/ops/readers.py | 47 +- .../python/data/experimental/ops/scan_ops.py | 24 +- .../python/data/experimental/ops/sleep.py | 15 +- .../data/experimental/ops/stats_aggregator.py | 11 +- .../python/data/experimental/ops/stats_ops.py | 24 +- .../data/experimental/ops/take_while_ops.py | 18 +- .../data/experimental/ops/threadpool.py | 46 +- .../python/data/experimental/ops/unique.py | 12 +- .../python/data/experimental/ops/writers.py | 9 +- tensorflow/python/data/ops/dataset_ops.py | 59 +- tensorflow/python/data/ops/readers.py | 32 +- .../api/golden/v1/tensorflow.raw_ops.pbtxt | 164 ++++- .../api/golden/v2/tensorflow.raw_ops.pbtxt | 164 ++++- 104 files changed, 1907 insertions(+), 792 deletions(-) create mode 100644 tensorflow/core/api_def/base_api/api_def_AssertNextDataset.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_AutoShardDataset.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_BytesProducedStatsDataset.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_CSVDataset.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_ChooseFastestDataset.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_DatasetCardinality.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_DatasetToTFRecord.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_DenseToSparseBatchDataset.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_DirectedInterleaveDataset.pbtxt delete mode 100644 tensorflow/core/api_def/base_api/api_def_ExperimentalIdentityIndexedDataset.pbtxt delete mode 100644 tensorflow/core/api_def/base_api/api_def_ExperimentalIndexedDatasetGet.pbtxt delete mode 100644 tensorflow/core/api_def/base_api/api_def_ExperimentalIndexedDatasetMaterialize.pbtxt delete mode 100644 tensorflow/core/api_def/base_api/api_def_ExperimentalMaterializedIndexDatasetHandle.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_GroupByReducerDataset.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_GroupByWindowDataset.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_IgnoreErrorsDataset.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_IteratorGetDevice.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_LMDBDataset.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_LatencyStatsDataset.pbtxt rename tensorflow/core/api_def/base_api/{api_def_ExperimentalNumaMapAndBatchDataset.pbtxt => api_def_MapAndBatchDataset.pbtxt} (85%) create mode 100644 tensorflow/core/api_def/base_api/api_def_MatchingFilesDataset.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_MaxIntraOpParallelismDataset.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_NonSerializableDataset.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_ParallelInterleaveDataset.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_ParseExampleDataset.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_PrivateThreadPoolDataset.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_RandomDataset.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_RebatchDataset.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_ScanDataset.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_SetStatsAggregatorDataset.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_SleepDataset.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_SlidingWindowDataset.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_SqlDataset.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_StatsAggregatorHandle.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_StatsAggregatorSummary.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_TakeWhileDataset.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_ThreadPoolDataset.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_ThreadPoolHandle.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_UnbatchDataset.pbtxt create mode 100644 tensorflow/core/api_def/base_api/api_def_UniqueDataset.pbtxt delete mode 100644 tensorflow/core/api_def/java_api/api_def_ExperimentalIdentityIndexedDataset.pbtxt delete mode 100644 tensorflow/core/api_def/java_api/api_def_ExperimentalIndexedDatasetGet.pbtxt delete mode 100644 tensorflow/core/api_def/java_api/api_def_ExperimentalIndexedDatasetMaterialize.pbtxt delete mode 100644 tensorflow/core/api_def/java_api/api_def_ExperimentalMaterializedIndexDatasetHandle.pbtxt delete mode 100644 tensorflow/core/api_def/java_api/api_def_ExperimentalNumaMapAndBatchDataset.pbtxt diff --git a/tensorflow/contrib/data/python/ops/readers.py b/tensorflow/contrib/data/python/ops/readers.py index 2e759f09a1f..1ea118607d2 100644 --- a/tensorflow/contrib/data/python/ops/readers.py +++ b/tensorflow/contrib/data/python/ops/readers.py @@ -17,6 +17,7 @@ from __future__ import absolute_import from __future__ import division from __future__ import print_function +from tensorflow.python.compat import compat from tensorflow.python.data.experimental.ops import readers from tensorflow.python.data.ops import dataset_ops from tensorflow.python.data.ops import readers as core_readers @@ -390,8 +391,12 @@ class LMDBDataset(dataset_ops.DatasetSource): """ self._filenames = ops.convert_to_tensor( filenames, dtype=dtypes.string, name="filenames") - variant_tensor = gen_experimental_dataset_ops.experimental_lmdb_dataset( - self._filenames, **self._flat_structure) + if compat.forward_compatible(2019, 8, 3): + variant_tensor = gen_experimental_dataset_ops.lmdb_dataset( + self._filenames, **self._flat_structure) + else: + variant_tensor = gen_experimental_dataset_ops.experimental_lmdb_dataset( + self._filenames, **self._flat_structure) super(LMDBDataset, self).__init__(variant_tensor) @property diff --git a/tensorflow/contrib/data/python/ops/sliding.py b/tensorflow/contrib/data/python/ops/sliding.py index 672ead9c117..c329b6559f9 100644 --- a/tensorflow/contrib/data/python/ops/sliding.py +++ b/tensorflow/contrib/data/python/ops/sliding.py @@ -17,6 +17,7 @@ from __future__ import absolute_import from __future__ import division from __future__ import print_function +from tensorflow.python.compat import compat from tensorflow.python.data.ops import dataset_ops from tensorflow.python.data.util import nest from tensorflow.python.framework import dtypes @@ -41,12 +42,20 @@ class _SlideDataset(dataset_ops.UnaryDataset): input_structure = dataset_ops.get_structure(input_dataset) self._element_spec = nest.map_structure( lambda component_spec: component_spec._batch(None), input_structure) # pylint: disable=protected-access - variant_tensor = ged_ops.experimental_sliding_window_dataset( - self._input_dataset._variant_tensor, # pylint: disable=protected-access - window_size=self._window_size, - window_shift=self._window_shift, - window_stride=self._window_stride, - **self._flat_structure) + if compat.forward_compatible(2019, 8, 3): + variant_tensor = ged_ops.sliding_window_dataset( + self._input_dataset._variant_tensor, # pylint: disable=protected-access + window_size=self._window_size, + window_shift=self._window_shift, + window_stride=self._window_stride, + **self._flat_structure) + else: + variant_tensor = ged_ops.experimental_sliding_window_dataset( + self._input_dataset._variant_tensor, # pylint: disable=protected-access + window_size=self._window_size, + window_shift=self._window_shift, + window_stride=self._window_stride, + **self._flat_structure) super(_SlideDataset, self).__init__(input_dataset, variant_tensor) @property diff --git a/tensorflow/core/api_def/base_api/api_def_AssertNextDataset.pbtxt b/tensorflow/core/api_def/base_api/api_def_AssertNextDataset.pbtxt new file mode 100644 index 00000000000..c97b807713f --- /dev/null +++ b/tensorflow/core/api_def/base_api/api_def_AssertNextDataset.pbtxt @@ -0,0 +1,4 @@ +op { + graph_op_name: "AssertNextDataset" + visibility: HIDDEN +} diff --git a/tensorflow/core/api_def/base_api/api_def_AutoShardDataset.pbtxt b/tensorflow/core/api_def/base_api/api_def_AutoShardDataset.pbtxt new file mode 100644 index 00000000000..403499e9b6f --- /dev/null +++ b/tensorflow/core/api_def/base_api/api_def_AutoShardDataset.pbtxt @@ -0,0 +1,32 @@ +op { + graph_op_name: "AutoShardDataset" + visibility: HIDDEN + in_arg { + name: "input_dataset" + description: <