summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.devops/nix/docker.nix37
-rw-r--r--.devops/nix/scope.nix3
-rw-r--r--.devops/nix/sif.nix27
3 files changed, 67 insertions, 0 deletions
diff --git a/.devops/nix/docker.nix b/.devops/nix/docker.nix
new file mode 100644
index 00000000..d607b457
--- /dev/null
+++ b/.devops/nix/docker.nix
@@ -0,0 +1,37 @@
+{
+ lib,
+ dockerTools,
+ buildEnv,
+ llama-cpp,
+ interactive ? true,
+ coreutils,
+}:
+
+# A tar that can be fed into `docker load`:
+#
+# $ nix build .#llamaPackages.docker
+# $ docker load < result
+
+# For details and variations cf.
+# - https://nixos.org/manual/nixpkgs/unstable/#ssec-pkgs-dockerTools-buildLayeredImage
+# - https://discourse.nixos.org/t/a-faster-dockertools-buildimage-prototype/16922
+# - https://nixery.dev/
+
+# Approximate (compressed) sizes, at the time of writing, are:
+#
+# .#llamaPackages.docker: 125M;
+# .#llamaPackagesCuda.docker: 537M;
+# .#legacyPackages.aarch64-linux.llamaPackagesXavier.docker: 415M.
+
+dockerTools.buildLayeredImage {
+ name = llama-cpp.pname;
+ tag = "latest";
+
+ contents =
+ [ llama-cpp ]
+ ++ lib.optionals interactive [
+ coreutils
+ dockerTools.binSh
+ dockerTools.caCertificates
+ ];
+}
diff --git a/.devops/nix/scope.nix b/.devops/nix/scope.nix
index d295995a..78530c9e 100644
--- a/.devops/nix/scope.nix
+++ b/.devops/nix/scope.nix
@@ -12,5 +12,8 @@ lib.makeScope newScope (
self: {
inherit llamaVersion;
llama-cpp = self.callPackage ./package.nix { };
+ docker = self.callPackage ./docker.nix { };
+ docker-min = self.callPackage ./docker.nix { interactive = false; };
+ sif = self.callPackage ./sif.nix { };
}
)
diff --git a/.devops/nix/sif.nix b/.devops/nix/sif.nix
new file mode 100644
index 00000000..7535ca0f
--- /dev/null
+++ b/.devops/nix/sif.nix
@@ -0,0 +1,27 @@
+{
+ lib,
+ singularity-tools,
+ llama-cpp,
+ bashInteractive,
+ interactive ? false,
+}:
+
+let
+ optionalInt = cond: x: if cond then x else 0;
+in
+singularity-tools.buildImage rec {
+ inherit (llama-cpp) name;
+ contents = [ llama-cpp ] ++ lib.optionals interactive [ bashInteractive ];
+
+ # These are excessive (but safe) for most variants. Building singularity
+ # images requires superuser privileges, so we build them inside a VM in a
+ # writable image of pre-determined size.
+ #
+ # ROCm is currently affected by https://github.com/NixOS/nixpkgs/issues/276846
+ #
+ # Expected image sizes:
+ # - cpu/blas: 150M,
+ # - cuda, all gencodes: 560M,
+ diskSize = 4096 + optionalInt llama-cpp.useRocm 16384;
+ memSize = diskSize;
+}