std::string data{istreambuf_iterator{stream}, istreambuf_iterator{}}
copies a file one character at a time (each increment pays a stream
buffer-boundary check), instead of one bulk read. For small models this
is noise; for a large one it is seconds -- measured costing the bulk of
a ~16s gap between onnx-optimizer's path-based loadModel/saveModel and
the equivalent Python-side onnx.load on an 833MB model
(https://github.com/onnxsim/onnxsim/issues/633's investigation into
loadModel's path-based entry points, used by its own SimplifyPath fast
path).
Sizes the file up front via std::filesystem::file_size and does a single
read() into a pre-sized string; falls back to the old iterator-based
read if the size can't be determined (e.g. a pipe). Correctness is
checked via gcount() rather than the stream's good()/eof() flags, since
a read() that consumes exactly to EOF can set eofbit on a stream
implementation even though every requested byte was read.
(cherry picked from commit 4784075aa7d40a771eaf70c12d0eeaee3d5d3a17)
### Motivation and Context
Fixes #
Signed-off-by: take-cheeze <takechi101010@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Open Neural Network Exchange (ONNX) is an open ecosystem that empowers AI developers to choose the right tools as their project evolves. ONNX provides an open source format for AI models, both deep learning and traditional ML. It defines an extensible computation graph model, as well as definitions of built-in operators and standard data types. Currently we focus on the capabilities needed for inferencing (scoring).
ONNX is widely supported and can be found in many frameworks, tools, and hardware. Enabling interoperability between different frameworks and streamlining the path from research to production helps increase the speed of innovation in the AI community. We invite the community to join us and further evolve ONNX.
Use ONNX
Learn about the ONNX spec
- Overview
- ONNX intermediate representation spec
- Versioning principles of the spec
- Operators documentation
- Operators documentation (latest release)
- Python API Overview
Programming utilities for working with ONNX Graphs
Contribute
ONNX is a community project and the open governance model is described here. We encourage you to join the effort and contribute feedback, ideas, and code. You can participate in the Special Interest Groups and Working Groups to shape the future of ONNX.
Check out our contribution guide to get started.
If you think some operator should be added to ONNX specification, please read this document.
Community meetings
The schedules of the regular meetings of the Steering Committee, the working groups and the SIGs can be found here
Community Meetups are held at least once a year. Content from previous community meetups are at:
- 2020.04.09 https://lf-aidata.atlassian.net/wiki/spaces/DL/pages/14091402/LF+AI+Day+-ONNX+Community+Virtual+Meetup+-+Silicon+Valley+-+2020+April+9
- 2020.10.14 https://lf-aidata.atlassian.net/wiki/spaces/DL/pages/14092138/LF+AI+Day+-+ONNX+Community+Workshop+-+2020+October+14
- 2021.03.24 https://lf-aidata.atlassian.net/wiki/spaces/DL/pages/14092424/Instructions+for+Event+Hosts+-+LF+AI+Data+Day+-+ONNX+Virtual+Community+Meetup+-+March+2021
- 2021.10.21 https://lf-aidata.atlassian.net/wiki/spaces/DL/pages/14093194/LF+AI+Data+Day+ONNX+Community+Virtual+Meetup+-+October+2021
- 2022.06.24 https://lf-aidata.atlassian.net/wiki/spaces/DL/pages/14093969/ONNX+Community+Day+-+2022+June+24
- 2023.06.28 https://lf-aidata.atlassian.net/wiki/spaces/DL/pages/14094507/ONNX+Community+Day+2023+-+June+28
Discuss
We encourage you to open Issues, or use Slack (If you have not joined yet, please use this link to join the group) for more real-time discussion.
Follow Us
Stay up to date with the latest ONNX news. [Facebook] [Twitter/X]
Roadmap
A roadmap process takes place every year. More details can be found in ROADMAP.md.
Installation
ONNX released packages are published in PyPi.
pip install onnx # or pip install onnx[reference] for optional reference implementation dependencies
ONNX weekly packages are published in PyPI to enable experimentation and early testing.
Detailed install instructions, including Common Build Options and Common Errors can be found here
Python ABI3 Compatibility
This package provides abi3-compatible wheels, allowing a single binary wheel to work across multiple Python versions (from 3.12 onwards).
Testing
ONNX uses pytest as test driver. In order to run tests, you will first need to install pytest:
pip install pytest
After installing pytest, use the following command to run tests.
pytest
Development
Check out the contributor guide for instructions.
Reproducible Build Support
ONNX build and release workflows set
SOURCE_DATE_EPOCH
to the source commit timestamp. This removes timestamp-dependent variation from
supported build steps and makes independent build comparison easier.
SOURCE_DATE_EPOCH alone does not guarantee byte-for-byte identical artifacts
across different environments. A reproducibility check must also use the same
source revision, dependency versions, toolchain, target platform, and build
configuration, and then compare the resulting artifacts.
Why this matters
A fixed build timestamp removes one known source of nondeterminism. When independent builds use the same controlled inputs, their artifacts can be compared byte for byte, with cryptographic digests providing a practical shortcut. A byte-for-byte match demonstrates identical outputs, while a mismatch identifies a difference that needs investigation. This comparison complements release provenance attestations; it does not replace them.
Release artifacts are available from PyPI.
License
Trademark
Checkout https://trademarks.justia.com for the trademark.
General rules of the Linux Foundation on Trademark usage
