From 1cbd07c4e6cca50e6244c2ec373d19d4d0d6a98a Mon Sep 17 00:00:00 2001 From: DontEatOreo <57304299+DontEatOreo@users.noreply.github.com> Date: Fri, 19 Jul 2024 14:02:20 +0300 Subject: [PATCH 1/5] koboldcpp: backport old interfaces Refs: https://github.com/NixOS/nixpkgs/pull/327102#discussion_r1677136308 Refs: https://github.com/NixOS/nixpkgs/pull/327102#discussion_r1677136419 Refs: https://github.com/NixOS/nixpkgs/pull/327102#discussion_r1677137201 Co-authored-by: SomeoneSerge --- pkgs/by-name/ko/koboldcpp/package.nix | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pkgs/by-name/ko/koboldcpp/package.nix b/pkgs/by-name/ko/koboldcpp/package.nix index 23b0f21bdac8..db7894de9b2e 100644 --- a/pkgs/by-name/ko/koboldcpp/package.nix +++ b/pkgs/by-name/ko/koboldcpp/package.nix @@ -5,6 +5,7 @@ makeWrapper, gitUpdater, python3Packages, + python311Packages ? null, # Ignored. Kept for compatibility with the release tk, addDriverRunpath, @@ -31,6 +32,8 @@ vulkan-loader, metalSupport ? stdenv.isDarwin && stdenv.isAarch64, + march ? "", + mtune ? "", }: let @@ -106,6 +109,14 @@ effectiveStdenv.mkDerivation (finalAttrs: { env.NIX_LDFLAGS = lib.concatStringsSep " " (finalAttrs.darwinLdFlags ++ finalAttrs.metalLdFlags); + env.NIX_CFLAGS_COMPILE = + lib.optionalString (march != "") ( + lib.warn "koboldcpp: the march argument is only kept for compatibility; use overrideAttrs intead" "-march=${march}" + ) + + lib.optionalString (mtune != "") ( + lib.warn "koboldcpp: the mtune argument is only kept for compatibility; use overrideAttrs intead" "-mtune=${mtune}" + ); + makeFlags = [ (makeBool "LLAMA_OPENBLAS" openblasSupport) (makeBool "LLAMA_CUBLAS" cublasSupport) From 201ee231068c2353497a3d73b99c22ff0f83f769 Mon Sep 17 00:00:00 2001 From: DontEatOreo <57304299+DontEatOreo@users.noreply.github.com> Date: Fri, 19 Jul 2024 14:18:32 +0300 Subject: [PATCH 2/5] koboldcpp: fix x86_64-darwin build Refs: https://github.com/NixOS/nixpkgs/pull/327102/checks?check_run_id=27511352788 --- pkgs/by-name/ko/koboldcpp/package.nix | 28 ++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/pkgs/by-name/ko/koboldcpp/package.nix b/pkgs/by-name/ko/koboldcpp/package.nix index db7894de9b2e..79821a3838a8 100644 --- a/pkgs/by-name/ko/koboldcpp/package.nix +++ b/pkgs/by-name/ko/koboldcpp/package.nix @@ -43,6 +43,12 @@ let --prefix LD_LIBRARY_PATH: "${lib.makeLibraryPath [ addDriverRunpath.driverLink ]}" ''; + darwinFrameworks = + if (stdenv.isDarwin && stdenv.isx86_64) then + darwin.apple_sdk.frameworks + else + darwin.apple_sdk_11_0.frameworks; + effectiveStdenv = if cublasSupport then cudaPackages.backendStdenv else stdenv; in effectiveStdenv.mkDerivation (finalAttrs: { @@ -69,15 +75,15 @@ effectiveStdenv.mkDerivation (finalAttrs: { [ tk ] ++ finalAttrs.pythonInputs ++ lib.optionals effectiveStdenv.isDarwin [ - darwin.apple_sdk_11_0.frameworks.Accelerate - darwin.apple_sdk_11_0.frameworks.CoreVideo - darwin.apple_sdk_11_0.frameworks.CoreGraphics - darwin.apple_sdk_11_0.frameworks.CoreServices + darwinFrameworks.Accelerate + darwinFrameworks.CoreVideo + darwinFrameworks.CoreGraphics + darwinFrameworks.CoreServices ] ++ lib.optionals metalSupport [ - darwin.apple_sdk_11_0.frameworks.MetalKit - darwin.apple_sdk_11_0.frameworks.Foundation - darwin.apple_sdk_11_0.frameworks.MetalPerformanceShaders + darwinFrameworks.MetalKit + darwinFrameworks.Foundation + darwinFrameworks.MetalPerformanceShaders ] ++ lib.optionals openblasSupport [ openblas ] ++ lib.optionals cublasSupport [ @@ -95,14 +101,14 @@ effectiveStdenv.mkDerivation (finalAttrs: { pythonPath = finalAttrs.pythonInputs; darwinLdFlags = lib.optionals stdenv.isDarwin [ - "-F${darwin.apple_sdk_11_0.frameworks.CoreServices}/Library/Frameworks" - "-F${darwin.apple_sdk_11_0.frameworks.Accelerate}/Library/Frameworks" + "-F${darwinFrameworks.CoreServices}/Library/Frameworks" + "-F${darwinFrameworks.Accelerate}/Library/Frameworks" "-framework CoreServices" "-framework Accelerate" ]; metalLdFlags = lib.optionals metalSupport [ - "-F${darwin.apple_sdk_11_0.frameworks.Foundation}/Library/Frameworks" - "-F${darwin.apple_sdk_11_0.frameworks.Metal}/Library/Frameworks" + "-F${darwinFrameworks.Foundation}/Library/Frameworks" + "-F${darwinFrameworks.Metal}/Library/Frameworks" "-framework Foundation" "-framework Metal" ]; From 269a863769cf470897f57c4115922e24c701a0c2 Mon Sep 17 00:00:00 2001 From: DontEatOreo <57304299+DontEatOreo@users.noreply.github.com> Date: Fri, 19 Jul 2024 14:19:28 +0300 Subject: [PATCH 3/5] koboldcpp: rename interface arches -> cudaArches Refs: https://github.com/NixOS/nixpkgs/pull/325540#discussion_r1677129990 Co-authored-by: SomeoneSerge --- pkgs/by-name/ko/koboldcpp/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/ko/koboldcpp/package.nix b/pkgs/by-name/ko/koboldcpp/package.nix index 79821a3838a8..c096948565b0 100644 --- a/pkgs/by-name/ko/koboldcpp/package.nix +++ b/pkgs/by-name/ko/koboldcpp/package.nix @@ -22,7 +22,7 @@ cublasSupport ? config.cudaSupport, # You can find a full list here: https://arnon.dk/matching-sm-architectures-arch-and-gencode-for-various-nvidia-cards/ # For example if you're on an GTX 1080 that means you're using "Pascal" and you need to pass "sm_60" - arches ? cudaPackages.cudaFlags.arches or [ ], + cudaArches ? cudaPackages.cudaFlags.arches or [ ], clblastSupport ? stdenv.isLinux, clblast, @@ -129,7 +129,7 @@ effectiveStdenv.mkDerivation (finalAttrs: { (makeBool "LLAMA_CLBLAST" clblastSupport) (makeBool "LLAMA_VULKAN" vulkanSupport) (makeBool "LLAMA_METAL" metalSupport) - (lib.optionalString cublasSupport "CUDA_DOCKER_ARCH=sm_${builtins.head arches}") + (lib.optionalString cublasSupport "CUDA_DOCKER_ARCH=sm_${builtins.head cudaArches}") ]; installPhase = '' From fd54fe25e06e763cf15549a5877f808e0553450e Mon Sep 17 00:00:00 2001 From: DontEatOreo <57304299+DontEatOreo@users.noreply.github.com> Date: Fri, 19 Jul 2024 14:23:51 +0300 Subject: [PATCH 4/5] koboldcpp: lib.optionalString -> lib.optionals (cublasSupport) Refs: https://github.com/NixOS/nixpkgs/pull/325540#discussion_r1677129629 Co-authored-by: SomeoneSerge --- pkgs/by-name/ko/koboldcpp/package.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/by-name/ko/koboldcpp/package.nix b/pkgs/by-name/ko/koboldcpp/package.nix index c096948565b0..bc64a8d9e0fe 100644 --- a/pkgs/by-name/ko/koboldcpp/package.nix +++ b/pkgs/by-name/ko/koboldcpp/package.nix @@ -129,7 +129,7 @@ effectiveStdenv.mkDerivation (finalAttrs: { (makeBool "LLAMA_CLBLAST" clblastSupport) (makeBool "LLAMA_VULKAN" vulkanSupport) (makeBool "LLAMA_METAL" metalSupport) - (lib.optionalString cublasSupport "CUDA_DOCKER_ARCH=sm_${builtins.head cudaArches}") + (lib.optionals cublasSupport "CUDA_DOCKER_ARCH=sm_${builtins.head cudaArches}") ]; installPhase = '' From e04cfef691595a3953ee552700463c4e928fc13a Mon Sep 17 00:00:00 2001 From: DontEatOreo <57304299+DontEatOreo@users.noreply.github.com> Date: Fri, 19 Jul 2024 14:30:44 +0300 Subject: [PATCH 5/5] koboldcpp: makeWrapperArgs -> libraryPathWrapperArgs `makeWrapperArgs` was quite ambiguous and unclear. `libraryPathWrapperArgs` is clearer on what it's supposed to actually do --- pkgs/by-name/ko/koboldcpp/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/ko/koboldcpp/package.nix b/pkgs/by-name/ko/koboldcpp/package.nix index bc64a8d9e0fe..ae0e441ce434 100644 --- a/pkgs/by-name/ko/koboldcpp/package.nix +++ b/pkgs/by-name/ko/koboldcpp/package.nix @@ -39,7 +39,7 @@ let makeBool = option: bool: (if bool then "${option}=1" else ""); - makeWrapperArgs = lib.optionalString config.cudaSupport '' + libraryPathWrapperArgs = lib.optionalString config.cudaSupport '' --prefix LD_LIBRARY_PATH: "${lib.makeLibraryPath [ addDriverRunpath.driverLink ]}" ''; @@ -158,7 +158,7 @@ effectiveStdenv.mkDerivation (finalAttrs: { postFixup = '' wrapPythonProgramsIn "$out/bin" "$pythonPath" makeWrapper "$out/bin/koboldcpp.unwrapped" "$out/bin/koboldcpp" \ - --prefix PATH ${lib.makeBinPath [ tk ]} ${makeWrapperArgs} + --prefix PATH ${lib.makeBinPath [ tk ]} ${libraryPathWrapperArgs} ''; passthru.updateScript = gitUpdater { rev-prefix = "v"; };