summaryrefslogtreecommitdiff
path: root/gnu/packages/machine-learning.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/machine-learning.scm')
-rw-r--r--gnu/packages/machine-learning.scm102
1 files changed, 65 insertions, 37 deletions
diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm
index 4f47334a80..b72c442fc0 100644
--- a/gnu/packages/machine-learning.scm
+++ b/gnu/packages/machine-learning.scm
@@ -4106,7 +4106,7 @@ on quantized 8-bit tensors.")
(define-public xnnpack
;; There's currently no tag on this repo.
(let ((version "0.0")
- (commit "51a987591a6fc9f0fc0707077f53d763ac132cbf")
+ (commit "08f1489fc815e8f121d4d2676c4863d2b51bfe73")
(revision "3"))
(package
(name "xnnpack")
@@ -4119,34 +4119,14 @@ on quantized 8-bit tensors.")
(file-name (git-file-name name version))
(sha256
(base32
- "1rzby82xq8d0rl1d148yz88jh9cpsw5c8b2yw7yg39mi7qmr55rm"))
- ;; Some tests fail to link as they use internal symbols, which are
- ;; not included in the shared library.
- ;; XXX: Additionally, these tests fail on i686 due to incorrect results:
- ;; 171 - f32-vlrelu-test (Failed)
- ;; 211 - qs8-gavgpool-minmax-fp32-test (Failed)
- ;; 224 - qu8-avgpool-minmax-fp32-test (Failed)
- ;; 228 - qu8-gavgpool-minmax-fp32-test (Failed)
- ;; 263 - x32-packx-test (Failed)
- (patches (search-patches "xnnpack-remove-broken-tests.patch"))
+ "00jjhz0nfggbdnqqvcznba03pcyy7gssd24yhhzjhincnz9qh8jr"))
(modules '((guix build utils)
(ice-9 ftw)
(ice-9 textual-ports)
(srfi srfi-26)))
(snippet
'(begin
- ;; Remove autogenerated files
- (for-each
- (lambda (dir)
- (let ((gendir (string-append "src/" dir "/gen")))
- (when (file-exists? gendir)
- (delete-file-recursively gendir)
- ;; Needed for the scripts generating the files
- (mkdir gendir))))
- (scandir "src" (negate (cut member <> '("." "..")))))
- (delete-file-recursively "google3")
- (delete-file "cmake/microkernels.cmake")
- ;; Additional autogenerated files which contain the string
+ ;; Remove autogenerated files, which contain the string
;; "Auto-generated file"
(for-each
(lambda (dir)
@@ -4159,8 +4139,18 @@ on quantized 8-bit tensors.")
(get-string-all port)
"Auto-generated file")))
(delete-file path))))
- (scandir dir (negate (cut member <> '("." ".."))))))
- '("test" "bench" "eval" "models" "src/enums" "src/xnnpack"))))))
+ (scandir dir (negate (cut member <> '("." ".." "simd"))))))
+ (cons*
+ "test" "bench" "eval" "models" "src/enums" "src/xnnpack"
+ "gen" "cmake/gen"
+ (filter
+ identity
+ (map
+ (lambda (dir)
+ (let ((path
+ (string-append "src/" dir "/gen")))
+ (and (file-exists? path) path)))
+ (scandir "src" (negate (cut member <> '("." ".."))))))))))))
(build-system cmake-build-system)
(arguments
(list
@@ -4169,7 +4159,11 @@ on quantized 8-bit tensors.")
"-DBUILD_SHARED_LIBS=ON"
"-DCMAKE_POSITION_INDEPENDENT_CODE=ON"
"-DXNNPACK_LIBRARY_TYPE=shared"
- "-DXNNPACK_BUILD_BENCHMARKS=FALSE")
+ "-DXNNPACK_BUILD_BENCHMARKS=FALSE"
+ ;; Tests fail to build with -DXNNPACK_LIBRARY_TYPE=shared:
+ ;; https://github.com/google/XNNPACK/issues/6285
+ "-DXNNPACK_BUILD_TESTS=OFF")
+ #:tests? #f
#:modules '((ice-9 ftw)
(guix build cmake-build-system)
(guix build utils))
@@ -4179,27 +4173,61 @@ on quantized 8-bit tensors.")
(lambda _
(substitute* "CMakeLists.txt"
(("TARGET_INCLUDE_DIRECTORIES\\((pthreadpool|cpuinfo).*") "")
- ((".*IF\\(NOT TARGET gtest\\).*")
- "IF(FALSE)\n")
- (("SET\\(CMAKE_CXX_STANDARD 11\\)")
- "SET(CMAKE_CXX_STANDARD 14)")
(("AMD64") "x86_64"))))
(add-after 'patch-source-shebangs 'generate-files
(lambda _
+ ;; This script just calls two other scripts.
+ (delete-file "scripts/generate-tests-and-benchmarks.sh")
+ ;; The bash scripts run all jobs at once and then wait, so we
+ ;; convert them to Makefiles.
(for-each
(lambda (name)
+ (define counter 0) ; For the targets
+ (define target-deps "")
(when (and (string-prefix? "generate" name)
- (string-suffix? ".sh" name)
- (not (equal? "generate-amalgamation.sh" name)))
- (display (string-append name "\n"))
- (invoke "bash" (string-append "scripts/" name))))
+ (string-suffix? ".sh" name))
+ (let ((file (string-append "scripts/" name)))
+ (substitute* file
+ ;; Turn the commands into targets and remove trailing
+ ;; '&' characters
+ (("(.*(\\.sh|\\.py|-o |--output)[^&]*)&?[[:space:]]*$" _ command)
+ (begin
+ (set! counter (+ counter 1))
+ (string-append "target" (number->string counter)
+ ":" target-deps
+ "\n\t" command "\n")))
+ (("[[:space:]]*wait[[:space:]]*") "")
+ ;; The commands after this line depend on the
+ ;; previous commands in the file.
+ (("JIT requires assembly files to be generated first.*" all)
+ (begin
+ (set! target-deps
+ (string-append
+ target-deps " target"
+ (string-join
+ (map number->string (iota counter 1)) " target")))
+ all)))
+ (display (string-append "Running " name "\n"))
+ (apply invoke "make" "-s" "-f" file "-j"
+ (number->string (parallel-job-count))
+ (map
+ (lambda (i)
+ (string-append "target" (number->string i)))
+ (iota counter 1))))))
(scandir "scripts"))
;; These need to run after the above scripts
(display "Remaining files\n")
(invoke "python3" "tools/update-microkernels.py")
- (substitute* "tools/amalgamate-microkernels.py"
- (("BUILD") "BUILD.bazel"))
- (invoke "bash" "scripts/generate-amalgamation.sh"))))))
+ (invoke "python3" "tools/update-microkernels.py" "-a")
+ (invoke "python3" "tools/generate-lut-norm-test.py"
+ "--spec" "test/u8-lut32norm.yaml"
+ "--output" "test/u8-lut32norm.cc")
+ (invoke "python3" "tools/generate-gemm-test.py"
+ "--spec" "test/qd8-f16-qb4w-gemm-minmax.yaml"
+ "--output-test" "test/qd8-f16-qb4w-gemm-minmax.cc")
+ (invoke "python3" "tools/generate-gemm-test.py"
+ "--spec" "test/qd8-f32-qb4w-gemm-minmax.yaml"
+ "--output-test" "test/qd8-f32-qb4w-gemm-minmax.cc"))))))
(inputs
(list clog
cpuinfo