動(dòng)版本、多版本共存與WSL2完整實(shí)操)
裝CUDA這個(gè)事情看著簡(jiǎn)單翻車率卻出奇地高。我見過(guò)太多人在第一步——也就是驅(qū)動(dòng)和CUDA的版本對(duì)應(yīng)關(guān)系上栽跟頭后面一連串的報(bào)錯(cuò)都是從這個(gè)根上長(zhǎng)出來(lái)的。花了一兩天在論壇里翻帖最后發(fā)現(xiàn)只是裝錯(cuò)了版本號(hào)這種事在AI、深度學(xué)習(xí)、GPU計(jì)算相關(guān)的圈子里每天都在發(fā)生。這篇文章不是官方文檔的復(fù)述是我自己在這套環(huán)境上反復(fù)折騰出來(lái)的實(shí)操記錄從最基本的概念講到多版本共存、WSL2、DDU卸載這些高頻場(chǎng)景希望能幫你把這條路上的坑提前填平。1. 先說(shuō)清楚CUDA和N卡驅(qū)動(dòng)到底是什么關(guān)系1.1 驅(qū)動(dòng)是“底座”Toolkit是“工具箱”很多新手會(huì)把CUDA和驅(qū)動(dòng)搞混甚至覺得裝個(gè)驅(qū)動(dòng)就等于裝了CUDA。實(shí)際不是一回事。N卡驅(qū)動(dòng)是一個(gè)底層軟件負(fù)責(zé)讓操作系統(tǒng)和顯卡硬件正常溝通你打游戲、開Photoshop、看視頻全都靠它。而CUDA Toolkit是NVIDIA提供的一套開發(fā)庫(kù)和工具鏈里面包含編譯器nvcc、運(yùn)行時(shí)庫(kù)、數(shù)學(xué)庫(kù)cuBLAS、cuFFT這些是給開發(fā)者寫并行計(jì)算程序用的。這兩者的關(guān)系可以這么理解驅(qū)動(dòng)是地基CUDA Toolkit是在地基上蓋的樓。地基規(guī)定了這棟樓最高能蓋多少層——也就是驅(qū)動(dòng)版本決定了你最高能支持到哪個(gè)CUDA版本。你可以在某個(gè)驅(qū)動(dòng)允許的范圍內(nèi)隨意向下安裝任意版本的CUDA Toolkit但要是強(qiáng)行往上裝比如老驅(qū)動(dòng)配新CUDA跑起來(lái)就各種報(bào)錯(cuò)最常見的就是“CUDA driver version is insufficient”。1.2 版本號(hào)里藏著的玄機(jī)NVIDIA驅(qū)動(dòng)本身也有自己的CUDA版本號(hào)用nvidia-smi一查就能看到右上角寫著“CUDA Version: 12.4”之類。這個(gè)數(shù)字代表的是當(dāng)前驅(qū)動(dòng)能夠支持的最高CUDA版本不表示你已經(jīng)“裝上了”CUDA。很多教程讓你跑nvcc -V驗(yàn)證安裝這個(gè)命令查的才是真正的CUDA Toolkit版本。我習(xí)慣的做法是先把這兩個(gè)命令的差別跟身邊人講清楚nvidia-smi查的是“顯卡驅(qū)動(dòng)能 поддерживать 的最高CUDA”nvcc -V查的是“當(dāng)前默認(rèn)激活的Toolkit版本”。為什么驅(qū)動(dòng)的CUDA版本號(hào)是上限不是當(dāng)前值因?yàn)轵?qū)動(dòng)向后兼容做得很好。你的驅(qū)動(dòng)支持CUDA 12.4那就意味著12.4以下的任意版本12.0、11.8、10.2等等都能正常跑但不保證12.5、12.6的新功能能用。這點(diǎn)在安排多版本環(huán)境時(shí)特別重要后面我會(huì)詳細(xì)講。1.3 需要打開控制面板還是只用命令行新版N卡驅(qū)動(dòng)尤其是通過(guò)GeForce Experience或Windows Update安裝的有時(shí)候會(huì)讓人找不到NVIDIA控制面板網(wǎng)上相關(guān)的求助帖一直沒斷過(guò)。這通常是驅(qū)動(dòng)安裝不完整或者系統(tǒng)服務(wù)沒啟動(dòng)導(dǎo)致的跟CUDA本身關(guān)系不大。如果你要用CUDA做開發(fā)其實(shí)控制面板不是必需品命令行工具齊全就行。但如果你平時(shí)要調(diào)顯示器設(shè)置、開垂直同步那些那還得把面板問(wèn)題解決掉后面常見問(wèn)題部分我會(huì)專門說(shuō)。2. 動(dòng)手前的準(zhǔn)備確定你的顯卡和現(xiàn)有環(huán)境2.1 確認(rèn)顯卡型號(hào)與算力裝CUDA之前第一件事是搞清楚自己的顯卡是什么架構(gòu)、什么算力。算力Compute Capability這個(gè)參數(shù)直接決定哪些CUDA功能你可用。比如RTX 40系列是Ada Lovelace架構(gòu)算力8.9支持CUDA 12.x所有特性RTX 30系列是Ampere架構(gòu)算力8.6再早的GTX 10系列是Pascal算力6.1。查看方法是Windows下在設(shè)備管理器里看“顯示適配器”Linux下用lspci | grep -i nvidia或者直接跑nvidia-smi它會(huì)完整顯示顯卡型號(hào)、顯存、驅(qū)動(dòng)版本、CUDA版本號(hào)。算力對(duì)應(yīng)表在NVIDIA官網(wǎng)有一張完整的建議收藏一下以后選PyTorch、TensorFlow的預(yù)編譯包時(shí)經(jīng)常要對(duì)照著看。2.2 檢查現(xiàn)有驅(qū)動(dòng)是否夠用這一步常常被跳過(guò)但恰恰是避免后面連環(huán)翻車的關(guān)鍵。打開命令行執(zhí)行nvidia-smi如果命令不存在說(shuō)明驅(qū)動(dòng)沒裝或者沒被正確識(shí)別。如果命令能跑記錄右上角的驅(qū)動(dòng)版本和CUDA版本號(hào)然后去NVIDIA官網(wǎng)的驅(qū)動(dòng)下載頁(yè)面查這個(gè)驅(qū)動(dòng)對(duì)應(yīng)的發(fā)布時(shí)間。你手頭如果有一塊RTX 4060 Ti卻裝了個(gè)三年前的驅(qū)動(dòng)那大概率不支持CUDA 12.x的新特性PyTorch最新版雖然會(huì)自動(dòng)檢測(cè)并用CPU跑但速度差距就是天壤之別。我個(gè)人的標(biāo)準(zhǔn)是驅(qū)動(dòng)盡量裝最近半年內(nèi)的版本因?yàn)樯疃葘W(xué)習(xí)框架更新很快新版本編譯時(shí)會(huì)針對(duì)新舊驅(qū)動(dòng)做選擇太老的驅(qū)動(dòng)會(huì)造成很多莫名的兼容問(wèn)題。如果你要跑的是TensorFlow 2.5.0這類老項(xiàng)目反而需要留出余地選一個(gè)當(dāng)時(shí)對(duì)應(yīng)的CUDA版本和驅(qū)動(dòng)組合這就要用到多版本共存了。2.3 決定要不要重裝驅(qū)動(dòng)很多人聽到“重裝驅(qū)動(dòng)”就頭疼但其實(shí)有一套成熟判斷方法如果nvidia-smi正常輸出且右上角CUDA版本高于你想要安裝的Toolkit版本那驅(qū)動(dòng)完全不用動(dòng)。如果驅(qū)動(dòng)版本太低比如你要裝CUDA 11.8驅(qū)動(dòng)只支持CUDA 11.0那就建議升級(jí)驅(qū)動(dòng)。如果驅(qū)動(dòng)已經(jīng)裝不上、系統(tǒng)里殘留的舊文件太多、或者有過(guò)DDU清理歷史那建議完整卸載后重裝。升級(jí)驅(qū)動(dòng)本身不是難題難的是升級(jí)過(guò)程中可能出現(xiàn)的“n卡更新出現(xiàn)一個(gè)錯(cuò)誤”這種狀況。這通常是由于系統(tǒng)里存著舊版驅(qū)動(dòng)文件或GeForce Experience的組件沖突。我試過(guò)最省事的方法是先卸載GeForce Experience再?gòu)脑O(shè)備管理器卸載顯卡驅(qū)動(dòng)重啟后再用官方安裝包裝新驅(qū)動(dòng)。注意不要用Windows Update自動(dòng)裝驅(qū)動(dòng)來(lái)湊合它會(huì)給你裝一個(gè)“最穩(wěn)定”但版本很舊的驅(qū)動(dòng)往往不是你需要的。3. 驅(qū)動(dòng)安裝干凈卸載與重裝的全流程3.1 為什么需要DDUDisplay Driver UninstallerDDU是顯卡驅(qū)動(dòng)卸載圈子里口碑最高的工具它的作用是把注冊(cè)表殘留、文件殘留、服務(wù)殘留全部清理干凈。我在幫別人排查驅(qū)動(dòng)問(wèn)題時(shí)發(fā)現(xiàn)超過(guò)一半的奇怪問(wèn)題——比如裝完驅(qū)動(dòng)后黑屏、控制面板打不開、nvidia-smi能跑但CUDA程序報(bào)錯(cuò)——都是因?yàn)榕f驅(qū)動(dòng)沒刪干凈。那是不是每次裝驅(qū)動(dòng)都要用DDU不一定。如果只是小版本迭代比如從551.86升到552.22直接裝官方包覆蓋就行。但如果你是從AMD顯卡換到NVIDIA或者之前用DDU清過(guò)或者系統(tǒng)里同時(shí)有核顯和獨(dú)顯驅(qū)動(dòng)搞亂了那就建議走DDU全清流程。DDU有兩個(gè)使用要點(diǎn)第一必須斷網(wǎng)執(zhí)行防止Windows自動(dòng)裝驅(qū)動(dòng)干擾第二推薦在安全模式下運(yùn)行。具體步驟下載DDU并解壓同時(shí)把你要安裝的N卡驅(qū)動(dòng)安裝包提前準(zhǔn)備好放本地別放U盤里有的電腦安全模式下U盤識(shí)別不完美。拔掉網(wǎng)線或斷開Wi-Fi。重啟進(jìn)入安全模式Windows 10/11可以在設(shè)置-恢復(fù)-高級(jí)啟動(dòng)里選擇或者開機(jī)按Shift重啟。運(yùn)行DDU在右側(cè)選擇“NVIDIA”點(diǎn)擊“清理并重啟”。重啟后聯(lián)網(wǎng)狀態(tài)先別開直接運(yùn)行驅(qū)動(dòng)安裝包選擇“自定義安裝”勾選“執(zhí)行清潔安裝”。裝完后再重啟最后打開nvidia-smi驗(yàn)證。3.2 Windows下驅(qū)動(dòng)安裝要點(diǎn)NVIDIA官網(wǎng)驅(qū)動(dòng)下載頁(yè)面會(huì)根據(jù)你的顯卡型號(hào)推薦版本但你要注意區(qū)分“Game Ready驅(qū)動(dòng)”和“Studio驅(qū)動(dòng)”。如果主做CUDA開發(fā)、跑訓(xùn)練任務(wù)Studio驅(qū)動(dòng)更穩(wěn)如果既打游戲又跑模型Game Ready驅(qū)動(dòng)也能用不必過(guò)分糾結(jié)。一個(gè)容易被忽略的選項(xiàng)是“執(zhí)行清潔安裝”——如果你是在老驅(qū)動(dòng)基礎(chǔ)上覆蓋安裝一定要勾上這個(gè)選項(xiàng)它相當(dāng)于一次簡(jiǎn)化版的DDU清理。還有個(gè)讓很多人頭疼的細(xì)節(jié)NVIDIA控制面板打不開。這個(gè)問(wèn)題的常見原因包括右鍵菜單里的“NVIDIA控制面板”指向的程序被安全軟件攔截、顯卡服務(wù)的啟動(dòng)類型被改成了手動(dòng)、或者驅(qū)動(dòng)真的沒裝完整。先別急著重裝驅(qū)動(dòng)打開任務(wù)管理器找到“服務(wù)”標(biāo)簽頁(yè)確認(rèn)NVIDIA Display Container LS和NVIDIA LocalSystem Container這兩個(gè)服務(wù)在運(yùn)行。如果服務(wù)被停用右鍵啟動(dòng)即可。很多“ALTZ打不開N卡設(shè)置”這類問(wèn)題就是這么解決的。3.3 Linux下驅(qū)動(dòng)安裝注意事項(xiàng)Linux下裝N卡驅(qū)動(dòng)比Windows更講究。如果你是Ubuntu用戶建議用系統(tǒng)自帶的“附加驅(qū)動(dòng)”Software Updates里的Additional Drivers安裝或者用NVIDIA提供的.run安裝包。用.run安裝時(shí)要注意先卸載系統(tǒng)自帶的nouveau開源驅(qū)動(dòng)否則兩者沖突會(huì)導(dǎo)致進(jìn)不了圖形界面或黑屏。我的常用流程是禁用nouveau在/etc/modprobe.d/blacklist-nouveau.conf里寫兩行然后執(zhí)行sudo update-initramfs -u。重啟按CtrlAltF3進(jìn)入文本模式登錄后執(zhí)行sudo service gdm stop視桌面環(huán)境而定也可能是lightdm。運(yùn)行sudo sh NVIDIA-Linux-x86_64-550.144.03.run一路默認(rèn)但到“Install NVIDIAs 32-bit compatibility libraries?”這步如果你不玩32位游戲可以選No。重啟后nvidia-smi驗(yàn)證。實(shí)操下來(lái)桌面版Ubuntu的驅(qū)動(dòng)升級(jí)比Windows更穩(wěn)妥反直覺因?yàn)樗囊蕾囮P(guān)系更清晰出了問(wèn)題也好查日志。4. CUDA Toolkit安裝與多版本共存4.1 版本怎么選CUDA版本選擇的核心原則是匹配你的框架需求而不是追求最新。比如你用PyTorch它的預(yù)編譯包在安裝時(shí)會(huì)自動(dòng)拉取對(duì)應(yīng)的CUDA運(yùn)行時(shí)但如果你從源碼編譯就得手動(dòng)指定CUDA版本。TensorFlow 2.5.0官方文檔明確要求CUDA 11.2和cuDNN 8.1配驅(qū)動(dòng)530以上就能跑。如果你買個(gè)4060 Ti然后裝CUDA 11.2那驅(qū)動(dòng)版本至少支持CUDA 12.x完全沒問(wèn)題因?yàn)橄蛳录嫒?。另一個(gè)判斷依據(jù)是你要用的第三方庫(kù)的編譯環(huán)境。比如llama.cpp在編譯時(shí)如果報(bào)“CUDA non compatible”或者找不到nvcc多半是CUDA版本太低或者PATH里沒有包含nvcc所在目錄。這時(shí)候你先確認(rèn)nvcc -V能輸出版本號(hào)再看編譯參數(shù)是否指定了-DGGML_CUDA1。llama.cpp這類開源項(xiàng)目通常追趕新版本所以如果條件允許建議直接上CUDA 12.x省去后續(xù)升級(jí)煩惱。4.2 Windows下安裝CUDA ToolkitNVIDIA官網(wǎng)的CUDA Toolkit Archive頁(yè)面下載歷史版本。下載安裝包后選擇“自定義”安裝這里有幾個(gè)要點(diǎn)組件選擇時(shí)只勾選“CUDA”核心組件和“Development”相關(guān)項(xiàng)如果不想用Nsight調(diào)試器可以不勾減少體積。如果只是來(lái)編譯和跑程序不用勾選“Driver Components”因?yàn)槟阋呀?jīng)裝好驅(qū)動(dòng)了。如果勾了安裝程序會(huì)嘗試覆蓋你的驅(qū)動(dòng)版本有可能把高版本驅(qū)動(dòng)降級(jí)成與這個(gè)Toolkit配套的版本坑得很。安裝完成后環(huán)境變量會(huì)自動(dòng)配置。但你最好手動(dòng)確認(rèn)一下C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\bin C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\libnvvp這兩個(gè)路徑是否在PATH里。不在的話手動(dòng)加進(jìn)去然后打開命令行輸入nvcc -V能正常輸出版本信息就算裝好了。4.3 Linux下安裝CUDA ToolkitUbuntu下推薦用runfile方式安裝因?yàn)樗晃廴景芾砥饕卜奖闱袚Q版本。比如官方給的命令類似于wget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux.run sudo sh cuda_12.4.0_550.54.14_linux.run執(zhí)行后會(huì)出現(xiàn)一個(gè)文本交互界面用方向鍵取消勾選Driver如果驅(qū)動(dòng)已經(jīng)裝好保留Toolkit和Samples然后Install。安裝完成后默認(rèn)裝在/usr/local/cuda-12.4再建立一個(gè)軟鏈接sudo ln -s /usr/local/cuda-12.4 /usr/local/cuda然后往~/.bashrc里加export PATH/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda/lib64:$LD_LIBRARY_PATHsource一下運(yùn)行nvcc -V驗(yàn)證。每次安裝多個(gè)版本時(shí)只需修改軟鏈接指向并更新PATH導(dǎo)入即可切換成本非常低。4.4 CUDA多版本切換與遷移實(shí)際開發(fā)中不同項(xiàng)目可能鎖定不同CUDA版本一個(gè)老項(xiàng)目偏要用CUDA 10.2另一個(gè)新項(xiàng)目要求12.4。如果你只裝一個(gè)版本那每次換項(xiàng)目都要重裝非常折騰。多版本共存的思路是分別安裝不同小版本共用/usr/local/cuda軟鏈接做切換。Windows下沒有軟鏈接切換這么方便但也不是沒辦法。你說(shuō)想裝多個(gè)CUDA版本我用的方法是安裝時(shí)指定不同路徑然后在命令行寫一個(gè)簡(jiǎn)單的批次腳本echo off set CUDA_PATHC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8 set PATH%CUDA_PATH%\bin;%CUDA_PATH%\libnvvp;%PATH%每次打開新項(xiàng)目專用命令行時(shí)先運(yùn)行對(duì)應(yīng)腳本就能切換默認(rèn)的nvcc。雖然比Linux麻煩但實(shí)測(cè)可行。談到“cuda遷移”這個(gè)場(chǎng)景最常見的訴求是把舊項(xiàng)目從CUDA 10.x或11.x遷移到12.x。我建議遷移時(shí)不要直接改編譯參數(shù)因?yàn)锳PI變動(dòng)可能層面很深。先跑通官方文檔里的遷移指南特別是cudaMallocManaged、流操作、cudaMemcpy這些核心API在新版本的差異。如果項(xiàng)目里用了cuDNN還要檢查cuDNN版本是否匹配因?yàn)閏uDNN的發(fā)布周期和CUDA不完全同步不匹配會(huì)導(dǎo)致運(yùn)行時(shí)“undefined symbol”錯(cuò)誤。5. WSL2下安裝CUDA與驅(qū)動(dòng)兼容5.1 WSL2的顯卡透?jìng)鳈C(jī)制WSL2對(duì)GPU計(jì)算的支持越來(lái)越成熟現(xiàn)在很多人都用WSL2跑訓(xùn)練任務(wù)尤其是內(nèi)存不夠、24G顯存想多開實(shí)驗(yàn)的時(shí)候Windows主環(huán)境只當(dāng)個(gè)“跳板”實(shí)際計(jì)算全部在WSL2里完成。WSL2的CUDA支持其實(shí)是這么實(shí)現(xiàn)的Windows側(cè)裝好NVIDIA驅(qū)動(dòng)后WSL2內(nèi)不再需要額外安裝驅(qū)動(dòng)而是通過(guò)驅(qū)動(dòng)透?jìng)髦苯影阉拗鳈C(jī)的GPU資源映射進(jìn)Linux子系統(tǒng)。這意味著你只要在Windows上裝了正確版本的驅(qū)動(dòng)WSL2里的nvidia-smi就能直接看到顯卡。注意此時(shí)WSL2里顯示的CUDA版本就是Windows驅(qū)動(dòng)的CUDA版本上限。如果你在WSL2里跑nvcc -V發(fā)現(xiàn)沒這個(gè)命令不奇怪因?yàn)閃SL2里還得單獨(dú)安裝CUDA Toolkit。5.2 WSL2里的CUDA Toolkit安裝步驟WSL2里安裝CUDA Toolkit的官方推薦方式是使用NVIDIA的apt源wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.1-1_all.deb sudo dpkg -i cuda-keyring_1.1-1_all.deb sudo apt-get update sudo apt-get install cuda-toolkit這條命令裝的是最新CUDA Toolkit。想裝特定版本可以用apt list -a cuda-toolkit先看有哪些版本再指定版本號(hào)安裝。裝好后環(huán)境變量還是那兩行PATH和LD_LIBRARY_PATH指向/usr/local/cuda/bin和/usr/local/cuda/lib64。這一步完成后你在WSL2里就能正常編譯和運(yùn)行CUDA程序了。我踩過(guò)一個(gè)坑WSL2里編譯好一個(gè)CUDA程序跑起來(lái)卻報(bào)“l(fā)ibcuda.so.1 not found”。原因其實(shí)挺簡(jiǎn)單——libcuda.so.1是驅(qū)動(dòng)提供的WSL2鏡像里沒有這個(gè)庫(kù)但從宿主導(dǎo)出的路徑不一定在LD_LIBRARY_PATH里。解決辦法是復(fù)制一份到系統(tǒng)庫(kù)目錄或手動(dòng)指定路徑sudo ln -s /usr/lib/wsl/lib/libcuda.so.1 /usr/local/cuda/lib64/libcuda.so.1/usr/lib/wsl/lib這個(gè)目錄是WSL2和Windows驅(qū)動(dòng)之間的橋接位置算是WSL2 CUDA環(huán)境的一個(gè)“隱藏知識(shí)點(diǎn)”。5.3 WSL2適合哪些場(chǎng)景個(gè)人體感如果你的開發(fā)主力是Windows但需要跑Linux環(huán)境的推理腳本或者你在用llama.cpp這類以Linux為主要目標(biāo)的工具WSL2是很合適的選擇。但如果你要做CUDA底層的驅(qū)動(dòng)調(diào)試、寫內(nèi)核態(tài)的程序那還是老實(shí)裝實(shí)體Linux或雙系統(tǒng)WSL2畢竟是個(gè)用戶態(tài)環(huán)境有些邊緣操作會(huì)受限。6. 常見問(wèn)題排查與速查表6.1 版本不匹配報(bào)錯(cuò)這幾個(gè)報(bào)錯(cuò)幾乎每個(gè)CUDA都遇到過(guò)我把高頻問(wèn)題整理成一個(gè)速查表排查邏輯一目了然報(bào)錯(cuò)/癥狀可能原因解決辦法CUDA driver version is insufficient驅(qū)動(dòng)太老不滿足Toolkit需求升級(jí)驅(qū)動(dòng)確保驅(qū)動(dòng)支持對(duì)應(yīng)CUDA版本nvcc -V: command not foundToolkit沒裝或PATH沒配置重裝Toolkit或手動(dòng)加入環(huán)境變量libcudart.so.xxx: cannot open shared object file運(yùn)行時(shí)庫(kù)路徑缺失檢查L(zhǎng)D_LIBRARY_PATH是否包含CUDA lib64運(yùn)行時(shí)報(bào)“no kernel image available”顯卡算力太低或編譯參數(shù)不支持檢查算力表重新指定-archsm_xxllama.cpp編譯報(bào)CUDA non compatibleCUDA版本或編譯參數(shù)不匹配升級(jí)CUDA確認(rèn)CMake變量GGML_CUDA1玩游戲閃退驅(qū)動(dòng)新舊文件沖突/超頻DDU徹底清理后重裝驅(qū)動(dòng)6.2 CUDA Samples找不到或編譯報(bào)錯(cuò)因?yàn)椤癱uda samples找不到”這個(gè)問(wèn)道我要專門說(shuō)一嘴。CUDA Samples不是默認(rèn)安裝到系統(tǒng)根目錄的而是作為一個(gè)可選項(xiàng)出現(xiàn)在安裝程序里。如果你當(dāng)初沒勾選重新跑一遍安裝程序選擇修改并勾選“Samples”就行。Linux下它通常落在/usr/local/cuda/samplesWindows下是C:\ProgramData\NVIDIA Corporation\CUDA Samples。編譯Samples時(shí)最常見的報(bào)錯(cuò)是找不到libGL.so或者libGLU.so這些是OpenGL開發(fā)庫(kù)跟CUDA本身沒關(guān)系。Ubuntu下執(zhí)行sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev裝完再編譯就通順了。6.3 N卡更新后閃退和控制面板打不開這類問(wèn)題經(jīng)常是“新驅(qū)動(dòng)不兼容老組件”造成的。我的處理建議先把所有可能影響顯示的后臺(tái)軟件關(guān)掉包括RTSS、MSI Afterburner這類硬件監(jiān)控工具它們會(huì)跟驅(qū)動(dòng)搶訪問(wèn)權(quán)限。用DDU在安全模式下卸載驅(qū)動(dòng)。安裝新驅(qū)動(dòng)時(shí)不勾選“GeForce Experience”用Studio驅(qū)動(dòng)優(yōu)先。重啟后如果還閃退再用NVIDIA官方工具NVIDIA App檢測(cè)硬件狀態(tài)??刂泼姘宕虿婚_的情況除了前面說(shuō)的服務(wù)問(wèn)題還有一種可能性你在裝驅(qū)動(dòng)時(shí)把NVIDIA控制面板組件單獨(dú)取消了。那就重新下載驅(qū)動(dòng)安裝包選擇“自定義安裝”勾選“NVIDIA Control Panel”補(bǔ)裝即可不需要?jiǎng)悠渌募?.4 常見問(wèn)題的其他冷門場(chǎng)景還有幾個(gè)高頻詞值得提一下cuda 多版本安裝、4060ti支持的cuda版本、tensorflow 2.5.0 cuda cudnn nvidia 驅(qū)動(dòng)。前兩個(gè)在上文多版本共存、算力匹配部分已經(jīng)有解答。第三個(gè)是典型的老框架配新卡場(chǎng)景你有一塊4060 TiAda架構(gòu)又想跑TensorFlow 2.5.0但這個(gè)版本的TensorFlow只驗(yàn)證到CUDA 11.2和cuDNN 8.1所以在驅(qū)動(dòng)支持CUDA 12.x的前提下你可以正常安裝CUDA 11.2來(lái)跑老版本TensorFlow唯一要注意的是TensorFlow 2.5.0的預(yù)編譯包是針對(duì)較老的驅(qū)動(dòng)環(huán)境編譯的在某些情況下會(huì)報(bào)“could not load dynamic library cudart64_110.dll”這時(shí)候把CUDA 11.2的bin目錄加入PATH并且把cuDNN的dll復(fù)制到該目錄即可解決。另外有用戶提到“amd顯卡完美運(yùn)行cuda”這種說(shuō)法我必須潑一盆冷水CUDA是NVIDIA的私有技術(shù)AMD顯卡不可能原生運(yùn)行CUDA程序最多通過(guò)HIP或ZLUDA這類翻譯層模擬性能和兼容性都有限別被標(biāo)題黨帶偏了。7. 一些實(shí)操心得與建議裝CUDA這個(gè)事怎么說(shuō)呢真正理解了里面的版本樹關(guān)系后會(huì)簡(jiǎn)單很多。我見過(guò)太多人卡在“驅(qū)動(dòng)版本和CUDA版本到底哪個(gè)在前”這個(gè)問(wèn)題上其實(shí)你只要記住一條先裝驅(qū)動(dòng)再看驅(qū)動(dòng)支持什么CUDA版本然后在這個(gè)范圍內(nèi)選一個(gè)滿足框架需求的Toolkit。先有這個(gè)認(rèn)知后面都是照著流程走的事。我自己的機(jī)器上現(xiàn)在同時(shí)裝著CUDA 11.8和12.4兩套環(huán)境靠軟鏈接切換跑了半年沒出過(guò)亂子。Windows上用批處理腳本切換也試過(guò)一陣雖然麻煩但要能解決問(wèn)題。如果你的開發(fā)任務(wù)經(jīng)常要切換框架版本或者畢業(yè)論文、復(fù)現(xiàn)項(xiàng)目本身千百種依賴建議還是盡早把多版本方案落實(shí)下來(lái)省得每次都要重裝那一個(gè)多G的安裝包。最后再分享一個(gè)小技巧裝完驅(qū)動(dòng)和CUDA之后別急著跑大程序先從NVIDIA官網(wǎng)下載一個(gè)叫deviceQuery的小工具在Samples里就有它能打印顯卡算力、顯存大小、CUDA驅(qū)動(dòng)版本這些完整信息幾秒鐘就能驗(yàn)證環(huán)境是否到位。多數(shù)時(shí)候跑一下它就知道你的環(huán)境到底穩(wěn)不穩(wěn)比瞎調(diào)半天強(qiáng)多了。