Announcements
In the next release, we will totally drop support for Windows ARM32.
General
- Added support for new ONNX 1.15 opsets: [IsInf-20](https://github.com/onnx/onnx/blob/main/docs/Changelog.md#IsInf-20), [IsNaN-20](https://github.com/onnx/onnx/blob/main/docs/Changelog.md#IsNaN-20), [DFT-20](https://github.com/onnx/onnx/blob/main/docs/Changelog.md#DFT-20), [ReduceMax-20](https://github.com/onnx/onnx/blob/main/docs/Changelog.md#ReduceMax-20), [ReduceMin-20](https://github.com/onnx/onnx/blob/main/docs/Changelog.md#reducemin-20), [AffineGrid-20](https://github.com/onnx/onnx/blob/main/docs/Changelog.md#AffineGrid-20), [GridSample](https://github.com/onnx/onnx/blob/main/docs/Operators.md#GridSample), [ConstantOfShape-20](https://github.com/onnx/onnx/blob/main/docs/Changelog.md#ConstantOfShape-20), [RegexFullMatch](https://github.com/onnx/onnx/blob/main/docs/Operators.md#RegexFullMatch), [StringConcat](https://github.com/onnx/onnx/blob/main/docs/Operators.md#StringConcat), [StringSplit](https://github.com/onnx/onnx/blob/main/docs/Operators.md#StringSplit), and [ai.onnx.ml.LabelEncoder-4](https://github.com/onnx/onnx/blob/main/docs/Changelog-ml.md#ai.onnx.ml.LabelEncoder-4).
- Updated C/C++ libraries: abseil, date, nsync, googletest, wil, mp11, cpuinfo, safeint, and onnx.
- Added vector optimization code for loongarch architecture.
Build System and Packages
- Dropped CentOS 7 support. All Linux binaries now require glibc version >=2.28, but users can still build the source code for a lower glibc version.
- Added CUDA 12 packages for Python and Nuget.
- Added Python 3.12 packages for ONNX Runtime Inference. ONNX Runtime Training Python 3.12 packages cannot be provided at this time since training packages depend on PyTorch, which does not support Python 3.12 yet.
- Linux binaries (except those in AMD GPU packages) are built in a more secure way that is compliant with BinSkim's default policy (e.g., the binaries no longer have an executable stack).
- Added support for Windows ARM64X for users who build ONNX Runtime from source. No prebuilt package provided yet.
- Removed Windows ARM32 binaries from official packages. Users who still need these binaries can build them from source.
- Added AMD GPU package with ROCm and MiGraphX (Python + Linux only).
- Split ONNX Runtime GPU Nuget package into two packages.
- When building the source code for Linux ARM64 or Android, the C/C++ compiler must support BFloat16. Support for Android NDK 24.x has been removed. Please use NDK 25.x or 26.x instead.
- Link time code generation (LTCG or LTO) is now disabled by default when building from source. To re-enable it, users can add "--enable_lto" to the build command. All prebuilt binaries are still built with LTO.
Core
- Optimized graph inlining.
- Allow custom op to invoke internal thread-pool for parallelism.
- Added support for supplying a custom logger at the session level.
- Added new logging and tracing of session and execution provider options.
- Added new [dynamic ETW provider](https://onnxruntime.ai/docs/performance/tune-performance/logging_tracing.html#Tracing---Windows) that can trace/diagnose ONNX internals while maintaining great performance.
Performance
- Added 4bit quant support on NVIDIA GPU and ARM64.
EPs
TensorRT EP
- Added support for direct load of precompiled TensorRT engines and customizable engine prefix.
- Added Python support for TensorRT plugins via ORT custom ops.
- Fixed concurrent Session::Run bugs.
- Updated calls to deprecated TensorRT APIs (e.g., enqueue_v2 → enqueue_v3).
- Fixed various memory leak bugs.
QNN EP
- Added support for QNN SDK 2.18.
- Added context binary caching and model initialization optimizations.
- Added mixed precision (8/16 bit) quantization support.
- Add device-level session options (soc_model, htp_arch, device_id), extreme_power_saver for htp_performance_mode, and vtcm_mb settings.
- Fixed multi-threaded inference bug.
- Fixed various other bugs and added performance improvements.
- QNN [profiling](https://onnxruntime.ai/docs/execution-providers/QNN-ExecutionProvider.html#configuration-options) of the NPU can be enabled [dynamically with ETW](https://onnxruntime.ai/docs/performance/tune-performance/profiling-tools.html#Qualcomm-QNN-EP) or [write out to CSV](https://onnxruntime.ai/docs/performance/tune-performance/profiling-tools.html#Cross-Platform-CSV-Tracing).
OpenVINO EP
- Added support for OpenVINO 2023.2.
- Added AppendExecutionProvider_OpenVINO_V2 API for supporting new OpenVINO EP options.
DirectML EP
- Updated to [DirectML 1.13.1](https://github.com/microsoft/DirectML/blob/master/Releases.md).
- Updated operators LpPool-18 and AveragePool-19 with dilations.
- Improved Python I/O binding support.
- Added RotaryEmbedding.
- Added support for fusing subgraphs into DirectML execution plans.
- Added new Python API to choose a specific GPU on multi-GPU devices with the DirectML EP.
Mobile
- Added initial support for 4bit quantization on ARM64.
- Extended CoreML/NNAPI operator coverage.
- Added support for YOLOv8 pose detection pre/post processing.
- Added support for macOS in CocoaPods package.
Web
- Added support for external data format.
- Added support for I/O bindings.
- Added support for training.
- Added WebGPU optimizations.
- Transitioned WebGPU out of experimental.
- Added FP16 support for WebGPU.
Training
Large Model Training
- Enabled support for QLoRA (with support for BFloat16).
- Added symbolic shape support for Triton codegen (see [PR](https://github.com/microsoft/onnxruntime/pull/18317)).
- Made improvements to recompute optimizer with easy ON/OFF to allow layer-wise recompute (see [PR](https://github.com/microsoft/onnxruntime/pull/18566)).
- Enabled memory-efficient gradient management. For Mistral, we see ~10GB drop in memory consumption when this feature is ON (see [PR](https://github.com/microsoft/onnxruntime/pull/18924)).
- Enabled embedding sparsity optimizations.
- Added support for Aten efficient attention and Triton Flash Attention (see [PR](https://github.com/microsoft/onnxruntime/pull/17959)).
- Packages now available for CUDA 11.8 and 12.1.
On Device Training
- On-Device training will now support training on the web. This release focuses on federated learning and developer exploration scenarios. More features coming soon in future releases.
Extensions
- Modified gen_processing_model tokenizer model to output int64, unifying output datatype of all tokenizers.
- Implemented support for post-processing of YOLO v8 within the Python extensions package.
- Introduced 'fairseq' flag to enhance compatibility with certain Hugging Face tokenizers.
- Incorporated 'added_token' attribute into the BPE tokenizer to improve CodeGen tokenizer functionality.
- Enhanced the SentencePiece tokenizer by integrating token indices into the output.
- Added support for the custom operator implemented with CUDA kernels, including two example operators.
- Added more tests on the Hugging Face tokenizer and fixed identified bugs.
Known Issues
- The onnxruntime-training package is not yet available in PyPI but can be accessed in ADO as follows:
python -m pip install cerberus flatbuffers h5py numpy>=1.16.6 onnx packaging protobuf sympy setuptools>=41.4.0
pip install -i https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/ORT/pypi/simple/ onnxruntime-training
pip install torch-ort
python -m torch_ort.configure
Installation instructions can also be accessed [here](https://onnxruntime.ai/getting-started).
- For models with int4 kernel only:
- Crash may occur when int4 is applied on Intel CPUs with hybrid core if the E-cores are disabled in BIOS. Fix is in progress to be patched.
- The "neural-speed" library used by int4 kernels has a bug that could lead to out-of-bounds memory read/write.
- Performance regression on the int4 kernel on x64 makes the op following MatMulNBits much slower. Fix is in progress to be patched.
- Current bug in BeamSearch implementation of T5, GPT, and Whisper may break models under heavy inference load using BeamSearch on CUDA. See [19345](https://github.com/microsoft/onnxruntime/pull/19345). Fix is in progress to be patched.
- Full support of ONNX 1.15 opsets is still in progress. A list of new ONNX 1.15 opset support that has been included in this release can be found above in the 'General' section.
- Some Cast nodes will not be removed (see https://github.com/microsoft/onnxruntime/pull/17953): Cast node from higher precision to lower precision (like fp32 to fp16) will be kept. If model result is different from ORT 1.16 and 1.17, check whether some Cast nodes was removed in 1.16 but kept in 1.17.
- When running ONNX Runtime's python 3.12 package on Windows 11, you may see a warning like: “Unsupported Windows version (11). ONNX Runtime supports Windows 10 and above, only.” You may safely ignore it.
Contributions
Contributors to ONNX Runtime include members across teams at Microsoft, along with our community members:
Changming Sun, Yulong Wang, Tianlei Wu, Yi Zhang, Jian Chen, Jiajia Qin, Adrian Lizarraga, Scott McKay, Wanming Lin, pengwa, Hector Li, Chi Lo, Dmitri Smirnov, Edward Chen, Xu Xing, satyajandhyala, Rachel Guo, PeixuanZuo, RandySheriffH, Xavier Dupré, Patrice Vignola, Baiju Meswani, Guenther Schmuelling, Jeff Bloomfield, Vincent Wang, cloudhan, zesongw, Arthur Islamov, Wei-Sheng Chin, Yifan Li, raoanag, Caroline Zhu, Sheil Kumar, Ashwini Khade, liqun Fu, xhcao, aciddelgado, kunal-vaishnavi, Aditya Goel, Hariharan Seshadri, Ye Wang, Adam Pocock, Chen Fu, Jambay Kinley, Kaz Nishimura, Maximilian Müller, Yang Gu, guyang3532, mindest, Abhishek Jindal, Justin Chu, Numfor Tiapo, Prathik Rao, Yufeng Li, cao lei, snadampal, sophies927, BoarQing, Bowen Bao, George Wu, Jiajie Hu, MistEO, Nat Kershaw (MSFT), Sumit Agarwal, Ted Themistokleous, ivberg, zhijiang, Christian Larson, Frank Dong, Jeff Daily, Nicolò Lucchesi, Pranav Sharma, Preetha Veeramalai, Cheng Tang, Xiang Zhang, junchao-loongson, petermcaughan, rui-ren, shaahji, simonjub, trajep, Adam Louly, Akshay Sonawane, Artem Shilkin, Atanas Dimitrov, AtanasDimitrovQC, BODAPATIMAHESH, Bart Verhagen, Ben Niu, Benedikt Hilmes
Brian Lambert, David Justice, Deoksang Kim, Ella Charlaix, Emmanuel Ferdman, Faith Xu, Frank Baele, George Nash, hans00, computerscienceiscool, Jake Mathern, James Baker, Jiangzhuo, Kevin Chen, Lennart Hannink, Lukas Berbuer, Mike Guo, Milos Puzovic, Mustafa Ateş Uzun, Peishen Yan, Ran Gal, Ryan Hill, Steven Roussey, Suryaprakash Shanmugam, Vadym Stupakov, Yiming Hu, Yueqing Zhang, Yvonne Chen, Zhang Lei, Zhipeng Han, aimilefth, gunandrose4u, kailums, kushalpatil07, kyoshisuki, luoyu-intel, moyo1997, tbqh, weischan-quic, wejoncy, winskuo-quic, wirthual, yuwenzho