云端Sapien渲染终极挑战:hello_world为何永远失败?完整避坑指南

先说结论,博主在进行多次实验后,发现云端服务器+vnc只能运行python -m sapien.example.offscreen,但无论怎么配置都无法运行python -m sapien.example.hello_world。

如果想只运行spaien可以试试在本地windows系统中(sapien基本兼容windows,可以运行python -m sapien.example.hello_world);如果需要结合maniskill在windows系统中会报错(截止至2025年12月31日),必须要使用linux系统。

参考文章:Vulkan:AutoDL帮助文档,TurboVNC:AutoDL帮助文档

环境:

云服务器:autodl,sapien==3.0.1,PyTorch==2.1.2,Python==3.10(ubuntu22.04),CUDA==11.8,GPU为RTX 3090(24GB),VNC:尝试过Autodl帮助文档中的turbovnc和sapien文档中的xvfb + x11vnc + fluxbox。

注意:整个过程需要在有 GPU 的开机模式下进行(收费模式)。建议先在无卡模式下配置环境,再切换到有卡模式测试渲染。

1. 安装基础依赖和 TurboVNC(远程桌面基础)

直接复制 AutoDL 官方推荐命令:

apt update && apt install -y libglu1-mesa-dev mesa-utils xterm xauth x11-xkb-utils xfonts-base xkb-data libxtst6 libxv1

# 安装 libjpeg-turbo 和 TurboVNC
export TURBOVNC_VERSION=2.2.5
export LIBJPEG_VERSION=2.0.90
wget https://autodl-public.ks3-cn-beijing.ksyuncs.com/tool/vnc/libjpeg-turbo-official_${LIBJPEG_VERSION}_amd64.deb
wget https://autodl-public.ks3-cn-beijing.ksyuncs.com/tool/vnc/turbovnc_${TURBOVNC_VERSION}_amd64.deb
dpkg -i libjpeg-turbo-official_${LIBJPEG_VERSION}_amd64.deb
dpkg -i turbovnc_${TURBOVNC_VERSION}_amd64.deb
rm -rf *.deb

# 启动VNC服务端,这一步可能涉及vnc密码配置(注意不是实例的账户密码)。另外如果出现报错xauth未找到,那么使用apt install xauth再安装一次
rm -rf /tmp/.X1*  # 如果再次启动,删除上一次的临时文件,否则无法正常启动
USER=root /opt/TurboVNC/bin/vncserver :1 -desktop X -auth /root/.Xauthority -geometry 1920x1080 -depth 24 -rfbwait 120000 -rfbauth /root/.vnc/passwd -fp /usr/share/fonts/X11/misc/,/usr/share/fonts -rfbport 6006

# 检查是否启动,如果有vncserver的进程,证明已经启动
ps -ef | grep vnc

在终端中添加环境变量:export DISPLAY=:1,然后再执行命令。

注意:官方 TurboVNC 配置时远程桌面为黑屏,不要怀疑,就是黑屏。

用该VNC运行sapein只能实现offscreen,不能实现hello_world,会出现如下报错(sapien文档中的xvfb + x11vnc + fluxbox出现同样报错):

 2. 配置 Vulkan

观察报错发现是Vulkan的问题,SAPIEN 使用 Vulkan 进行渲染,需要指定VK_ICD_FILENAMES。

按官方文档,先清空并创建自定义 ICD:

cd /etc/vulkan/icd.d
echo "" > my_nvidia_icd.json #清空

cat >> /etc/vulkan/icd.d/my_nvidia_icd.json <<EOF
{
  "file_format_version" : "1.0.0",
  "ICD": {
    "library_path": "/lib/x86_64-linux-gnu/libEGL_nvidia.so.0",
    "api_version" : "1.3.277"
  }
}
EOF

export VK_ICD_FILENAMES=/etc/vulkan/icd.d/my_nvidia_icd.json # 显式指定ICD文件路径

注意:autodl文档中使用的是 libEGL_nvidia.so.0,这种会出现段错误!

于是使用 libGLX_nvidia.so.0(即现有的nvidia_icd.json),适合 Vulkan+桌面场景。

额外安装 Vulkan 依赖(预防 SAPIEN 报错):

apt install -y libvulkan1 mesa-vulkan-drivers vulkan-tools libegl1

此时运行python -m sapien.example.hello_world依旧会报错:

3. 安装 VirtualGL(实现 GPU 硬件加速 OpenGL 渲染,没用)

博主在发现还是无法运行python -m sapien.example.hello_world时,为了解决这个问题尝试安装 VirtualGL,发现没用。

AutoDL 默认没有预装 VirtualGL,需要手动安装。VirtualGL 可以将 OpenGL 调用重定向到 NVIDIA GPU 进行渲染,然后通过 VNC 传输图像。

# 下载并安装最新版 VirtualGL(推荐 3.x 版本,性能更好)
cd /tmp
wget https://sourceforge.net/projects/virtualgl/files/latest/download -O virtualgl_amd64.deb
dpkg -i virtualgl_amd64.deb
rm virtualgl_amd64.deb

# 修复依赖(如果有缺失)
apt install -f -y

安装完成后,运行 VirtualGL 配置脚本(必须以 root 执行):

/opt/VirtualGL/bin/vglserver_config

在交互提示中,选择绑定 NVIDIA GPU(通常选默认或所有选项为 No,除非有多卡需求)。

重启实例(重要!配置 VirtualGL 后需要重启让权限生效):

sudo shutdown -r now

运行python -m sapien.example.hello_world,还是出现同样报错。

希望博主的文章能帮助一些想在云服务器上运行sapien的小白,也希望在云服务上成功运行python -m sapien.example.hello_world的大佬能给博主提供一些帮助和建议。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值