ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Ubuntu 22.04 配置 Isaac Gym Preview 3 完整指南:从驱动到强化学习训练

Ubuntu 22.04 配置 Isaac Gym Preview 3 完整指南:从驱动到强化学习训练 1. 为什么值得折腾 Isaac Gym Preview 3如果你正在做机器人强化学习、灵巧手控制或者四足机器人运动策略训练大概率绕不开 Isaac Gym 这个名字。它把物理仿真和策略训练全部塞进 GPU 里跑相比传统 CPU 仿真的方案速度提升不是几倍的问题而是几十倍甚至上百倍的量级。Preview 3 是 NVIDIA 放出的第三个预览版本虽然官方后来主推的是 Isaac Lab 这条线但 Preview 3 因为接口简单、依赖清晰、社区资料多至今仍然是很多人入门 GPU 并行仿真的第一站。问题在于这个环境的配置过程对新手并不友好。Ubuntu 22.04 本身是个很稳的 LTS 版本但 Isaac Gym Preview 3 对 Python 版本、显卡驱动、CUDA 版本、GCC 版本都有比较挑剔的要求任何一个环节对不上轻则 import 报错重则直接段错误闪退。我在三台不同配置的机器上反复装过这个环境踩过的坑包括但不限于conda 环境里 Python 版本太高导致isaacgym找不到对应的.so文件、显卡驱动版本和 CUDA 运行时不匹配导致libcuda.so加载失败、系统 GCC 版本过新导致编译扩展时报 ABI 不兼容。这篇内容就是把这几次配置的完整过程整理出来从系统准备、驱动安装、conda 环境搭建到 Isaac Gym 的下载、安装、验证再到最常见的七八个报错的排查思路全部按实操顺序写清楚。适合两类人看一类是刚拿到带 NVIDIA 显卡的机器、准备入门 GPU 强化学习仿真的同学另一类是已经装了一半、卡在某个报错上找不到方向的开发者。我会尽量把每个步骤背后的原因讲明白这样你遇到变体问题时也能自己判断。2. 环境整体设计与版本选型思路2.1 为什么锁定 Ubuntu 22.04 而不是别的版本Isaac Gym Preview 3 官方推荐的系统就是 Ubuntu 18.04 和 20.0422.04 并不在官方明确支持的列表里。但现实是现在新买的机器预装或者大家习惯装的都是 22.04 LTS而且 22.04 的内核、glibc、Python 生态都更新长期来看更省心。实测下来 22.04 完全可以跑起来只是需要额外注意几个点系统自带的 GCC 是 11而 Isaac Gym 的一些预编译扩展对 GCC 版本比较敏感系统 Python 是 3.10而 Isaac Gym 官方 wheel 是针对 3.7 和 3.8 编译的。这两点决定了后面 conda 环境必须锁 Python 3.8并且要装一个 GCC 9 或者用 conda 自带的编译器。选 22.04 的另一个理由是显卡驱动。NVIDIA 对 22.04 的驱动支持很完善ubuntu-drivers工具能自动推荐合适的版本比手动下载.run文件省事得多。而且 22.04 的 apt 源里 CUDA toolkit 的版本也比较全装 CUDA 11.x 系列很方便而 Isaac Gym Preview 3 正好需要 CUDA 11.x。2.2 Python 版本为什么必须锁 3.8这是整个配置里最关键的一个决策点。Isaac Gym Preview 3 提供的isaacgymPython 包里面包含大量预编译的.so动态库这些库是针对 CPython 3.7 和 3.8 的 ABI 编译的。如果你用 Python 3.9 或 3.10import 的时候会直接报ModuleNotFoundError或者更隐蔽的ImportError: libpython3.8.so.1.0: cannot open shared object file。所以 conda 环境创建时必须指定python3.8这一点没有商量余地。有人会问能不能用 3.7可以但 3.7 已经停止维护很多新一点的依赖包不再支持而且 PyTorch 新版本也逐步放弃 3.7。所以 3.8 是平衡点既能满足 Isaac Gym 的 ABI 要求又能用上比较新的 PyTorch 和 numpy。2.3 显卡驱动与 CUDA 的匹配逻辑Isaac Gym 依赖 CUDA 来做 GPU 上的物理计算所以显卡驱动必须支持对应的 CUDA 版本。这里有个容易混淆的点显卡驱动版本决定了你最高能用的 CUDA 版本而不是反过来。比如驱动 525 系列最高支持 CUDA 12.0驱动 470 系列最高支持 CUDA 11.4。Isaac Gym Preview 3 需要 CUDA 11.x所以驱动版本只要不低于 470 就行。我一般推荐装 525 或者 535 系列的驱动这两个版本在 22.04 上很稳而且对 30 系、40 系显卡支持都好。装完驱动后nvidia-smi右上角会显示CUDA Version: 12.x这只是说驱动支持到 12.x不代表你系统里装了 CUDA 12。真正的 CUDA toolkit 是后面单独装的装 11.7 或 11.8 都可以。2.4 整体配置流程一览把整个流程拆成六个阶段后面按这个顺序展开阶段主要任务关键产出系统准备更新源、装基础工具干净的 22.04 环境显卡驱动安装 NVIDIA 驱动nvidia-smi 正常输出CUDA 安装装 CUDA 11.x toolkitnvcc 可用Conda 环境创建 Python 3.8 环境隔离的依赖空间Isaac Gym下载、安装、验证能跑通示例问题排查处理常见报错稳定可用的环境这个顺序不能乱尤其是驱动和 CUDA 必须在 conda 环境之前搞定否则后面 PyTorch 装上了也调不动 GPU。3. 系统准备与显卡驱动安装实操3.1 更新系统源与安装基础依赖拿到一台刚装好的 Ubuntu 22.04第一件事是换源和更新。国内网络环境下默认的 archive.ubuntu.com 速度可能很慢换成清华或者阿里的镜像源会快很多。编辑/etc/apt/sources.list把里面的http://archive.ubuntu.com和http://security.ubuntu.com替换成镜像地址然后执行更新。sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i s|http://archive.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g /etc/apt/sources.list sudo sed -i s|http://security.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g /etc/apt/sources.list sudo apt update sudo apt upgrade -y更新完之后装一批基础工具这些在后面编译和调试时都会用到sudo apt install -y build-essential cmake git wget curl vim \ libgl1-mesa-glx libglib2.0-0 libsm6 libxext6 libxrender-dev \ libomp-dev pkg-config这里libomp-dev特别重要Isaac Gym 的并行计算依赖 OpenMP缺了它运行时会报libgomp相关的错误。libgl1-mesa-glx这些是渲染相关的库Isaac Gym 的 viewer 需要它们来显示仿真画面。注意不要急着装系统自带的nvidia-driver-*包先确认显卡型号和推荐的驱动版本避免装错版本后又要卸载重装。3.2 确认显卡型号与推荐驱动先用lspci看看显卡型号lspci | grep -i nvidia输出会类似01:00.0 VGA compatible controller: NVIDIA Corporation GA104 [GeForce RTX 3070]。记下型号然后用ubuntu-drivers工具查看推荐驱动sudo apt install -y ubuntu-drivers-common ubuntu-drivers devices输出里会列出可用的驱动版本其中标了recommended的那个就是系统推荐的。比如 3070 上可能推荐nvidia-driver-535。如果你想用更新的驱动也可以手动指定但建议先用推荐的稳定性有保障。3.3 安装驱动并验证确认好版本后直接安装sudo apt install -y nvidia-driver-535装完必须重启因为驱动是内核模块不重启不生效sudo reboot重启后验证nvidia-smi正常的话会输出一个表格显示显卡型号、驱动版本、CUDA 支持版本、显存占用等信息。如果报command not found说明驱动没装好或者 PATH 有问题如果报Failed to initialize NVML通常是驱动版本和内核不匹配需要检查是否装了linux-headers对应的版本。实操心得如果之前装过其他版本的驱动先用sudo apt purge nvidia-*清理干净再装否则容易出现多个版本共存导致加载混乱。清理后记得sudo apt autoremove把残留依赖也删掉。3.4 安装 CUDA 11.x Toolkit驱动装好后装 CUDA toolkit。Isaac Gym Preview 3 用 CUDA 11.7 或 11.8 都可以我一般选 11.7因为和 PyTorch 1.13 的官方 wheel 匹配得最好。去 NVIDIA 官网下载 runfile 或者用 apt 源安装都行apt 方式更干净wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb sudo dpkg -i cuda-keyring_1.0-1_all.deb sudo apt update sudo apt install -y cuda-toolkit-11-7装完后配置环境变量编辑~/.bashrc在末尾加上export PATH/usr/local/cuda-11.7/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda-11.7/lib64:$LD_LIBRARY_PATH然后source ~/.bashrc验证nvcc --version能输出版本信息就说明 CUDA toolkit 装好了。注意nvcc的版本和nvidia-smi显示的 CUDA 版本不是一回事前者是你装的 toolkit 版本后者是驱动支持的最高版本两者不需要相等。4. Conda 环境搭建与 Isaac Gym 安装4.1 创建 Python 3.8 的隔离环境前面强调过 Python 版本必须锁 3.8这里用 conda 来创建。如果你还没装 conda先装 Minicondawget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh一路回车装完后source ~/.bashrc让 conda 生效。然后创建环境conda create -n isaacgym python3.8 -y conda activate isaacgym环境激活后python --version应该显示 3.8.x。接着装 PyTorchIsaac Gym 需要 PyTorch 来做策略网络的训练版本选 1.13.1 配 CUDA 11.7pip install torch1.13.1cu117 torchvision0.14.1cu117 \ --extra-index-url https://download.pytorch.org/whl/cu117装完验证 PyTorch 能不能调用 GPUpython -c import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))输出True和显卡型号就对了。如果输出False说明 PyTorch 没找到 CUDA检查 CUDA 环境变量和 PyTorch 版本是否匹配。4.2 下载 Isaac Gym Preview 3Isaac Gym 需要从 NVIDIA 开发者网站下载直接给下载链接。下载下来是一个压缩包IsaacGym_Preview_3_Package.tar.gz解压到合适的位置比如~/isaacgymmkdir -p ~/isaacgym tar -xzvf IsaacGym_Preview_3_Package.tar.gz -C ~/isaacgym cd ~/isaacgym/isaacgym解压后的目录结构里python/下面是 Python 包docs/是文档examples/是示例代码。4.3 安装 isaacgym Python 包进入python目录用 pip 安装cd ~/isaacgym/isaacgym/python pip install -e .-e是 editable 模式这样你修改源码后不用重新安装。安装过程会编译一些扩展需要几分钟。如果报编译错误大概率是 GCC 版本问题后面排查部分会讲。装完后验证python -c import isaacgym; print(isaacgym.__version__)能打印出版本号就说明包安装成功了。如果报ImportError看具体缺哪个.so通常是libpython3.8.so.1.0找不到这时候需要确认 conda 环境是否激活以及LD_LIBRARY_PATH是否包含 conda 环境的 lib 目录。4.4 运行示例验证环境Isaac Gym 自带了很多示例最经典的是joint_monkey.py它展示了一个关节机器人做随机运动cd ~/isaacgym/isaacgym/examples python joint_monkey.py如果一切正常会弹出一个窗口里面有个机器人在动。第一次运行可能会卡几秒因为要编译 CUDA kernel。如果窗口没弹出来但终端没报错可能是 viewer 的问题试试加--headless参数跑无头模式看能不能正常跑完。再跑一个强化学习的例子比如rlgames里的traincd ~/isaacgym/isaacgym/python/rlgames python train.py taskCartpole这个会启动训练终端会打印 reward 和 episode 信息。能跑起来就说明整个环境完全通了。注意跑示例时如果报CUDA out of memory说明显存不够可以减小num_envs参数比如python train.py taskCartpole num_envs512。默认的 4096 个环境对显存要求比较高8G 显存的卡建议降到 1024 或 512。5. 常见错误与排查技巧实录5.1 ImportError: libpython3.8.so.1.0 找不到这是最高频的报错原因是 Python 解释器找不到 conda 环境里的动态库。解决方法是在~/.bashrc里加上 conda 环境的 lib 路径export LD_LIBRARY_PATH$CONDA_PREFIX/lib:$LD_LIBRARY_PATH$CONDA_PREFIX是 conda 激活后自动设置的变量指向当前环境的根目录。加完后source ~/.bashrc重新激活环境再试。如果还不行用ldd检查具体缺哪个库ldd $(python -c import isaacgym; print(isaacgym.__file__))看输出里有没有not found的项针对性补上。5.2 编译扩展时报 GCC 版本不兼容Isaac Gym 的一些扩展对 GCC 版本敏感22.04 自带的 GCC 11 可能报error: ‘numeric_limits’ is not a member of ‘std’之类的错误。解决办法是装一个 GCC 9 并切换sudo apt install -y gcc-9 g-9 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 sudo update-alternatives --install /usr/bin/g g /usr/bin/g-9 90切换后gcc --version应该显示 9.x。如果不想动系统默认编译器也可以在 conda 环境里装gcc_linux-649和gxx_linux-649这样只影响当前环境。5.3 nvidia-smi 报 Failed to initialize NVML这个报错通常是驱动和内核不匹配。先确认内核版本uname -r然后检查是否装了对应版本的linux-headerssudo apt install -y linux-headers-$(uname -r)装完重新加载驱动模块sudo modprobe nvidia如果还不行可能是 Secure Boot 在作怪它阻止了未签名的内核模块加载。进 BIOS 关掉 Secure Boot或者给驱动模块签名。关 Secure Boot 是最省事的办法。5.4 运行示例时 viewer 窗口黑屏或闪退这个多半是 OpenGL 渲染的问题。先确认libgl1-mesa-glx装了然后试试用软件渲染export LIBGL_ALWAYS_SOFTWARE1 python joint_monkey.py如果软件渲染能跑说明是显卡驱动和 OpenGL 的兼容问题可能需要重装驱动或者装libglvnd相关包。另外如果是通过 SSH 连的远程机器viewer 是弹不出来的必须用--headless模式跑。5.5 CUDA out of memory 的应对显存不够是最常见的运行时问题。Isaac Gym 默认会开很多并行环境显存占用和num_envs成正比。排查思路现象可能原因解决方法启动就 OOMnum_envs 太大降到 512 或 256训练中途 OOM显存泄漏或 batch 太大减小 batch_size检查代码多进程 OOM多个训练同时跑串行跑或限制每个进程显存可以用nvidia-smi -l 1实时监控显存占用找到峰值出现的时机。5.6 常见问题速查表把上面这些整理成一张表方便快速定位报错关键词根因快速修复libpython3.8.so.1.0LD_LIBRARY_PATH 缺 conda lib加环境变量numeric_limits not memberGCC 版本过新切 GCC 9Failed to initialize NVML驱动/内核不匹配装 headers 或关 Secure Bootviewer 黑屏OpenGL 问题软件渲染或重装驱动CUDA out of memory显存不足减 num_envslibgomp.so.1 not found缺 OpenMP装 libomp-devundefined symbolABI 不匹配确认 Python 3.8实操心得每次改完环境变量或者切换编译器都要重新开一个终端或者source ~/.bashrc否则改动不生效。我踩过好几次坑改完 LD_LIBRARY_PATH 忘了 source结果一直以为没改对。6. 环境验证与后续扩展建议6.1 完整验证清单环境装完后按这个清单逐项验证全过就说明没问题nvidia-smi正常输出显卡信息nvcc --version显示 CUDA 11.7python --version显示 3.8.xpython -c import torch; print(torch.cuda.is_available())输出 Truepython -c import isaacgym无报错python joint_monkey.py能弹出窗口python train.py taskCartpole能开始训练这七步里任何一步失败回到对应章节排查。全部通过后这个环境就可以用来跑你自己的强化学习任务了。6.2 和 Isaac Lab 的关系NVIDIA 现在主推的是 Isaac Lab它基于 Isaac Sim 构建功能更全但依赖也更重。Isaac Gym Preview 3 虽然不再更新但胜在轻量、启动快、代码简单适合学习和快速验证想法。如果你只是想做算法实验Preview 3 完全够用如果要上生产或者需要更真实的渲染再考虑迁移到 Isaac Lab。两者在 API 上有不少相似之处从 Preview 3 学到的概念可以平滑过渡。6.3 性能调优的几个方向环境跑通只是第一步真正用起来还要调性能。几个实用的方向一是调整num_envs找到显存和吞吐的平衡点通常 4096 是个不错的起点二是开--headless模式跑训练省下渲染开销三是用torch.backends.cudnn.benchmark True让 cuDNN 自动选最优卷积算法四是把数据加载和训练分开避免 IO 成为瓶颈。这些调优手段在官方文档里讲得不多但实际用起来效果很明显。我在实际使用中的体会是Isaac Gym 的环境配置难点主要集中在版本匹配上只要 Python 锁 3.8、GCC 用 9、CUDA 用 11.x、驱动别太旧基本不会出大问题。真正花时间的往往是那些隐蔽的运行时错误比如显存不够或者渲染库缺失这些只能靠多跑示例、多看报错信息来积累经验。建议装好环境后先别急着写自己的代码把官方示例挨个跑一遍对每个示例的依赖和表现有个底后面遇到问题心里就有数了。
返回列表