ITADN
SomeoneSerge/nixpkgs-cuda-ci
SomeoneSerge/nixpkgs-cuda-ci · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

nixpkgs-cuda-ci

本项目已停止维护,转而支持 Nixpkgs 树内发布的 CUDA 支持版本, 构建于 "community Hydra" 并缓存于 nix-community.cachix.org 属于 nix-community 基础设施团队的 工作。 Nix-Community 的基础设施通过 OpenCollective 项目 获得资助:请考虑承诺每月捐款,以确保其持续可用。


原始描述

首先,一个警告:这只是一个开发仓库,日后应当被可持续的替代品所取代。关于 nixpkgs 中 CUDA 的最新信息,请查阅:

考虑到上述情况,让我们继续。

最新警告

  • 2024-08-15: 自 https://github.com/SomeoneSerge/nixpkgs-cuda-ci/pull/33 起, 本仓库不再维护任何 jobsets,而是转而使用在 Nixpkgs 中维护的新 release-cuda.nix

  • 2024-06-09: 我遇到了 Hercules CI 的 "effects" 队列堵塞的问题, 这实际上关闭了 "flake-update" 效果。这些 效果已被禁用,并替换为一个 flake-update github action,该 action 会触发 HCI 针对新的 master 重新构建 "default" job。其他 job 有时可能会构建过时的 nixpgs 修订版... 这一切相当不稳定,我还没有时间调试这个问题。

  • 2023-03-05: 该仓库不再试图成为 nixpkgs 的直接替代品。我们 只是进行构建。flake 现在用于跟踪所有 nixpkgs 分支(-> flake.lock 变得大得多),并且使用 hercules CI 的 onSchedule,而不是 GitHub workflow,来触发构建。关于 nixpkgs 的直接替代品 参见 numtide/nixpkgs-unfree

    我们以不同的频率为不同的 cuda 架构进行构建, 这意味着要利用缓存,你可能需要导入 nixpkgs, 例如 import <nixpkgs> { ...; config.cudaCapabilities = [ "8.6" ]; }。 详见 flake

这是什么

  • 该仓库用于构建并缓存 nixpkgs 世界,使用 cudaSupport = true。 参见仪表板:https://hercules-ci.com/github/SomeoneSerge/nixpkgs-cuda-ci

    • 这意味着你可以使用 Nix 预构建的 pytorch、tensorflow、jax 和 blender

    • 这也意味着当开发分支出现问题时,我们 会注意到并可以采取措施。 我们构建

      我们可能会以不同的频率构建不同的分支。我们也可能 优先处理某些 cudaCapabilities

  • cachix 的空间有限且启用了垃圾回收。这意味着 你需要保持最新状态才能从缓存中受益(随着我们构建更新的 软件包,旧缓存最终会被丢弃)

  • 构建目前运行在志愿者的机器上。我们计划很快在 wiki 上创建并维护确切的列表。每台机器 使用自己的密钥将构建结果推送到 cachix,并且这些密钥可以被 撤销而不会破坏整个链条。你只需使用一个列在 https://cuda-maintainers.cachix.org/ 的公钥。 cachix cuda-maintainers 缓存和 cachix 密钥目前由 @samuela 管理。我们的 cachix 空间由 @domenkozar 提供。

    我们希望有一天能找到一个更可持续且更值得信赖的解决方案, 但目前我们将其作为一个概念验证来开发。

如何使用

  • 要使用缓存,请获取 cachix,并执行:

    cachix use cuda-maintainers
  • 要在 NixOS 上使用缓存,请检查您的 configuration.nix 模块中的以下代码片段:

      nix.binaryCachePublicKeys = [
        "cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E="
      ];
      nix.binaryCaches = [
        "https://cuda-maintainers.cachix.org"
      ];

    请验证公钥来自 https://cuda-maintainers.cachix.org

  • 您还可以向您的 flake 用户建议使用该缓存,方法如下

      # ...
    
      nixConfig = {
        extra-substituters = [
          "https://cuda-maintainers.cachix.org"
        ];
        extra-trusted-public-keys = [
          "cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E="
        ];
      };
    
      outputs = { ... }: {
        # ...
      };

    当用户与您的 flake 交互时,系统会询问他们是否希望使用该缓存并信任该密钥。

  • 从 nixpkgs 使用 cuda 支持包的最一致但也是最昂贵的方式, 是通过全局 config.cudaSupport 导入它们:

    pkgs = import nixpkgs { config.allowUnfree = true; config.cudaSupport = true; }

    有了这个,pkgs.python3Packages.jaxpkgs.python3Packages.pytorch 等将评估为带有 cuda 支持的包。

  • 此 flake 试图作为 nixpkgs 的即插即用替代品(更准确地说,是一个代理)。 以下用法预计可以正常工作:

    • 执行 nix run github:SomeoneSerge/nixpkgs-unfree/nixpkgs-unstable#blender 以运行带有 cuda 支持的 blender

    • 在 flake 输入中使用:

      inputs.nixpkgs.url = github:NixOS/nixpkgs/nixpkgs-unstable;
      inputs.nixpkgs-unfree.url = github:SomeoneSerge/nixpkgs-unfree;
      inputs.nixpkgs-unfree.inputs.nixpkgs.follows = "nixpkgs";
    • 已弃用:在 flake 输入中作为 nixpkgs 的即插即用替代品使用(除非有人做了特殊处理)

      inputs.nixpkgs.url = github:SomeoneSerge/nixpkgs-unfree/nixpkgs-unstable;
      inputs.home-manager.inputs.nixpkgs.follows = "nixpkgs";
    • 已弃用:作为 nixpkgs 导入:

      inputs.nixpkgs = github:SomeoneSerge/nixpkgs-unfree/nixpkgs-unstable;
      outputs = { nixpkgs }:
      let
        system = "x86_64-linux";
        overlay = final: prev: { };
        pkgs = import nixpkgs { overlays = [ overlay ]; };
      in
      {
        # ...
      }

      请注意,如果您在参数中传递 config,您必须再次包含 cudaSupportallowUnfree

  • 注意:将 <nixpkgs> 指向此仓库已被证明是一种相当痛苦 的体验。大多数问题集中在使用 import <nixpkgs/lib>. 目前 ./lib 中有一个代理,使这些导入 能够正常工作,但几乎肯定是以再下载一份 nixpkgs 为代价的...

  • 如果你仅在项目级别或用户级别启用缓存,可能需要在 /etc/nix/nix.conf 中设置 trusted-users = ${yourName}