The format your production servers love
SavedModel is TensorFlow's universal deployment format. When you export, TF traces your @tf.function-decorated code and saves a concrete TF graph alongside trained weights. This makes the model language-agnostic and framework-independent for inference — TF Serving, TFLite, TF.js, and Vertex AI all consume SavedModels.
On disk, a SavedModel is a directory:
saved_model_dir/
├── saved_model.pb # graph + signature defs + metadata
├── fingerprint.pb # content fingerprint
├── variables/
│ ├── variables.index
│ └── variables.data-00000-of-00001 # actual weights
└── assets/ # external files (vocabularies, etc.)
For TF Serving, the directory layout must include a version number: /models/my_classifier/1/saved_model.pb. This is how Serving auto-detects new model versions and hot-swaps without restart.