跳到主要内容

在 Fedora 上设置 CUDA

在本指南中,我们将在工具箱容器中设置 Nvidia CUDA。本指南适用于:

目录

先决条件

  • 主机系统已安装工具箱 Fedora SilverblueFedora Workstation 默认都有工具箱,其他发行版可能需要安装 工具箱软件包
  • 主机系统已安装 NVIDIA 驱动程序和显卡(推荐) 要运行 CUDA 程序,如 llama.cpp,主机应该设置为可以访问您的 NVIDIA 硬件。Fedora 主机可以使用 RPM Fusion 仓库
  • 互联网连接 用于下载软件包。

使用 Fedora 41 CUDA 仓库

最新版本是 41。

注意: 我们建议使用工具箱环境来防止系统冲突。

创建 Fedora 工具箱环境

本指南主要针对 Fedora 主机,但稍作调整也可以在其他主机上使用。使用 Fedora 工具箱允许我们安装必要的软件包而不影响主机系统。

注意: 工具箱可用于其他系统,即使没有工具箱,也可以使用 Podman 或 Docker。

  1. 创建 Fedora 41 工具箱:

    toolbox create --image registry.fedoraproject.org/fedora-toolbox:41 --container fedora-toolbox-41-cuda
  2. 进入工具箱:

    toolbox enter --container fedora-toolbox-41-cuda

    在工具箱内,您拥有 root 权限,可以安装软件包而不影响主机系统。

安装基本开发工具

  1. 同步 DNF 包管理器:

    sudo dnf distro-sync
  2. 安装 Vim 默认文本编辑器(可选):

    sudo dnf install vim-default-editor --allowerasing

    --allowerasing 标志将允许删除冲突的 nano-default-editor 软件包。

  3. 安装开发工具和库:

    sudo dnf install @c-development @development-tools cmake

    这将安装编译软件的必要软件包,包括 gccmake 和其他开发头文件。

添加 CUDA 仓库

将 NVIDIA CUDA 仓库添加到您的 DNF 配置中:

sudo dnf config-manager addrepo --from-repofile=https://developer.download.nvidia.com/compute/cuda/repos/fedora41/x86_64/cuda-fedora41.repo
添加仓库后,再次同步包管理器:

