Nix: development shel, direnv and compatibility

This commit is contained in:
Niklas Korz 2023-03-13 10:48:39 +01:00
parent 034b589102
commit a9230b679b
6 changed files with 56 additions and 5 deletions

1
.envrc Normal file
View file

@ -0,0 +1 @@
use_flake

2
.gitignore vendored
View file

@ -3,6 +3,7 @@
.cache/ .cache/
.vs/ .vs/
.vscode/ .vscode/
.direnv/
.DS_Store .DS_Store
build/ build/
@ -18,6 +19,7 @@ models/*
/main /main
/quantize /quantize
/result
arm_neon.h arm_neon.h
compile_commands.json compile_commands.json

10
default.nix Normal file
View file

@ -0,0 +1,10 @@
(import
(
let lock = builtins.fromJSON (builtins.readFile ./flake.lock); in
fetchTarball {
url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";
sha256 = lock.nodes.flake-compat.locked.narHash;
}
)
{ src = ./.; }
).defaultNix

17
flake.lock generated
View file

@ -1,5 +1,21 @@
{ {
"nodes": { "nodes": {
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1673956053,
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-utils": { "flake-utils": {
"locked": { "locked": {
"lastModified": 1676283394, "lastModified": 1676283394,
@ -33,6 +49,7 @@
}, },
"root": { "root": {
"inputs": { "inputs": {
"flake-compat": "flake-compat",
"flake-utils": "flake-utils", "flake-utils": "flake-utils",
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs"
} }

View file

@ -1,15 +1,19 @@
{ {
inputs = { inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-compat = {
url = "github:edolstra/flake-compat";
flake = false;
};
flake-utils.url = "github:numtide/flake-utils"; flake-utils.url = "github:numtide/flake-utils";
}; };
outputs = { self, nixpkgs, flake-utils }: outputs = { self, nixpkgs, flake-utils, ... }:
flake-utils.lib.eachDefaultSystem (system: flake-utils.lib.eachDefaultSystem (system:
let let
pkgs = import nixpkgs { pkgs = import nixpkgs {
inherit system; inherit system;
}; };
python = with pkgs; python310.withPackages (ps: with python310Packages; [ llama-python = with pkgs; python310.withPackages (ps: with python310Packages; [
torch torch
numpy numpy
sentencepiece sentencepiece
@ -18,19 +22,26 @@
{ {
packages.default = pkgs.stdenv.mkDerivation { packages.default = pkgs.stdenv.mkDerivation {
name = "llama.cpp"; name = "llama.cpp";
buildInputs = pkgs.lib.optionals pkgs.stdenv.isDarwin [ buildInputs = with pkgs; lib.optionals stdenv.isDarwin [
pkgs.darwin.apple_sdk.frameworks.Accelerate darwin.apple_sdk.frameworks.Accelerate
]; ];
src = ./.; src = ./.;
installPhase = '' installPhase = ''
mkdir -p $out/bin mkdir -p $out/bin
mv main $out/bin/llama-cpp mv main $out/bin/llama-cpp
mv quantize $out/bin/llama-cpp-quantize mv quantize $out/bin/llama-cpp-quantize
echo "#!${python}/bin/python" > $out/bin/convert-pth-to-ggml echo "#!${llama-python}/bin/python" > $out/bin/convert-pth-to-ggml
cat convert-pth-to-ggml.py >> $out/bin/convert-pth-to-ggml cat convert-pth-to-ggml.py >> $out/bin/convert-pth-to-ggml
chmod +x $out/bin/convert-pth-to-ggml chmod +x $out/bin/convert-pth-to-ggml
''; '';
}; };
devShells.default = pkgs.mkShell {
packages = with pkgs; [
llama-python
] ++ lib.optionals stdenv.isDarwin [
darwin.apple_sdk.frameworks.Accelerate
];
};
} }
); );
} }

10
shell.nix Normal file
View file

@ -0,0 +1,10 @@
(import
(
let lock = builtins.fromJSON (builtins.readFile ./flake.lock); in
fetchTarball {
url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";
sha256 = lock.nodes.flake-compat.locked.narHash;
}
)
{ src = ./.; }
).shellNix