Skip to content

Support textproto as a serialization format #5112

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 13 commits into from
May 12, 2023

Conversation

justinchuby
Copy link
Member

@justinchuby justinchuby commented Apr 10, 2023

Description

Support textproto as a serialization format by using the format option. Users can use

model = onnx.load_model("model.onnx", format="textproto")

to load a textproto model.

This PR also

  • Creates a generic Serializer class to handle serialization.
  • Makes load_model_from_string accept a str input.

Motivation and Context

#4995

@justinchuby justinchuby requested a review from a team as a code owner April 10, 2023 19:23
@justinchuby justinchuby force-pushed the justinchu/textproto branch 3 times, most recently from af3f6f3 to dfa2d42 Compare April 11, 2023 15:44
@justinchuby justinchuby requested a review from a team as a code owner April 11, 2023 15:44
@justinchuby justinchuby force-pushed the justinchu/textproto branch 2 times, most recently from 949ee68 to e8a4870 Compare April 11, 2023 15:56
@justinchuby justinchuby force-pushed the justinchu/textproto branch from 2703e37 to bc9be4e Compare April 15, 2023 01:37
@justinchuby
Copy link
Member Author

From onnx discussion: we actually would like to drop encoding until it is needed so we don't carry apis we don't know we need. @gramalingam @abock

@justinchuby justinchuby marked this pull request as draft May 2, 2023 05:09
@justinchuby justinchuby marked this pull request as ready for review May 2, 2023 16:06
@justinchuby justinchuby requested a review from jcwchen May 2, 2023 16:07
@justinchuby
Copy link
Member Author

I updated the abc to ProtoSerializer to make it very clear that it is only for protobuf representations. Future support for potential in memory IR can then use a more generic name that will not collide with it.

commit 323e664
Merge: 1760cca a550a45
Author: Justin Chu <justinchuby@users.noreply.github.com>
Date:   Tue May 2 09:06:48 2023 -0700

    Merge branch 'main' into justinchu/textproto

commit 1760cca
Author: Justin Chu <justinchu@microsoft.com>
Date:   Tue May 2 09:04:39 2023 -0700

    Create a registry

    Signed-off-by: Justin Chu <justinchu@microsoft.com>

commit d54f573
Author: Justin Chu <justinchu@microsoft.com>
Date:   Tue May 2 08:56:02 2023 -0700

    Remove encoding

    Signed-off-by: Justin Chu <justinchu@microsoft.com>

