1. 这不是装个驱动那么简单CUDA 与 NVIDIA 显卡驱动的本质关系很多人第一次接触 CUDA是在跑一个深度学习模型时看到报错“CUDA not available”或者在终端敲下nvidia-smi屏幕一片空白又或者输入nvcc --version系统直接甩出一句冷冰冰的提示“nvcc 不是内部或外部命令也不是可运行的程序或批处理文件。”——这时候才意识到自己以为的“装个显卡驱动就完事了”其实连门都没摸到。我刚入行那会儿也一样把 NVIDIA 官网下载的 .exe 双击到底重启电脑满心欢喜地打开 PyTorch 文档准备写device torch.device(cuda)结果torch.cuda.is_available()返回False。折腾三天重装六次系统最后才发现问题根本不在驱动版本而在于驱动、CUDA Toolkit、cuDNN、Python 框架这四者之间存在一套严丝合缝的“版本契约”。它不像装个 Chrome 浏览器——新旧都能用它更像给一台精密老式机械表换游丝游丝型号不对哪怕只差 0.02 毫米整块表就停摆。所谓“CUDA 与 N 卡驱动安装”表面看是两步操作实则是一场跨层级的协同工程。NVIDIA 驱动Driver是硬件与操作系统之间的翻译官它让 Windows/Linux 内核能听懂 GPU 的指令而 CUDA Toolkit 是开发者与 GPU 之间的开发套件它提供编译器nvcc、运行时库cudart、数学库cuBLAS/cuFFT等全套工具链。二者不是并列关系而是上下依赖关系驱动是底层基石CUDA Toolkit 是上层建筑后者必须严格匹配前者的 ABIApplication Binary Interface版本。举个生活化例子驱动就像一栋楼的地基和承重墙CUDA Toolkit 就是楼里装修用的水电管线、吊顶龙骨、智能开关面板——你不能用适配 30 层高楼的管线去装一栋 5 层自建房也不能把 5 层房的龙骨硬塞进 30 层楼的结构里。nvidia-smi显示的是驱动版本比如 550.144.03而nvcc --version显示的是 CUDA Toolkit 版本比如 12.4它们数值上从不相等但必须满足 NVIDIA 官方公布的兼容矩阵。网上流传的“装最新驱动就能跑所有 CUDA”是最大误区——驱动越新支持的 CUDA 版本下限越高但上限反而可能被锁死。比如 550.x 驱动最高只支持 CUDA 12.4你强行装 12.6nvcc能运行但nvidia-smi可能报错或者cudaMalloc直接段错误。这不是 bug是设计使然。这个项目真正要解决的不是“怎么点下一步”而是建立一套可验证、可回滚、可多版本共存、可精准对齐框架需求的安装体系。尤其在 WSL2 环境下事情变得更微妙Windows 主系统装的是驱动WSL2 子系统里装的是 CUDA Toolkit两者通过 NVIDIA Container Toolkit 或 WSLg 实现桥接中间还夹着 Linux 内核模块、GPU 驱动内核态组件、用户态库路径映射三重关卡。所以当你搜“wsl2安装cuda”却始终卡在nvidia-smi: command not found问题大概率不在 WSL2 里少装了一个包而在 Windows 侧驱动没开 WSL 支持或 BIOS 里 Secure Boot 没关——这些细节官网文档不会写Stack Overflow 的高赞回答也常过时。接下来我会从设计逻辑、核心细节、实操步骤、排障实录四个维度带你把这套体系真正吃透。这不是教程是我在三年内部署过 27 台训练机、踩过 113 个坑后整理出的一套“一次配置十年安心”的落地方法论。2. 为什么不能“一键安装”CUDA 安装的底层逻辑与设计取舍2.1 驱动与 Toolkit 的耦合机制ABI 兼容性才是铁律很多人误以为 CUDA Toolkit 和 NVIDIA 驱动是“配套出厂”的一对其实不然。NVIDIA 的发布节奏是驱动先行Toolkit 后置cuDNN 最晚。驱动每 2~3 个月发一个大版本如 535 → 550主要修复硬件兼容性、提升性能、增加新特性如 DLSS 3.5 支持CUDA Toolkit 每年发 2~3 个主版本如 12.0 → 12.4重点是新增 API、优化编译器、升级数学库cuDNN 则按季度更新专攻深度学习算子加速。三者之间没有强制绑定但存在严格的 ABI 兼容约束。这个约束不是靠软件自动检测而是由 NVIDIA 在发布时明确标注的“Minimum Required Driver Version”。以 CUDA 12.4 为例其官方文档明确写着Minimum Required Driver Version: 535.104.05。这意味着如果你装的是 535.104.05 或更高版本的驱动如 550.144.03CUDA 12.4 就能正常工作如果你装的是 535.104.04哪怕只低一个补丁号nvcc编译可能成功但运行时调用cudaGetDeviceCount()就会返回 -1如果你装的是 525.x 驱动CUDA 12.4 根本无法安装安装器会直接报错退出。这个“最低驱动版本”不是拍脑袋定的而是基于内核模块nvidia.ko导出的符号表与 CUDA 运行时libcudart.so调用的函数签名严格比对得出的。你可以把它理解成 USB 接口的物理规格USB 3.0 插头能插进 USB 2.0 插座向下兼容但 USB 2.0 插头插不进 USB 3.0 插座物理不匹配。驱动版本就是那个“插座规格”CUDA Toolkit 就是“插头规格”。所以安装的第一步永远不是下载 CUDA而是查清你当前驱动支持的最高 CUDA 版本。方法很简单打开终端执行nvidia-smi右上角显示的“Driver Version”就是你的“插座规格”然后去 NVIDIA 官网的 CUDA Toolkit Archive 页面找到对应驱动版本的“Legacy Support”表格一眼就能看到它能跑哪些 CUDA。提示不要迷信“最新即最好”。CUDA 12.4 虽新但 PyTorch 2.2 默认只捆绑 CUDA 11.8TensorFlow 2.15 默认用 CUDA 11.8 cuDNN 8.6而 Llama.cpp 的CUDA1编译选项在 CUDA 12.x 下需要额外打 patch 才能启用全部算子。盲目追新反而导致框架不兼容。我的经验是生产环境锁定 CUDA 11.8开发环境用 CUDA 12.2新项目评估期再试 CUDA 12.4。2.2 多版本共存的必要性为什么你必须放弃“卸载重装”思维在实验室或公司服务器上你几乎不可能只跑一个框架。今天用 PyTorch 训练 Vision Transformer明天用 TensorFlow 跑 LSTM后天还要用 Hugging Face 的 Transformers 库做推理大后天得编译 Llama.cpp 跑本地大模型。这些框架背后对 CUDA/cuDNN 的依赖千差万别框架推荐 CUDA 版本推荐 cuDNN 版本是否支持 CUDA 12.xPyTorch 2.211.88.9仅部分算子需 nightly buildTensorFlow 2.1511.88.6否官方 wheel 未提供ONNX Runtime 1.1711.8 / 12.28.9 / 8.9.7是需手动编译Llama.cpp (CUDA backend)11.8 / 12.2无是但 12.4 需 patch如果你坚持“一个系统只装一个 CUDA”那就意味着每次切换框架都要卸载旧版、安装新版、重新编译源码、验证所有依赖——这不仅耗时更致命的是不同版本的 CUDA Toolkit 会覆盖同一组系统路径如/usr/local/cuda下的符号链接导致已编译的二进制程序突然失效。我曾遇到一个真实案例客户在服务器上装了 CUDA 11.8 用于 TensorFlow后来为测试新模型装了 CUDA 12.2结果nvidia-smi正常nvcc --version显示 12.2但python -c import tensorflow as tf; print(tf.test.is_built_with_cuda())却返回 False。排查半天发现是/usr/local/cuda/lib64/libcudart.so被 12.2 版本覆盖而 TensorFlow 2.15 编译时链接的是 11.8 的 libcudart.so.11.8运行时找不到对应 so 文件直接崩溃。因此多版本共存不是高级技巧而是生产环境的生存底线。核心思路是物理隔离每个 CUDA 版本解压到独立目录如/usr/local/cuda-11.8,/usr/local/cuda-12.2逻辑统一用符号链接/usr/local/cuda指向当前激活版本通过修改PATH和LD_LIBRARY_PATH动态切换框架绑定在虚拟环境或 Docker 中通过export CUDA_HOME/usr/local/cuda-11.8显式指定避免全局污染。这种方案看似麻烦实则一劳永逸。我管理的 12 台 A100 服务器全部采用此模式三年来零因 CUDA 版本冲突导致的线上事故。关键在于你要把 CUDA 当作“编程语言版本”来管理而不是“系统组件”。2.3 WSL2 环境的特殊性Windows 驱动与 Linux Toolkit 的双轨制WSL2 的 CUDA 支持是近年最常被误解的领域。“wsl2安装cuda”相关搜索量巨大但 90% 的失败案例根源都在混淆了“谁负责什么”。简单说Windows 侧必须安装支持 WSL2 的 NVIDIA 驱动版本 ≥ 515.65.01且在 NVIDIA 控制面板中开启“WSL”选项WSL2 侧不需要安装任何 NVIDIA 驱动只需安装 CUDA ToolkitLinux 版本并通过nvidia-smi验证是否能调用 Windows 侧的驱动桥梁NVIDIA Container Toolkit原 nvidia-docker2或 WSLgWindows Subsystem for Linux GUI负责打通 Windows GPU 与 WSL2 用户空间。这意味着你在 WSL2 里执行sudo apt install nvidia-cuda-toolkit是完全错误的——那是 Ubuntu 官方仓库的阉割版只含nvcc前端不含libcudart等核心库且版本老旧Ubuntu 22.04 默认是 CUDA 11.5。正确做法是在 Windows 上确认驱动已启用 WSL 支持nvidia-smi在 PowerShell 中能正常输出在 WSL2 中下载 NVIDIA 官方提供的.run安装包如cuda_12.2.2_535.104.05_linux.run运行安装时取消勾选 “Install NVIDIA Accelerated Graphics Driver for Linux-x86_64”这是关键只安装 CUDA Toolkit 和 Samples手动配置PATH和LD_LIBRARY_PATH指向/usr/local/cuda-12.2。如果跳过第 3 步强行安装驱动会导致 WSL2 内核模块冲突nvidia-smi在 WSL2 中报错 “NVIDIA-SMI has failed because it couldnt communicate with the NVIDIA driver”而 Windows 侧依然正常——这是典型的“双驱动打架”。我建议所有 WSL2 用户把 Windows 驱动更新当作“系统升级”把 WSL2 中的 CUDA Toolkit 安装当作“软件安装”彻底分清责任边界。3. 核心细节解析从驱动安装到 CUDA 验证的全流程拆解3.1 驱动安装不止是双击 .exe还有 BIOS 与 Secure Boot 的隐形关卡NVIDIA 驱动安装远不止下载一个 .exe 然后一路“Next”。尤其在较新的主板Intel 12/13/14 代、AMD Ryzen 7000 系列上有三个隐藏关卡必须通关否则后续所有 CUDA 操作都是空中楼阁。第一关BIOS 中的 Above 4G Decoding这是 PCIe 设备地址空间分配的关键开关。现代 GPU尤其是 RTX 40 系列需要超过 4GB 的 MMIOMemory-Mapped I/O空间来映射显存和寄存器。如果 BIOS 中关闭了 “Above 4G Decoding”Windows 只能分配不到 4GB 的地址空间导致 GPU 初始化失败nvidia-smi直接不可见。位置通常在 BIOS 的 “Advanced” → “PCIe Configuration” 或 “Northbridge Configuration” 下名称可能是 “Above 4G Decoding”、“Resizable BAR Support” 或 “GOP Support”。务必设为Enabled。我曾帮一位客户调试一台 RTX 4090 工作站反复重装驱动无效最后发现是华硕主板 BIOS 默认关闭此选项开启后nvidia-smi瞬间出现。第二关Secure BootWindows 11 强制要求 Secure Boot而 NVIDIA 驱动的内核模块nvidia.sys必须通过微软签名认证才能加载。如果你的系统启用了 Secure Boot但驱动安装失败大概率是签名链不完整。解决方案不是关 Secure Boot不推荐而是下载驱动时务必选择“Game Ready Driver” 或 “Studio Driver”而非 “Beta Driver” 或 “Data Center Driver”后者签名可能不被消费级 Windows 认可安装时勾选 “Perform clean installation”确保旧驱动残留被清除安装完成后进入 Windows 设置 → “更新与安全” → “恢复” → “高级启动” → “UEFI 固件设置”重启后在 BIOS 中确认 Secure Boot 状态为 “Enabled” 且模式为 “Standard”非 “Custom”。第三关Windows 功能中的“Windows Subsystem for Linux”与“Virtual Machine Platform”这是 WSL2 的前置依赖。很多用户在 WSL2 中装 CUDA 失败根源是这两个 Windows 功能没开。打开 PowerShell管理员依次执行dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart然后重启电脑再运行wsl --update。注意wsl --install命令在较新 Windows 版本中会自动启用这两项但老系统必须手动开启。注意驱动安装后务必重启电脑。NVIDIA 驱动的内核模块nvidia和用户态服务NVIDIA Display Container LS必须在系统启动早期加载热插拔或服务重启无法替代完整重启。我见过太多人跳过这步结果nvidia-smi显示驱动版本但nvidia-smi -q查看 GPU 状态时显示 “No devices were found”这就是内核模块未加载的典型症状。3.2 CUDA Toolkit 安装Runfile 与 Package Manager 的取舍之道CUDA Toolkit 提供三种安装方式Runfile.run、Network Installer.deb/.rpm、Local Installer.deb/.rpm。新手常被官网默认推荐的 Network Installer 误导认为“在线安装最省事”实则埋下巨坑。Runfile 方式推荐优点完全离线安装包自带所有依赖包括libcudart、libcublas、libcurand等安装路径可自由指定如/usr/local/cuda-12.2天然支持多版本安装过程透明每一步都可取消勾选如不装驱动、不装 Samples生成的cuda-installation.log详细记录所有操作便于排错。缺点需要手动配置环境变量安装包体积大约 3GB。Package Manager 方式Debian/Ubuntu优点apt install一行搞定适合快速验证自动处理依赖如libc6、libstdc6。缺点官方 repo 更新滞后Ubuntu 22.04 默认 CUDA 11.5而 NVIDIA 已发布 12.4安装路径固定为/usr/local/cuda无法多版本共存nvidia-cuda-toolkit包是 Debian 维护的精简版缺少nvcc编译器需额外装nvidia-cuda-dev且libcudart版本可能与驱动不匹配。我的实操建议生产环境一律用 Runfile开发环境可先用 Package Manager 快速验证再切 Runfile。以 Ubuntu 22.04 CUDA 12.2 为例Runfile 安装步骤如下下载cuda_12.2.2_535.104.05_linux.run注意版本号与驱动匹配赋予执行权限chmod x cuda_12.2.2_535.104.05_linux.run执行安装sudo ./cuda_12.2.2_535.104.05_linux.run在交互界面中取消勾选 “Install NVIDIA Accelerated Graphics Driver for Linux-x86_64”除非你是裸机 Linux勾选 “Install NVIDIA CUDA Toolkit”勾选 “Install NVIDIA CUDA Samples”用于后续验证将安装路径改为/usr/local/cuda-12.2不要用默认/usr/local/cuda安装完成后按提示将以下内容加入~/.bashrcexport CUDA_HOME/usr/local/cuda-12.2 export PATH$CUDA_HOME/bin:$PATH export LD_LIBRARY_PATH$CUDA_HOME/lib64:$LD_LIBRARY_PATH执行source ~/.bashrc然后验证nvcc --version应输出Cuda compilation tools, release 12.2, V12.2.128。实操心得Runfile 安装时如果终端提示 “Failed to install NVIDIA Driver”不要慌——只要你在第 4 步取消了驱动勾选这个错误可以忽略。它只是安装器在尝试加载驱动模块时失败不影响 Toolkit 安装。真正的验证标准是nvcc --version和nvidia-smi都能正常输出。3.3 cuDNN 安装不是“复制粘贴”而是“精准手术”cuDNNCUDA Deep Neural Network library是深度学习框架的加速引擎但它不是 CUDA 的一部分而是独立发布的闭源库。它的安装极易出错因为cuDNN 本身不带安装器全靠手动复制文件且版本匹配比 CUDA 更苛刻。cuDNN 的版本号格式为x.y.z如 8.9.7其中x是主版本决定 API 兼容性cuDNN 8 与 cuDNN 9 不兼容y是次版本决定功能集cuDNN 8.9 新增了 Flash Attention 支持z是修订版本只修 bug不影响兼容性。匹配规则是cuDNN 版本必须与 CUDA Toolkit 版本严格对应。NVIDIA 官网的 cuDNN 下载页每个版本都明确标注了 “For CUDA x.y”。例如cuDNN 8.9.7 明确写着 “For CUDA 11.x and 12.x”但这不意味着它能通吃所有 11.x 和 12.x。实际兼容性要看具体构建cuDNN 8.9.7 的 Linux x86_64 版本是用 CUDA 11.8 和 CUDA 12.2 分别编译的两个独立包。你必须下载与你的 CUDA Toolkit 完全匹配的包。安装步骤以 CUDA 12.2 cuDNN 8.9.7 为例去 cuDNN 官网下载cudnn-linux-x86_64-8.9.7.29_cuda12.2-archive.tar.xz注意文件名中的cuda12.2解压tar -xf cudnn-linux-x86_64-8.9.7.29_cuda12.2-archive.tar.xz进入解压目录cd cudnn-linux-x86_64-8.9.7.29_cuda12.2-archive复制文件注意路径sudo cp include/cudnn*.h /usr/local/cuda-12.2/include sudo cp lib/libcudnn* /usr/local/cuda-12.2/lib64 sudo chmod ar /usr/local/cuda-12.2/include/cudnn*.h /usr/local/cuda-12.2/lib64/libcudnn*验证cat /usr/local/cuda-12.2/include/cudnn_version.h | grep CUDNN_MAJOR -A 2应输出#define CUDNN_MAJOR 8。关键细节libcudnn.so是一个符号链接指向libcudnn.so.8.9.7而libcudnn.so.8指向libcudnn.so.8.9.7。框架如 PyTorch在链接时实际找的是libcudnn.so.8。如果你只复制了libcudnn.so.8.9.7没创建符号链接框架就会报 “cannot open shared object file: No such file or directory”。因此复制后务必检查ls -l /usr/local/cuda-12.2/lib64/libcudnn* # 正确输出应包含 # libcudnn.so - libcudnn.so.8.9.7 # libcudnn.so.8 - libcudnn.so.8.9.7 # libcudnn.so.8.9.73.4 验证环节不只是nvidia-smi还有deviceQuery和bandwidthTest安装完成后的验证不能只停留在nvidia-smi和nvcc --version。这两个命令只能证明“驱动和编译器存在”但无法证明“CUDA 运行时能正常调用 GPU”。真正的验证必须跑两个官方 SamplesdeviceQuery验证 CUDA 运行时与 GPU 通信进入 Samples 目录cd /usr/local/cuda-12.2/samples/1_Utilities/deviceQuery编译sudo make运行./deviceQuery。预期输出最后一行是 “Result PASS”。如果显示 “Result FAIL”常见原因LD_LIBRARY_PATH未包含/usr/local/cuda-12.2/lib64GPU 被其他进程占用如桌面环境占用了独显驱动版本低于 CUDA 12.2 的最低要求535.104.05。bandwidthTest验证 GPU 内存带宽与 PCIe 通道进入目录cd /usr/local/cuda-12.2/samples/1_Utilities/bandwidthTest编译sudo make运行./bandwidthTest --help查看选项然后./bandwidthTest。预期输出中“Host to Device Bandwidth” 和 “Device to Host Bandwidth” 应接近理论值RTX 4090 理论 PCIe 4.0 x16 带宽为 31.5 GB/s实测 28~30 GB/s 为正常。如果只有几 GB/s说明 PCIe 通道被降速如 BIOS 中 PCIe 设置为 Gen3 而非 Gen4或 GPU 插在了 PCIe 通道数不足的插槽如主板上第二个 PCIe x16 插槽实际只有 x4 通道。实操心得deviceQuery和bandwidthTest是 NVIDIA 官方认可的“黄金验证组合”。我所有服务器上线前必跑这两个测试并截图存档。它们比任何 Python 脚本都可靠因为它们绕过了所有框架抽象层直接调用 CUDA Driver API。如果你的torch.cuda.is_available()返回 False但deviceQuery是 PASS那问题一定出在 PyTorch 的 wheel 包与 CUDA 版本不匹配而不是 CUDA 安装失败。4. 实操过程与核心环节实现从零开始的完整部署记录4.1 场景设定一台全新 Ubuntu 22.04 服务器目标安装 CUDA 12.2 cuDNN 8.9.7 PyTorch 2.2我们以一个真实场景为例一台刚重装 Ubuntu 22.04 的 Dell R750 服务器配备 2 块 NVIDIA A100 80GB PCIe目标是部署 PyTorch 2.2需 CUDA 11.8和 Llama.cpp需 CUDA 12.2实现双版本共存。整个过程我全程录像以下是关键步骤与现场记录。Step 0系统初始化与驱动安装系统Ubuntu 22.04.3 LTS内核 5.15.0-86-genericBIOS 设置Above 4G Decoding EnabledSecure Boot EnabledStandard Mode下载 NVIDIA 驱动NVIDIA-Linux-x86_64-535.104.05.run匹配 CUDA 12.2 的最低驱动安装前禁用 Nouveauecho blacklist nouveau | sudo tee /etc/modprobe.d/blacklist-nouveau.confsudo update-initramfs -u重启进入 recovery mode执行sudo ./NVIDIA-Linux-x86_64-535.104.05.run --no-opengl-files --no-x-check--no-opengl-files避免与 X server 冲突--no-x-check跳过图形环境检查安装完成后重启执行nvidia-smi输出----------------------------------------------------------------------------- | NVIDIA-SMI 535.104.05 Driver Version: 535.104.05 CUDA Version: 12.2 | |--------------------------------------------------------------------------- | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | || | 0 NVIDIA A100-PCIE... On | 00000000:81:00.0 Off | 0 | | 30% 32C P0 35W / 250W | 0MiB / 81920MiB | 0% Default | ---------------------------------------------------------------------------注意右上角 “CUDA Version: 12.2” —— 这是驱动内置的 CUDA 兼容性标识不是 Toolkit 版本但它证实驱动已支持 CUDA 12.2。Step 1安装 CUDA 12.2 Toolkit下载cuda_12.2.2_535.104.05_linux.run执行sudo ./cuda_12.2.2_535.104.05_linux.run取消勾选驱动勾选 Toolkit 和 Samples路径设为/usr/local/cuda-12.2安装完成编辑~/.bashrcexport CUDA_12_2_HOME/usr/local/cuda-12.2 export PATH$CUDA_12_2_HOME/bin:$PATH export LD_LIBRARY_PATH$CUDA_12_2_HOME/lib64:$LD_LIBRARY_PATHsource ~/.bashrcnvcc --version输出release 12.2, V12.2.128进入/usr/local/cuda-12.2/samples/1_Utilities/deviceQuerysudo make./deviceQuery→ “Result PASS”。Step 2安装 CUDA 11.8 Toolkit为 PyTorch 准备下载cuda_11.8.0_520.61.05_linux.run驱动 520.61.05 是 11.8 的最低要求执行sudo ./cuda_11.8.0_520.61.05_linux.run同样取消驱动勾选 Toolkit路径设为/usr/local/cuda-11.8编辑~/.bashrc添加export CUDA_11_8_HOME/usr/local/cuda-11.8 # 注意这里不修改 PATH 和 LD_LIBRARY_PATH留待虚拟环境激活时动态设置Step 3安装 cuDNN 8.9.7双版本下载cudnn-linux-x86_64-8.9.7.29_cuda11.8-archive.tar.xz和cudnn-linux-x86_64-8.9.7.29_cuda12.2-archive.tar.xz分别解压复制文件到对应目录# for CUDA 11.8 sudo cp cudnn-linux-x86_64-8.9.7.29_cuda11.8-archive/include/cudnn*.h /usr/local/cuda-11.8/include sudo cp cudnn-linux-x86_64-8.9.7.29_cuda11.8-archive/lib/libcudnn* /usr/local/cuda-11.8/lib64 # for CUDA 12.2 sudo cp cudnn-linux-x86_64-8.9.7.29_cuda12.2-archive/include/cudnn*.h /usr/local/cuda-12.2/include sudo cp cudnn-linux-x86_64-8.9.7.29_cuda12.2-archive/lib/libcudnn* /usr/local/cuda-12.2/lib64检查符号链接ls -l /usr/local/cuda-11.8/lib64/libcudnn*和ls -l /usr/local/cuda-12.2/lib64/libcudnn*确认libcudnn.so.8存在。Step 4创建虚拟环境并绑定 CUDA 版本创建 PyTorch 环境python3 -m venv pt_envsource pt_env/bin/activate在激活状态下导出 CUDA 11.8export CUDA_HOME/usr/local/cuda-11.8 export PATH$CUDA_HOME/bin:$PATH export LD_LIBRARY_PATH$CUDA_HOME/lib64:$LD_LIBRARY_PATH安装 PyTorchpip3 install torch2.2.0cu118 torchvision0.17.0cu118 --extra-index-url https://download.pytorch.org/whl/cu118验证python3 -c import torch; print(torch.cuda.is_available(), torch.version.cuda)→True 11.8。创建 Llama.cpp 环境python3 -m venv llama_envsource llama_env/bin/activate导出 CUDA 12.2export CUDA_HOME/usr/local/cuda-12.2 export PATH$CUDA_HOME/bin:$PATH export LD_LIBRARY_PATH$CUDA_HOME/lib64:$LD_LIBRARY_PATH编译 Llama.cppmake LLAMA_CUDA1成功后 ./main -m