You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Nix以安装jaxlibWithCuda及CUDA相关非自由包?

解决Nix Flake中安装jaxlibWithCuda的非自由许可问题

临时单次生效方案

直接在运行nix develop时追加参数,临时允许非自由包:

nix develop --impure --option allowUnfree true --extra-experimental-features "nix-command flakes"

注:--impure是因为Flake纯模式下会忽略系统级的非自由许可配置,加上该参数才能读取相关设置。

单个Flake项目永久配置

修改项目根目录的flake.nix,在导入nixpkgs时明确开启非自由包支持,可选全局放开或精确指定允许的包:

全局允许非自由包

{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; # 替换为你使用的分支
  };

  outputs = { self, nixpkgs }:
  let
    system = "x86_64-linux"; # 根据你的系统架构调整,如aarch64-linux
    pkgs = import nixpkgs {
      inherit system;
      config.allowUnfree = true; # 核心配置:允许所有非自由包
    };
  in
  {
    devShells.${system}.default = pkgs.mkShell {
      packages = [
        pkgs.jaxlibWithCuda
        pkgs.jax
        # 添加其他需要的依赖
      ];
    };
  };

精确指定允许的非自由包(更安全)

如果不想全局放开非自由包,可以用allowUnfreePredicate只允许需要的包:

pkgs = import nixpkgs {
  inherit system;
  config.allowUnfreePredicate = pkg: builtins.elem pkg.name [
    "cuda_cudart"
    "jaxlibWithCuda"
    # 可添加其他依赖的非自由包名称
  ];
};

系统级永久配置(所有Nix操作生效)

编辑/etc/nixos/configuration.nix,添加系统级的非自由许可配置:

nix.settings = {
  allowUnfree = true;
  # 或者用精确控制:
  # allowUnfreePredicate = pkg: builtins.elem pkg.name ["cuda_cudart" "jaxlibWithCuda"];
};

保存后执行:

sudo nixos-rebuild switch

之后运行nix develop无需额外参数即可正常拉取jaxlibWithCuda及相关CUDA非自由包。

注:之前在configuration.nix的配置未生效,是因为Flake默认处于纯模式,不会自动继承系统级的非自由许可设置,需通过上述方法明确配置。

内容的提问来源于stack exchange,提问作者Pierre-olivier Gendraud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 20:34:49