```bash
sudo dnf distro-sync

安装 Nvidia 驱动程序库

首先,我们需要检测主机是否向工具箱提供了 NVIDIA 驱动程序库

ls -la /usr/lib64/libcuda.so.1

如果 libcuda.so.1 缺失:

ls: cannot access '/usr/lib64/libcuda.so.1': No such file or directory 说明: 主机未提供 CUDA 驱动程序,现在安装它们:

在客户端安装 Nvidia 驱动程序库:

sudo dnf install nvidia-driver-cuda nvidia-driver-libs nvidia-driver-cuda-libs nvidia-persistenced

如果 libcuda.so.1 存在:

lrwxrwxrwx. 1 root root 21 Mar 24 11:26 /usr/lib64/libcuda.so.1 -> libcuda.so.570.133.07 说明: 主机正在提供 CUDA 驱动程序,我们需要相应地更新客户端 RPM 数据库:

更新工具箱 RPM 数据库以包含主机提供的库:

注意:我们实际上不安装库,只是更新数据库,以便客户端系统知道它们由主机提供。

1. 下载由主机 RPM 提供的 nvidia- 部分(包含依赖项)
sudo dnf download --destdir=/tmp/nvidia-driver-libs --resolve --arch x86_64 nvidia-driver-cuda nvidia-driver-libs nvidia-driver-cuda-libs nvidia-persistenced
2. 更新 RPM 数据库以假定安装了这些软件包。
sudo rpm --install --verbose --hash --justdb /tmp/nvidia-driver-libs/*

注意:

  • --justdb 选项仅更新 RPM 数据库,而不触及文件系统的其他部分。
检查 RPM 数据库是否已正确更新:

注意: 这与 libcuda.so.1 缺失时的 "在客户端安装 Nvidia 驱动程序库" 命令相同。

sudo dnf install nvidia-driver-cuda nvidia-driver-libs nvidia-driver-cuda-libs nvidia-persistenced

(这次不会安装任何东西,因为数据库认为这些软件包已经安装)

Updating and loading repositories: Repositories loaded. Package "nvidia-driver-cuda-3:570.124.06-1.fc41.x86_64" is already installed. Package "nvidia-driver-libs-3:570.124.06-1.fc41.x86_64" is already installed. Package "nvidia-driver-cuda-libs-3:570.124.06-1.fc41.x86_64" is already installed. Package "nvidia-persistenced-3:570.124.06-1.fc41.x86_64" is already installed.

Nothing to do.

安装 CUDA 元包

现在驱动程序库已安装,继续安装 CUDA:

sudo dnf install cuda

这将安装 CUDA 工具包和相关软件包。

配置环境

要使用 CUDA,需要将其二进制目录添加到系统的 PATH 中。

  1. 创建配置文件脚本:

    sudo sh -c 'echo "export PATH=\$PATH:/usr/local/cuda/bin" >> /etc/profile.d/cuda.sh'

    说明:

    • 我们添加到 /etc/profile.d/ 因为 /etc/ 文件夹对这个特定容器是唯一的,不与其他容器或主机系统共享。
    • $PATH 前的反斜杠 \ 确保变量正确写入脚本。
  2. 使脚本可执行:

    sudo chmod +x /etc/profile.d/cuda.sh
  3. 加载脚本以更新您的环境:

    source /etc/profile.d/cuda.sh

    注意: 此命令使用新的 PATH 更新您当前的 shell 会话。/etc/profile.d/cuda.sh 脚本确保 CUDA 二进制文件在所有未来会话的 PATH 中可用。

验证安装

要确认 CUDA 已正确安装和配置,请检查 NVIDIA CUDA 编译器(nvcc)的版本:

nvcc --version
您应该看到类似的输出:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2025 NVIDIA Corporation
Built on Fri_Feb_21_20:23:50_PST_2025
Cuda compilation tools, release 12.8, V12.8.93
Build cuda_12.8.r12.8/compiler.35583870_0
此输出确认 CUDA 编译器可访问并指示已安装的版本。

## 结论

您已成功在 Fedora 工具箱环境中使用 Fedora 41 CUDA 仓库设置了 CUDA。通过手动更新 RPM 数据库和配置环境,您可以开发 CUDA 应用程序而不影响主机系统。

## 故障排除

- **安装失败:**

- 如果在安装过程中遇到错误,请仔细阅读错误消息。它们通常指示文件冲突或缺少依赖项。
- 您可以在手动 RPM 安装期间使用 `--excludepath` 选项与 `rpm` 来排除冲突文件。

- **重启容器:**

- 有时 NVIDIA 驱动程序主机透传可能有错误(如缺少共享库)。重启容器可能解决此问题:

```bash
# 在主机系统上
podman container restart --all
  • 环境变量未设置:
    • 如果安装后找不到 nvcc,请确保 /usr/local/cuda/bin 在您的 PATH 中。
    • 运行 echo $PATH 检查路径是否包含在内。
    • 重新加载配置文件脚本或打开新的终端会话。

补充说明

  • 将来更新 CUDA:

    • 关注官方 NVIDIA 仓库以获取您的 Fedora 版本的更新。
    • 当有更新的仓库可用时,相应调整您的 dnf 配置。
  • 构建 llama.cpp

    • 安装 CUDA 后,您可以按照这些 llama.cpp 构建说明 使用 CUDA 支持编译它。
    • 确保在构建配置中正确设置任何 CUDA 特定的构建标志或路径。
  • 使用工具箱环境:

    • 工具箱环境与主机系统隔离,这有助于防止冲突。
    • 请记住,工具箱内的系统文件和配置与主机是分离的。默认情况下,用户的主目录在主机和工具箱之间共享。

免责声明: 手动安装和修改系统软件包可能导致容器不稳定。上述步骤仅作为指导提供,可能需要根据您的特定系统配置进行调整。在进行重大系统更改之前,请始终备份重要数据,特别是因为您的主文件夹是可写的并与工具箱共享。

致谢: 特别感谢 Fedora 社区和 NVIDIA 文档提供的资源,这些资源协助创建了本指南。

参考资料