我在安装 CUDA 10.2 和 cublas 库时遇到问题。
Cuda 文件位于 /usr/local,而 cublas 文件位于 /usr/include 文件中。
现在我有一个程序,我必须在其中输入 Cuda 安装的 HOME_PATH,以便找到它们。
我尝试将 cublas 文件符号链接到 /usr/local,但程序找不到所需的文件。
有没有办法将 cublas 文件(受保护)复制到 /usr/local?或者以任何方式更改 cublas 文件的安装路径?
提前非常感谢
克里斯
答案1
下面假设您从具有当前 Nvidia 驱动程序的 Ubuntu 系统开始。
CUDA 只是一个应用程序,但它需要特定的(通常是旧的)编译器版本,并提供自己的(几个版本已过时)视频驱动程序。CUDA
版本将有自己的目录,用于:
- bin——用于可执行文件
- lib64 — 用于链接库
- 包括——编译器文件
将 CUDA bin 目录添加到 PATH 环境变量的开头可以访问这些程序并覆盖系统默认程序(如 g++、gcc、ar、nm 和 ranlib 的旧版本的情况)。
将 CUDA lib64 目录添加到 LD_LIBRARY_PATH 的开头将允许在程序的标准加载中拾取这些(共享)库。
CUDA 包含目录通常作为 makefile 编译器标志中的变量添加,因此编译器可能会拾取这些文件。无需将这些 CUDA 文件分散到系统 bin、lib 和 include 目录中。应用程序通常不会这样做。将 CUDA bin、lib64 和包含文件保存在 CUDA 版本目录下可以同时支持多个 CUDA 版本。只需在与每个版本关联的脚本中修改 PATH 和 LD_LIBRARY_PATH 即可。
程序分离的一个例外可能是安装系统提供的旧编译器——CUDA 10.2 需要 gcc-8 和工具(ar-8、nm-8、ranlib-)。通过添加到 CUDA bin 目录的链接(gcc、ar、nm、ranlib)访问旧编译器。避免将系统默认更改为旧编译器(例如通过链接或 update-alternatives)。
如果被迫使用较旧的编译器(例如视频驱动程序),系统的其他部分可能会崩溃。足够旧的 CUDA 版本可能需要标准存储库未提供的旧编译器(例如 CUDA 8.0 的 gcc-5)。您需要提供此类编译器的副本以及它所需的任何共享库 - 放入 CUDA 版本 bin 和 lib64 目录中。
以这种方式设置 CUDA 版本很容易,只需将提供的 deb 文件解压到您选择的位置即可:
dpkg-deb --extract CUDAarchive YourDirectory
以前,这就是所需的全部内容,但 CUDA 版本(例如 10.2)只是将版本提供的 deb 文件的内容变成了更多的 deb 文件。请注意旧版本中不需要的 Nvidia deb 文件,忽略或删除它们,然后解压所有单独的 deb 文件。现在,您有一个 CUDA 版本目录,因此请设置一个脚本来更改您的 PATH 和 LD_LIBRARY_PATH(或者,如果您不关心多个 CUDA 版本,只需将这些更改放入您的 .profile 中(假设您使用 bash 类型的 shell)。
这种方法将所有 CUDA 文件保留在包管理器之外,因此不会进行任何更新——这可能是好是坏,具体取决于您的观点。
不幸的是,如果您只是运行“运行文件”脚本或安装提供的 CUDA 版本 deb,就会出现问题。
- 旧版 Nvidia 驱动程序将取代您当前的视频驱动程序。希望您仍能登录。
- 重新安装当前的 Nvidia 驱动程序可能会导致旧驱动程序及其所有依赖项(即所有 CUDA 文件)被删除。好吧,永远不要阻止包管理器执行其操作,但您可以复制整个 CUDA 版本,让包管理器将其删除,然后恢复它。
所有这些使用包管理器的解决方法最终将导致如上所述的无包管理器的 CUDA 版本。