Win11+WSL2+Ubuntu24.04安装Genesis并实现正常运行

news/2025/1/11 1:54:31/

什么是Genesis

Genesis是一款由卡内基梅隆大学、马里兰大学、斯坦福大学、麻省理工学院等全球顶尖研究机构联合开发的开源生成式物理引擎。于2024年12月19日正式开源。它专为机器人、嵌入式 AI 和物理 AI 应用设计,能够模拟各种物理现象(如刚体、液体、软体等),并通过自然语言描述生成交互式 3D 场景、机器人策略和面部动画。

主要特点:
  • 高速仿真:比现实世界快约 430,000 倍,比 NVIDIA Isaac Gym 快 80 倍。
  • 多物理现象支持:整合了多种物理求解器(如 MPM、SPH、FEM、PBD 等),支持刚体、液体、气体、软体等复杂物理现象的仿真。
  • 生成式数据引擎:通过自然语言生成多模态数据(如 3D 场景、视频、机器人策略等),降低人工数据收集成本。
  • 跨平台兼容性:支持 Linux、MacOS、Windows 等操作系统,兼容 CPU、Nvidia GPU、AMD GPU 等多种硬件。
  • 应用场景:包括机器人研发、虚拟世界构建、科学研究、医疗仿真等。
技术原理:
  • 通用物理引擎:从头构建,集成多种物理求解器,实现精确模拟。
  • 可微分仿真:支持可微分模拟,便于与机器学习算法结合。
  • 高性能渲染:内置光线追踪引擎,生成高保真视觉效果。

为什么需要WSL2

Genesis目前尚未支持Windows系统的图形渲染功能,导致用户无法在Windows平台上直接使用图形化界面进行操作。这对于未安装独立Linux系统的用户造成了诸多不便。为解决这一问题,用户可以通过Windows Subsystem for Linux 2(WSL2)在Windows系统中运行Genesis。

WSL2是微软开发的Windows子系统,它允许用户在Windows环境中直接运行Linux发行版,并提供了接近原生Linux的性能和完整的系统调用兼容性。通过WSL2,用户无需双系统切换或虚拟机配置,即可在Windows系统中无缝运行Genesis,同时还能访问Windows文件系统,实现跨平台数据交互。这种解决方案既保留了Windows系统的便利性,又能够充分利用Genesis的功能特性,为用户提供了高效便捷的开发环境。

关于WSL2详细内容请参阅微软的官方文档。


安装

配置清华镜像源

请参考清华镜像站使用帮助
教程非常详细,十分推荐看一下
ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

pypi | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

安装genesis

🛠️ 安装 — Genesis 0.2.0 文档
只需要命令行输入下面的指令执行就可以了

pip install genesis-world

解决bug(重点)

github的issues内有非常详细的解决方案

Win10-WSL2-PROBLEMS · Issue #43 · Genesis-Embodied-AI/Genesis

问题列表

原文链接

  1. 【已解决】pyglet.gl.ContextException: Could not create GL context
  2. 【OPEN】OpenGL.error.Error: OpenGL.error.Error: Attempt to retrieve context when no valid context

以下为原文

【已解决】问题 1 pyglet.gl.ContextException:Could not create GL context

当我完成conda虚拟环境(pytorch和genesis)的设置并开始运行hello_genesis.py时,我遇到了以下错误消息:

