Skip to content

Commit

Permalink
Change the keras saved_model metadata to use the copied version data …
Browse files Browse the repository at this point in the history
…from keras.

This is trying to isolate the dependency from keras to TF so that OSS keras could
rely on the PIP package only (the proto build deps is not available from PIP).

The version information is current populated with dummy data, and not being consumed by the Keras code. Remove the old field and replace with new version should have no impact for any existing saved saved_model binaries.

PiperOrigin-RevId: 364339229
  • Loading branch information
qlzh727 authored and tensorflower-gardener committed Mar 22, 2021
1 parent 2321565 commit 7fc995e
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 6 deletions.
8 changes: 7 additions & 1 deletion keras/protobuf/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,11 @@ tf_proto_library(
name = "saved_metadata_proto",
srcs = ["saved_metadata.proto"],
cc_api_version = 2,
protodeps = ["@org_tensorflow//tensorflow/core:protos_all"],
protodeps = [":versions_proto"],
)

tf_proto_library(
name = "versions_proto",
srcs = ["versions.proto"],
cc_api_version = 2,
)
9 changes: 6 additions & 3 deletions keras/protobuf/saved_metadata.proto
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ syntax = "proto3";

package third_party.py.keras.protobuf;

import "tensorflow/core/framework/versions.proto";
import "keras/protobuf/versions.proto";

message SavedMetadata {
// Nodes represent trackable objects in the SavedModel. The data for every
Expand All @@ -28,8 +28,8 @@ message SavedMetadata {

// Metadata of an individual Keras object.
message SavedObject {
// Version defined by the code serializing this Keras object.
.tensorflow.VersionDef version = 1;
reserved 1; // For previous VersionDef info.

// Index of the node in the SavedModel SavedObjectGraph.
int32 node_id = 2;
// String path from root (e.g. "root.child_layer")
Expand All @@ -44,4 +44,7 @@ message SavedObject {
// Metadata containing a JSON-serialized object with the non-TensorFlow
// attributes for this Keras object.
string metadata = 5;

// Version defined by the code serializing this Keras object.
third_party.py.keras.protobuf.VersionDef version = 6;
}
49 changes: 49 additions & 0 deletions keras/protobuf/versions.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/* Copyright 2020 The TensorFlow Authors. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
==============================================================================*/
// Protobuf containing the version for each Keras object saved in a SavedModel.

syntax = "proto3";

package third_party.py.keras.protobuf;

// This file is a copy of the TensorFlow Versions proto.
// Keep this file in sync with the source proto definition at
// https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/framework/versions.proto

// Version information for a piece of serialized data
//
// There are different types of versions for each type of data
// (GraphDef, etc.), but they all have the same common shape
// described here.
//
// Each consumer has "consumer" and "min_producer" versions (specified
// elsewhere). A consumer is allowed to consume this data if
//
// producer >= min_producer
// consumer >= min_consumer
// consumer not in bad_consumers
//
// LINT.IfChange
message VersionDef {
// The version of the code that produced this data.
int32 producer = 1;

// Any consumer below this version is not allowed to consume this data.
int32 min_consumer = 2;

// Specific consumer versions which are disallowed (e.g. due to bugs).
repeated int32 bad_consumers = 3;
}
// LINT.ThenChange(third_party/tensorflow/core/framework/versions.proto)
2 changes: 1 addition & 1 deletion keras/saving/saved_model/load.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@

from google.protobuf import message

from tensorflow.core.framework import versions_pb2
from keras import backend
from keras import regularizers
from keras.engine import input_spec
from keras.protobuf import saved_metadata_pb2
from keras.protobuf import versions_pb2
from keras.saving import saving_utils
from keras.saving.saved_model import constants
from keras.saving.saved_model import json_utils
Expand Down
2 changes: 1 addition & 1 deletion keras/saving/saved_model/save.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@

import os

from tensorflow.core.framework import versions_pb2
from keras import backend as K
from keras.protobuf import saved_metadata_pb2
from keras.protobuf import versions_pb2
from keras.saving import saving_utils
from keras.saving.saved_model import constants
from keras.saving.saved_model import save_impl
Expand Down

0 comments on commit 7fc995e

Please sign in to comment.