我在导入 pytorch 时遇到此错误
python -c "import torch"
:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/afs/cs.stanford.edu/u/brando9/ultimate-utils/ultimate-utils-proj-src/uutils/__init__.py", line 13, in <module>
import torch
File "/dfs/scratch0/brando9/miniconda/envs/metalearning_gpu/lib/python3.9/site-packages/torch/__init__.py", line 191, in <module>
_load_global_deps()
File "/dfs/scratch0/brando9/miniconda/envs/metalearning_gpu/lib/python3.9/site-packages/torch/__init__.py", line 153, in _load_global_deps
ctypes.CDLL(lib_path, mode=ctypes.RTLD_GLOBAL)
File "/dfs/scratch0/brando9/miniconda/envs/metalearning_gpu/lib/python3.9/ctypes/__init__.py", line 382, in __init__
self._handle = _dlopen(self._name, mode)
OSError: /dfs/scratch0/brando9/miniconda/envs/metalearning_gpu/lib/python3.9/site-packages/torch/lib/../../nvidia/cublas/lib/libcublas.so.11: symbol cublasLtHSHMatmulAlgoInit, version libcublasLt.so.11 not defined in file libcublasLt.so.11 with link time reference
如何修复它?
相关:
如eval所说,是因为pytorch1.13自动安装了nvidia_cublas_cu11、nvidia_cuda_nvrtc_cu11、nvidia_cuda_runtime_cu11和nvidia_cudnn_cu11。虽然我已经安装了自己的 CUDA 工具包,但我遇到了同样的问题。
就我而言,我使用了
pip uninstall nvidia_cublas_cu11
并解决了问题。
我认为 PyTorch 团队应该解决这个问题,因为用户通常会安装自己的 CUDAtoolkit。
错误来自
.../python3.9/site-packages/torch/lib/nvidia/cublas/lib/
的dlopen libcublas.so,这是pip包“nvidia-cuda-runtime”安装位置。
libcublasLt.so.11
动态链接到libcublas.so.11
。问题是当你有一个不同的 cuda 运行时安装(通常在 /usr/local/cuda 中)时,dlopen 可能会得到错误的安装。可以运行ldd .../python3.9/site-packages/torch/lib/nvidia/cublas/lib/libcublas.so
查看libcublasLt.so.11
的实际路径,应该是.../python3.9/site-packages/torch/lib/nvidia/cublas/lib/
下的那个
解决方法:
启动 python 时设置 env
LD_LIBRARY_PATH=.../python3.9/site-packages/torch/lib/nvidia/cublas/lib/:$LD_LIBRARY_PATH
。这样 dlopen 可以首先在该目录中查找 .so 文件。
使用旧手电筒。自从 1.13.0 torch pip install 开始使用 pip nvidia-* 包。在此之前,cuda 库是静态链接的。这就是为什么即使您已经安装了现有的 cuda,旧的 torch pip 安装也没有问题。
我不知道为什么这行得通,但这对我有用:
source cuda11.1
# To see Cuda version in use
nvcc -V
pip3 install torch==1.9.1+cu111 torchvision==0.10.1+cu111 torchaudio==0.9.1 -f https://download.pytorch.org/whl/torch_stable.html
但是如果你查看 git 问题,这些也可能有效:
conda install -y -c pytorch -c conda-forge cudatoolkit=11.1 pytorch torchvision torchaudio
pip3 install torch+cu111 torchvision torchaudio -f https://download.pytorch.org/whl/torch_stable.html
我认为 conda 看起来是最强大的,因为您可以准确指定所需的 cudatoolkit,所以我推荐那个。
我想使用 yolov7 解决图像检测问题,我安装了 yolov7 提供的默认依赖项https://github.com/WongKinYiu/yolov7/blob/main/requirements.txt,但是当我什至尝试查看帮助手册我得到了这个错误
OSError: .../yolov7_env/lib/python3.8/site-packages/torch/lib/../../nvidia/cublas/lib/libcublas.so.11: undefined symbol: cublasLtGetStatusString, 版本 libcublasLt.so .11
然后我尝试使用以下命令安装一些其他依赖项:
pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 torchaudio==0.11.0 --extra-index-url https://download.pytorch.org/whl/cu113
这就是我解决问题的方法。
在我的例子中,我在一个只有 cpu 的计算上运行,这个问题在安装 cpu 版本的 PyTorch 时得到了解决。例如:http://download.pytorch.org/whl/cpu/torch-1.13.0%2Bcpu-cp39-cp39-linux_x86_64.whl
在我的例子中,错误发生在 conda env 中,这是因为 conda env 找不到 cuda 安装。我实际上是通过卸载系统上的 CUDA 工具包来解决它的,这样 conda env 就可以使用它自己的工具包了。