From 874eba31acdd897e730c8f6f5104fae296011191 Mon Sep 17 00:00:00 2001 From: Nicolas Graves Date: Tue, 8 Jul 2025 14:01:01 +0200 Subject: [PATCH] gnu: Add onnxruntime. * gnu/packages/machine-learning.scm (onnxruntime): New variable. --- gnu/packages/machine-learning.scm | 136 +++++++++++++++++++++++++++++- 1 file changed, 135 insertions(+), 1 deletion(-) diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm index ea09fdb1be80b73961ac2211a4a994ff7f13b874..f42c9f1e8db212d86887ad8ab0f965703968329a 100644 --- a/gnu/packages/machine-learning.scm +++ b/gnu/packages/machine-learning.scm @@ -17,7 +17,7 @@ ;;; Copyright © 2020 Edouard Klein ;;; Copyright © 2020-2025 Vinicius Monego ;;; Copyright © 2020, 2021, 2022, 2023 Maxim Cournoyer -;;; Copyright © 2022, 2023, 2024 Nicolas Graves +;;; Copyright © 2022-2025 Nicolas Graves ;;; Copyright © 2022 Kiran Shila ;;; Copyright © 2022 Wiktor Zelazny ;;; Copyright © 2023 zamfofex @@ -76,6 +76,7 @@ #:use-module (gnu packages boost) #:use-module (gnu packages build-tools) #:use-module (gnu packages c) + #:use-module (gnu packages calendar) #:use-module (gnu packages check) #:use-module (gnu packages cmake) #:use-module (gnu packages compression) @@ -1831,6 +1832,139 @@ aim is to provide all such passes along with ONNX so that they can be re-used with a single function call.") (license license:expat))) +(define-public onnxruntime + (package + (name "onnxruntime") + (version "1.22.0") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/microsoft/onnxruntime") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0z2s79l4wdilssw9lmj319ypyyqi2y0dx0fpwr2yhq8bax3ci50n")))) + (build-system cmake-build-system) + (arguments + (list + #:modules '((guix build cmake-build-system) + (guix build utils) + ((guix build pyproject-build-system) #:prefix py:)) + #:imported-modules (append %cmake-build-system-modules + %pyproject-build-system-modules) + #:configure-flags + #~(list "-Donnxruntime_BUILD_UNIT_TESTS=OFF" + "-Donnxruntime_BUILD_SHARED_LIB=ON" + "-Donnxruntime_ENABLE_LTO=ON" + "-Donnxruntime_ENABLE_PYTHON=ON" + "-Donnxruntime_USE_FULL_PROTOBUF=OFF" + ;; XXX: Fixes build with gcc@14. + "-DCMAKE_CXX_FLAGS=-Wl,-z,noexecstack") + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'chdir + (lambda _ + (chdir "cmake"))) + (add-after 'unpack 'relax-dependencies + (lambda _ + (with-output-to-file "cmake/external/eigen.cmake" + (lambda _ + (display "find_package(Eigen3 REQUIRED)\n"))) + (substitute* "cmake/external/abseil-cpp.cmake" + (("20240722") + (car (string-split #$(package-version + (this-package-input "abseil-cpp")) + #\.)))))) + (add-after 'install 'build-python + (lambda _ + (invoke "python3" "../setup.py" "bdist_wheel"))) + (add-after 'build-python 'install-python + (lambda* (#:key inputs #:allow-other-keys) + ((assoc-ref py:%standard-phases 'install) + #:inputs inputs + #:outputs `(("out" . ,#$output:python))))) + (add-after 'install-python 'add-install-to-pythonpath + (lambda* (#:key inputs #:allow-other-keys) + ((assoc-ref py:%standard-phases 'add-install-to-pythonpath) + #:inputs inputs + #:outputs `(("out" . ,#$output:python))))) + (delete 'check) + (add-after 'add-install-to-pythonpath 'check + (lambda* (#:key tests? #:allow-other-keys) + (with-directory-excursion "../onnxruntime/test/python" + ((assoc-ref py:%standard-phases 'check) + #:tests? tests? + #:test-flags + `(;; XXX: NotImplementedError + "--ignore-glob=quantization/*" + ;; XXX: These tests require transformer models or have + ;; import issues. + "--ignore=transformers/test_generation.py" + "--ignore=transformers/test_gpt2_benchmark.py" + "--ignore=transformers/test_gpt2_to_onnx.py" + "--ignore=transformers/test_optimizer_huggingface_bert.py" + "--ignore=transformers/test_parity_huggingface_gpt_attention.py" + "--ignore=transformers/test_shape_infer_helper.py" + ;; XXX: onnxscript ModuleNotFound + "--ignore=transformers/test_gelu_fusions.py" + "--ignore=transformers/test_gemma3_vision.py" + ;; XXX: Other failing tests. + "-k" ,(string-append + "not test_gelu_is_fused_by_default" + " and not test_inverse")))))) + (add-after 'check 'python-sanity-check + (lambda* (#:key tests? inputs #:allow-other-keys) + ((assoc-ref py:%standard-phases 'sanity-check) + #:inputs `(("sanity-check.py" . ,#$(default-sanity-check.py)) + ,@inputs) + #:outputs `(("out" . ,#$output:python)))))))) + (outputs (list "out" "python")) + (inputs + (list abseil-cpp + boost + cpuinfo + dlpack + c++-gsl + date + eigen-for-onnxruntime + flatbuffers-23.5 + googletest + nlohmann-json + onnx + protobuf + pybind11 + re2-next + safeint + zlib)) + (native-inputs + (list pkg-config + python-einops + python-wrapper + python-numpy + python-parameterized + python-psutil + python-pytest + python-pytorch + python-sentencepiece + python-setuptools-next)) + (propagated-inputs + (list python-coloredlogs + python-flatbuffers + python-protobuf + python-sympy)) + (home-page "https://github.com/microsoft/onnxruntime") + (synopsis "Cross-platform, high performance scoring engine for ML models") + (description + "ONNX Runtime is a performance-focused complete scoring engine +for Open Neural Network Exchange (ONNX) models, with an open +extensible architecture to continually address the latest developments +in AI and Deep Learning. ONNX Runtime stays up to date with the ONNX +standard with complete implementation of all ONNX operators, and +supports all ONNX releases (1.2+) with both future and backwards +compatibility.") + (license license:expat))) + (define-public rxcpp (package (name "rxcpp")