Comments (2)
This is a good suggestion and something I've thought about a bit. Unfortunately, it's kinda tricky to do correctly.
The backends depend on code compiled into libneuropod.so
. For example, all the backends use code in /internal
and some use code in /bindings
and /core
as well. This effectively means that it's quite likely that a header file change almost anywhere will break ABI compatibility for backends.
We can use tools to track this and ensure we don't break ABI compatibility for backends within a {MAJOR/MINOR}
1 version, but since most header file changes are likely to break it, this approach might not be particularly useful at the moment. Header only/templated classes make finding accidental breakages much more complex as well. This also requires deciding on a versioning strategy and the guarantees we're willing to stick to (e.g. a backend will work with all Neuropod libraries within a specific {MAJOR/MINOR}
1 version, there will be a release with breaking changes at most once a quarter, etc). This also significantly impacts backend loading logic so we have to be thoughtful about our approach.
All of the above also will likely make our CI tooling more complex as well.
Adding version mismatch flexibility will be fairly complex to do (and test) correctly so we need to figure out if it's worth it. Maybe there's another solution that's simpler (e.g. mount backends as a docker volume at runtime instead of building them into the image, inject them the same way you inject the .jar
file, etc.).
1 This depends on if we want to follow semver or not. For example, PyTorch does a minor release every quarter (~90 days), but these minor releases contain backwards incompatible changes (which goes against semver rules): https://github.com/pytorch/pytorch/releases
from neuropod.
This effectively means that it's quite likely that a header file change almost anywhere will break ABI compatibility for backends.
To clarify, we haven't changed a header file in a way that should impact ABI compatibility since June of last year. However, the point of the quote above is that it would be very easy to accidentally break ABI compatibility.
from neuropod.
Related Issues (20)
- Python built-in libraries can't be found when bundled python model and external environment have different versions HOT 1
- Tensorflow backend in IPE mode reports warning "expects data to be 64 byte aligned" on every inference
- Is nueropod designed to support tf.Example or sparse tensor ? HOT 3
- Add support for tf.SavedModel format HOT 7
- [TF] Add tests for saved model support for TF 1.x
- [Notice] Intent to drop support for Python 2.7 + Torch 1.1.0 + TF 1.12.0
- Installation of the torch package to isolated python environment HOT 2
- create_keras_neuropod() does not work with TF 2.6 (AttributeError: 'KerasTensor' object has no attribute 'graph') HOT 1
- Support Torchscript 1.9 in neuropod
- [Notice] Intent to drop support for Python 3.5 + Torch 1.2.0 + TF 1.13.1
- Support for newer versions of Torchscript HOT 14
- Support Dict[str, Union[List[str], torch.Tensor]] as torchscript model input type HOT 2
- SavedModel Load Issue HOT 2
- User provided `node_name_mapping` is not used with TF SavedModels
- Slicing is not done correctly for torch script model HOT 6
- Things to figure out before a major release
- Have a way to set LD_PRELOAD for tensorflow_text HOT 2
- Unlicense dependency should not be included directly in the project HOT 2
- Is there a plan to support Python 3.9+
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from neuropod.