commit 2eb9648
Author: Justin Chu <justinchuby@users.noreply.github.com>
Date:   Tue May 2 08:45:36 2023 -0700

    Create a generic Serializer class to handle serialization (#6)

commit e4a3feb
Merge: d8b1ae9 b662b2c
Author: Justin Chu <justinchuby@users.noreply.github.com>
Date:   Thu Apr 27 17:07:09 2023 -0700

    Merge branch 'main' into justinchu/textproto

commit d8b1ae9
Merge: e651e44 77cea71
Author: Justin Chu <justinchu@microsoft.com>
Date:   Thu Apr 27 10:10:43 2023 -0700

    Merge branch 'main' into justinchu/textproto

commit e651e44
Author: Justin Chu <justinchu@microsoft.com>
Date:   Thu Apr 27 10:09:59 2023 -0700

    Create encoding

    Signed-off-by: Justin Chu <justinchu@microsoft.com>

commit 9f5a79a
Author: Justin Chu <justinchu@microsoft.com>
Date:   Tue Apr 25 20:49:05 2023 -0700

    Format

    Signed-off-by: Justin Chu <justinchu@microsoft.com>

commit aa1b98b
Merge: cfe8aef 65eb2e8
Author: Justin Chu <justinchuby@users.noreply.github.com>
Date:   Tue Apr 25 09:05:58 2023 -0700

    Merge branch 'main' into justinchu/textproto

commit cfe8aef
Author: Justin Chu <justinchu@microsoft.com>
Date:   Fri Apr 14 20:52:27 2023 -0700

    typing_extensions

    Signed-off-by: Justin Chu <justinchu@microsoft.com>

commit 38f3090
Merge: c59c51d 320004c
Author: Justin Chu <justinchu@microsoft.com>
Date:   Fri Apr 14 18:57:53 2023 -0700

    Merge branch 'main' into justinchu/textproto

commit c59c51d
Author: Justin Chu <justinchu@microsoft.com>
Date:   Fri Apr 14 18:52:58 2023 -0700

    Update docs

    Signed-off-by: Justin Chu <justinchu@microsoft.com>

commit bc9be4e
Author: Justin Chu <justinchu@microsoft.com>
Date:   Fri Apr 14 18:31:20 2023 -0700

    Tests

    Signed-off-by: Justin Chu <justinchu@microsoft.com>

commit 4af7f46
Author: Justin Chu <justinchu@microsoft.com>
Date:   Thu Apr 13 17:20:25 2023 +0000

    Fix test

    Signed-off-by: Justin Chu <justinchu@microsoft.com>

commit 4f57c92
Author: Justin Chu <justinchu@microsoft.com>
Date:   Tue Apr 11 22:46:39 2023 +0000

    Update tests

    Signed-off-by: Justin Chu <justinchu@microsoft.com>

commit e8a4870
Author: Justin Chu <justinchu@microsoft.com>
Date:   Mon Apr 10 19:20:33 2023 +0000

    Support textproto as a serialization format

    Signed-off-by: Justin Chu <justinchu@microsoft.com>

Signed-off-by: Justin Chu <justinchu@microsoft.com>
@justinchuby justinchuby force-pushed the justinchu/textproto branch from 323e664 to ca39bdd Compare May 2, 2023 16:43
@justinchuby
Copy link
Member Author

justinchuby commented May 2, 2023

@jcwchen tested with ort. It fails to load:

>>> import onnx
>>> m = onnx.load_model("onnx/backend/test/data/light/light_resnet50.onnx")
>>> onnx.save_model(m, "resnet50.textproto", "textproto")
>>> import onnxruntime as ort
>>> ort.InferenceSession("resnet50.textproto")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/justinchu/anaconda3/envs/onnx/lib/python3.10/site-packages/onnxruntime/capi/onnxruntime_inference_collection.py", line 383, in __init__
    self._create_inference_session(providers, provider_options, disabled_optimizers)
  File "/home/justinchu/anaconda3/envs/onnx/lib/python3.10/site-packages/onnxruntime/capi/onnxruntime_inference_collection.py", line 424, in _create_inference_session
    sess = C.InferenceSession(session_options, self._model_path, True, self._read_config_from_model)
onnxruntime.capi.onnxruntime_pybind11_state.InvalidProtobuf: [ONNXRuntimeError] : 7 : INVALID_PROTOBUF : Load model from resnet50.textproto failed:Protobuf parsing failed.

@justinchuby justinchuby requested a review from gramalingam May 2, 2023 21:53
Copy link
Member

@jcwchen jcwchen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the experiment and update. If onnxruntime cannot work with textproto for now, it seems better to have another file extension for textproto format. To confirm, do we conclude that we should use ".textproto" in this case?

One more question: have you tried your serialization/deserialization for textproto format with a ONNX model with external data? Ideally it should work normally, but it seems worthy to confirm.

@jcwchen jcwchen added the run release CIs Use this label to trigger release tests in CI label May 2, 2023
Signed-off-by: Justin Chu <justinchu@microsoft.com>
@justinchuby justinchuby force-pushed the justinchu/textproto branch from 27c5a85 to 896e9c7 Compare May 3, 2023 05:15
@justinchuby

This comment was marked as resolved.

Signed-off-by: Justin Chu <justinchu@microsoft.com>
@justinchuby
Copy link
Member Author

@jcwchen Tests updated and suggestions from @xadupre applied. PTAL.

Signed-off-by: Justin Chu <justinchu@microsoft.com>
@justinchuby justinchuby force-pushed the justinchu/textproto branch from f861c27 to 16f6d6c Compare May 4, 2023 00:10
Signed-off-by: Justin Chu <justinchuby@users.noreply.github.com>
Signed-off-by: Justin Chu <justinchuby@users.noreply.github.com>
Signed-off-by: Justin Chu <justinchuby@users.noreply.github.com>
Copy link
Member

@jcwchen jcwchen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gramalingam
Copy link
Contributor

Maybe a test for user-registered custom format would be useful? Some dummy (simple) method, of course. We could try the printer/parser, for example.

@jcwchen
Copy link
Member

jcwchen commented May 11, 2023

Maybe a test for user-registered custom format would be useful? Some dummy (simple) method, of course. We could try the printer/parser, for example.

In offline decision: let's merge this PR first and have another PR to add tests for user-registered custom format.

@jcwchen jcwchen enabled auto-merge (squash) May 11, 2023 16:51
@jcwchen jcwchen merged commit 2e9a675 into onnx:main May 12, 2023
q-ycong-p pushed a commit to q-ycong-p/onnx that referenced this pull request May 18, 2023
Signed-off-by: Justin Chu <justinchu@microsoft.com>
Signed-off-by: Justin Chu <justinchuby@users.noreply.github.com>
Co-authored-by: Chun-Wei Chen <jacky82226@gmail.com>
Signed-off-by: Yu Cong <congyc@amazon.com>
adityagoel4512 pushed a commit to adityagoel4512/onnx that referenced this pull request Jul 28, 2023
Signed-off-by: Justin Chu <justinchu@microsoft.com>
Signed-off-by: Justin Chu <justinchuby@users.noreply.github.com>
Co-authored-by: Chun-Wei Chen <jacky82226@gmail.com>
Signed-off-by: Aditya Goel <agoel4512@gmail.com>
@justinchuby justinchuby deleted the justinchu/textproto branch November 1, 2023 19:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
module: utility Helper modules run release CIs Use this label to trigger release tests in CI
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

4 participants