diff --git a/tensorflow/python/saved_model/README.md b/tensorflow/python/saved_model/README.md index fe69f3beb01..a5c0aa894f6 100644 --- a/tensorflow/python/saved_model/README.md +++ b/tensorflow/python/saved_model/README.md @@ -3,49 +3,37 @@ [TOC] ## Overview -This document describes SavedModel, the universal serialization format for + +SavedModel is the universal serialization format for [TensorFlow](https://www.tensorflow.org/) models. -SavedModel provides a language-neutral format to save machine-learned models +SavedModel provides a language-neutral format to save machine-learning models that is recoverable and hermetic. It enables higher-level systems and tools to produce, consume and transform TensorFlow models. -## Features +## Guides +* [Using the SavedModel Format](https://www.tensorflow.org/guide/saved_model) +* [Save and load Keras models](https://www.tensorflow.org/guide/keras/save_and_serialize) +* [Save and load with checkpointing in Keras](https://www.tensorflow.org/tutorials/keras/save_and_load) +* [Training checkpoints](https://www.tensorflow.org/guide/checkpoint) +* [Save and load a model using a distribution strategy](https://www.tensorflow.org/tutorials/distribute/save_and_load) -The following is a summary of the features in SavedModel: -* Multiple graphs sharing a single set of variables and assets can be added to a - single SavedModel. Each graph is associated with a specific set of tags to - allow identification during a load or restore operation. -* Support for `SignatureDefs` - * Graphs that are used for inference tasks typically have a set of inputs - and outputs. This is called a `Signature`. - * SavedModel uses [SignatureDefs](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/protobuf/meta_graph.proto) - to allow generic support for signatures that may need to be saved with the graphs. - * For commonly used SignatureDefs in the context of TensorFlow Serving, - please see documentation [here](https://github.com/tensorflow/serving/blob/master/tensorflow_serving/g3doc/signature_defs.md). -* Support for `Assets`. - * For cases where ops depend on external files for initialization, such as - vocabularies, SavedModel supports this via `assets`. - * Assets are copied to the SavedModel location and can be read when loading - a specific meta graph def. -* Support to clear devices before generating the SavedModel. +## [Public API](https://www.tensorflow.org/api_docs/python/tf/saved_model) +* [`tf.saved_model.save`](https://www.tensorflow.org/api_docs/python/tf/saved_model/save) +* [`tf.saved_model.load`](https://www.tensorflow.org/api_docs/python/tf/saved_model/load) +* [`tf.saved_model.SaveOptions`](https://www.tensorflow.org/api_docs/python/tf/saved_model/SaveOptions) +* [`tf.saved_model.LoadOptions`](https://www.tensorflow.org/api_docs/python/tf/saved_model/LoadOptions) +* [`tf.saved_model.Asset`](https://www.tensorflow.org/api_docs/python/tf/saved_model/Asset) +* [`tf.saved_model.contains_saved_model`](https://www.tensorflow.org/api_docs/python/tf/saved_model/contains_saved_model) -The following is a summary of features that are NOT supported in SavedModel. -Higher-level frameworks and tools that use SavedModel may provide these. +### Related Modules and Functions +* [`tf.keras.models.save_model`](https://www.tensorflow.org/api_docs/python/tf/keras/models/save_model) +* [`tf.keras.models.load_model`](https://www.tensorflow.org/api_docs/python/tf/keras/models/load_model) +* [`tf.train.Checkpoint`](https://www.tensorflow.org/api_docs/python/tf/train/Checkpoint) -* Implicit versioning. -* Garbage collection. -* Atomic writes to the SavedModel location. -## Background -SavedModel manages and builds upon existing TensorFlow primitives such as -`TensorFlow Saver` and `MetaGraphDef`. Specifically, SavedModel wraps a [TensorFlow Saver](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/python/training/saver.py). -The Saver is primarily used to generate the variable checkpoints. SavedModel -will replace the existing [TensorFlow Inference Model Format](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/session_bundle/README.md) -as the canonical way to export TensorFlow graphs for serving. - -## Components +## The SavedModel Format A SavedModel directory has the following structure: ``` @@ -57,72 +45,23 @@ variables/ saved_model.pb ``` -* SavedModel protocol buffer - * `saved_model.pb` or `saved_model.pbtxt` - * Includes the graph definitions as `MetaGraphDef` protocol buffers. -* Assets - * Subfolder called `assets`. - * Contains auxiliary files such as vocabularies, etc. -* Extra assets - * Subfolder where higher-level libraries and users can add their own assets - that co-exist with the model, but are not loaded by the graph. - * This subfolder is not managed by the SavedModel libraries. -* Variables - * Subfolder called `variables`. - * Includes output from the [TensorFlow Saver](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/python/training/saver.py). - * `variables.data-?????-of-?????` - * `variables.index` +* SavedModel protocol buffer + * [`saved_model.pb`](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/protobuf/saved_model.proto) + or `saved_model.pbtxt` + * Includes the graph definitions as `MetaGraphDef` protocol buffers. +* Assets + * Subfolder called `assets`. + * Contains auxiliary files such as vocabularies, etc. +* Extra assets + * Subfolder where higher-level libraries and users can add their own + assets that co-exist with the model, but are not loaded by the graph. + * This subfolder is not managed by the SavedModel libraries. +* Variables + * Subfolder called `variables`. + * `variables.data-?????-of-?????` + * `variables.index` -## APIs -The APIs for building and loading a SavedModel are described in this section. - -### Builder -The SavedModel [builder](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/saved_model/builder.py) -is implemented in Python. - -The `SavedModelBuilder` class provides functionality to save multiple meta graph -defs, associated variables and assets. - -To build a SavedModel, the first meta graph must be saved with variables. -Subsequent meta graphs will simply be saved with their graph definitions. If -assets need to be saved and written or copied to disk, they can be provided -when the meta graph def is added. If multiple meta graph defs are associated -with an asset of the same name, only the first version is retained. - -#### Tags -Each meta graph added to the SavedModel must be annotated with user specified -tags, which reflect the meta graph capabilities or use-cases. -More specifically, these tags typically annotate a meta graph with its -functionality (e.g. serving or training), and possibly hardware specific aspects -such as GPU. -In the SavedModel, the meta graph def whose tag-set exactly matches those -specified in the loader API, will be the one loaded by the loader. -If no meta graph def is found matching the specified tags, an error is returned. -For example, a loader with a requirement to serve on GPU hardware would be able -to load only meta graph annotated with tags='serve,gpu' by specifying this set -of tags in tensorflow::LoadSavedModel(...). - - -#### Usage -The typical usage of `builder` is as follows: - -~~~python -export_dir = ... -... -builder = tf.saved_model.builder.SavedModelBuilder(export_dir) -with tf.Session(graph=tf.Graph()) as sess: - ... - builder.add_meta_graph_and_variables(sess, - [tf.saved_model.tag_constants.TRAINING], - signature_def_map=foo_signatures, - assets_collection=foo_assets) -... -with tf.Session(graph=tf.Graph()) as sess: - ... - builder.add_meta_graph(["bar-tag", "baz-tag"]) -... -builder.save() -~~~ +--- #### Stripping Default valued attributes The SavedModelBuilder class allows users to control whether default-valued @@ -152,60 +91,3 @@ models regenerated with newer training binaries. TIP: If you care about forward compatibility, then set `strip_default_attrs` to `True` while using `SavedModelBuilder.add_meta_graph_and_variables` and `SavedModelBuilder.add_meta_graph`. - -### Loader -The SavedModel loader is implemented in C++ and Python. - -#### Python -The Python version of the SavedModel [loader](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/saved_model/loader.py) -provides load and restore capability for a SavedModel. The `load` operation -requires the session in which to restore the graph definition and variables, the -tags used to identify the meta graph def to load and the location of the -SavedModel. Upon a load, the subset of variables and assets supplied as part of -the specific meta graph def, will be restored into the supplied session. - -~~~python -export_dir = ... -... -with tf.Session(graph=tf.Graph()) as sess: - tf.saved_model.loader.load(sess, [tag_constants.TRAINING], export_dir) - ... -~~~ - -#### C++ -The C++ version of the SavedModel [loader](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/cc/saved_model/loader.h) -provides an API to load a SavedModel from a path, while allowing -`SessionOptions` and `RunOptions`. Similar to the Python version, the C++ -version requires the tags associated with the graph to be loaded, to be -specified. The loaded version of SavedModel is referred to as `SavedModelBundle` -and contains the meta graph def and the session within which it is loaded. - -~~~c++ -const string export_dir = ... -SavedModelBundle bundle; -... -LoadSavedModel(session_options, run_options, export_dir, {kSavedModelTagTrain}, - &bundle); -~~~ - -### Constants -SavedModel offers the flexibility to build and load TensorFlow graphs for a -variety of use-cases. For the set of most common expected use-cases, -SavedModel's APIs provide a set of constants in Python and C++ that are easy to -reuse and share across tools consistently. - -#### Tag constants -Sets of tags can be used to uniquely identify a `MetaGraphDef` saved in a -SavedModel. A subset of commonly used tags is specified in: - -* [Python](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/saved_model/tag_constants.py) -* [C++](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/cc/saved_model/tag_constants.h). - -#### Signature constants -SignatureDefs are used to define the signature of a computation supported in a -TensorFlow graph. Commonly used input keys, output keys and method names are -defined in: - -* [Python](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/saved_model/signature_constants.py) -* [C++](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/cc/saved_model/signature_constants.h). -