From 14b8039d94b1c0e2fe5c0b71c84f6a7aa8ff653e Mon Sep 17 00:00:00 2001 From: Danny Milosavljevic Date: Wed, 29 Jan 2025 01:22:33 +0100 Subject: gnu: llama-cpp: Enable Vulkan. * gnu/packages/patches/llama-cpp-vulkan-optional.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/machine-learning.scm (llama-cpp) [source]: Add patch. [arguments]<#:tests?>: Disable. <#:configure-flags>: Add "-DGGML_VULKAN=ON". <#:phases>[patch-paths]: New phase. [inputs]: Add vulkan-headers, vulkan-loader. [native-inputs]: Add shaderc, bash. Change-Id: Ib7a58f5c7f622213f3aaf5abcd701b17eed80f6b --- gnu/packages/machine-learning.scm | 18 +++++++++++----- .../patches/llama-cpp-vulkan-optional.patch | 24 ++++++++++++++++++++++ 2 files changed, 37 insertions(+), 5 deletions(-) create mode 100644 gnu/packages/patches/llama-cpp-vulkan-optional.patch diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm index 14fece2cac..301401f001 100644 --- a/gnu/packages/machine-learning.scm +++ b/gnu/packages/machine-learning.scm @@ -595,12 +595,15 @@ (define-public llama-cpp (commit tag))) (file-name (git-file-name name tag)) (sha256 - (base32 "1xf2579q0r8nv06kj8padi6w9cv30w58vdys65nq8yzm3dy452a1")))) + (base32 "1xf2579q0r8nv06kj8padi6w9cv30w58vdys65nq8yzm3dy452a1")) + (patches + (search-patches "llama-cpp-vulkan-optional.patch")))) (build-system cmake-build-system) (arguments (list #:configure-flags #~(list "-DBUILD_SHARED_LIBS=ON" + "-DGGML_VULKAN=ON" "-DGGML_BLAS=ON" "-DGGML_BLAS_VENDOR=OpenBLAS" (string-append "-DBLAS_INCLUDE_DIRS=" @@ -625,10 +628,15 @@ (define-public llama-cpp (guix build python-build-system)) #:phases #~(modify-phases %standard-phases + (add-after 'unpack 'patch-paths + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp" + (("\"/bin/sh\"") + (string-append "\"" (search-input-file inputs "/bin/sh") "\""))))) (add-after 'unpack 'disable-unrunable-tests - ;; test-eval-callback downloads ML model from network, cannot - ;; run in Guix build environment (lambda _ + ;; test-eval-callback downloads ML model from network, cannot + ;; run in Guix build environment (substitute* '("examples/eval-callback/CMakeLists.txt") (("COMMAND llama-eval-callback") "COMMAND true llama-eval-callback")))) @@ -658,8 +666,8 @@ (define (make-script script) (string-append (assoc-ref outputs "out") "/bin") "^test-"))))))) - (inputs (list python)) - (native-inputs (list pkg-config)) + (inputs (list python vulkan-headers vulkan-loader)) + (native-inputs (list pkg-config shaderc bash)) (propagated-inputs (list python-numpy python-pytorch python-sentencepiece openblas)) (properties '((tunable? . #true))) ;use AVX512, FMA, etc. when available diff --git a/gnu/packages/patches/llama-cpp-vulkan-optional.patch b/gnu/packages/patches/llama-cpp-vulkan-optional.patch new file mode 100644 index 0000000000..9f91b2850d --- /dev/null +++ b/gnu/packages/patches/llama-cpp-vulkan-optional.patch @@ -0,0 +1,24 @@ +Author: Danny Milosavljevic +Date: 2025-01-29 +License: Expat + +diff -ru orig/llama.cpp/ggml/src/ggml-vulkan/ggml-vulkan.cpp llama.cpp/ggml/src/ggml-vulkan/ggml-vulkan.cpp +--- orig/llama.cpp/ggml/src/ggml-vulkan/ggml-vulkan.cpp 2025-01-29 06:24:10.922476480 +0100 ++++ llama.cpp/ggml/src/ggml-vulkan/ggml-vulkan.cpp 2025-01-29 06:26:45.973357439 +0100 +@@ -7317,9 +7317,13 @@ + } + + static int ggml_vk_get_device_count() { +- ggml_vk_instance_init(); +- +- return vk_instance.device_indices.size(); ++ try { ++ ggml_vk_instance_init(); ++ return vk_instance.device_indices.size(); ++ } catch (const vk::SystemError& e) { ++ std::cerr << "ggml_vulkan: Error: System error" << std::endl; ++ return 0; ++ } + } + + static void ggml_vk_get_device_description(int device, char * description, size_t description_size) { -- cgit v1.2.3