折腾半天才在WSL2上配置好CUDA和Optix,由于互联网上相关资料比较零碎分散,因此在此将个人的踩坑经历草草记录一下,希望能有所帮助。
环境:
- Win11 WSL2
- Ubuntu 20.04
- RTX3060 Laptop
- Studio 576.02 2025/4/16
Part1.安装CUDA
注意点:
WSL2 使用的是 Windows 主机上安装的 NVIDIA 显卡驱动,因此不需要也不应该在 WSL2 内部尝试安装 Linux 版本的 NVIDIA 显示驱动程序。
- 访问 NVIDIA 官网下载专门为 WSL-Ubuntu (或其他 WSL 发行版) 提供的 CUDA Toolkit 安装包。
对于旧版本CUDA的安装,NVIDIA 官网提供的安装方式可能无法安装成功(apt会检测到存在更新版本的CUDA,停止安装)
- 只用在apt中搜寻特定版本的
cuda-toolkit-xx-x即可,安装前记得检查安装的包内是否存在driver包,防止误安装驱动(应该只有一个driver-devtool包需要安装)
- 只用在apt中搜寻特定版本的
验证:
nvcc --version: 查看在 WSL2 内部安装的 CUDA Toolkit 的版本。nvidia-smi: 确认 WSL2 正确访问主机 GPU,并了解主机驱动支持的最高 CUDA 版本。
Part2.安装Optix
核心问题在于 NVIDIA 尚未将 OptiX 运行时组件完整、无误地集成到通过 Windows 驱动提供给 WSL2 的库中。
根据NVIDIA 开发者论坛 Problem running OptiX 7.6 in WSL 中的回复,NVIDIA 当时(2024年)并未将 OptiX 完全打包进 WSL2 驱动,而在2025年5月最新的Studio驱动中该问题仍然存在。
这导致 WSL2 从主机驱动映射过来的 /usr/lib/wsl/lib/libnvoptix.so.1 文件可能存在问题(比如踩坑时发现的 SONAME 错误,文件内嵌的 SONAME 错误地指向了 libnvoptix_loader.so.1 而不是 libnvoptix.so.1),或者缺少其他必要的 OptiX 运行时组件。
直接结果就是运行 OptiX 程序(如 SDK 中的 optixHello)时,在 optixInit() 阶段因找不到核心库而抛出 OPTIX_ERROR_LIBRARY_NOT_FOUND 错误。
解决方案
参照之前的论坛帖子,从一个完整的 Linux 版 NVIDIA 显示驱动包中提取出正确的 OptiX 运行时库,并手动放置到 WSL 中正确的位置,让 OptiX 程序能够找到并使用它们。
先正确安装CUDA和Optix,参照Nvidia官网。
下载 Linux 版 NVIDIA 显示驱动: 从 NVIDIA 官网下载一个与你 Windows 主机驱动版本相近(或你希望使用的)的 Linux x86_64 显示驱动程序 (
.run文件)。例如NVIDIA-Linux-x86_64-575.xx.yy.run。- 我是直接在WSL内
/usr/lib/x86_64-linux-gnu目录下提取需要的文件,可能是因为之前安装CUDA时误安装的驱动残留( - 也可以使用
./[driver filename].run -x在 WSL 中运行驱动程序安装程序,这将解压缩驱动程序,但不会安装驱动程序。
- 我是直接在WSL内
将
libnvoptix.so.XXX.00、libnvidia-rtcore.so.XXX.00和libnvidia-ptxjitcompiler.so.XXX.00复制到C:/Windows/System32/lxss/lib中,其中 XXX 是驱动程序版本。将
libnvoptix.so.XX.00重命名为libnvoptix.so.1,libnvidia-ptxjitcompiler.so.XXX.00重命名为libnvidia-ptxjitcompiler.so.1,不要重命名libnvidia-rtcore.so.XXX.00libcuda 和其他库是从
C:/Windows/System32/lxss/lib传递的,将/usr/local/cuda/bin添加到PATH中访问 NVCC,将/usr/lib/wsl/lib添加到LD_LIBRARY_PATH中获取 CUDA、OptiX 等。- 请确保
LD_LIBRARY_PATH有较高的优先级。
- 请确保
验证:
- 正常安装 OptiX SDK。
- 编译 SDK 中的示例程序,测试
optixHello能否正常运行。
残留问题:
- 哪怕这套坑踩下来,我编译的PBRT使用gpu进行场景渲染时,还是会出现错误/用时过长等问题
- 调试后第一次好像是PTX代码问题,第二次好像是场景本身的问题
- 懒得继续配环境了,先这样吧,等之后研究源码时再折腾(
- 不太能确定Optix能够完全正常运行,看论坛帖子报告好像某些地方还是存在问题,但至少
optixHello和PBRT是能跑了(
就先这样吧,实在没有时间写得非常详细,要做的事情还有好多……
总之也是写了这博客的第一篇技术类文章了,虽然完全不技术,感谢Gemin的帮助(
也想吐槽自己又写笔记又写一路楼又写日记又写博客…要写的东西太多了啊喂
唉