欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PyTorch環(huán)境中CUDA版本沖突問題排查與解決方案

 更新時間:2025年02月27日 09:44:27   作者:昊大俠  
在使用 PyTorch 進行深度學習開發(fā)時,CUDA 版本兼容性問題是個老生常談的話題,本文將通過一次真實的排查過程,剖析 PyTorch 虛擬環(huán)境自帶 CUDA 運行時庫與系統(tǒng)全局 CUDA 環(huán)境沖突的場景,需要的朋友可以參考下

引言

在使用 PyTorch 進行深度學習開發(fā)時,CUDA 版本兼容性問題是個老生常談的話題。本文將通過一次真實的排查過程,剖析 PyTorch 虛擬環(huán)境自帶 CUDA 運行時庫與系統(tǒng)全局 CUDA 環(huán)境沖突的場景,并一步步分析問題、定位原因,并最終給出解決方案。

問題復現(xiàn):ImportError: undefined symbol

始于一個看似簡單的 import torch 語句

(modelforger) wangh@ubuntu:~/codes/ModelForger/.venv/lib/python3.12/site-packages/nvidia/cusparse/lib$ python
Python 3.12.9 (main, Feb 12 2025, 14:50:50) [Clang 19.1.6 ] on linux
Type "help", "copyright", "credits" or "license" for more information.

>>> import torch
>>> Traceback (most recent call last):
>>> File "<stdin>", line 1, in <module>
>>> File "/home/wangh/codes/ModelForger/.venv/lib/python3.12/site-packages/torch/__init__.py", line 367, in <module>
>>> from torch._C import *  # noqa: F403
>>> ^^^^^^^^^^^^^^^^^^^^^^
>>> ImportError: /home/wangh/codes/ModelForger/.venv/lib/python3.12/site-packages/torch/lib/../../nvidia/cusparse/lib/libcusparse.so.12: undefined symbol: __nvJitLinkComplete_12_4, version libnvJitLink.so.12

錯誤信息很明確,在 libcusparse.so.12 中找不到符號 __nvJitLinkComplete_12_4,這通常意味著存在版本不匹配的問題。

初步排查:環(huán)境 & CUDA 版本

首先,我們檢查一下環(huán)境和 CUDA 版本

(modelforger) wangh@ubuntu:~/codes/ModelForger/.venv/lib/python3.12/site-packages/nvidia/cusparse/lib$ echo $LD_LIBRARY_PATH
/usr/local/cuda/lib64:

(modelforger) wangh@ubuntu:~/codes/ModelForger/.venv/lib/python3.12/site-packages/nvidia/cusparse/lib$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Wed_Nov_22_10:17:15_PST_2023
Cuda compilation tools, release 12.3, V12.3.107
Build cuda_12.3.r12.3/compiler.33567101_0

(modelforger) wangh@ubuntu:~/codes/ModelForger/.venv/lib/python3.12/site-packages/nvidia/cusparse/lib$ uv pip list | grep nvidia
Using Python 3.12.9 environment at: /home/wangh/codes/ModelForger/.venv
nvidia-cublas-cu12        12.4.5.8
nvidia-cuda-cupti-cu12    12.4.127
nvidia-cuda-nvrtc-cu12    12.4.127
nvidia-cuda-runtime-cu12  12.4.127
nvidia-cudnn-cu12         9.1.0.70
nvidia-cufft-cu12         11.2.1.3
nvidia-curand-cu12        10.3.5.147
nvidia-cusolver-cu12      11.6.1.9
nvidia-cusparse-cu12      12.3.1.170
nvidia-nccl-cu12          2.21.5
nvidia-nvjitlink-cu12     12.4.127
nvidia-nvtx-cu12          12.4.127

發(fā)現(xiàn)了兩個關鍵信息

  1. nvcc --version 系統(tǒng)安裝的 CUDA 版本是 12.3。
  2. nvidia-* 虛擬環(huán)境安裝的 nvjitlink 版本號為 12.4.127。

根據(jù)錯誤信息可知,PyTorch 虛擬環(huán)境中的動態(tài)庫 libcusparse.so.12 需要的正是 libnvJitLink.so.12 的 __nvJitLinkComplete_12_4 版本,pip 安裝的依賴包版本自身沒有問題,因此推測可能錯誤鏈接到了系統(tǒng)中 CUDA 12.3 的 libnvJitLink.so.12。

分析:動態(tài)鏈接庫加載路徑

為了驗證猜想,我們使用 patchelf 和 ldd 命令查看 libcusparse.so.12 的動態(tài)鏈接狀態(tài):

(modelforger) wangh@ubuntu:~/codes/ModelForger/.venv/lib/python3.12/site-packages/nvidia/cusparse/lib$ patchelf --print-rpath libcusparse.so.12
$ORIGIN:$ORIGIN/../../nvjitlink/lib

(modelforger) wangh@ubuntu:~/codes/ModelForger/.venv/lib/python3.12/site-packages/nvidia/cusparse/lib$ ldd libcusparse.so.12
        linux-vdso.so.1 (0x00007ffc507e2000)
        libnvJitLink.so.12 => /usr/local/cuda/lib64/libnvJitLink.so.12 (0x00007f867a399000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f867a353000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f867a349000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f867a343000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f867a1f4000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f867a1d7000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8679fe5000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f868e62d000)

果不其然 libcusparse.so.12 依賴的 libnvJitLink.so.12 被加載到了系統(tǒng) CUDA 目錄 (/usr/local/cuda/lib64) 下,而不是預定義的 PyTorch 虛擬環(huán)境的目錄。

