TensorFlow Protobuf
Imagine you want to talk to your model deployed with TF-Serving using gPRC and protobuf.
To convert your NumPy array, you'd need to use make_tensor_proto function:
import tensorflow as tf
def np_to_protobuf(data):
return tf.make_tensor_proto(data, shape=data.shape)
Boom - you have a 2 GB dependency to deal with!
TensorFlow Protobuf
This project takes only the part you actually need for that: the protobuf files (compiled).
Installing it
pip install tensorflow-protobuf==2.7.0
Available versions:
- 2.3.0
- 2.7.0
Using it
With it, your code will look like that:
from tensorflow.core.framework import tensor_pb2, tensor_shape_pb2, types_pb2
def dtypes_as_dtype(dtype):
if dtype == "float32":
return types_pb2.DT_FLOAT
raise Exception("dtype %s is not supported" % dtype)
def make_tensor_proto(data):
shape = data.shape
dims = [tensor_shape_pb2.TensorShapeProto.Dim(size=i) for i in shape]
proto_shape = tensor_shape_pb2.TensorShapeProto(dim=dims)
proto_dtype = dtypes_as_dtype(data.dtype)
tensor_proto = tensor_pb2.TensorProto(dtype=proto_dtype, tensor_shape=proto_shape)
tensor_proto.tensor_content = data.tostring()
return tensor_proto
def np_to_protobuf(data):
if data.dtype != "float32":
data = data.astype("float32")
return make_tensor_proto(data)
A bit more verbose, but without the 2GB baggage.
See a full example here: example.py
Have fun!
Building and compiling it
To see how we extract and compile the protobuf files, check tf-serving-proto.sh.
To use it:
TF_VERSION="2.3.0" ./tf-serving-proto.sh
Publishing on PyPI
If you want to build it for other versions and publish it, do this:
export TF_VERSION=2.7.0
echo "__version__ = '${TF_VERSION}'" > version.py
python -m venv env
source env/bin/activate
./tf-serving-proto.sh
pip install wheel twine
python setup.py sdist bdist_wheel
twine check dist/*
twine upload --repository-url https://test.pypi.org/legacy/ dist/*
twine upload dist/*
rm -rf tensorflow/ tensorflow_serving/
rm -rf tensorflow_protobuf.egg-info/ build/ dist/ __pycache__/
rm version.py LICENSE
Release files for tensorflow-protobuf 2.11.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tensorflow-protobuf-2.11.0.tar.gz | 76.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tensorflow_protobuf-2.11.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 235.2 kB
Release files / tensorflow-protobuf-2.11.0.tar.gz
| Download URL | tensorflow-protobuf-2.11.0.tar.gz |
|---|---|
| Size | 76.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bb47200e2dff7ec15727524bcb224e409e48fe184ef93993dac00b0f60b99a77
|
|
BLAKE2b-256 checksum How to use checksums |
3133dad686bfd7fcf37dff6e77cf20b5f445774e4551574f252c27ccf0d160d2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.1 CPython/3.8.10
|
Release files / tensorflow_protobuf-2.11.0-py3-none-any.whl
| Download URL | tensorflow_protobuf-2.11.0-py3-none-any.whl |
|---|---|
| Size | 159.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
58bacf0bc336f0b048e64c0ae61482c33bd321d5fe264b6c75b2d54d4c9da093
|
|
BLAKE2b-256 checksum How to use checksums |
d3e91cc7ffaaec97a6a76b65a08952f9d105307b48499f3e62b88b6ea84f70fc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.1 CPython/3.8.10
|