关于在Ubuntu 20.04上安装CUDA 10.1的问题,根文件夹是空的

关于在Ubuntu 20.04上安装CUDA 10.1的问题,根文件夹是空的

我正在尝试使用默认方式在 Ubuntu 20.04 上安装 CUDA。但是,在我成功完成所有步骤后,我发现 CUDA 的根文件夹几乎是空的(实际大小为 24kb)。请问这个文件夹下的文件在哪里?我在哪里可以找到它们?提前谢谢您!

我通过以下方式安装 CUDA:

$ sudo apt-get install nvidia-cuda-toolkit

这些是 CUDA 的所有文件路径

$ locate cuda | grep /cuda$

/usr/include/thrust/system/cuda
/usr/lib/cuda
/usr/share/doc/libthrust-dev/examples/cuda

可以看到,其下所有文件均丢失

$ sudo du -sh /usr/lib/cuda
24K /usr/lib/cuda

$ ls
bin  include  lib64  nvvm  version.txt

这是我的驱动程序版本:

$ nvidia-smi
Sat Jul  4 15:53:54 2020       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.100      Driver Version: 440.100      CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Quadro K600         Off  | 00000000:02:00.0  On |                  N/A |
| 25%   51C    P8    N/A /  N/A |    333MiB /   979MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  GeForce GTX 106...  Off  | 00000000:03:00.0 Off |                  N/A |
|  0%   41C    P8     4W / 120W |      2MiB /  6078MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

答案1

Ubuntu 20.04 上的 CUDA 10.2,内核 5.4.0-40

此过程避免了任何包管理器的参与,并允许您保留经过测试的 440 版 Nvidia 驱动程序。Nvidia 打包 deb 文件的方式一直在变化,因此这可能不适用于 CUDA 11,但应该可以让您了解需要做什么。

将 Ubuntu 20.04 Nvidia 驱动程序更新为最新(已测试)版本(截至 2020 年 7 月 2 日为 440)运行软件和更新,然后选择其他驱动程序选项卡,并选择 Nvidia。要构建 Nvidia 模块,应该已经存在各种软件(如编译器和内核头文件)。构建完成后,重新启动并运行 nvdia-smi 以确保您正在运行所选的 Nvidia 驱动程序。

在浏览器中,转到 Nvidia 网站,然后选择要下载的 CUDA 版本。

https://developer.nvidia.com/cuda-10.2-download-archive?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1804&target_type=deblocal

将打开一个带有基本安装程序脚本的窗口,只需复制 wget 行并将提供的 1.8GB .deb 文件放入您选择的目录中即可
。wgethttp://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb

使用 md5sum 对下载的 deb 文件进行哈希校验。

md5sum cuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb
4dfcc4d2bcca28e2f4b40f54171374ec  cuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb

并通过脚本下的“安装程序校验和”链接检查其与提供的校验和是否一致。

解压 .deb 文件(内容只是其他 deb 文件)。
避免解压 Nvidia deb 文件,但解压所有其他文件。除一个文件外,所有 nvidia 文件或 libxnv... 文件都应该已安装,并且已从“软件和更新”安装标准 Nvidia 驱动程序。手动安装的是 libxnvctrl-dev,其版本可能比系统版本更早。

cd 到你的 cuda 位置并运行:

dpkg-deb --extract cuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb cuda102

选择“安装”目录(如 cuda102)将允许在必要时并行安装其他 cuda 版本。根据 CUDA 版本,deb 文件可能位于其他子目录中。我发现创建一个目录来包含从“安装”目录复制的文件的最终设置很有用。例如,将 deb 文件解压到 /usr/local/data/cuda/cuda102,然后使用 /usr/local/data/cuda/cuda-10.2 作为最终设置位置。最终设置将不具有“安装”目录的深层目录。

从 /usr/local 添加一个名为 cuda-10.2 的链接至您解压 debs 的任何位置。例如:

sudo ln -s /usr/local/data/cuda/cuda-10.2 /usr/local/cuda-10.2

sudo apt-get install libxnvctrl-dev nvidia-headless-440 nvidia-headless-no-dkms-440 nvidia-modprobe
sudo apt-get install libglu1-mesa-dev freeglut3-dev

