1. 問題 (What)
PyTorch をインストールして実行しようとした際に、以下のエラーが発生した。
ImportError: /home/user/anaconda3/envs/myenv/lib/python3.10/site-packages/torch/lib/../../nvidia/cusparse/lib/libcusparse.so.12: undefined symbol: __nvJitLinkAddData_12_1, version libnvJitLink.so.12
このエラーのため、import torch
すらできない状態になった。
2. 原因 (Why)
このエラーは、CUDA のライブラリ (libcusparse.so.12
) が PyTorch の期待するバージョンと異なっている ことが原因。
具体的には、
-
nvidia-smi
の出力では CUDA 12.7 が表示されていたが -
nvcc --version
では CUDA 12.0 になっており - PyTorch が
libcusparse.so.12
をロードしようとした際に 古いバージョン (CUDA 12.0 のライブラリ) をロードしようとしてエラーが発生 していた
さらに、Anaconda 環境内にも libcusparse.so.12
が存在し、
誤って Anaconda の CUDA ライブラリがロードされることでも不整合が発生する可能性があった。
3. 解決策 (How)
ステップ 1: 実際にどの CUDA バージョンが使われているか確認
まず、CUDA のバージョンをチェックする。2つのバージョンが異なっている場合は、問題が発生しているので次に進む。
nvcc --version
nvidia-smi
以下からは、CUDAのバージョンが12.7で、PyTorchが12.0を参照しているケースで考える。次に、libcusparse.so.12
がどこにあるのかを確認する。
find /usr/local -name "libcusparse.so.12"
find ~/anaconda3 -name "libcusparse.so.12"
さらに、PyTorch がどの libcusparse.so.12
を使おうとしているかを調査。
ldd ~/anaconda3/envs/myenv/lib/python3.10/site-packages/torch/lib/libtorch_cuda.so | grep cusparse
この出力を見て、間違った CUDA ライブラリがロードされているかを特定 する。筆者の場合、CUDA Toolkit のライブラリ(通常 /usr/local/cuda/lib64/ にある)を参照するべきとこを、anacondaのライブラリを参照しようとしていることがわかった。
ステップ 2: 正しい CUDA ライブラリをロードするように設定
正しい CUDA のパス (/usr/local/cuda-12.0/lib64
) を 環境変数 LD_LIBRARY_PATH
に指定 する。
export LD_LIBRARY_PATH=/usr/local/cuda-12.0/lib64
この状態で import torch
を試してみる。
python -c "import torch; print(torch.version.cuda)"
問題が解決すれば、この設定を永続化する。
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.0/lib64' >> ~/.bashrc
source ~/.bashrc
ステップ 3: PyTorch の CUDA バージョンを確認 & 修正
もし torch.version.cuda
の出力が期待するバージョンでない場合、適切なバージョンの PyTorch をインストールし直す。
pip uninstall torch
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu120
再び import torch
を試して、エラーが消えていることを確認する。
4. まとめ
✅ CUDA のバージョン不整合 がエラーの原因だった。
✅ find
と ldd
で 誤った libcusparse.so.12
を特定 した。
✅ LD_LIBRARY_PATH
を修正して、正しい CUDA ライブラリを使用するようにした。
✅ 必要なら、PyTorch を CUDA の適切なバージョンに再インストール した。