最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

引言

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

問(wèn)題復(fù)現(xiàn):ImportError: undefined symbol

始于一個(gè)看似簡(jiǎn)單的 import torch 語(yǔ)句

(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

錯(cuò)誤信息很明確,在 libcusparse.so.12 中找不到符號(hào) __nvJitLinkComplete_12_4,這通常意味著存在版本不匹配的問(wèn)題。

初步排查:環(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)了兩個(gè)關(guān)鍵信息

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

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

分析:動(dòng)態(tài)鏈接庫(kù)加載路徑

為了驗(yàn)證猜想,我們使用 patchelf 和 ldd 命令查看 libcusparse.so.12 的動(dòng)態(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) 下,而不是預(yù)定義的 PyTorch 虛擬環(huán)境的目錄。

問(wèn)題根源:LD_LIBRARY_PATH 優(yōu)先級(jí)

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

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

解決方案:unset LD_LIBRARY_PATH

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

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

再次查看 libcusparse.so.12 的動(dòng)態(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)境的目錄下。

驗(yàn)證:?jiǎ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 成功!問(wèn)題解決。

最佳實(shí)踐與總結(jié)

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

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

相關(guān)文章

  • Python multiprocessing多進(jìn)程原理與應(yīng)用示例

    Python multiprocessing多進(jìn)程原理與應(yīng)用示例

    這篇文章主要介紹了Python multiprocessing多進(jìn)程原理與應(yīng)用,結(jié)合實(shí)例形式詳細(xì)分析了基于multiprocessing包的多進(jìn)程概念、原理及相關(guān)使用操作技巧,需要的朋友可以參考下
    2019-02-02
  • Python深度學(xué)習(xí)albumentations數(shù)據(jù)增強(qiáng)庫(kù)

    Python深度學(xué)習(xí)albumentations數(shù)據(jù)增強(qiáng)庫(kù)

    下面開(kāi)始albumenations的正式介紹,在這里我強(qiáng)烈建議英語(yǔ)基礎(chǔ)還好的讀者去官方網(wǎng)站跟著教程一步步學(xué)習(xí),而這里的內(nèi)容主要是我自己的一個(gè)總結(jié)以及方便英語(yǔ)能力較弱的讀者學(xué)習(xí)
    2021-09-09
  • 淺談Django REST Framework限速

    淺談Django REST Framework限速

    這篇文章主要介紹了淺談Django REST Framework限速,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Django1.7+python 2.78+pycharm配置mysql數(shù)據(jù)庫(kù)

    Django1.7+python 2.78+pycharm配置mysql數(shù)據(jù)庫(kù)

    這篇文章主要介紹了Django1.7+python 2.78+pycharm配置mysql數(shù)據(jù)庫(kù)的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • Python中的print()?函數(shù)和格式化操作方法

    Python中的print()?函數(shù)和格式化操作方法

    ?print()?函數(shù)和字符串格式化是每個(gè)Python開(kāi)發(fā)者必須掌握的基礎(chǔ)技能,從簡(jiǎn)單的%?操作符到強(qiáng)大的f-string,Python一直在進(jìn)化,讓我們的編碼工作變得更加愉快和高效,本文介紹Python中的print()函數(shù)和格式化操作方法,感興趣的朋友一起看看吧
    2025-10-10
  • Python Django 數(shù)據(jù)庫(kù)的相關(guān)操作詳解

    Python Django 數(shù)據(jù)庫(kù)的相關(guān)操作詳解

    下面小編就為大家?guī)?lái)一篇django數(shù)據(jù)庫(kù)的相關(guān)操作,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-11-11
  • Python打印對(duì)象所有屬性和值的方法小結(jié)

    Python打印對(duì)象所有屬性和值的方法小結(jié)

    在Python開(kāi)發(fā)過(guò)程中,調(diào)試代碼時(shí)經(jīng)常需要查看對(duì)象的當(dāng)前狀態(tài),也就是對(duì)象的所有屬性和對(duì)應(yīng)的值,然而,Python并沒(méi)有像PHP的print_r那樣直接提供一個(gè)內(nèi)置函數(shù)來(lái)實(shí)現(xiàn)這一功能,不過(guò),Python提供了一些工具和方法,可以組合使用來(lái)達(dá)到打印對(duì)象屬性和值的目的,下面小編給大家講講
    2025-06-06
  • python面向?qū)ο骭詳談?lì)惖睦^承與方法的重載

    python面向?qū)ο骭詳談?lì)惖睦^承與方法的重載

    下面小編就為大家?guī)?lái)一篇python面向?qū)ο骭詳談?lì)惖睦^承與方法的重載。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • Python實(shí)現(xiàn)內(nèi)網(wǎng)穿透和端口轉(zhuǎn)發(fā)代理詳解

    Python實(shí)現(xiàn)內(nèi)網(wǎng)穿透和端口轉(zhuǎn)發(fā)代理詳解

    這篇文章主要為大家介紹了Python實(shí)現(xiàn)內(nèi)網(wǎng)穿透和端口轉(zhuǎn)發(fā)代理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Python判斷字符串是否為空和null方法實(shí)例

    Python判斷字符串是否為空和null方法實(shí)例

    這篇文章主要介紹了Python判斷字符串是否為空和null,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04

最新評(píng)論

克东县| 禄劝| 赤城县| 六盘水市| 田阳县| 普兰店市| 石门县| 泰州市| 武隆县| 朝阳县| 五大连池市| 霍州市| 策勒县| 右玉县| 老河口市| 沧源| 磴口县| 常州市| 漳浦县| 清丰县| 神农架林区| 万源市| 扶风县| 昌都县| 刚察县| 仲巴县| 县级市| 习水县| 德阳市| 祁阳县| 开封县| 宿迁市| 拉萨市| 灵宝市| 积石山| 石阡县| 邢台县| 都江堰市| 会同县| 若羌县| 万宁市|