(genesis) root@L6o0:~/Genesis# /home/circlemoon/miniconda3/envs/genesis/bin/python /home/circlemoon/Genesis/examples/tutorials/hello_genesis.py
[Genesis] [17:20:39] [INFO] ╭─────────────────────────────────────────────────────────────────────────────────────╮
[Genesis] [17:20:39] [INFO] │┈┉┈┉┈┉┈┉┈┉┈┉┈┉┈┉┈┉┈┉┈┉┈┉┈┉┈┉┈┉┈┉┈┉┈┉┈┉ Genesis ┈┉┈┉┈┉┈┉┈┉┈┉┈┉┈┉┈┉┈┉┈┉┈┉┈┉┈┉┈┉┈┉┈┉┈┉┈┉│
[Genesis] [17:20:39] [INFO] ╰─────────────────────────────────────────────────────────────────────────────────────╯
[Genesis] [17:20:39] [INFO] Running on [AMD Ryzen 5 7500F 6-Core Processor] with backend gs.cpu. Device memory: 15.44 GB.
[Genesis] [17:20:39] [INFO] 🚀 Genesis initialized. 🔖 version: 0.2.0, 🌱 seed: None, 📏 precision: '32', 🐛 debug: False, 🎨 theme: 'dark'.
[Genesis] [17:20:40] [INFO] Scene <5708222> created.
[Genesis] [17:20:40] [INFO] Adding <gs.RigidEntity>. idx: 0, uid: <1535f0f>, morph: <gs.morphs.Plane>, material: <gs.materials.Rigid>.
[Genesis] [17:20:40] [INFO] Preprocessing geom idx 0.
[Genesis] [17:20:40] [INFO] Adding <gs.RigidEntity>. idx: 1, uid: <0c70d30>, morph: <gs.morphs.MJCF(file='/home/circlemoon/miniconda3/envs/genesis/lib/python3.12/site-packages/genesis/assets/xml/franka_emika_panda/panda.xml')>, material: <gs.materials.Rigid>.
[Genesis] [17:20:40] [INFO] Preprocessing geom idx 1.
[Genesis] [17:20:40] [INFO] Preprocessing geom idx 2.
[Genesis] [17:20:41] [INFO] Preprocessing geom idx 3.
[Genesis] [17:20:41] [INFO] Preprocessing geom idx 4.
[Genesis] [17:20:42] [INFO] Preprocessing geom idx 5.
[Genesis] [17:20:42] [INFO] Preprocessing geom idx 6.
[Genesis] [17:20:43] [INFO] Preprocessing geom idx 7.
[Genesis] [17:20:43] [INFO] Preprocessing geom idx 8.
[Genesis] [17:20:43] [INFO] Preprocessing geom idx 9.
[Genesis] [17:20:43] [INFO] Preprocessing geom idx 10.
[Genesis] [17:20:43] [INFO] Preprocessing geom idx 11.
[Genesis] [17:20:43] [INFO] Preprocessing geom idx 12.
[Genesis] [17:20:43] [INFO] Preprocessing geom idx 13.
[Genesis] [17:20:43] [INFO] Preprocessing geom idx 14.
[Genesis] [17:20:43] [INFO] Preprocessing geom idx 16.
[Genesis] [17:20:43] [INFO] Building scene <5708222>...
[Genesis] [17:20:51] [INFO] Compiling simulation kernels...
[Genesis] [17:21:14] [INFO] Building visualizer...
Exception in thread Thread-3 (_init_and_start_app):
Traceback (most recent call last):File "/home/circlemoon/miniconda3/envs/genesis/lib/python3.12/threading.py", line 1075, in _bootstrap_innerself.run()File "/home/circlemoon/miniconda3/envs/genesis/lib/python3.12/threading.py", line 1012, in runself._target(*self._args, **self._kwargs)File "/home/circlemoon/miniconda3/envs/genesis/lib/python3.12/site-packages/genesis/ext/pyrender/viewer.py", line 1126, in _init_and_start_appsuper(Viewer, self).__init__(File "/home/circlemoon/miniconda3/envs/genesis/lib/python3.12/site-packages/pyglet/window/xlib/__init__.py", line 168, in __init__super().__init__(*args, **kwargs)File "/home/circlemoon/miniconda3/envs/genesis/lib/python3.12/site-packages/pyglet/window/__init__.py", line 527, in __init__context = config.create_context(gl.current_context)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "/home/circlemoon/miniconda3/envs/genesis/lib/python3.12/site-packages/pyglet/gl/xlib.py", line 114, in create_contextreturn XlibContext(self, share)^^^^^^^^^^^^^^^^^^^^^^^^File "/home/circlemoon/miniconda3/envs/genesis/lib/python3.12/site-packages/pyglet/gl/xlib.py", line 149, in __init__raise gl.ContextException(msg)
pyglet.gl.ContextException: Could not create GL context

我在 WSL 中找到了此错误的原因:

由于 NVida 驱动程序映射到 WSL2 限制OpenGL 的版本为 3.1(如果使用 GPU 硬件进行渲染)

AND pyglet 自 v2.0 起需要 OpenGL 3.3+
在这里插入图片描述

因此,解决方案是使用软件渲染 OpenGL(带 PREFIX:LIBGL_ALWAYS_SOFTWARE=1 python xxx.py

AND 为了启用软件渲染,您需要使用以下命令

sudo add-apt-repository ppa:kisak/kisak-mesa (or ppa:oibaf/graphics-drivers)
sudo apt update && sudo apt upgrade -y

参考资料:pyglet/pyglet#1047 (评论)

以下是差异:

  • GPU 渲染在这里插入图片描述

  • SOFTWARE 渲染在这里插入图片描述

【OPEN】OpenGL.error.Error: 在没有有效上下文时尝试检索上下文

但我遇到了另一个问题

虽然我渲染了一个 OpenGL 窗口,但内容是空的
在这里插入图片描述

下面是输出:

Exception in thread Thread-2 (_init_and_start_app):
Traceback (most recent call last):File "/home/circlemoon/miniconda3/envs/genesis/lib/python3.12/threading.py", line 1075, in _bootstrap_innerself.run()File "/home/circlemoon/miniconda3/envs/genesis/lib/python3.12/threading.py", line 1012, in runself._target(*self._args, **self._kwargs)File "/home/circlemoon/miniconda3/envs/genesis/lib/python3.12/site-packages/genesis/ext/pyrender/viewer.py", line 1149, in _init_and_start_apppyglet.clock.tick()File "/home/circlemoon/miniconda3/envs/genesis/lib/python3.12/site-packages/pyglet/clock.py", line 528, in tickreturn _default.tick(poll)^^^^^^^^^^^^^^^^^^^File "/home/circlemoon/miniconda3/envs/genesis/lib/python3.12/site-packages/pyglet/clock.py", line 270, in tickself.call_scheduled_functions(delta_t)File "/home/circlemoon/miniconda3/envs/genesis/lib/python3.12/site-packages/pyglet/clock.py", line 217, in call_scheduled_functionsitem.func(now - item.last_ts, *item.args, **item.kwargs)File "/home/circlemoon/miniconda3/envs/genesis/lib/python3.12/site-packages/genesis/ext/pyrender/viewer.py", line 941, in _time_eventself.on_draw()File "/home/circlemoon/miniconda3/envs/genesis/lib/python3.12/site-packages/genesis/ext/pyrender/viewer.py", line 640, in on_drawself._render()File "/home/circlemoon/miniconda3/envs/genesis/lib/python3.12/site-packages/genesis/ext/pyrender/viewer.py", line 1086, in _renderretval = renderer.render(self.scene, flags, seg_node_map=seg_node_map)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "/home/circlemoon/miniconda3/envs/genesis/lib/python3.12/site-packages/genesis/ext/pyrender/renderer.py", line 141, in renderself._update_context(scene, flags)File "/home/circlemoon/miniconda3/envs/genesis/lib/python3.12/site-packages/genesis/ext/pyrender/renderer.py", line 899, in _update_contextp._add_to_context()File "/home/circlemoon/miniconda3/envs/genesis/lib/python3.12/site-packages/genesis/ext/pyrender/primitive.py", line 359, in _add_to_contextglVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, FLOAT_SZ * 3, ctypes.c_void_p(0))File "/home/circlemoon/miniconda3/envs/genesis/lib/python3.12/site-packages/OpenGL/latebind.py", line 63, in __call__return self.wrapperFunction( self.baseFunction, *args, **named )^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "/home/circlemoon/miniconda3/envs/genesis/lib/python3.12/site-packages/OpenGL/GL/VERSION/GL_2_0.py", line 469, in glVertexAttribPointercontextdata.setValue( key, array )File "/home/circlemoon/miniconda3/envs/genesis/lib/python3.12/site-packages/OpenGL/contextdata.py", line 58, in setValuecontext = getContext( context )^^^^^^^^^^^^^^^^^^^^^File "/home/circlemoon/miniconda3/envs/genesis/lib/python3.12/site-packages/OpenGL/contextdata.py", line 40, in getContextraise error.Error(
OpenGL.error.Error: Attempt to retrieve context when no valid context

我是使用这个方法解决的,原文链接。具体如下

我自己解决了问题(windows 11、wsl2),只需升级 opengl,最新版本就可以是 4.5。
“OpenGL.error.Error:在没有有效上下文时尝试检索上下文”

sudo add-apt-repository ppa:kisak/kisak-mesa
sudo apt update
sudo apt upgrade

并使用直接渲染:

export LIBGL_ALWAYS_INDIRECT=0

现在使用命令检查您的 OpenGL 版本:

glxinfo -B

在这里插入图片描述
在这里插入图片描述

现在我可以看到这个场景,但它没有快速出现在屏幕上,我不知道为什么。

pytorch_217">安装pytorch

PyTorch
点击官方链接,之后请根据自己需要选择的版本进行安装。
在这里插入图片描述

安装cuda

这个可能是我个人的问题,仅供参考
【CUDA】Ubuntu系统如何安装CUDA保姆级教程(2022年最新)_ubuntu安装cuda-CSDN博客

消除警告

以下为我利用AI解决问题的方案
在 WSL2 的 Ubuntu 24.04 中运行你的代码时,出现以下警告:

[W 12/31/24 09:31:01.044 9868] [cuda_driver.cpp:load_lib@36] libcuda.so lib not found.
[W 12/31/24 09:31:01.045 9868] [misc.py:adaptive_arch_select@758] Arch=[<Arch.cuda: 3>] is not supported, falling back to CPU

这表明 WSL2 无法找到 CUDA 驱动库 (libcuda.so),因此程序回退到 CPU 模式运行。以下是问题的原因和解决方法:


1. 问题原因

  • WSL2 的 CUDA 支持:WSL2 支持 CUDA,但需要正确安装 NVIDIA 驱动和 CUDA 工具包。
  • 缺少 libcuda.solibcuda.so 是 NVIDIA CUDA 驱动的核心库。如果未正确安装或配置,WSL2 将无法找到它。

2. 解决方法

步骤 1:确保 Windows 上安装了 NVIDIA 驱动
  1. 打开 Windows 设备管理器,检查是否有 NVIDIA 显卡,并确保已安装最新驱动。
  2. 下载并安装最新的 NVIDIA 驱动:
    • 访问 NVIDIA 驱动下载页面。
    • 选择你的显卡型号和操作系统,下载并安装驱动。
步骤 2:在 WSL2 中安装 CUDA 工具包
  1. 打开 WSL2 的 Ubuntu 终端。
  2. 添加 NVIDIA CUDA 仓库并安装 CUDA 工具包:
    wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.1-1_all.deb
    sudo dpkg -i cuda-keyring_1.1-1_all.deb
    sudo apt update
    sudo apt install cuda-toolkit
    
  3. 安装完成后,验证 CUDA 是否安装成功:
    nvcc --version
    
步骤 3:设置环境变量

确保 WSL2 正确加载 CUDA 驱动库。在 ~/.bashrc~/.zshrc 中添加以下内容:

export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

然后运行以下命令使配置生效:

source ~/.bashrc
步骤 4:验证 libcuda.so 是否存在

检查 libcuda.so 是否已正确安装:

ls /usr/lib/wsl/lib/libcuda.so

如果文件存在,说明 CUDA 驱动已正确安装。

步骤 5:重新运行代码

重新运行你的代码,检查是否仍然出现警告:

import genesis as gs
gs.init(backend=gs.cuda)scene = gs.Scene(show_viewer=True)
plane = scene.add_entity(gs.morphs.Plane())
franka = scene.add_entity(gs.morphs.MJCF(file='xml/franka_emika_panda/panda.xml'),
)scene.build()for i in range(1000):scene.step()

3. 注意事项

  • WSL2 的 CUDA 支持:WSL2 的 CUDA 支持需要 Windows 11 和 NVIDIA 驱动版本 470 或更高。
  • GPU 资源限制:WSL2 中的 CUDA 性能可能不如原生 Linux 系统,因为 WSL2 是虚拟机环境。
  • 回退到 CPU:如果问题仍然存在,程序会回退到 CPU 模式运行,但性能会显著下降。

4. 进一步调试

如果问题仍未解决,可以尝试以下方法:

  1. 检查 WSL2 的 CUDA 支持是否启用:
    nvidia-smi
    
    如果命令未找到或没有输出,说明 CUDA 未正确配置。
  2. 更新 WSL2 到最新版本:
    wsl --update
    
  3. 确保 WSL2 的 Linux 内核是最新的。

鉴于作者水平有限,本文可能存在不足之处,欢迎各位读者提出指导和建议,共同探讨、共同进步。


http://www.ppmy.cn/news/1562121.html

相关文章

识日 1.2.8 | 完全免费的日语学习软件,小清新风格

识日是一款免费的日语学习软件&#xff0c;界面简洁美观&#xff0c;支持主题色设置。它提供了日语50音学习、单词查询、日语词典等功能&#xff0c;并有详细的发音和笔画展示。用户可以通过多种模式背单词&#xff0c;如快速模式、洗脑模式&#xff08;重复朗读单词&#xff0…

REVERSE-COMPETITION-CCSSSC-2025

REVERSE-COMPETITION-CCSSSC-2025 donntyouseeHappyLockkernel_traffic donntyousee elf64&#xff0c;ida反编译不太行&#xff0c;有花指令&#xff0c;直接调汇编 读输入 读输入前有条打印”plz input your flag”&#xff0c;肯定是在.init_array&#xff0c;确实有很多 …

vulhub-deathnote靶场实战

扫描靶机地址 访问网址访问不到&#xff0c;扫描端口 namp -sS -sV -T5 -A -p- 192.168.249.128 目录扫描&#xff1a; dirsearch -u 192.168.8.6 -i 200 gobuster gobuster dir -u http://192.168.8.6 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x …

AI赋能金融服务:效率与安全的新高度

引言 金融服务行业正经历着前所未有的变革。日益增长的客户需求、日趋复杂的金融产品以及日益严峻的监管环境&#xff0c;都对金融机构提出了更高的要求。它们面临着提升效率、有效管控安全风险以及优化用户体验等诸多挑战。传统的人工操作模式已难以满足快速发展的市场需求。…

『SQLite』SELECT语句查询数据

通过 SQLite 的 SELECT 语法从指定数据库表中查询数据。 查询数据 SELECT 语句查询数据。 查询案例 sqlite_master 表简介 该表是 SQLite 数据库用于存储创建表、索引等的一张表。 注意 上述内容详讲见文章&#xff1a;SQLite 的 SELECT 操作&#xff08;内含案例&#xff…

GAN的应用

5、GAN的应用 ​ GANs是一个强大的生成模型&#xff0c;它可以使用随机向量生成逼真的样本。我们既不需要知道明确的真实数据分布&#xff0c;也不需要任何数学假设。这些优点使得GANs被广泛应用于图像处理、计算机视觉、序列数据等领域。上图是基于GANs的实际应用场景对不同G…

golang中的 break label, goto label,continue label,break如何跳出多层循环

goto label goto 可以无条件的跳转执行的位置&#xff0c;但是不能跨函数。 label 不是代码块&#xff0c;可以理解为它是一个 position&#xff0c;直接跳到这个 position 然后接着向下运行。 func worker4() {fmt.Println(1)goto labelfmt.Println(2) label:fmt.Println(3…

H2数据库在单元测试中的应用

H2数据库特征 用比较简洁的话来介绍h2数据库&#xff0c;就是一款轻量级的内存数据库&#xff0c;支持标准的SQL语法和JDBC API&#xff0c;工业领域中&#xff0c;一般会使用h2来进行单元测试。 这里贴一下h2数据库的主要特征 Very fast database engineOpen sourceWritten…