当我直接用TensorFlow运行代码时,一切都很正常。
然而,当我在屏幕窗口中运行它时,我会得到以下错误。
ImportError: libcuda.so.1: cannot open shared object file: No such file or directory
我尝试过命令:
source /etc/profile
但它不起作用。
因为我使用ssh连接到服务器,所以屏幕是必要的。
我该怎么修?
接下来的步骤:
查找libcuda.so.1:
echo $LD_LIBRARY_PATH #path
sudo find /usr/ -name 'libcuda.so.*' #version
然后在终端中使用以下命令添加到$LD_LIBRARY_PATH,在本例中为/usr/local/cuda-10.0/compat
:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.0/compat
背景
libcuda.so.1
是用于与CUDA驱动程序交互的库(与CUDA的"运行时API"相反,您需要libcudart.so.*
)。
现在,在没有正确安装驱动程序的情况下,很有可能正确安装CUDA工具包。这种错误可能是在这种情况下构建(非静态链接的)CUDA应用程序的结果。
或者,也可能是库搜索路径配置错误——因为通常情况下,libcuda.so.*
应该安装在该路径上的某个目录中!
那么,搜索路径上有什么?正如这里所解释的,它是:
$LD_LIBRARY_PATH
中的- 目录
/etc/ld.so.conf
中的目录/lib
/usr/lib
典型的场景是/etc/ld.so.conf
添加/usr/lib/x86_64-linux-gnu
;并且CCD_ 11在那里。
底线
以下是您应该做的:
- 请确保已正确安装(n个最新的)CUDA驱动程序。如果还没有,下载并安装它,问题就解决了
- 找到
libcuda.so.1
文件(例如,使用locate
)。如果它被放置在库搜索路径之外的某个奇怪的地方,请按照步骤1操作 - 如果希望驱动程序库安装在某个奇怪的地方,则将该路径添加到用户的
$LD_LIBRARY_PATH
尝试将libcuda.so.1
路径放置到LD_LIBRARY_PATH
环境变量。
示例:
export LD_LIBRARY_PATH=/path/of/libcuda.so.1:$LD_LIBRARY_PATH
根据我的情况,我在docker容器环境中进行开发,我执行以下步骤:
- 确认您的docker容器已使用nvidia gpu运行
- 找到libcuda.so.1:
sudo find /usr/ -name 'libcuda.so.*'
- 然后在终端中使用以下命令添加到
$LD_LIBRARY_PATH
,在我的情况下是/usr/local/cuda-11.5/compat
:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.5/compat
如果您试图在容器内运行作业,请尝试用nvidia-docker run
而不是docker run
启动它。其他说明可在此处找到:https://github.com/NVIDIA/nvidia-docker