Docker容器内Blender/BlenderProc GPU渲染报错的解决咨询
如何在Docker容器中实现Blender/BlenderProc GPU渲染?
问题场景
在Docker容器中运行Blender 3.5.1 Linux版(搭配BlenderProc)时,出现CUDA初始化错误,只能使用CPU渲染,错误信息如下:
Selecting render devices... CUDA cuInit: Unknown CUDA error value Using only the CPU for rendering
现有Dockerfile配置
FROM nvidia/cuda:11.7.1-cudnn8-runtime-ubuntu20.04 ENV DEBIAN_FRONTEND noninteractive # setup timezone RUN echo 'Etc/UTC' > /etc/timezone && \ ln -s /usr/share/zoneinfo/Etc/UTC /etc/localtime && \ apt-get update && \ apt-get install -q -y --no-install-recommends tzdata && \ rm -rf /var/lib/apt/lists/* # Install necessary dependencies RUN apt-get update && rm -rf /var/lib/apt/lists/* RUN apt-get update && apt install -y --no-install-recommends \ curl git lsb-release build-essential software-properties-common \ cmake python3-pip python3-dev python-is-python3 zlib1g-dev \ libboost-all-dev libglew-dev libfreeimage-dev libfreeimage3 \ libxi-dev libxrandr-dev libxxf86vm-dev libopenal-dev libssl-dev \ libvorbis-dev libogg-dev libjpeg-dev libfreetype6-dev libtiff-dev \ libwebp-dev libavformat-dev libavcodec-dev libavdevice-dev \ libavutil-dev libavfilter-dev libswscale-dev libswresample-dev \ libasound2-dev libx11-xcb-dev libxcb-render0-dev libxcb-shm0-dev \ libfontconfig1-dev libxkbcommon-x11-dev libsm6 nano # setup environment ENV LANG C.UTF-8 ENV LC_ALL C.UTF-8 ## BlenderProc WORKDIR /root RUN git clone https://github.com/DLR-RM/BlenderProc.git WORKDIR /root/BlenderProc RUN pip install -e . ## Download textures RUN echo 'import blenderproc as bproc' | cat - /root/BlenderProc/blenderproc/scripts/download_cc_textures.py > temp && mv temp /root/BlenderProc/blenderproc/scripts/download_cc_textures.py ENV NVIDIA_VISIBLE_DEVICES all ENV NVIDIA_DRIVER_CAPABILITIES compute,utility
主机NVIDIA环境信息
+-----------------------------------------------------------------------------+ | NVIDIA-SMI 470.223.02 Driver Version: 470.223.02 CUDA Version: 11.4 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 NVIDIA GeForce ... Off | 00000000:01:00.0 On | N/A | | N/A 52C P8 9W / N/A | 103MiB / 5944MiB | 22% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | 0 N/A N/A 1863 G /usr/lib/xorg/Xorg 32MiB | | 0 N/A N/A 2721 G /usr/lib/xorg/Xorg 69MiB | +-----------------------------------------------------------------------------+
解决方案
1. 匹配CUDA版本兼容性
主机NVIDIA驱动支持的最高CUDA版本为11.4,当前Docker镜像使用的nvidia/cuda:11.7.1-cudnn8-runtime-ubuntu20.04版本过高,存在兼容性冲突。需更换为CUDA 11.4.x版本的镜像,示例:
FROM nvidia/cuda:11.4.3-cudnn8-runtime-ubuntu20.04
2. 配置NVIDIA容器运行时
- 主机必须安装nvidia-docker2工具,而非仅标准Docker。若未安装,按照NVIDIA官方指引完成安装(Ubuntu系统可通过系统包管理器安装)。
- 启动容器时必须添加
--gpus all参数,确保GPU设备被正确映射,命令示例:docker run --gpus all -it your-image-name /bin/bash
3. 验证容器内CUDA环境
进入容器后执行nvidia-smi命令,若能输出与主机一致的GPU信息,说明CUDA环境配置正常。此时再运行BlenderProc测试渲染。
4. 显式指定BlenderProc渲染设备
在BlenderProc的脚本中,明确配置使用CUDA渲染,示例代码片段:
import blenderproc as bproc bproc.init() # 禁用CPU渲染,启用CUDA bproc.renderer.set_cpu_threads(0) bproc.renderer.enable_cuda()
内容的提问来源于stack exchange,提问作者bhomaidan90
相关产品推荐
相关产品推荐