您将创建 etc、usr 和 var 目录,其中 var 和 usr 目录中还有包含更多 .deb 文件的子目录。

cd var/cuda-repo-10-2-local-10.2.89-440.33.01 你将看到大约 70 个 deb 文件,其中大约 20 个 nvidia 文件需要删除(或忽略)。

cuda-compat-10-2_440.33.01-1_amd64.deb 没有等效版本,并且有些程序的版本名称为 440.33....,所以留下它并希望它能正常工作。cuda-drivers_440.33.01-1_amd64.deb 只有一个更新日志。

for f in *deb do
 echo "Unpacking deb $f"
 dpkg-deb --extract "$f" .
done

请参阅脚本下方的“安装指南”链接。它将包含系统要求,您应该自行安装,因为您不会运行提供的安装程序。

将深层嵌入的 ...cuda-10.2 的内容移至安装目录 (cuda102)。没有冲突。(目前只需将 cuda-10.2 目录移至 cuda。)...cuda102/var/cuda-repo-10-2-local-10.2.89-440.33.01/usr/local/cuda-10.2

现在收集所有随机的...为什么要费心呢,只需将其保留直到需要时即可。var/c*/src fortran 文件已经存在于 cuda-10.2 src 中。删除它们。var/c*/include/cublas h 文件,复制到 cuda-10.2/include 并删除它们。var/c*/share/* 将所有移动到 cuda-10.2/share(2 个目录,没有重叠),然后删除共享目录。保留 lib/pkgconfig 目录直到需要时再使用。保留 opt 目录,仅具有一些实用程序未知的 nvidia nsite 东西。保留 etc 和配置文件,其中 /usr/local/cuda-10.2/targets/x86_64-linux/lib 不需要,我认为可以使用正确的 LD_LIBRARY_PATH。

您应该有一个包含所有 CUDA 库和二进制文件的位置。将 bin 和 lib64 添加到您的 PATH 并在其开头添加 LD_LIBRARY_PATH。请注意您选择的 CUDA 所需的 gcc 版本 - 默认的 9.x 版本应该可以使用,但示例的 makefile 将设置为限制为特定的早期版本。对于当前的 CUDA 版本,早期的编译器版本应该在标准存储库中可用,并且已经安装,g++-8 除外。

sudo apt-get install g++-8 Ubuntu 20.04 提供 gcc-8,但调用“gcc”时默认为 gcc-9。较旧的 CUDA 版本可能需要比标准存储库中提供的编译器更旧的编译器,因此请使用较旧的 Ubuntu 版本存档或获取源代码。

/usr/local/cuda-10.2/bin/../targets/x86_64-linux/include/crt/host_config.h:138:2:
 error: #error -- unsupported GNU version! gcc versions later than 8 are not supported!
  138 | #error -- unsupported GNU version! gcc versions later than 8 are not supported!
      |  ^~~~~

默认提供的 gcc-8 版本是 8.4,不会触发错误消息。忘记安装 g++-8 会导致有关 gcc 版本的误导性错误。手动更改 HOST_COMPILER 可能会有效,但可能会导致未定义的符号。

HOST_COMPILER=/usr/bin/gcc-8 make
undefined reference to symbol '_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7compareEPKc@@GLIBCXX_3.4.21'

在您的 cuda/bin 目录中添加指向这些旧版本工具(gcc、g++、nm、ar、ranlib)的软链接。由于 cuda/bin 在您的 PATH 中处于首位,因此它们应该会覆盖系统默认值。避免使用 update-alternatives 机制来更改系统的默认编译器。每次内核更新都需要重新编译 Nvidia 视频驱动程序的部分内容,而旧版本的编译器尚未经过测试,可能无法正常工作。

如果示例未包含在您的初始 deb 中,请获取其 deb,安装它们,并将示例目录复制到可写位置,获取所有权。尝试制作一个示例,如 5_simulation/nbody。您只需输入“make”,编译和加载就会成功,生成可执行文件 nbody。运行它 ./nbody。

您可以从顶层运行 make 文件,并注意某些示例是否缺少库。至少一个示例 simpleDevice... 似乎需要大量内存,甚至可能超过可用内存。

相关内容