* [bug#63897] [PATCH v2] gnu: tensorflow_lite: Update to 2.12.0
2023-06-04 23:28 [bug#63897] [PATCH] gnu: tensorflow_lite: Update to 2.12.0 Andy Tai
@ 2023-06-04 23:50 ` Andy Tai
2023-06-06 8:41 ` [bug#63897] [PATCH v3] gnu: tensorflow-lite: " Andy Tai
` (4 subsequent siblings)
5 siblings, 0 replies; 11+ messages in thread
From: Andy Tai @ 2023-06-04 23:50 UTC (permalink / raw)
To: 63897; +Cc: Andy Tai
* gnu/packages/algebra.scm (eigen-for-tensorflow-lite): Remove variable
* gnu/packages/machine-learning.scm (tensorflow-lite): Update to 2.12.0
[arguments] (configure-flags): Turn on GPU and RUY use; Use cmake to
find packages already in Guix as dependencies for absl-cpp, eigen,
flatbuffer, neon2ssl, cpuinfo, ruy.
[arguments] (phases): Remove operations setting up absl, eigen, ruy,
and neon2ssl as native inouts as now we use Guix's packages of these
as dependencies
[arguments] (inputs): Add cpuinfo, eigen, fp16, mesa-header, opencl,
pthreadpool, ruy, vulkan and xnnpack as explicit inputs
[arguments] (native-inputs): Remove local setup of neon2ssl and ruy
as we now use Guix's packages of these as explicit dependencies
* gnu/packages/maths.scm: Remove extra statement
* gnu/packages/serialization.scm (flatbuffers-next-shared): New variable,
flatbuffers-next built with -fPIC as needed by tensorflow-lite
---
gnu/packages/algebra.scm | 32 --------
gnu/packages/machine-learning.scm | 121 ++++++++++++++++--------------
gnu/packages/maths.scm | 1 -
gnu/packages/serialization.scm | 12 +++
4 files changed, 78 insertions(+), 88 deletions(-)
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index 3babf90b3c..81df0c97ac 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -1155,38 +1155,6 @@ (define-public eigen-for-tensorflow
(substitute* "test/CMakeLists.txt"
(("ei_add_test\\(stddeque") "#")))))))))))
-(define-public eigen-for-tensorflow-lite
- ;; This commit was taken from
- ;; tensorflow/lite/tools/cmake/modules/eigen.cmake
- (let ((commit "d10b27fe37736d2944630ecd7557cefa95cf87c9")
- (revision "1"))
- (package (inherit eigen)
- (name "eigen-for-tensorflow-lite")
- (version (git-version "3.3.7" revision commit))
- (source (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://gitlab.com/libeigen/eigen")
- (commit commit)))
- (sha256
- (base32
- "0v8a20cwvwmp3hw4275b37frw33v92z0mr8f4dn6y8k0rz92hrrf"))
- (file-name (git-file-name name version))
- (modules '((guix build utils)))
- (snippet
- ;; Ther are test failures in the "unsupported" directory, but
- ;; maintainers say it's unsupported anyway, so just skip
- ;; them.
- '(begin
- (substitute* "unsupported/CMakeLists.txt"
- (("add_subdirectory\\(test.*")
- "# Do not build the tests for unsupported features.\n"))))))
- (arguments
- (substitute-keyword-arguments (package-arguments eigen)
- ((#:phases phases)
- `(modify-phases ,phases
- (delete 'disable-some-tests))))))))
-
(define-public xtensor
(package
(name "xtensor")
diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm
index c9bc5e8b68..3740206b86 100644
--- a/gnu/packages/machine-learning.scm
+++ b/gnu/packages/machine-learning.scm
@@ -54,6 +54,7 @@ (define-module (gnu packages machine-learning)
#:use-module (gnu packages)
#:use-module (gnu packages adns)
#:use-module (gnu packages algebra)
+ #:use-module (gnu packages assembly)
#:use-module (gnu packages audio)
#:use-module (gnu packages autotools)
#:use-module (gnu packages base)
@@ -88,6 +89,7 @@ (define-module (gnu packages machine-learning)
#:use-module (gnu packages ninja)
#:use-module (gnu packages ocaml)
#:use-module (gnu packages onc-rpc)
+ #:use-module (gnu packages opencl)
#:use-module (gnu packages parallel)
#:use-module (gnu packages perl)
#:use-module (gnu packages pkg-config)
@@ -107,6 +109,7 @@ (define-module (gnu packages machine-learning)
#:use-module (gnu packages swig)
#:use-module (gnu packages time)
#:use-module (gnu packages tls)
+ #:use-module (gnu packages vulkan)
#:use-module (gnu packages video)
#:use-module (gnu packages web)
#:use-module (gnu packages xml)
@@ -2642,7 +2645,7 @@ (define-public tensorflow
(define-public tensorflow-lite
(package
(name "tensorflow-lite")
- (version "2.5.0")
+ (version "2.12.0")
(source
(origin
(method git-fetch)
@@ -2652,35 +2655,56 @@ (define-public tensorflow-lite
(file-name (git-file-name name version))
(sha256
(base32
- "1jdw2i1rq06zqd6aabh7bbm0avsg4pygnfmd7gviv0blhih9054l"))))
+ "051knmq6ysg4936d9baaqsx6j3rfsp4ffi2pwrxx4llan682rvpi"))))
(build-system cmake-build-system)
(arguments
`(#:tests? #false ; no "check" target
#:build-type "Release"
#:configure-flags
(list
- "-DTFLITE_ENABLE_GPU=OFF"
- "-DTFLITE_ENABLE_RUY=OFF"
+ ;"--trace"
+ "-DTFLITE_ENABLE_INSTALL=ON"
+ ;; so cmake can be used to find this from other packages
+
+ "-DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON"
+ ;; Use Guix's own packages as dependencies.
+
+ "-DTFLITE_ENABLE_GPU=ON"
+ "-DTFLITE_ENABLE_RUY=ON"
+
+ ;; TO DO: turn on Farmhash
+ ;"-DSYSTEM_FARMHASH=ON"
+
+
+ (string-append "-Dabsl_DIR=" (assoc-ref %build-inputs "abseil-cpp")
+ "/lib/cmake/absl")
+ (string-append "-DEigen3_DIR=" (assoc-ref %build-inputs "eigen")
+ "/share/eigen3/cmake")
+ (string-append "-DFlatBuffers_DIR=" (assoc-ref %build-inputs "flatbuffers")
+ "/lib/cmake/flatbuffers")
+ (string-append "-DNEON_2_SSE_DIR=" (assoc-ref %build-inputs "neon2sse")
+ "/lib/cmake/NEON_2_SSE")
+ (string-append "-Dcpuinfo_DIR=" (assoc-ref %build-inputs "cpuinfo")
+ "/share/cpuinfo")
+ (string-append "-Druy_DIR=" (assoc-ref %build-inputs "ruy")
+ "/lib/cmake/ruy")
;; TODO: The build system attempts to build xnnpack from source. We
;; would like to use our xnnpack package here, but this requires more
;; work.
"-DTFLITE_ENABLE_XNNPACK=OFF"
- ;; Pretend we've already fetched abseil. We won't actually build it
- ;; but use the existing package.
- "-Dabseil-cpp_POPULATED=TRUE"
-
- ;; Don't fetch the sources. We have already built flatbuffers.
- "-Dflatbuffers_POPULATED=TRUE"
+ ;;; Don't fetch the sources. We have these already
+ "-Degl_headers_POPULATED=TRUE"
+ "-Dfp16_headers_POPULATED=TRUE"
+ "-Dopencl_headers_POPULATED=TRUE"
+ "-Dopengl_headers_POPULATED=TRUE"
+ "-Dvulkan_headers_POPULATED=TRUE"
"-DFFT2D_SOURCE_DIR=/tmp/fft2d"
- "-Dneon2sse_SOURCE_DIR=/tmp/neon2sse"
- "-Dneon2sse_BINARY_DIR=/tmp/neon2sse-bin"
"-DFARMHASH_SOURCE_DIR=/tmp/farmhash"
"-Dgemmlowp_SOURCE_DIR=/tmp/gemmlowp"
- (string-append "-DRUY_SOURCE_DIR="
- (assoc-ref %build-inputs "ruy-src")))
+ )
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'chdir
@@ -2689,20 +2713,19 @@ (define-public tensorflow-lite
(lambda* (#:key inputs #:allow-other-keys)
;; Use external cmake finders instead of these stubs that won't
;; find anything but the bundled sources.
- (delete-file "tools/cmake/modules/Findabsl.cmake")
- (delete-file "tools/cmake/modules/Findeigen.cmake")
+ ;; TO DO: properly use Guix's pthreaqdpool
+ ;; roght now not using pthreadpool because
+ ;; we are not enabling xnnpack
+ (substitute* "CMakeLists.txt"
+ (("if\\(NOT DEFINED PTHREADPOOL_SOURCE_DIR\\)")
+ "if(false)"))
(substitute* "CMakeLists.txt"
- (("find_package\\(eigen REQUIRED")
- "find_package(eigen REQUIRED NAMES Eigen3"))
- (substitute* "tools/cmake/modules/Findflatbuffers.cmake"
- (("get_target_property.*")
- (format #false "set(FLATBUFFERS_INCLUDE_DIRS ~a/include)\n"
- (assoc-ref inputs "flatbuffers"))))
+ (("if\\(NOT TARGET pthreadpool\\)")
+ "if(false)"))
;; Don't fetch source code; we already have everything we need.
(substitute* '("tools/cmake/modules/fft2d.cmake"
- "tools/cmake/modules/ruy.cmake"
"tools/cmake/modules/farmhash.cmake"
"tools/cmake/modules/neon2sse.cmake"
"tools/cmake/modules/gemmlowp.cmake")
@@ -2718,10 +2741,9 @@ (define-public tensorflow-lite
(invoke "tar" "--strip-components=1"
"-xf" (assoc-ref inputs "fft2d-src")))
- (copy-recursively (assoc-ref inputs "neon2sse-src")
- "/tmp/neon2sse/")
(copy-recursively (assoc-ref inputs "gemmlowp-src")
- "/tmp/gemmlowp/")))
+ "/tmp/gemmlowp/")
+ ))
(add-after 'copy-sources 'prepare-shared-library-build
(lambda _ (chdir "c")))
(replace 'install
@@ -2738,9 +2760,21 @@ (define-public tensorflow-lite
(find-files "." "\\.h$")))))))))
(inputs
`(("abseil-cpp" ,abseil-cpp-20200923.3)
- ("eigen" ,eigen-for-tensorflow-lite)
- ("flatbuffers" ,flatbuffers)
- ("python" ,python)))
+ ("cpuinfo" ,cpuinfo)
+ ("eigen" ,eigen)
+ ("fp16" ,fp16)
+ ("flatbuffers" ,flatbuffers-next-shared)
+ ;("gemmlowp" ,gemmlowp) ;; TO DO
+ ("mesa-headers" ,mesa-headers)
+ ("neon2sse" ,neon2sse)
+ ("opencl-clhpp" ,opencl-clhpp)
+ ("opencl-headers" ,opencl-headers)
+ ("opencl-icd-loader" ,opencl-icd-loader)
+ ("pthreadpool" ,pthreadpool)
+ ("python" ,python)
+ ("ruy" ,ruy)
+ ;("xnnpack" ,xnnpack) ;; TO DO: properly use Guix's copy of xnnpack
+ ("vulkan-headers" , vulkan-headers)))
(native-inputs
`(("pkg-config" ,pkg-config)
("gemmlowp-src"
@@ -2756,17 +2790,6 @@ (define-public tensorflow-lite
(sha256
(base32
"1sbp8kmr2azwlvfbzryy1frxi99jhsh1nc93bdbxdf8zdgpv0kxl")))))
- ("neon2sse-src"
- ,(let ((commit "a1652fd5253afbf3e39357b012974f93511f6108"))
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/intel/ARM_NEON_2_x86_SSE")
- (commit commit)))
- (file-name (git-file-name "neon2sse" (string-take commit 8)))
- (sha256
- (base32
- "1q8gkxag9wlnwdwad2pclsrkwzrdjy94hyrkayrsvxyj7szb5y8i")))))
("farmhash-src"
,(let ((commit "816a4ae622e964763ca0862d9dbd19324a1eaf45"))
(origin
@@ -2782,24 +2805,12 @@ (define-public tensorflow-lite
,(origin
(method url-fetch)
(uri (string-append "https://storage.googleapis.com/"
- "mirror.tensorflow.org/"
- "www.kurims.kyoto-u.ac.jp/~ooura/fft2d.tgz"))
+ "mirror.tensorflow.org/github.com/petewarden/"
+ "OouraFFT/archive/v1.0.tar.gz"))
(file-name "fft2d.tar.gz")
(sha256
(base32
- "1jfflzi74fag9z4qmgwvp90aif4dpbr1657izmxlgvf4hy8fk9xd"))))
- ("ruy-src"
- ,(let ((commit "9c56af3fce210a8a103eda19bd6f47c08a9e3d90"))
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/google/ruy")
- (commit commit)
- (recursive? #true)))
- (file-name (git-file-name "ruy" (string-take commit 8)))
- (sha256
- (base32
- "1cfd5gk6kaj8kbl3h98gx1ap8czd59y6p8qq8nr28fklpyzf5cis")))))))
+ "1jfflzi74fag9z4qmgwvp90aif4dpbr1657izmxlgvf4hy8fk9xd"))))))
(home-page "https://tensorflow.org")
(synopsis "Machine learning framework")
(description
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index c6fabf1973..25a7b61156 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -85,7 +85,6 @@ (define-module (gnu packages maths)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix git-download)
- #:use-module (guix gexp)
#:use-module (guix utils)
#:use-module ((guix build utils) #:select (alist-replace))
#:use-module (guix build-system ant)
diff --git a/gnu/packages/serialization.scm b/gnu/packages/serialization.scm
index 39954d6764..268a5d3d9b 100644
--- a/gnu/packages/serialization.scm
+++ b/gnu/packages/serialization.scm
@@ -748,6 +748,18 @@ (define-public flatbuffers-next
(base32
"1z3a6l8g2y53i5xzraswfs2i0i3kk52zv7nzc2q3fgisbyiri3pz"))))))
+(define-public flatbuffers-next-shared
+ (package
+ (inherit flatbuffers-next)
+ (name "flatbuffers-shared")
+ (version "23.1.21")
+ (arguments
+ (substitute-keyword-arguments (package-arguments flatbuffers-next)
+ ((#:configure-flags flags)
+ ;; make C++ fiels compiled with -fPIC, needed for shared lib".
+ #~(cons "-DFLATBUFFERS_CXX_FLAGS=-fPIC" #$flags))))))
+
+
(define-public python-feather-format
(package
(name "python-feather-format")
base-commit: eed55a6544d5bda2245ec853e5fa4b28e1865bea
prerequisite-patch-id: 5e9e341f5896c5eee0f64a7a031cc57491e76eb9
prerequisite-patch-id: b17d63ac48fd66475dda11cd37f74bb63aca5cfb
--
2.40.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [bug#63897] [PATCH v3] gnu: tensorflow-lite: Update to 2.12.0
2023-06-04 23:28 [bug#63897] [PATCH] gnu: tensorflow_lite: Update to 2.12.0 Andy Tai
2023-06-04 23:50 ` [bug#63897] [PATCH v2] " Andy Tai
@ 2023-06-06 8:41 ` Andy Tai
2023-06-16 6:15 ` [bug#63897] [PATCH v4] " Andy Tai
` (3 subsequent siblings)
5 siblings, 0 replies; 11+ messages in thread
From: Andy Tai @ 2023-06-06 8:41 UTC (permalink / raw)
To: 63897; +Cc: Andy Tai
* gnu/packages/algebra.scm (eigen-for-tensorflow-lite): Remove variable
* gnu/packages/machine-learning.scm (tensorflow-lite): Update to 2.12.0
[arguments] (configure-flags): Turn on GPU and RUY use; Use cmake to
find packages already in Guix as dependencies for absl-cpp, eigen,
flatbuffer, neon2ssl, cpuinfo, ruy.
[arguments] (phases): Remove operations setting up absl-cpp, eigen, ruy,
and neon2ssl as native inouts as now we use Guix's packages of these
as dependencies. Do default build phase.
Add steps to install C shared library and benchmark_model tool
[arguments] (inputs): Add cpuinfo, eigen, fp16, mesa-header, opencl,
pthreadpool, ruy, vulkan and xnnpack as explicit inputs
[arguments] (native-inputs): Remove local setup of neon2ssl and ruy
as we now use Guix's packages of these as explicit dependencies
* gnu/packages/maths.scm: Remove extra statement
* gnu/packages/serialization.scm (flatbuffers-next-shared): New variable,
flatbuffers-next built with -fPIC as needed by tensorflow-lite
---
gnu/packages/algebra.scm | 32 ------
gnu/packages/machine-learning.scm | 160 +++++++++++++++++-------------
gnu/packages/maths.scm | 1 -
gnu/packages/serialization.scm | 12 +++
4 files changed, 101 insertions(+), 104 deletions(-)
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index 3babf90b3c..81df0c97ac 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -1155,38 +1155,6 @@ (define-public eigen-for-tensorflow
(substitute* "test/CMakeLists.txt"
(("ei_add_test\\(stddeque") "#")))))))))))
-(define-public eigen-for-tensorflow-lite
- ;; This commit was taken from
- ;; tensorflow/lite/tools/cmake/modules/eigen.cmake
- (let ((commit "d10b27fe37736d2944630ecd7557cefa95cf87c9")
- (revision "1"))
- (package (inherit eigen)
- (name "eigen-for-tensorflow-lite")
- (version (git-version "3.3.7" revision commit))
- (source (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://gitlab.com/libeigen/eigen")
- (commit commit)))
- (sha256
- (base32
- "0v8a20cwvwmp3hw4275b37frw33v92z0mr8f4dn6y8k0rz92hrrf"))
- (file-name (git-file-name name version))
- (modules '((guix build utils)))
- (snippet
- ;; Ther are test failures in the "unsupported" directory, but
- ;; maintainers say it's unsupported anyway, so just skip
- ;; them.
- '(begin
- (substitute* "unsupported/CMakeLists.txt"
- (("add_subdirectory\\(test.*")
- "# Do not build the tests for unsupported features.\n"))))))
- (arguments
- (substitute-keyword-arguments (package-arguments eigen)
- ((#:phases phases)
- `(modify-phases ,phases
- (delete 'disable-some-tests))))))))
-
(define-public xtensor
(package
(name "xtensor")
diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm
index c9bc5e8b68..1f9ffc8ede 100644
--- a/gnu/packages/machine-learning.scm
+++ b/gnu/packages/machine-learning.scm
@@ -54,6 +54,7 @@ (define-module (gnu packages machine-learning)
#:use-module (gnu packages)
#:use-module (gnu packages adns)
#:use-module (gnu packages algebra)
+ #:use-module (gnu packages assembly)
#:use-module (gnu packages audio)
#:use-module (gnu packages autotools)
#:use-module (gnu packages base)
@@ -88,6 +89,7 @@ (define-module (gnu packages machine-learning)
#:use-module (gnu packages ninja)
#:use-module (gnu packages ocaml)
#:use-module (gnu packages onc-rpc)
+ #:use-module (gnu packages opencl)
#:use-module (gnu packages parallel)
#:use-module (gnu packages perl)
#:use-module (gnu packages pkg-config)
@@ -107,6 +109,7 @@ (define-module (gnu packages machine-learning)
#:use-module (gnu packages swig)
#:use-module (gnu packages time)
#:use-module (gnu packages tls)
+ #:use-module (gnu packages vulkan)
#:use-module (gnu packages video)
#:use-module (gnu packages web)
#:use-module (gnu packages xml)
@@ -2642,7 +2645,7 @@ (define-public tensorflow
(define-public tensorflow-lite
(package
(name "tensorflow-lite")
- (version "2.5.0")
+ (version "2.12.0")
(source
(origin
(method git-fetch)
@@ -2652,59 +2655,80 @@ (define-public tensorflow-lite
(file-name (git-file-name name version))
(sha256
(base32
- "1jdw2i1rq06zqd6aabh7bbm0avsg4pygnfmd7gviv0blhih9054l"))))
+ "051knmq6ysg4936d9baaqsx6j3rfsp4ffi2pwrxx4llan682rvpi"))))
(build-system cmake-build-system)
(arguments
`(#:tests? #false ; no "check" target
#:build-type "Release"
+
+ #:modules ((ice-9 match)
+ (guix build utils)
+ (guix build cmake-build-system))
+
#:configure-flags
(list
- "-DTFLITE_ENABLE_GPU=OFF"
- "-DTFLITE_ENABLE_RUY=OFF"
+ ;; so cmake can be used to find this from other packages
+ "-DTFLITE_ENABLE_INSTALL=ON"
+
+ ;; Use Guix's own packages as dependencies.
+ "-DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON"
+
+ "-DTFLITE_ENABLE_GPU=ON"
+ "-DTFLITE_ENABLE_RUY=ON"
+
+ ;; TO DO: turn on Farmhash
+ ;"-DSYSTEM_FARMHASH=ON"
+
+
+ (string-append "-Dabsl_DIR=" (assoc-ref %build-inputs "abseil-cpp")
+ "/lib/cmake/absl")
+ (string-append "-DEigen3_DIR=" (assoc-ref %build-inputs "eigen")
+ "/share/eigen3/cmake")
+ (string-append "-DFlatBuffers_DIR=" (assoc-ref %build-inputs "flatbuffers")
+ "/lib/cmake/flatbuffers")
+ (string-append "-DNEON_2_SSE_DIR=" (assoc-ref %build-inputs "neon2sse")
+ "/lib/cmake/NEON_2_SSE")
+ (string-append "-Dcpuinfo_DIR=" (assoc-ref %build-inputs "cpuinfo")
+ "/share/cpuinfo")
+ (string-append "-Druy_DIR=" (assoc-ref %build-inputs "ruy")
+ "/lib/cmake/ruy")
;; TODO: The build system attempts to build xnnpack from source. We
;; would like to use our xnnpack package here, but this requires more
;; work.
"-DTFLITE_ENABLE_XNNPACK=OFF"
- ;; Pretend we've already fetched abseil. We won't actually build it
- ;; but use the existing package.
- "-Dabseil-cpp_POPULATED=TRUE"
-
- ;; Don't fetch the sources. We have already built flatbuffers.
- "-Dflatbuffers_POPULATED=TRUE"
+ ;;; Don't fetch the sources. We have these already
+ "-Degl_headers_POPULATED=TRUE"
+ "-Dfp16_headers_POPULATED=TRUE"
+ "-Dopencl_headers_POPULATED=TRUE"
+ "-Dopengl_headers_POPULATED=TRUE"
+ "-Dvulkan_headers_POPULATED=TRUE"
"-DFFT2D_SOURCE_DIR=/tmp/fft2d"
- "-Dneon2sse_SOURCE_DIR=/tmp/neon2sse"
- "-Dneon2sse_BINARY_DIR=/tmp/neon2sse-bin"
"-DFARMHASH_SOURCE_DIR=/tmp/farmhash"
"-Dgemmlowp_SOURCE_DIR=/tmp/gemmlowp"
- (string-append "-DRUY_SOURCE_DIR="
- (assoc-ref %build-inputs "ruy-src")))
+ )
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'chdir
(lambda _ (chdir "tensorflow/lite")))
(add-after 'chdir 'copy-sources
(lambda* (#:key inputs #:allow-other-keys)
- ;; Use external cmake finders instead of these stubs that won't
- ;; find anything but the bundled sources.
- (delete-file "tools/cmake/modules/Findabsl.cmake")
- (delete-file "tools/cmake/modules/Findeigen.cmake")
+ ;; TO DO: properly use Guix's pthreaqdpool
+ ;; roght now not using pthreadpool because
+ ;; we are not enabling xnnpack
+ (substitute* "CMakeLists.txt"
+ (("if\\(NOT DEFINED PTHREADPOOL_SOURCE_DIR\\)")
+ "if(false)"))
(substitute* "CMakeLists.txt"
- (("find_package\\(eigen REQUIRED")
- "find_package(eigen REQUIRED NAMES Eigen3"))
- (substitute* "tools/cmake/modules/Findflatbuffers.cmake"
- (("get_target_property.*")
- (format #false "set(FLATBUFFERS_INCLUDE_DIRS ~a/include)\n"
- (assoc-ref inputs "flatbuffers"))))
+ (("if\\(NOT TARGET pthreadpool\\)")
+ "if(false)"))
;; Don't fetch source code; we already have everything we need.
(substitute* '("tools/cmake/modules/fft2d.cmake"
- "tools/cmake/modules/ruy.cmake"
"tools/cmake/modules/farmhash.cmake"
- "tools/cmake/modules/neon2sse.cmake"
"tools/cmake/modules/gemmlowp.cmake")
(("OverridableFetchContent_Populate.*") ""))
@@ -2718,29 +2742,46 @@ (define-public tensorflow-lite
(invoke "tar" "--strip-components=1"
"-xf" (assoc-ref inputs "fft2d-src")))
- (copy-recursively (assoc-ref inputs "neon2sse-src")
- "/tmp/neon2sse/")
(copy-recursively (assoc-ref inputs "gemmlowp-src")
"/tmp/gemmlowp/")))
- (add-after 'copy-sources 'prepare-shared-library-build
- (lambda _ (chdir "c")))
- (replace 'install
- (lambda* (#:key outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (lib (string-append out "/lib"))
- (headers (string-append out "/include/tensorflow/lite")))
- (install-file "../build/libtensorflowlite_c.so" lib)
- (with-directory-excursion ".."
- (for-each
- (lambda (file)
- (let ((target-dir (string-append headers "/" (dirname file))))
- (install-file file target-dir)))
- (find-files "." "\\.h$")))))))))
+
+ (add-after 'build 'build-shared-library
+ (lambda* (#:key configure-flags #:allow-other-keys)
+ (mkdir-p "c")
+ (with-directory-excursion "c"
+ (apply invoke "cmake" (append configure-flags (list "../../lite/c")))
+ (invoke "cmake" "--build" "." "-j" (number->string
+ (parallel-job-count))))))
+ (add-after 'build-shared-library 'build-benchmark-model
+ (lambda _
+ (invoke "cmake" "--build" "." "--target" "benchmark_model"
+ "-j" (number->string (parallel-job-count)))))
+
+ (add-after 'install 'install-extra
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (lib (string-append out "/lib"))
+ (bin (string-append out "/bin")))
+ (install-file "../build/c/libtensorflowlite_c.so" lib)
+ (install-file "../build/tools/benchmark/benchmark_model" bin))))
+ )))
(inputs
`(("abseil-cpp" ,abseil-cpp-20200923.3)
- ("eigen" ,eigen-for-tensorflow-lite)
- ("flatbuffers" ,flatbuffers)
- ("python" ,python)))
+ ("cpuinfo" ,cpuinfo)
+ ("eigen" ,eigen)
+ ("fp16" ,fp16)
+ ("flatbuffers" ,flatbuffers-next-shared)
+ ;("gemmlowp" ,gemmlowp) ;; TO DO
+ ("mesa-headers" ,mesa-headers)
+ ("neon2sse" ,neon2sse)
+ ("opencl-clhpp" ,opencl-clhpp)
+ ("opencl-headers" ,opencl-headers)
+ ("opencl-icd-loader" ,opencl-icd-loader)
+ ("pthreadpool" ,pthreadpool)
+ ("python" ,python)
+ ("ruy" ,ruy)
+ ;("xnnpack" ,xnnpack) ;; TO DO: properly use Guix's copy of xnnpack
+ ("vulkan-headers" , vulkan-headers)))
(native-inputs
`(("pkg-config" ,pkg-config)
("gemmlowp-src"
@@ -2756,17 +2797,6 @@ (define-public tensorflow-lite
(sha256
(base32
"1sbp8kmr2azwlvfbzryy1frxi99jhsh1nc93bdbxdf8zdgpv0kxl")))))
- ("neon2sse-src"
- ,(let ((commit "a1652fd5253afbf3e39357b012974f93511f6108"))
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/intel/ARM_NEON_2_x86_SSE")
- (commit commit)))
- (file-name (git-file-name "neon2sse" (string-take commit 8)))
- (sha256
- (base32
- "1q8gkxag9wlnwdwad2pclsrkwzrdjy94hyrkayrsvxyj7szb5y8i")))))
("farmhash-src"
,(let ((commit "816a4ae622e964763ca0862d9dbd19324a1eaf45"))
(origin
@@ -2782,24 +2812,12 @@ (define-public tensorflow-lite
,(origin
(method url-fetch)
(uri (string-append "https://storage.googleapis.com/"
- "mirror.tensorflow.org/"
- "www.kurims.kyoto-u.ac.jp/~ooura/fft2d.tgz"))
+ "mirror.tensorflow.org/github.com/petewarden/"
+ "OouraFFT/archive/v1.0.tar.gz"))
(file-name "fft2d.tar.gz")
(sha256
(base32
- "1jfflzi74fag9z4qmgwvp90aif4dpbr1657izmxlgvf4hy8fk9xd"))))
- ("ruy-src"
- ,(let ((commit "9c56af3fce210a8a103eda19bd6f47c08a9e3d90"))
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/google/ruy")
- (commit commit)
- (recursive? #true)))
- (file-name (git-file-name "ruy" (string-take commit 8)))
- (sha256
- (base32
- "1cfd5gk6kaj8kbl3h98gx1ap8czd59y6p8qq8nr28fklpyzf5cis")))))))
+ "1jfflzi74fag9z4qmgwvp90aif4dpbr1657izmxlgvf4hy8fk9xd"))))))
(home-page "https://tensorflow.org")
(synopsis "Machine learning framework")
(description
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 7904d9e8e3..37480a8397 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -85,7 +85,6 @@ (define-module (gnu packages maths)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix git-download)
- #:use-module (guix gexp)
#:use-module (guix utils)
#:use-module ((guix build utils) #:select (alist-replace))
#:use-module (guix build-system ant)
diff --git a/gnu/packages/serialization.scm b/gnu/packages/serialization.scm
index 39954d6764..268a5d3d9b 100644
--- a/gnu/packages/serialization.scm
+++ b/gnu/packages/serialization.scm
@@ -748,6 +748,18 @@ (define-public flatbuffers-next
(base32
"1z3a6l8g2y53i5xzraswfs2i0i3kk52zv7nzc2q3fgisbyiri3pz"))))))
+(define-public flatbuffers-next-shared
+ (package
+ (inherit flatbuffers-next)
+ (name "flatbuffers-shared")
+ (version "23.1.21")
+ (arguments
+ (substitute-keyword-arguments (package-arguments flatbuffers-next)
+ ((#:configure-flags flags)
+ ;; make C++ fiels compiled with -fPIC, needed for shared lib".
+ #~(cons "-DFLATBUFFERS_CXX_FLAGS=-fPIC" #$flags))))))
+
+
(define-public python-feather-format
(package
(name "python-feather-format")
base-commit: 8937898af9433c0b7a8d95a78c95e21576ae22e8
prerequisite-patch-id: 6a623f7c3bdc733b110fd6f59f31032adb7d987d
prerequisite-patch-id: 5e9e341f5896c5eee0f64a7a031cc57491e76eb9
--
2.40.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [bug#63897] [PATCH v4] gnu: tensorflow-lite: Update to 2.12.0
2023-06-04 23:28 [bug#63897] [PATCH] gnu: tensorflow_lite: Update to 2.12.0 Andy Tai
2023-06-04 23:50 ` [bug#63897] [PATCH v2] " Andy Tai
2023-06-06 8:41 ` [bug#63897] [PATCH v3] gnu: tensorflow-lite: " Andy Tai
@ 2023-06-16 6:15 ` Andy Tai
2023-07-28 8:44 ` [bug#63897] [PATCH v5] gnu: tensorflow-lite: Update to 2.12.1 Andy Tai
` (2 subsequent siblings)
5 siblings, 0 replies; 11+ messages in thread
From: Andy Tai @ 2023-06-16 6:15 UTC (permalink / raw)
To: 63897; +Cc: Andy Tai
* gnu/packages/algebra.scm (eigen-for-tensorflow-lite): Remove variable
* gnu/packages/machine-learning.scm (tensorflow-lite): Update to 2.12.0
[arguments] (configure-flags): Turn on GPU and RUY use; Use cmake to
find packages already in Guix as dependencies for absl-cpp, eigen,
flatbuffer, neon2ssl, cpuinfo, ruy.
[arguments] (phases): Remove operations setting up absl-cpp, eigen, ruy,
and neon2ssl as native inouts as now we use Guix's packages of these
as dependencies. Do default build phase.
Add steps to install C shared library and benchmark_model tool
[arguments] (inputs): Add cpuinfo, eigen, fp16, mesa-header, opencl,
pthreadpool, ruy, vulkan and xnnpack as explicit inputs
[arguments] (native-inputs): Remove local setup of neon2ssl and ruy
as we now use Guix's packages of these as explicit dependencies
* gnu/packages/maths.scm: Remove extra statement
* gnu/packages/serialization.scm (flatbuffers-next-shared): New variable,
flatbuffers-next built with -fPIC as needed by tensorflow-lite
---
gnu/packages/algebra.scm | 32 ------
gnu/packages/machine-learning.scm | 177 ++++++++++++++++++------------
gnu/packages/maths.scm | 1 -
gnu/packages/serialization.scm | 12 ++
4 files changed, 117 insertions(+), 105 deletions(-)
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index 3babf90b3c..81df0c97ac 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -1155,38 +1155,6 @@ (define-public eigen-for-tensorflow
(substitute* "test/CMakeLists.txt"
(("ei_add_test\\(stddeque") "#")))))))))))
-(define-public eigen-for-tensorflow-lite
- ;; This commit was taken from
- ;; tensorflow/lite/tools/cmake/modules/eigen.cmake
- (let ((commit "d10b27fe37736d2944630ecd7557cefa95cf87c9")
- (revision "1"))
- (package (inherit eigen)
- (name "eigen-for-tensorflow-lite")
- (version (git-version "3.3.7" revision commit))
- (source (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://gitlab.com/libeigen/eigen")
- (commit commit)))
- (sha256
- (base32
- "0v8a20cwvwmp3hw4275b37frw33v92z0mr8f4dn6y8k0rz92hrrf"))
- (file-name (git-file-name name version))
- (modules '((guix build utils)))
- (snippet
- ;; Ther are test failures in the "unsupported" directory, but
- ;; maintainers say it's unsupported anyway, so just skip
- ;; them.
- '(begin
- (substitute* "unsupported/CMakeLists.txt"
- (("add_subdirectory\\(test.*")
- "# Do not build the tests for unsupported features.\n"))))))
- (arguments
- (substitute-keyword-arguments (package-arguments eigen)
- ((#:phases phases)
- `(modify-phases ,phases
- (delete 'disable-some-tests))))))))
-
(define-public xtensor
(package
(name "xtensor")
diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm
index 927b531cf2..4b915e509e 100644
--- a/gnu/packages/machine-learning.scm
+++ b/gnu/packages/machine-learning.scm
@@ -54,12 +54,14 @@ (define-module (gnu packages machine-learning)
#:use-module (gnu packages)
#:use-module (gnu packages adns)
#:use-module (gnu packages algebra)
+ #:use-module (gnu packages assembly)
#:use-module (gnu packages audio)
#:use-module (gnu packages autotools)
#:use-module (gnu packages base)
#:use-module (gnu packages bash)
#:use-module (gnu packages boost)
#:use-module (gnu packages bdw-gc)
+ #:use-module (gnu packages c)
#:use-module (gnu packages check)
#:use-module (gnu packages compression)
#:use-module (gnu packages cmake)
@@ -88,6 +90,7 @@ (define-module (gnu packages machine-learning)
#:use-module (gnu packages ninja)
#:use-module (gnu packages ocaml)
#:use-module (gnu packages onc-rpc)
+ #:use-module (gnu packages opencl)
#:use-module (gnu packages parallel)
#:use-module (gnu packages perl)
#:use-module (gnu packages pkg-config)
@@ -99,6 +102,7 @@ (define-module (gnu packages machine-learning)
#:use-module (gnu packages python-science)
#:use-module (gnu packages python-web)
#:use-module (gnu packages python-xyz)
+ #:use-module (gnu packages regex)
#:use-module (gnu packages rpc)
#:use-module (gnu packages serialization)
#:use-module (gnu packages sphinx)
@@ -107,6 +111,7 @@ (define-module (gnu packages machine-learning)
#:use-module (gnu packages swig)
#:use-module (gnu packages time)
#:use-module (gnu packages tls)
+ #:use-module (gnu packages vulkan)
#:use-module (gnu packages video)
#:use-module (gnu packages web)
#:use-module (gnu packages xml)
@@ -2833,7 +2838,7 @@ (define-public tensorflow
(define-public tensorflow-lite
(package
(name "tensorflow-lite")
- (version "2.5.0")
+ (version "2.12.0")
(source
(origin
(method git-fetch)
@@ -2843,59 +2848,85 @@ (define-public tensorflow-lite
(file-name (git-file-name name version))
(sha256
(base32
- "1jdw2i1rq06zqd6aabh7bbm0avsg4pygnfmd7gviv0blhih9054l"))))
+ "051knmq6ysg4936d9baaqsx6j3rfsp4ffi2pwrxx4llan682rvpi"))))
(build-system cmake-build-system)
(arguments
- `(#:tests? #false ; no "check" target
+ `(#:tests? #false ;tests not building now
#:build-type "Release"
+
+ #:modules ((ice-9 match)
+ (guix build utils)
+ (guix build cmake-build-system))
+
#:configure-flags
(list
- "-DTFLITE_ENABLE_GPU=OFF"
- "-DTFLITE_ENABLE_RUY=OFF"
+ ; "-DTFLITE_KERNEL_TEST=ON" ; TO DO: build tests
+ ;; so cmake can be used to find this from other packages
+ "-DTFLITE_ENABLE_INSTALL=ON"
+
+ ;; Use Guix's own packages as dependencies.
+ "-DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON"
+
+ "-DTFLITE_ENABLE_GPU=ON"
+ "-DTFLITE_ENABLE_RUY=ON"
+
+ ;; TO DO: turn on Farmhash
+ ;"-DSYSTEM_FARMHASH=ON"
+
+
+ (string-append "-Dabsl_DIR=" (assoc-ref %build-inputs "abseil-cpp")
+ "/lib/cmake/absl")
+ (string-append "-DEigen3_DIR=" (assoc-ref %build-inputs "eigen")
+ "/share/eigen3/cmake")
+ (string-append "-DFlatBuffers_DIR=" (assoc-ref %build-inputs "flatbuffers")
+ "/lib/cmake/flatbuffers")
+ (string-append "-DNEON_2_SSE_DIR=" (assoc-ref %build-inputs "neon2sse")
+ "/lib/cmake/NEON_2_SSE")
+ (string-append "-Dcpuinfo_DIR=" (assoc-ref %build-inputs "cpuinfo")
+ "/share/cpuinfo")
+ (string-append "-Druy_DIR=" (assoc-ref %build-inputs "ruy")
+ "/lib/cmake/ruy")
;; TODO: The build system attempts to build xnnpack from source. We
;; would like to use our xnnpack package here, but this requires more
;; work.
"-DTFLITE_ENABLE_XNNPACK=OFF"
- ;; Pretend we've already fetched abseil. We won't actually build it
- ;; but use the existing package.
- "-Dabseil-cpp_POPULATED=TRUE"
-
- ;; Don't fetch the sources. We have already built flatbuffers.
- "-Dflatbuffers_POPULATED=TRUE"
+ ;;; Don't fetch the sources. We have these already
+ "-Degl_headers_POPULATED=TRUE"
+ "-Dfp16_headers_POPULATED=TRUE"
+ "-Dopencl_headers_POPULATED=TRUE"
+ "-Dopengl_headers_POPULATED=TRUE"
+ "-Dvulkan_headers_POPULATED=TRUE"
+ "-Dgoogletest_POPULATED=TRUE"
+ "-Dgoogle_benchmark_POPULATED=TRUE"
+ "-Dnsync_POPULATED=TRUE"
+ "-Dre2_POPULATED=TRUE"
"-DFFT2D_SOURCE_DIR=/tmp/fft2d"
- "-Dneon2sse_SOURCE_DIR=/tmp/neon2sse"
- "-Dneon2sse_BINARY_DIR=/tmp/neon2sse-bin"
"-DFARMHASH_SOURCE_DIR=/tmp/farmhash"
"-Dgemmlowp_SOURCE_DIR=/tmp/gemmlowp"
- (string-append "-DRUY_SOURCE_DIR="
- (assoc-ref %build-inputs "ruy-src")))
+ )
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'chdir
(lambda _ (chdir "tensorflow/lite")))
(add-after 'chdir 'copy-sources
(lambda* (#:key inputs #:allow-other-keys)
- ;; Use external cmake finders instead of these stubs that won't
- ;; find anything but the bundled sources.
- (delete-file "tools/cmake/modules/Findabsl.cmake")
- (delete-file "tools/cmake/modules/Findeigen.cmake")
+ ;; TO DO: properly use Guix's pthreaqdpool
+ ;; roght now not using pthreadpool because
+ ;; we are not enabling xnnpack
(substitute* "CMakeLists.txt"
- (("find_package\\(eigen REQUIRED")
- "find_package(eigen REQUIRED NAMES Eigen3"))
- (substitute* "tools/cmake/modules/Findflatbuffers.cmake"
- (("get_target_property.*")
- (format #false "set(FLATBUFFERS_INCLUDE_DIRS ~a/include)\n"
- (assoc-ref inputs "flatbuffers"))))
+ (("if\\(NOT DEFINED PTHREADPOOL_SOURCE_DIR\\)")
+ "if(false)"))
+ (substitute* "CMakeLists.txt"
+ (("if\\(NOT TARGET pthreadpool\\)")
+ "if(false)"))
;; Don't fetch source code; we already have everything we need.
(substitute* '("tools/cmake/modules/fft2d.cmake"
- "tools/cmake/modules/ruy.cmake"
"tools/cmake/modules/farmhash.cmake"
- "tools/cmake/modules/neon2sse.cmake"
"tools/cmake/modules/gemmlowp.cmake")
(("OverridableFetchContent_Populate.*") ""))
@@ -2909,31 +2940,56 @@ (define-public tensorflow-lite
(invoke "tar" "--strip-components=1"
"-xf" (assoc-ref inputs "fft2d-src")))
- (copy-recursively (assoc-ref inputs "neon2sse-src")
- "/tmp/neon2sse/")
(copy-recursively (assoc-ref inputs "gemmlowp-src")
"/tmp/gemmlowp/")))
- (add-after 'copy-sources 'prepare-shared-library-build
- (lambda _ (chdir "c")))
- (replace 'install
- (lambda* (#:key outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (lib (string-append out "/lib"))
- (headers (string-append out "/include/tensorflow/lite")))
- (install-file "../build/libtensorflowlite_c.so" lib)
- (with-directory-excursion ".."
- (for-each
- (lambda (file)
- (let ((target-dir (string-append headers "/" (dirname file))))
- (install-file file target-dir)))
- (find-files "." "\\.h$")))))))))
+
+ (add-after 'build 'build-shared-library
+ (lambda* (#:key configure-flags #:allow-other-keys)
+ (mkdir-p "c")
+ (with-directory-excursion "c"
+ (apply invoke "cmake" (append configure-flags (list "../../lite/c")))
+ (invoke "cmake" "--build" "." "-j" (number->string
+ (parallel-job-count))))))
+ (add-after 'build-shared-library 'build-benchmark-model
+ (lambda _
+ (invoke "cmake" "--build" "." "--target" "benchmark_model"
+ "-j" (number->string (parallel-job-count)))))
+
+ (add-after 'install 'install-extra
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (lib (string-append out "/lib"))
+ (bin (string-append out "/bin")))
+ (install-file "../build/c/libtensorflowlite_c.so" lib)
+ (install-file "../build/tools/benchmark/benchmark_model" bin))))
+ ; TO DO: test not building now
+ ; (replace 'check
+ ; (lambda* (#:key tests? #:allow-other-keys)
+ ; (when tests?
+ ; (invoke "ctest" "-L" "plain"))))
+ )))
(inputs
`(("abseil-cpp" ,abseil-cpp-20200923.3)
- ("eigen" ,eigen-for-tensorflow-lite)
- ("flatbuffers" ,flatbuffers)
- ("python" ,python)))
+ ("cpuinfo" ,cpuinfo)
+ ("eigen" ,eigen)
+ ("fp16" ,fp16)
+ ("flatbuffers" ,flatbuffers-next-shared)
+ ;("gemmlowp" ,gemmlowp) ;; TO DO
+ ("mesa-headers" ,mesa-headers)
+ ("neon2sse" ,neon2sse)
+ ("nsync" ,nsync)
+ ("opencl-clhpp" ,opencl-clhpp)
+ ("opencl-headers" ,opencl-headers)
+ ("opencl-icd-loader" ,opencl-icd-loader)
+ ("pthreadpool" ,pthreadpool)
+ ("python" ,python)
+ ("ruy" ,ruy)
+ ("re2" ,re2)
+ ;("xnnpack" ,xnnpack) ;; TO DO: properly use Guix's copy of xnnpack
+ ("vulkan-headers" , vulkan-headers)))
(native-inputs
`(("pkg-config" ,pkg-config)
+ ("googletest" ,googletest)
("gemmlowp-src"
;; The commit hash is taken from
;; "tensorflow/lite/tools/cmake/modules/gemmlowp.cmake".
@@ -2947,17 +3003,6 @@ (define-public tensorflow-lite
(sha256
(base32
"1sbp8kmr2azwlvfbzryy1frxi99jhsh1nc93bdbxdf8zdgpv0kxl")))))
- ("neon2sse-src"
- ,(let ((commit "a1652fd5253afbf3e39357b012974f93511f6108"))
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/intel/ARM_NEON_2_x86_SSE")
- (commit commit)))
- (file-name (git-file-name "neon2sse" (string-take commit 8)))
- (sha256
- (base32
- "1q8gkxag9wlnwdwad2pclsrkwzrdjy94hyrkayrsvxyj7szb5y8i")))))
("farmhash-src"
,(let ((commit "816a4ae622e964763ca0862d9dbd19324a1eaf45"))
(origin
@@ -2973,24 +3018,12 @@ (define-public tensorflow-lite
,(origin
(method url-fetch)
(uri (string-append "https://storage.googleapis.com/"
- "mirror.tensorflow.org/"
- "www.kurims.kyoto-u.ac.jp/~ooura/fft2d.tgz"))
+ "mirror.tensorflow.org/github.com/petewarden/"
+ "OouraFFT/archive/v1.0.tar.gz"))
(file-name "fft2d.tar.gz")
(sha256
(base32
- "1jfflzi74fag9z4qmgwvp90aif4dpbr1657izmxlgvf4hy8fk9xd"))))
- ("ruy-src"
- ,(let ((commit "9c56af3fce210a8a103eda19bd6f47c08a9e3d90"))
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/google/ruy")
- (commit commit)
- (recursive? #true)))
- (file-name (git-file-name "ruy" (string-take commit 8)))
- (sha256
- (base32
- "1cfd5gk6kaj8kbl3h98gx1ap8czd59y6p8qq8nr28fklpyzf5cis")))))))
+ "1jfflzi74fag9z4qmgwvp90aif4dpbr1657izmxlgvf4hy8fk9xd"))))))
(home-page "https://tensorflow.org")
(synopsis "Machine learning framework")
(description
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index fd0e8eae3a..c7996e12a9 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -85,7 +85,6 @@ (define-module (gnu packages maths)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix git-download)
- #:use-module (guix gexp)
#:use-module (guix utils)
#:use-module ((guix build utils) #:select (alist-replace))
#:use-module (guix build-system ant)
diff --git a/gnu/packages/serialization.scm b/gnu/packages/serialization.scm
index 39954d6764..268a5d3d9b 100644
--- a/gnu/packages/serialization.scm
+++ b/gnu/packages/serialization.scm
@@ -748,6 +748,18 @@ (define-public flatbuffers-next
(base32
"1z3a6l8g2y53i5xzraswfs2i0i3kk52zv7nzc2q3fgisbyiri3pz"))))))
+(define-public flatbuffers-next-shared
+ (package
+ (inherit flatbuffers-next)
+ (name "flatbuffers-shared")
+ (version "23.1.21")
+ (arguments
+ (substitute-keyword-arguments (package-arguments flatbuffers-next)
+ ((#:configure-flags flags)
+ ;; make C++ fiels compiled with -fPIC, needed for shared lib".
+ #~(cons "-DFLATBUFFERS_CXX_FLAGS=-fPIC" #$flags))))))
+
+
(define-public python-feather-format
(package
(name "python-feather-format")
base-commit: 31336e9f5d68512a9c1c6826bce9f17c892a2125
prerequisite-patch-id: 5e9e341f5896c5eee0f64a7a031cc57491e76eb9
prerequisite-patch-id: 6a623f7c3bdc733b110fd6f59f31032adb7d987d
prerequisite-patch-id: f672f4219dc90516d7e83bc2801e4a8dd51a9839
--
2.40.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [bug#63897] [PATCH v5] gnu: tensorflow-lite: Update to 2.12.1
2023-06-04 23:28 [bug#63897] [PATCH] gnu: tensorflow_lite: Update to 2.12.0 Andy Tai
` (2 preceding siblings ...)
2023-06-16 6:15 ` [bug#63897] [PATCH v4] " Andy Tai
@ 2023-07-28 8:44 ` Andy Tai
2023-08-07 15:27 ` Andreas Enge
2023-09-03 4:55 ` [bug#63897] [PATCH v6] " Andy Tai
2023-09-08 8:54 ` bug#63897: [PATCH] gnu: tensorflow_lite: Update to 2.12.0 Ricardo Wurmus
5 siblings, 1 reply; 11+ messages in thread
From: Andy Tai @ 2023-07-28 8:44 UTC (permalink / raw)
To: 63897; +Cc: Andy Tai, Andreas Enge, Efraim Flashner, Eric Bavier
* gnu/packages/algebra.scm (eigen-for-tensorflow-lite): Remove variable
* gnu/packages/machine-learning.scm (tensorflow-lite): Update to 2.12.1
[arguments] (configure-flags): Turn on GPU and RUY use; Use cmake to
find packages already in Guix as dependencies for absl-cpp, eigen,
flatbuffer, neon2ssl, cpuinfo, ruy.
[arguments] (phases): Remove operations setting up absl-cpp, eigen, ruy,
and neon2ssl as native inouts as now we use Guix's packages of these
as dependencies. Do default build phase.
Add steps to install C shared library and benchmark_model tool
[arguments] (inputs): Add cpuinfo, eigen, fp16, mesa-header, opencl,
pthreadpool, ruy, vulkan and xnnpack as explicit inputs
[arguments] (native-inputs): Remove local setup of neon2ssl and ruy
as we now use Guix's packages of these as explicit dependencies
* gnu/packages/maths.scm: Remove extra statement
* gnu/packages/serialization.scm (flatbuffers-next-shared): New variable,
flatbuffers-next built with -fPIC as needed by tensorflow-lite
---
gnu/packages/algebra.scm | 32 ------
gnu/packages/machine-learning.scm | 177 ++++++++++++++++++------------
gnu/packages/maths.scm | 1 -
gnu/packages/serialization.scm | 12 ++
4 files changed, 117 insertions(+), 105 deletions(-)
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index a717750c7b..b1ab755144 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -1154,38 +1154,6 @@ (define-public eigen-for-tensorflow
(substitute* "test/CMakeLists.txt"
(("ei_add_test\\(stddeque") "#")))))))))))
-(define-public eigen-for-tensorflow-lite
- ;; This commit was taken from
- ;; tensorflow/lite/tools/cmake/modules/eigen.cmake
- (let ((commit "d10b27fe37736d2944630ecd7557cefa95cf87c9")
- (revision "1"))
- (package (inherit eigen)
- (name "eigen-for-tensorflow-lite")
- (version (git-version "3.3.7" revision commit))
- (source (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://gitlab.com/libeigen/eigen")
- (commit commit)))
- (sha256
- (base32
- "0v8a20cwvwmp3hw4275b37frw33v92z0mr8f4dn6y8k0rz92hrrf"))
- (file-name (git-file-name name version))
- (modules '((guix build utils)))
- (snippet
- ;; Ther are test failures in the "unsupported" directory, but
- ;; maintainers say it's unsupported anyway, so just skip
- ;; them.
- '(begin
- (substitute* "unsupported/CMakeLists.txt"
- (("add_subdirectory\\(test.*")
- "# Do not build the tests for unsupported features.\n"))))))
- (arguments
- (substitute-keyword-arguments (package-arguments eigen)
- ((#:phases phases)
- `(modify-phases ,phases
- (delete 'disable-some-tests))))))))
-
(define-public xtensor
(package
(name "xtensor")
diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm
index e8225c76f3..6ae9c52625 100644
--- a/gnu/packages/machine-learning.scm
+++ b/gnu/packages/machine-learning.scm
@@ -55,12 +55,14 @@ (define-module (gnu packages machine-learning)
#:use-module (gnu packages)
#:use-module (gnu packages adns)
#:use-module (gnu packages algebra)
+ #:use-module (gnu packages assembly)
#:use-module (gnu packages audio)
#:use-module (gnu packages autotools)
#:use-module (gnu packages base)
#:use-module (gnu packages bash)
#:use-module (gnu packages boost)
#:use-module (gnu packages bdw-gc)
+ #:use-module (gnu packages c)
#:use-module (gnu packages check)
#:use-module (gnu packages compression)
#:use-module (gnu packages cmake)
@@ -89,6 +91,7 @@ (define-module (gnu packages machine-learning)
#:use-module (gnu packages ninja)
#:use-module (gnu packages ocaml)
#:use-module (gnu packages onc-rpc)
+ #:use-module (gnu packages opencl)
#:use-module (gnu packages parallel)
#:use-module (gnu packages perl)
#:use-module (gnu packages pkg-config)
@@ -100,6 +103,7 @@ (define-module (gnu packages machine-learning)
#:use-module (gnu packages python-science)
#:use-module (gnu packages python-web)
#:use-module (gnu packages python-xyz)
+ #:use-module (gnu packages regex)
#:use-module (gnu packages rpc)
#:use-module (gnu packages serialization)
#:use-module (gnu packages sphinx)
@@ -108,6 +112,7 @@ (define-module (gnu packages machine-learning)
#:use-module (gnu packages swig)
#:use-module (gnu packages time)
#:use-module (gnu packages tls)
+ #:use-module (gnu packages vulkan)
#:use-module (gnu packages video)
#:use-module (gnu packages web)
#:use-module (gnu packages xml)
@@ -2908,7 +2913,7 @@ (define-public tensorflow
(define-public tensorflow-lite
(package
(name "tensorflow-lite")
- (version "2.5.0")
+ (version "2.12.1")
(source
(origin
(method git-fetch)
@@ -2918,59 +2923,85 @@ (define-public tensorflow-lite
(file-name (git-file-name name version))
(sha256
(base32
- "1jdw2i1rq06zqd6aabh7bbm0avsg4pygnfmd7gviv0blhih9054l"))))
+ "0jkgljdagdqllnxygl35r5bh3f9qmbczymfj357gm9krh59g2kmd"))))
(build-system cmake-build-system)
(arguments
- `(#:tests? #false ; no "check" target
+ `(#:tests? #false ;tests not building now
#:build-type "Release"
+
+ #:modules ((ice-9 match)
+ (guix build utils)
+ (guix build cmake-build-system))
+
#:configure-flags
(list
- "-DTFLITE_ENABLE_GPU=OFF"
- "-DTFLITE_ENABLE_RUY=OFF"
+ ; "-DTFLITE_KERNEL_TEST=ON" ; TO DO: build tests
+ ;; so cmake can be used to find this from other packages
+ "-DTFLITE_ENABLE_INSTALL=ON"
+
+ ;; Use Guix's own packages as dependencies.
+ "-DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON"
+
+ "-DTFLITE_ENABLE_GPU=ON"
+ "-DTFLITE_ENABLE_RUY=ON"
+
+ ;; TO DO: turn on Farmhash
+ ;"-DSYSTEM_FARMHASH=ON"
+
+
+ (string-append "-Dabsl_DIR=" (assoc-ref %build-inputs "abseil-cpp")
+ "/lib/cmake/absl")
+ (string-append "-DEigen3_DIR=" (assoc-ref %build-inputs "eigen")
+ "/share/eigen3/cmake")
+ (string-append "-DFlatBuffers_DIR=" (assoc-ref %build-inputs "flatbuffers")
+ "/lib/cmake/flatbuffers")
+ (string-append "-DNEON_2_SSE_DIR=" (assoc-ref %build-inputs "neon2sse")
+ "/lib/cmake/NEON_2_SSE")
+ (string-append "-Dcpuinfo_DIR=" (assoc-ref %build-inputs "cpuinfo")
+ "/share/cpuinfo")
+ (string-append "-Druy_DIR=" (assoc-ref %build-inputs "ruy")
+ "/lib/cmake/ruy")
;; TODO: The build system attempts to build xnnpack from source. We
;; would like to use our xnnpack package here, but this requires more
;; work.
"-DTFLITE_ENABLE_XNNPACK=OFF"
- ;; Pretend we've already fetched abseil. We won't actually build it
- ;; but use the existing package.
- "-Dabseil-cpp_POPULATED=TRUE"
-
- ;; Don't fetch the sources. We have already built flatbuffers.
- "-Dflatbuffers_POPULATED=TRUE"
+ ;;; Don't fetch the sources. We have these already
+ "-Degl_headers_POPULATED=TRUE"
+ "-Dfp16_headers_POPULATED=TRUE"
+ "-Dopencl_headers_POPULATED=TRUE"
+ "-Dopengl_headers_POPULATED=TRUE"
+ "-Dvulkan_headers_POPULATED=TRUE"
+ "-Dgoogletest_POPULATED=TRUE"
+ "-Dgoogle_benchmark_POPULATED=TRUE"
+ "-Dnsync_POPULATED=TRUE"
+ "-Dre2_POPULATED=TRUE"
"-DFFT2D_SOURCE_DIR=/tmp/fft2d"
- "-Dneon2sse_SOURCE_DIR=/tmp/neon2sse"
- "-Dneon2sse_BINARY_DIR=/tmp/neon2sse-bin"
"-DFARMHASH_SOURCE_DIR=/tmp/farmhash"
"-Dgemmlowp_SOURCE_DIR=/tmp/gemmlowp"
- (string-append "-DRUY_SOURCE_DIR="
- (assoc-ref %build-inputs "ruy-src")))
+ )
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'chdir
(lambda _ (chdir "tensorflow/lite")))
(add-after 'chdir 'copy-sources
(lambda* (#:key inputs #:allow-other-keys)
- ;; Use external cmake finders instead of these stubs that won't
- ;; find anything but the bundled sources.
- (delete-file "tools/cmake/modules/Findabsl.cmake")
- (delete-file "tools/cmake/modules/Findeigen.cmake")
+ ;; TO DO: properly use Guix's pthreaqdpool
+ ;; roght now not using pthreadpool because
+ ;; we are not enabling xnnpack
(substitute* "CMakeLists.txt"
- (("find_package\\(eigen REQUIRED")
- "find_package(eigen REQUIRED NAMES Eigen3"))
- (substitute* "tools/cmake/modules/Findflatbuffers.cmake"
- (("get_target_property.*")
- (format #false "set(FLATBUFFERS_INCLUDE_DIRS ~a/include)\n"
- (assoc-ref inputs "flatbuffers"))))
+ (("if\\(NOT DEFINED PTHREADPOOL_SOURCE_DIR\\)")
+ "if(false)"))
+ (substitute* "CMakeLists.txt"
+ (("if\\(NOT TARGET pthreadpool\\)")
+ "if(false)"))
;; Don't fetch source code; we already have everything we need.
(substitute* '("tools/cmake/modules/fft2d.cmake"
- "tools/cmake/modules/ruy.cmake"
"tools/cmake/modules/farmhash.cmake"
- "tools/cmake/modules/neon2sse.cmake"
"tools/cmake/modules/gemmlowp.cmake")
(("OverridableFetchContent_Populate.*") ""))
@@ -2984,31 +3015,56 @@ (define-public tensorflow-lite
(invoke "tar" "--strip-components=1"
"-xf" (assoc-ref inputs "fft2d-src")))
- (copy-recursively (assoc-ref inputs "neon2sse-src")
- "/tmp/neon2sse/")
(copy-recursively (assoc-ref inputs "gemmlowp-src")
"/tmp/gemmlowp/")))
- (add-after 'copy-sources 'prepare-shared-library-build
- (lambda _ (chdir "c")))
- (replace 'install
- (lambda* (#:key outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (lib (string-append out "/lib"))
- (headers (string-append out "/include/tensorflow/lite")))
- (install-file "../build/libtensorflowlite_c.so" lib)
- (with-directory-excursion ".."
- (for-each
- (lambda (file)
- (let ((target-dir (string-append headers "/" (dirname file))))
- (install-file file target-dir)))
- (find-files "." "\\.h$")))))))))
+
+ (add-after 'build 'build-shared-library
+ (lambda* (#:key configure-flags #:allow-other-keys)
+ (mkdir-p "c")
+ (with-directory-excursion "c"
+ (apply invoke "cmake" (append configure-flags (list "../../lite/c")))
+ (invoke "cmake" "--build" "." "-j" (number->string
+ (parallel-job-count))))))
+ (add-after 'build-shared-library 'build-benchmark-model
+ (lambda _
+ (invoke "cmake" "--build" "." "--target" "benchmark_model"
+ "-j" (number->string (parallel-job-count)))))
+
+ (add-after 'install 'install-extra
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (lib (string-append out "/lib"))
+ (bin (string-append out "/bin")))
+ (install-file "../build/c/libtensorflowlite_c.so" lib)
+ (install-file "../build/tools/benchmark/benchmark_model" bin))))
+ ; TO DO: test not building now
+ ; (replace 'check
+ ; (lambda* (#:key tests? #:allow-other-keys)
+ ; (when tests?
+ ; (invoke "ctest" "-L" "plain"))))
+ )))
(inputs
`(("abseil-cpp" ,abseil-cpp-20200923.3)
- ("eigen" ,eigen-for-tensorflow-lite)
- ("flatbuffers" ,flatbuffers)
- ("python" ,python)))
+ ("cpuinfo" ,cpuinfo)
+ ("eigen" ,eigen)
+ ("fp16" ,fp16)
+ ("flatbuffers" ,flatbuffers-next-shared)
+ ;("gemmlowp" ,gemmlowp) ;; TO DO
+ ("mesa-headers" ,mesa-headers)
+ ("neon2sse" ,neon2sse)
+ ("nsync" ,nsync)
+ ("opencl-clhpp" ,opencl-clhpp)
+ ("opencl-headers" ,opencl-headers)
+ ("opencl-icd-loader" ,opencl-icd-loader)
+ ("pthreadpool" ,pthreadpool)
+ ("python" ,python)
+ ("ruy" ,ruy)
+ ("re2" ,re2)
+ ;("xnnpack" ,xnnpack) ;; TO DO: properly use Guix's copy of xnnpack
+ ("vulkan-headers" , vulkan-headers)))
(native-inputs
`(("pkg-config" ,pkg-config)
+ ("googletest" ,googletest)
("gemmlowp-src"
;; The commit hash is taken from
;; "tensorflow/lite/tools/cmake/modules/gemmlowp.cmake".
@@ -3022,17 +3078,6 @@ (define-public tensorflow-lite
(sha256
(base32
"1sbp8kmr2azwlvfbzryy1frxi99jhsh1nc93bdbxdf8zdgpv0kxl")))))
- ("neon2sse-src"
- ,(let ((commit "a1652fd5253afbf3e39357b012974f93511f6108"))
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/intel/ARM_NEON_2_x86_SSE")
- (commit commit)))
- (file-name (git-file-name "neon2sse" (string-take commit 8)))
- (sha256
- (base32
- "1q8gkxag9wlnwdwad2pclsrkwzrdjy94hyrkayrsvxyj7szb5y8i")))))
("farmhash-src"
,(let ((commit "816a4ae622e964763ca0862d9dbd19324a1eaf45"))
(origin
@@ -3048,24 +3093,12 @@ (define-public tensorflow-lite
,(origin
(method url-fetch)
(uri (string-append "https://storage.googleapis.com/"
- "mirror.tensorflow.org/"
- "www.kurims.kyoto-u.ac.jp/~ooura/fft2d.tgz"))
+ "mirror.tensorflow.org/github.com/petewarden/"
+ "OouraFFT/archive/v1.0.tar.gz"))
(file-name "fft2d.tar.gz")
(sha256
(base32
- "1jfflzi74fag9z4qmgwvp90aif4dpbr1657izmxlgvf4hy8fk9xd"))))
- ("ruy-src"
- ,(let ((commit "9c56af3fce210a8a103eda19bd6f47c08a9e3d90"))
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/google/ruy")
- (commit commit)
- (recursive? #true)))
- (file-name (git-file-name "ruy" (string-take commit 8)))
- (sha256
- (base32
- "1cfd5gk6kaj8kbl3h98gx1ap8czd59y6p8qq8nr28fklpyzf5cis")))))))
+ "1jfflzi74fag9z4qmgwvp90aif4dpbr1657izmxlgvf4hy8fk9xd"))))))
(home-page "https://tensorflow.org")
(synopsis "Machine learning framework")
(description
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index b2cb0a7308..4c92b22bac 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -86,7 +86,6 @@ (define-module (gnu packages maths)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix git-download)
- #:use-module (guix gexp)
#:use-module (guix utils)
#:use-module ((guix build utils) #:select (alist-replace))
#:use-module (guix build-system ant)
diff --git a/gnu/packages/serialization.scm b/gnu/packages/serialization.scm
index 1f8c128eba..0a45920894 100644
--- a/gnu/packages/serialization.scm
+++ b/gnu/packages/serialization.scm
@@ -807,6 +807,18 @@ (define-public flatbuffers-next
(base32
"1z3a6l8g2y53i5xzraswfs2i0i3kk52zv7nzc2q3fgisbyiri3pz"))))))
+(define-public flatbuffers-next-shared
+ (package
+ (inherit flatbuffers-next)
+ (name "flatbuffers-shared")
+ (version "23.1.21")
+ (arguments
+ (substitute-keyword-arguments (package-arguments flatbuffers-next)
+ ((#:configure-flags flags)
+ ;; make C++ fiels compiled with -fPIC, needed for shared lib".
+ #~(cons "-DFLATBUFFERS_CXX_FLAGS=-fPIC" #$flags))))))
+
+
(define-public python-feather-format
(package
(name "python-feather-format")
base-commit: 35c8d631d2bd63c64e863b5509f29fdcb7f856e6
prerequisite-patch-id: 36485dd2de3da6fe04218b9a9fb621d749609628
prerequisite-patch-id: 6a623f7c3bdc733b110fd6f59f31032adb7d987d
prerequisite-patch-id: 4b8245be9f9ab7b2cf9713a404b7d1632d945278
--
2.41.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [bug#63897] [PATCH v5] gnu: tensorflow-lite: Update to 2.12.1
2023-07-28 8:44 ` [bug#63897] [PATCH v5] gnu: tensorflow-lite: Update to 2.12.1 Andy Tai
@ 2023-08-07 15:27 ` Andreas Enge
0 siblings, 0 replies; 11+ messages in thread
From: Andreas Enge @ 2023-08-07 15:27 UTC (permalink / raw)
To: Andy Tai; +Cc: Ricardo Wurmus, 63897, Efraim Flashner, Eric Bavier
Hello,
it looks like I was in cc because of your touching maths.scm and/or
algebra.scm. I am definitely fine with removing eigen-for-tensorflow
if it is not needed any more!
Removal of the duplicate line in maths.scm is unrelated and should be done
in a separate commit, which I have just pushed; thanks for noticing it!
However I do not feel competent about tensorflow itself, so I am not going
to review your patch. I am adding Ricardo in cc, who has been working on the
package in the past.
Andreas
^ permalink raw reply [flat|nested] 11+ messages in thread
* [bug#63897] [PATCH v6] gnu: tensorflow-lite: Update to 2.12.1
2023-06-04 23:28 [bug#63897] [PATCH] gnu: tensorflow_lite: Update to 2.12.0 Andy Tai
` (3 preceding siblings ...)
2023-07-28 8:44 ` [bug#63897] [PATCH v5] gnu: tensorflow-lite: Update to 2.12.1 Andy Tai
@ 2023-09-03 4:55 ` Andy Tai
[not found] ` <ZPYjrlZJ_HqFxqDk@jurong>
2023-09-08 8:54 ` bug#63897: [PATCH] gnu: tensorflow_lite: Update to 2.12.0 Ricardo Wurmus
5 siblings, 1 reply; 11+ messages in thread
From: Andy Tai @ 2023-09-03 4:55 UTC (permalink / raw)
To: 63897; +Cc: Andy Tai, Andreas Enge, Efraim Flashner, Eric Bavier
* gnu/packages/algebra.scm (eigen-for-tensorflow-lite): Remove variable.
* gnu/packages/machine-learning.scm (tensorflow-lite): Update to 2.12.1
[arguments] (configure-flags): Turn on GPU and RUY use; Use cmake to
find packages already in Guix as dependencies for absl-cpp, eigen,
flatbuffer, neon2ssl, cpuinfo, ruy.
[arguments] (phases): Remove operations setting up absl-cpp, eigen, ruy,
and neon2ssl as native inouts as now we use Guix's packages of these
as dependencies. Do default build phase.
Add steps to install C shared library and benchmark_model tool.
[arguments] (inputs): Add cpuinfo, eigen, fp16, mesa-header, opencl,
pthreadpool, ruy, vulkan and xnnpack as explicit inputs.
[arguments] (native-inputs): Remove local setup of neon2ssl and ruy
as we now use Guix's packages of these as explicit dependencies.
* gnu/packages/serialization.scm (flatbuffers-next-shared): New variable,
flatbuffers-next built with -fPIC as needed by tensorflow-lite.
---
gnu/packages/algebra.scm | 32 ------
gnu/packages/machine-learning.scm | 177 ++++++++++++++++++------------
gnu/packages/serialization.scm | 12 ++
3 files changed, 117 insertions(+), 104 deletions(-)
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index a717750c7b..b1ab755144 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -1154,38 +1154,6 @@ (define-public eigen-for-tensorflow
(substitute* "test/CMakeLists.txt"
(("ei_add_test\\(stddeque") "#")))))))))))
-(define-public eigen-for-tensorflow-lite
- ;; This commit was taken from
- ;; tensorflow/lite/tools/cmake/modules/eigen.cmake
- (let ((commit "d10b27fe37736d2944630ecd7557cefa95cf87c9")
- (revision "1"))
- (package (inherit eigen)
- (name "eigen-for-tensorflow-lite")
- (version (git-version "3.3.7" revision commit))
- (source (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://gitlab.com/libeigen/eigen")
- (commit commit)))
- (sha256
- (base32
- "0v8a20cwvwmp3hw4275b37frw33v92z0mr8f4dn6y8k0rz92hrrf"))
- (file-name (git-file-name name version))
- (modules '((guix build utils)))
- (snippet
- ;; Ther are test failures in the "unsupported" directory, but
- ;; maintainers say it's unsupported anyway, so just skip
- ;; them.
- '(begin
- (substitute* "unsupported/CMakeLists.txt"
- (("add_subdirectory\\(test.*")
- "# Do not build the tests for unsupported features.\n"))))))
- (arguments
- (substitute-keyword-arguments (package-arguments eigen)
- ((#:phases phases)
- `(modify-phases ,phases
- (delete 'disable-some-tests))))))))
-
(define-public xtensor
(package
(name "xtensor")
diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm
index 712abe9aff..f4d4b45084 100644
--- a/gnu/packages/machine-learning.scm
+++ b/gnu/packages/machine-learning.scm
@@ -55,12 +55,14 @@ (define-module (gnu packages machine-learning)
#:use-module (gnu packages)
#:use-module (gnu packages adns)
#:use-module (gnu packages algebra)
+ #:use-module (gnu packages assembly)
#:use-module (gnu packages audio)
#:use-module (gnu packages autotools)
#:use-module (gnu packages base)
#:use-module (gnu packages bash)
#:use-module (gnu packages boost)
#:use-module (gnu packages bdw-gc)
+ #:use-module (gnu packages c)
#:use-module (gnu packages check)
#:use-module (gnu packages compression)
#:use-module (gnu packages cmake)
@@ -89,6 +91,7 @@ (define-module (gnu packages machine-learning)
#:use-module (gnu packages ninja)
#:use-module (gnu packages ocaml)
#:use-module (gnu packages onc-rpc)
+ #:use-module (gnu packages opencl)
#:use-module (gnu packages parallel)
#:use-module (gnu packages perl)
#:use-module (gnu packages pkg-config)
@@ -100,6 +103,7 @@ (define-module (gnu packages machine-learning)
#:use-module (gnu packages python-science)
#:use-module (gnu packages python-web)
#:use-module (gnu packages python-xyz)
+ #:use-module (gnu packages regex)
#:use-module (gnu packages rpc)
#:use-module (gnu packages serialization)
#:use-module (gnu packages sphinx)
@@ -108,6 +112,7 @@ (define-module (gnu packages machine-learning)
#:use-module (gnu packages swig)
#:use-module (gnu packages time)
#:use-module (gnu packages tls)
+ #:use-module (gnu packages vulkan)
#:use-module (gnu packages video)
#:use-module (gnu packages web)
#:use-module (gnu packages xml)
@@ -2936,7 +2941,7 @@ (define-public tensorflow
(define-public tensorflow-lite
(package
(name "tensorflow-lite")
- (version "2.5.0")
+ (version "2.12.1")
(source
(origin
(method git-fetch)
@@ -2946,59 +2951,85 @@ (define-public tensorflow-lite
(file-name (git-file-name name version))
(sha256
(base32
- "1jdw2i1rq06zqd6aabh7bbm0avsg4pygnfmd7gviv0blhih9054l"))))
+ "0jkgljdagdqllnxygl35r5bh3f9qmbczymfj357gm9krh59g2kmd"))))
(build-system cmake-build-system)
(arguments
- `(#:tests? #false ; no "check" target
+ `(#:tests? #false ;tests not building now
#:build-type "Release"
+
+ #:modules ((ice-9 match)
+ (guix build utils)
+ (guix build cmake-build-system))
+
#:configure-flags
(list
- "-DTFLITE_ENABLE_GPU=OFF"
- "-DTFLITE_ENABLE_RUY=OFF"
+ ; "-DTFLITE_KERNEL_TEST=ON" ; TO DO: build tests
+ ;; so cmake can be used to find this from other packages
+ "-DTFLITE_ENABLE_INSTALL=ON"
+
+ ;; Use Guix's own packages as dependencies.
+ "-DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON"
+
+ "-DTFLITE_ENABLE_GPU=ON"
+ "-DTFLITE_ENABLE_RUY=ON"
+
+ ;; TO DO: turn on Farmhash
+ ;"-DSYSTEM_FARMHASH=ON"
+
+
+ (string-append "-Dabsl_DIR=" (assoc-ref %build-inputs "abseil-cpp")
+ "/lib/cmake/absl")
+ (string-append "-DEigen3_DIR=" (assoc-ref %build-inputs "eigen")
+ "/share/eigen3/cmake")
+ (string-append "-DFlatBuffers_DIR=" (assoc-ref %build-inputs "flatbuffers")
+ "/lib/cmake/flatbuffers")
+ (string-append "-DNEON_2_SSE_DIR=" (assoc-ref %build-inputs "neon2sse")
+ "/lib/cmake/NEON_2_SSE")
+ (string-append "-Dcpuinfo_DIR=" (assoc-ref %build-inputs "cpuinfo")
+ "/share/cpuinfo")
+ (string-append "-Druy_DIR=" (assoc-ref %build-inputs "ruy")
+ "/lib/cmake/ruy")
;; TODO: The build system attempts to build xnnpack from source. We
;; would like to use our xnnpack package here, but this requires more
;; work.
"-DTFLITE_ENABLE_XNNPACK=OFF"
- ;; Pretend we've already fetched abseil. We won't actually build it
- ;; but use the existing package.
- "-Dabseil-cpp_POPULATED=TRUE"
-
- ;; Don't fetch the sources. We have already built flatbuffers.
- "-Dflatbuffers_POPULATED=TRUE"
+ ;;; Don't fetch the sources. We have these already
+ "-Degl_headers_POPULATED=TRUE"
+ "-Dfp16_headers_POPULATED=TRUE"
+ "-Dopencl_headers_POPULATED=TRUE"
+ "-Dopengl_headers_POPULATED=TRUE"
+ "-Dvulkan_headers_POPULATED=TRUE"
+ "-Dgoogletest_POPULATED=TRUE"
+ "-Dgoogle_benchmark_POPULATED=TRUE"
+ "-Dnsync_POPULATED=TRUE"
+ "-Dre2_POPULATED=TRUE"
"-DFFT2D_SOURCE_DIR=/tmp/fft2d"
- "-Dneon2sse_SOURCE_DIR=/tmp/neon2sse"
- "-Dneon2sse_BINARY_DIR=/tmp/neon2sse-bin"
"-DFARMHASH_SOURCE_DIR=/tmp/farmhash"
"-Dgemmlowp_SOURCE_DIR=/tmp/gemmlowp"
- (string-append "-DRUY_SOURCE_DIR="
- (assoc-ref %build-inputs "ruy-src")))
+ )
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'chdir
(lambda _ (chdir "tensorflow/lite")))
(add-after 'chdir 'copy-sources
(lambda* (#:key inputs #:allow-other-keys)
- ;; Use external cmake finders instead of these stubs that won't
- ;; find anything but the bundled sources.
- (delete-file "tools/cmake/modules/Findabsl.cmake")
- (delete-file "tools/cmake/modules/Findeigen.cmake")
+ ;; TO DO: properly use Guix's pthreaqdpool
+ ;; roght now not using pthreadpool because
+ ;; we are not enabling xnnpack
(substitute* "CMakeLists.txt"
- (("find_package\\(eigen REQUIRED")
- "find_package(eigen REQUIRED NAMES Eigen3"))
- (substitute* "tools/cmake/modules/Findflatbuffers.cmake"
- (("get_target_property.*")
- (format #false "set(FLATBUFFERS_INCLUDE_DIRS ~a/include)\n"
- (assoc-ref inputs "flatbuffers"))))
+ (("if\\(NOT DEFINED PTHREADPOOL_SOURCE_DIR\\)")
+ "if(false)"))
+ (substitute* "CMakeLists.txt"
+ (("if\\(NOT TARGET pthreadpool\\)")
+ "if(false)"))
;; Don't fetch source code; we already have everything we need.
(substitute* '("tools/cmake/modules/fft2d.cmake"
- "tools/cmake/modules/ruy.cmake"
"tools/cmake/modules/farmhash.cmake"
- "tools/cmake/modules/neon2sse.cmake"
"tools/cmake/modules/gemmlowp.cmake")
(("OverridableFetchContent_Populate.*") ""))
@@ -3012,31 +3043,56 @@ (define-public tensorflow-lite
(invoke "tar" "--strip-components=1"
"-xf" (assoc-ref inputs "fft2d-src")))
- (copy-recursively (assoc-ref inputs "neon2sse-src")
- "/tmp/neon2sse/")
(copy-recursively (assoc-ref inputs "gemmlowp-src")
"/tmp/gemmlowp/")))
- (add-after 'copy-sources 'prepare-shared-library-build
- (lambda _ (chdir "c")))
- (replace 'install
- (lambda* (#:key outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (lib (string-append out "/lib"))
- (headers (string-append out "/include/tensorflow/lite")))
- (install-file "../build/libtensorflowlite_c.so" lib)
- (with-directory-excursion ".."
- (for-each
- (lambda (file)
- (let ((target-dir (string-append headers "/" (dirname file))))
- (install-file file target-dir)))
- (find-files "." "\\.h$")))))))))
+
+ (add-after 'build 'build-shared-library
+ (lambda* (#:key configure-flags #:allow-other-keys)
+ (mkdir-p "c")
+ (with-directory-excursion "c"
+ (apply invoke "cmake" (append configure-flags (list "../../lite/c")))
+ (invoke "cmake" "--build" "." "-j" (number->string
+ (parallel-job-count))))))
+ (add-after 'build-shared-library 'build-benchmark-model
+ (lambda _
+ (invoke "cmake" "--build" "." "--target" "benchmark_model"
+ "-j" (number->string (parallel-job-count)))))
+
+ (add-after 'install 'install-extra
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (lib (string-append out "/lib"))
+ (bin (string-append out "/bin")))
+ (install-file "../build/c/libtensorflowlite_c.so" lib)
+ (install-file "../build/tools/benchmark/benchmark_model" bin))))
+ ; TO DO: test not building now
+ ; (replace 'check
+ ; (lambda* (#:key tests? #:allow-other-keys)
+ ; (when tests?
+ ; (invoke "ctest" "-L" "plain"))))
+ )))
(inputs
`(("abseil-cpp" ,abseil-cpp-20200923.3)
- ("eigen" ,eigen-for-tensorflow-lite)
- ("flatbuffers" ,flatbuffers)
- ("python" ,python)))
+ ("cpuinfo" ,cpuinfo)
+ ("eigen" ,eigen)
+ ("fp16" ,fp16)
+ ("flatbuffers" ,flatbuffers-next-shared)
+ ;("gemmlowp" ,gemmlowp) ;; TO DO
+ ("mesa-headers" ,mesa-headers)
+ ("neon2sse" ,neon2sse)
+ ("nsync" ,nsync)
+ ("opencl-clhpp" ,opencl-clhpp)
+ ("opencl-headers" ,opencl-headers)
+ ("opencl-icd-loader" ,opencl-icd-loader)
+ ("pthreadpool" ,pthreadpool)
+ ("python" ,python)
+ ("ruy" ,ruy)
+ ("re2" ,re2)
+ ;("xnnpack" ,xnnpack) ;; TO DO: properly use Guix's copy of xnnpack
+ ("vulkan-headers" , vulkan-headers)))
(native-inputs
`(("pkg-config" ,pkg-config)
+ ("googletest" ,googletest)
("gemmlowp-src"
;; The commit hash is taken from
;; "tensorflow/lite/tools/cmake/modules/gemmlowp.cmake".
@@ -3050,17 +3106,6 @@ (define-public tensorflow-lite
(sha256
(base32
"1sbp8kmr2azwlvfbzryy1frxi99jhsh1nc93bdbxdf8zdgpv0kxl")))))
- ("neon2sse-src"
- ,(let ((commit "a1652fd5253afbf3e39357b012974f93511f6108"))
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/intel/ARM_NEON_2_x86_SSE")
- (commit commit)))
- (file-name (git-file-name "neon2sse" (string-take commit 8)))
- (sha256
- (base32
- "1q8gkxag9wlnwdwad2pclsrkwzrdjy94hyrkayrsvxyj7szb5y8i")))))
("farmhash-src"
,(let ((commit "816a4ae622e964763ca0862d9dbd19324a1eaf45"))
(origin
@@ -3076,24 +3121,12 @@ (define-public tensorflow-lite
,(origin
(method url-fetch)
(uri (string-append "https://storage.googleapis.com/"
- "mirror.tensorflow.org/"
- "www.kurims.kyoto-u.ac.jp/~ooura/fft2d.tgz"))
+ "mirror.tensorflow.org/github.com/petewarden/"
+ "OouraFFT/archive/v1.0.tar.gz"))
(file-name "fft2d.tar.gz")
(sha256
(base32
- "1jfflzi74fag9z4qmgwvp90aif4dpbr1657izmxlgvf4hy8fk9xd"))))
- ("ruy-src"
- ,(let ((commit "9c56af3fce210a8a103eda19bd6f47c08a9e3d90"))
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/google/ruy")
- (commit commit)
- (recursive? #true)))
- (file-name (git-file-name "ruy" (string-take commit 8)))
- (sha256
- (base32
- "1cfd5gk6kaj8kbl3h98gx1ap8czd59y6p8qq8nr28fklpyzf5cis")))))))
+ "1jfflzi74fag9z4qmgwvp90aif4dpbr1657izmxlgvf4hy8fk9xd"))))))
(home-page "https://tensorflow.org")
(synopsis "Machine learning framework")
(description
diff --git a/gnu/packages/serialization.scm b/gnu/packages/serialization.scm
index 9c114aaf39..0090d650ac 100644
--- a/gnu/packages/serialization.scm
+++ b/gnu/packages/serialization.scm
@@ -811,6 +811,18 @@ (define-public flatbuffers-next
(base32
"1z3a6l8g2y53i5xzraswfs2i0i3kk52zv7nzc2q3fgisbyiri3pz"))))))
+(define-public flatbuffers-next-shared
+ (package
+ (inherit flatbuffers-next)
+ (name "flatbuffers-shared")
+ (version "23.1.21")
+ (arguments
+ (substitute-keyword-arguments (package-arguments flatbuffers-next)
+ ((#:configure-flags flags)
+ ;; make C++ fiels compiled with -fPIC, needed for shared lib".
+ #~(cons "-DFLATBUFFERS_CXX_FLAGS=-fPIC" #$flags))))))
+
+
(define-public python-feather-format
(package
(name "python-feather-format")
base-commit: 4818ad5ba204e094fd8995c90c16ee1940e76210
prerequisite-patch-id: 4b8245be9f9ab7b2cf9713a404b7d1632d945278
prerequisite-patch-id: 6a623f7c3bdc733b110fd6f59f31032adb7d987d
--
2.41.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* bug#63897: [PATCH] gnu: tensorflow_lite: Update to 2.12.0
2023-06-04 23:28 [bug#63897] [PATCH] gnu: tensorflow_lite: Update to 2.12.0 Andy Tai
` (4 preceding siblings ...)
2023-09-03 4:55 ` [bug#63897] [PATCH v6] " Andy Tai
@ 2023-09-08 8:54 ` Ricardo Wurmus
5 siblings, 0 replies; 11+ messages in thread
From: Ricardo Wurmus @ 2023-09-08 8:54 UTC (permalink / raw)
To: 63897-done
Thanks for the patches and your patience.
I’ve made the changes I mentioned earlier and pushed the update together
with the other two patches this depends on.
--
Ricardo
^ permalink raw reply [flat|nested] 11+ messages in thread