aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjacobi petrucciani <8117202+jpetrucciani@users.noreply.github.com>2023-06-07 00:15:31 -0400
committerGitHub <noreply@github.com>2023-06-07 07:15:31 +0300
commit5b57a5b72676540b6a45a3f527126299969ad241 (patch)
treeb7ff35e8d4356e06f1cfbc50ce4733c81762a0e6
parent4dc62c545df0af60635d579e9e4dd91bc5afff51 (diff)
flake : update to support metal on m1/m2 (#1724)
-rw-r--r--flake.lock30
-rw-r--r--flake.nix26
2 files changed, 42 insertions, 14 deletions
diff --git a/flake.lock b/flake.lock
index 343996d..33164e0 100644
--- a/flake.lock
+++ b/flake.lock
@@ -1,12 +1,15 @@
{
"nodes": {
"flake-utils": {
+ "inputs": {
+ "systems": "systems"
+ },
"locked": {
- "lastModified": 1676283394,
- "narHash": "sha256-XX2f9c3iySLCw54rJ/CZs+ZK6IQy7GXNY4nSOyu2QG4=",
+ "lastModified": 1685518550,
+ "narHash": "sha256-o2d0KcvaXzTrPRIo0kOLV0/QXHhDQ5DTi+OxcjO8xqY=",
"owner": "numtide",
"repo": "flake-utils",
- "rev": "3db36a8b464d0c4532ba1c7dda728f4576d6d073",
+ "rev": "a1720a10a6cfe8234c0e93907ffe81be440f4cef",
"type": "github"
},
"original": {
@@ -17,11 +20,11 @@
},
"nixpkgs": {
"locked": {
- "lastModified": 1678470307,
- "narHash": "sha256-OEeMUr3ueLIXyW/OaFUX5jUdimyQwMg/7e+/Q0gC/QE=",
+ "lastModified": 1685931219,
+ "narHash": "sha256-8EWeOZ6LKQfgAjB/USffUSELPRjw88A+xTcXnOUvO5M=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "0c4800d579af4ed98ecc47d464a5e7b0870c4b1f",
+ "rev": "7409480d5c8584a1a83c422530419efe4afb0d19",
"type": "github"
},
"original": {
@@ -36,6 +39,21 @@
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs"
}
+ },
+ "systems": {
+ "locked": {
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
}
},
"root": "root",
diff --git a/flake.nix b/flake.nix
index 2c9edbb..6191004 100644
--- a/flake.nix
+++ b/flake.nix
@@ -6,6 +6,13 @@
outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (system:
let
+ inherit (pkgs.stdenv) isAarch64 isDarwin;
+ inherit (pkgs.lib) optionals;
+ isM1 = isAarch64 && isDarwin;
+ osSpecific =
+ if isM1 then with pkgs.darwin.apple_sdk_11_0.frameworks; [ Accelerate MetalKit MetalPerformanceShaders MetalPerformanceShadersGraph ]
+ else if isDarwin then with pkgs.darwin.apple_sdk.frameworks; [ Accelerate CoreGraphics CoreVideo ]
+ else [ ];
pkgs = import nixpkgs {
inherit system;
};
@@ -18,17 +25,22 @@
packages.default = pkgs.stdenv.mkDerivation {
name = "llama.cpp";
src = ./.;
+ postPatch =
+ if isM1 then ''
+ substituteInPlace ./ggml-metal.m \
+ --replace '[[NSBundle mainBundle] pathForResource:@"ggml-metal" ofType:@"metal"];' "@\"$out/ggml-metal.metal\";"
+ '' else "";
nativeBuildInputs = with pkgs; [ cmake ];
- buildInputs = with pkgs; lib.optionals stdenv.isDarwin [
- darwin.apple_sdk.frameworks.Accelerate
- ];
- cmakeFlags = with pkgs; lib.optionals (system == "aarch64-darwin") [
+ buildInputs = osSpecific;
+ cmakeFlags = [ "-DLLAMA_BUILD_SERVER=ON" ] ++ (optionals isM1 [
"-DCMAKE_C_FLAGS=-D__ARM_FEATURE_DOTPROD=1"
- ];
+ "-DLLAMA_METAL=ON"
+ ]);
installPhase = ''
mkdir -p $out/bin
mv bin/* $out/bin/
mv $out/bin/main $out/bin/llama
+ mv $out/bin/server $out/bin/llama-server
echo "#!${llama-python}/bin/python" > $out/bin/convert.py
cat ${./convert.py} >> $out/bin/convert.py
@@ -40,9 +52,7 @@
packages = with pkgs; [
cmake
llama-python
- ] ++ lib.optionals stdenv.isDarwin [
- darwin.apple_sdk.frameworks.Accelerate
- ];
+ ] ++ osSpecific;
};
}
);