Google Colab运行Blender报CUDA cuInit: Unknown CUDA error value
在Google Colab平台使用Blender渲染工程文件,此前数月运行均正常,可适配不同GPU型号完成渲染,且自上次成功渲染后未修改任何运行脚本。自上周起,在驱动版本、CUDA版本均无变动的前提下,执行bpy.context.preferences.addons["cycles"].preferences.refresh_devices()命令刷新Cycles渲染设备,以及所有调用GPU计算设备的操作时,均返回错误:
CUDA cuInit: Unknown CUDA error value
环境信息
- 报错命令执行环境为Blender Python交互控制台,启动命令为
sudo ./blender-3.0.1-linux-x64/blender -b --python-console,启动日志显示当前版本为Blender 3.0.1(构建哈希dc2d18018171,构建时间2022-01-26 00:40:57)、内置Python 3.9.7、编译环境为GCC 9.3.1(Red Hat 9.3.1-2) nvidia-smi查询结果显示:驱动版本为460.32.03,对应CUDA版本11.2,当前挂载GPU为Tesla P100-PCIE,GPU无负载、无进程占用资源nvcc --version查询结果显示CUDA编译工具版本为11.1.105/proc/driver/nvidia/version查询结果显示NVRM内核模块版本为460.32.03,经系统日志核对,上次成功渲染时的驱动版本、CUDA版本与当前完全一致,无任何配置变更
Colab后台默认镜像近期调整了NVIDIA用户态驱动库的软链接优先级,导致进程加载的用户态libcuda库版本和内核中运行的460.32.03版本NVRM模块不匹配。cuInit是CUDA Runtime执行初始化的首个调用,版本不匹配时会直接抛出未知错误,此时nvidia-smi、nvcc因为自身硬编码了库路径,仍然可以正常输出,不会暴露版本冲突问题。
另外使用sudo启动Blender时,系统会默认重置LD_LIBRARY_PATH等环境变量,进一步加剧库加载路径错乱的问题。
- 启动Blender前先手动配置库路径,强制进程优先加载和内核驱动版本匹配的CUDA库:
export LD_LIBRARY_PATH=/usr/lib64-nvidia:/usr/local/cuda-11.2/lib64:$LD_LIBRARY_PATH
- 移除启动命令中的sudo,避免环境变量被重置,提前给Blender目录配置普通用户执行权限:
sudo chmod -R 755 ./blender-3.0.1-linux-x64/
- 以普通用户身份启动Blender Python控制台:
./blender-3.0.1-linux-x64/blender -b --python-console
- 进入控制台后执行以下代码验证GPU设备识别状态:
import bpy prefs = bpy.context.preferences.addons["cycles"].preferences prefs.refresh_devices() for dev in prefs.devices: if dev.type == 'CUDA': print(f"识别到CUDA设备: {dev.name}")
正常情况下控制台会输出Tesla P100-PCIE的设备条目,后续即可正常调用GPU完成渲染。
异常排查
如果执行完上述步骤仍然报错,先退出Blender,在shell中执行以下命令检查Blender依赖的CUDA库链接状态:
ldd ./blender-3.0.1-linux-x64/lib/libcuda.so
确认输出中libcuda.so的指向路径为/usr/lib64-nvidia/libcuda.so.460.32.03,如果指向其他路径下的高版本libcuda库,手动删除错误的软链接即可。
内容的提问来源于stack exchange,提问作者Vipul Rajan