問題根源:LD_LIBRARY_PATH 優(yōu)先級

(modelforger) wangh@ubuntu:~/codes/ModelForger/.venv/lib/python3.12/site-packages/nvidia/cusparse/lib$ echo $LD_LIBRARY_PATH
/usr/local/cuda/lib64:

至此,問題根源已經(jīng)明確:LD_LIBRARY_PATH 環(huán)境變量導致系統(tǒng) CUDA 庫路徑優(yōu)先于 PyTorch 虛擬環(huán)境的 CUDA 庫路徑被加載。這導致了版本不匹配,PyTorch 無法找到所需的符號。

解決方案:unset LD_LIBRARY_PATH

解決這個問題最直接的方法就是移除 LD_LIBRARY_PATH 對系統(tǒng) CUDA 路徑的設置:

(modelforger) wangh@ubuntu:~/codes/ModelForger/.venv/lib/python3.12/site-packages/nvidia/cusparse/lib$ unset LD_LIBRARY_PATH

再次查看 libcusparse.so.12 的動態(tài)鏈接:

(modelforger) wangh@ubuntu:~/codes/ModelForger/.venv/lib/python3.12/site-packages/nvidia/cusparse/lib$ ldd libcusparse.so.12
        linux-vdso.so.1 (0x00007fff959a7000)
        libnvJitLink.so.12 => /home/wangh/codes/ModelForger/.venv/lib/python3.12/site-packages/nvidia/cusparse/lib/./../../nvjitlink/lib/libnvJitLink.so.12 (0x00007f303000e000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f302ffc8000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f302ffbe000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f302ffb8000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f302fe69000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f302fe4c000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f302fc5a000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f30443f9000)

現(xiàn)在,libnvJitLink.so.12 正確地加載到了 PyTorch 虛擬環(huán)境的目錄下。

驗證:問題解決

(modelforger) wangh@ubuntu:~/codes/ModelForger/.venv/lib/python3.12/site-packages/nvidia/cusparse/lib$ python
Python 3.12.9 (main, Feb 12 2025, 14:50:50) [Clang 19.1.6 ] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch

import torch 成功!問題解決。

最佳實踐與總結

  • 避免全局設置 LD_LIBRARY_PATH: 在全局環(huán)境變量(如 .bashrc 或 .bash_profile)中設置 LD_LIBRARY_PATH 會干擾虛擬環(huán)境的獨立性。
  • 理解動態(tài)鏈接機制: 了解 LD_LIBRARY_PATH 的作用以及動態(tài)鏈接庫的加載順序,有助于快速定位和解決類似問題。

以上就是PyTorch環(huán)境中CUDA版本沖突問題排查與解決方案的詳細內(nèi)容,更多關于PyTorch CUDA版本沖突的資料請關注腳本之家其它相關文章!

相關文章

  • python中time包實例詳解

    python中time包實例詳解

    在本篇文章里小編給大家整理的是一篇關于python中time包實例詳解內(nèi)容,對此有興趣的朋友們可以學習下。
    2021-02-02
  • django 前端頁面如何實現(xiàn)顯示前N條數(shù)據(jù)

    django 前端頁面如何實現(xiàn)顯示前N條數(shù)據(jù)

    這篇文章主要介紹了django 前端頁面如何實現(xiàn)顯示前N條數(shù)據(jù)。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • python3正則提取字符串里的中文實例

    python3正則提取字符串里的中文實例

    今天小編就為大家分享一篇python3正則提取字符串里的中文實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • python3.7?打包成exe程序方式(只需兩行命令)

    python3.7?打包成exe程序方式(只需兩行命令)

    這篇文章主要介紹了python3.7?打包成exe程序方式(只需兩行命令),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Python 列表(List)操作方法詳解

    Python 列表(List)操作方法詳解

    這篇文章主要介紹了Python中列表(List)的詳解操作方法,包含創(chuàng)建、訪問、更新、刪除、其它操作等,需要的朋友可以參考下
    2014-03-03
  • Python多線程正確用法實例解析

    Python多線程正確用法實例解析

    這篇文章主要介紹了Python多線程正確用法實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • django model通過字典更新數(shù)據(jù)實例

    django model通過字典更新數(shù)據(jù)實例

    這篇文章主要介紹了django model通過字典更新數(shù)據(jù)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python線性分類介紹

    Python線性分類介紹

    這篇文章主要介紹了Python線性分類,線性分類指在機器學習領域,分類的目標是指將具有相似特征的對象聚集。而一個線性分類器則透過特征的線性組合來做出分類決定,以達到此種目的。對象的特征通常被描述為特征值,而在向量中則描述為特征向量,需要的朋友可以參考下
    2022-02-02
  • python字典各式各樣操作從基礎到高級全面示例詳解

    python字典各式各樣操作從基礎到高級全面示例詳解

    在Python中,字典(Dictionary)是一種強大而靈活的數(shù)據(jù)結構,它允許你存儲和檢索鍵值對,本文將深入探討Python中各式各樣的字典操作,包括基本操作、高級操作以及一些實用的技巧,通過全面的示例代碼,將展示如何充分發(fā)揮字典在Python編程中的優(yōu)勢
    2023-12-12
  • Python與C語言分別完成排序流程

    Python與C語言分別完成排序流程

    這篇文章主要介紹了Python與C語言分別完成排序的實例,在Python與C語言基本類型的排序中特別有用,下面我們一起進入文章學習更詳細的內(nèi)容吧,需要的朋友可以參考下
    2022-03-03

最新評論