大约一个月前,我在全新安装的 Ubuntu 16.04 上为我的 NVIDIA 显卡安装了 CUDA。我使用最新的运行文件进行安装,并且据我所知,我严格按照说明进行操作,但说明中给出的 PATH 和 LD_LIBRARY_PATH 修改不正确。安装成功,甚至可以在不干扰 X 的情况下运行 - 我的机器还有一块用于显示的 Intel 显卡。
今天早上,CUDA 程序停止工作,nvidia-smi 报告称无法与显卡通信,因为显卡处于非活动状态。我通过将显示器放在 NVIDIA 显卡上解决了这个问题,结果很明显 - CUDA 内核运行时屏幕无法更新。现在,当我将显示器切换回 Intel 显卡时,我收到一个新错误:nvidia-smi 报告:
NVIDIA-SMI couldn't find libnvidia-ml.so library in your system. Please
make sure that the NVIDIA Display Driver is properly installed and present in
your system.
Please also try adding directory that contains libnvidia-ml.so to your system PATH.
包含 libnvidia-ml.so 的目录位于系统 PATH 上。需要强调的是,当将 NVIDIA 卡设置为我的主显示卡时,此错误会消失。
每当我运行任何类型的 CUDA 程序并将 Intel 设置为显示时,我都会收到错误 35:“CUDA 驱动程序版本不足以满足 CUDA 运行时版本的要求。”这似乎是不可能的 - “cat /proc/driver/nvidia/version”会产生驱动程序版本 375.39,据我了解,它与 CUDA 8 兼容。
使用
LD_PRELOAD=/usr/lib/nvidia-375/libnvidia-ml.so nvidia-smi
修复了第一个错误,但没有修复第二个错误。
如果不知道哪里出了问题,我不愿意重新安装 CUDA - 我宁愿每个月都处理一次这个问题。有什么建议吗?
更新:当我开始在 NVIDIA 卡上运行 X 并执行以下命令序列(加载 CUDA .deb 包后):
sudo apt-get purge nvidia-*
sudo apt-get install nvidia-375
sudo apt-get install cuda
它可以工作。但我认为这是因为我以某种方式欺骗了 NVIDIA 卡思维它正在运行 X,但实际上并没有运行 X;当我重新启动时,问题再次出现(如果我在 NVIDIA 卡上运行 X,一切都正常,但我无法运行 CUDA 程序,否则屏幕会冻结;如果我在 Intel 卡上运行 X,则 CUDA 功能都不起作用)。
答案1
Ubuntu 16.04、cuda-8.0 和 Nvidia 375 可以很好地协同工作,但有很多令人困惑的旧说明。从英特尔网站开始,英特尔 Ubuntu 安装并使用 deb 文件作为最符合系统要求的安装方法。默认编译器 gcc5 适用于 16.04。
首先,在开始安装任何 cuda 之前,请先设置 Ubuntu Nvidia 驱动程序。在软件更新程序、设置按钮/其他软件下启用 Canonical 合作伙伴。然后在 Ubuntu 软件选项卡下启用专有驱动程序。更新软件包索引,然后在附加驱动程序下安装 Nvidia 视频驱动程序(已测试)。跳过 cuda 软件包中提供的任何 Nvidia 驱动程序。
下载 Intel cuda 8.0 deb 包,并使用 dpkg -i 安装它。记下 cuda-8.0 目录的位置,您将使用它来修改 PATH 和 LD_LIBRARY_PATH,为 PATH 添加 /bin,为库添加 /lib64。将示例目录从 cuda-8.0 位置复制到您可以写入的某个位置,以便您可以在其中构建内容。使用 apt-get 安装 cuda 和 cuda-toolkit-8-0,它们将引入许多其他 cuda 包。就是这样,示例目录中的 makefile 应该可以运行(除非特定示例需要额外的库,没有人不需要,所以先试试那个)。
现在 Nvidia 驱动程序不断变化,我安装了 367 并更新到 375。我没有遇到任何问题,但确实发现 367 连接到了 cuda 样本,因此如果您尝试清理旧目录,请小心。Nvidia 库位于正常的 /usr/lib/nvidia-375 位置,因此不需要对它们进行路径修改。
看看 nvidia 网站的像你这样的问题和解决了像你这样的问题. 取决于硬件。