Skip to content
This repository was archived by the owner on Jul 10, 2025. It is now read-only.

Commit 7c7aba5

Browse files
authored
Update 20201221-tfmot-compression-api.md
1. Example method name changes from optimize to compress_model. 2. Added TF-TRT as an inference target.
1 parent 15900b0 commit 7c7aba5

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

rfcs/20201221-tfmot-compression-api.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
## Objective
1111

12-
Build a Keras-base API and set of guidelines that help compression algorithm developer to implement their own model compression algorithm (e.g. [Weight Clustering](https://arxiv.org/abs/1510.00149), [WEST](https://arxiv.org/abs/1811.08417)) and provide a standard way to testing/benchmark and create their own user API for model developers that includes compressed model deployment to TF serving, TFLite, and tf.js.
12+
Build a Keras-base API and set of guidelines that help compression algorithm developer to implement their own model compression algorithm (e.g. [Weight Clustering](https://arxiv.org/abs/1510.00149), [WEST](https://arxiv.org/abs/1811.08417)) and provide a standard way to testing/benchmark and create their own user API for model developers that includes compressed model deployment to TF serving, TFLite, tf.js, and TF-TRT.
1313

1414
### Goals
1515
* Enables algorithms that optimize the weights of a model but not the activations, which includes all [traditional lossless compression algorithms](https://en.wikipedia.org/wiki/Lossless_compression#:~:text=Lossless%20compression%20is%20a%20class,reconstructed%20from%20the%20compressed%20data.).
@@ -90,10 +90,10 @@ class SVD(algorithm.WeightCompressor):
9090
return [original_layer.kernel]
9191
return []
9292

93-
def optimize(self, to_optimize: tf.keras.Model) -> tf.keras.Model:
93+
def compress_model(self, model: tf.keras.Model) -> tf.keras.Model:
9494
"""Model developer API for optimizing a model."""
9595

96-
def _optimize_layer(layer):
96+
def _compress_layer(layer):
9797
# Require layer to be built so that the SVD-factorized weights
9898
# can be initialized from the weights.
9999
if not layer.built:
@@ -103,13 +103,13 @@ class SVD(algorithm.WeightCompressor):
103103
return algorithm.create_layer_for_training(layer, algorithm=self)
104104

105105
return tf.keras.models.clone_model(
106-
to_optimize, clone_function=_optimize_layer)
106+
model, clone_function=_compress_layer)
107107
```
108108

109109
#### Model developer side
110110
1. The model developer uses the SVD algorithm.
111111
```python
112-
compressed_model = SVD(rank=32).optimize(model)
112+
compressed_model = SVD(rank=32).compress_model(model)
113113

114114
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
115115
compressed_model.compile(optimizer='adam', loss=loss_fn, metrics=['accuracy'])
@@ -318,7 +318,7 @@ We have two steps for user facing API for general cases.
318318

319319
```python
320320
class CustomWeightCompressor(WeightCompressor):
321-
def optimize_training(self, to_optimize: tf.keras.Model) -> tf.keras.Model:
321+
def optimize_model(self, model: tf.keras.Model) -> tf.keras.Model:
322322
"""Model developer API for optimizing a model."""
323323

324324
def _optimize_layer(layer: tf.keras.layers.Layer) -> tf.keras.layers.Layer:
@@ -330,13 +330,13 @@ class CustomWeightCompressor(WeightCompressor):
330330
layer, algorithm=self)
331331

332332
return tf.keras.models.clone_model(
333-
to_optimize, clone_function=_optimize_layer)
333+
model, clone_function=_optimize_layer)
334334

335335

336-
def optimize_inference(self, to_optimize: tf.keras.Model) -> tf.keras.Model:
336+
def compress_model(self, model: tf.keras.Model) -> tf.keras.Model:
337337
"""Model developer API for optimizing a model."""
338338

339-
def _optimize_layer(layer: tf.keras.layers.Layer) -> tf.keras.layers.Layer:
339+
def _compress_layer(layer: tf.keras.layers.Layer) -> tf.keras.layers.Layer:
340340
if not layer.built:
341341
raise ValueError(
342342
'Applying compression currently requires passing in a built model')
@@ -345,7 +345,7 @@ class CustomWeightCompressor(WeightCompressor):
345345
layer, algorithm=self)
346346

347347
return tf.keras.models.clone_model(
348-
to_optimize, clone_function=_optimize_layer)
348+
model, clone_function=_compress_layer)
349349
```
350350

351351
#### Model developer best practice.
@@ -354,14 +354,14 @@ Here's the best practice for general compression algorithm model developer code.
354354

355355
```python
356356
compressor = CustomWeightCompressor()
357-
training_model = compressor.optimize_training(model)
357+
training_model = compressor.optimize_model(model)
358358

359359
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
360360
training_model.compile(optimizer='adam', loss=loss_fn, metrics=['accuracy'])
361361

362362
training_model.fit(x_train, y_train, epochs=2)
363363

364-
compressed_model = compressor.optimize_inference(training_model)
364+
compressed_model = compressor.compress_model(training_model)
365365
compressed_model.evaluate(x_test, y_test, verbose=2)
366366
```
367367

0 commit comments

Comments
 (0)