Isaac Lab 的 Docker 部署,是我今年搞过的几个技术活里回报率最高的一件。最开始在一台 Ubuntu 工作站上按官方文档直接装 Isaac Sim,前后折腾了快两周:Omniverse Kit 的依赖崩完三次,系统 pip 被污染两次,最后因为一次 apt upgrade 把 NVIDIA 驱动搞挂,彻底心态爆炸。后来换成 Docker 路线,同样的环境我只需要一条 docker run 配齐,换机器、换版本、销毁重建都是分钟级。这篇就把 Isaac Lab + Docker 的部署链路里那些文档没讲透的地方完整过一遍:镜像怎么选、参数为什么这么写、缓存目录哪些必须挂出来、第一个实验怎么验证,以及我在真实踩坑中总结的排查思路。适合两类人:一是刚被原生安装折磨到怀疑人生的朋友,二是想在无显示器的服务器上无头跑 Isaac Lab 训练、又不想污染宿主环境的团队。
1. 部署 Isaac Lab 前:先想清楚 Docker 解决的是什么问题
1.1 原生安装 Isaac Sim 的血泪史
先说说为什么我会转向 Docker。Isaac Sim 本质上不是一个 pip install 就能搞定的 Python 库,它是基于 Omniverse Kit 搭建的一整套仿真应用,下面挂着 PhysX、USD、cuDNN、TensorRT 这一堆版本锁死的原生库,还要求特定版本的 Python(4.x 系列基本锁定 3.10)。在裸机上装,等于把这一整套依赖全部塞进你自己的系统,跟现有环境打架是迟早的事。
我第一次装就踩了个经典坑:系统自带 Python 3.8,官方包装不上,于是开了个 conda 环境。结果 conda 里的 Python 和 Omniverse 自带的解释器互相干扰,import omni.isaac.core 的时候直接报 DSO load 错误,怎么都查不清是哪个 .so 文件版本不对。后来换了一台干净 Ubuntu 22.04 才总算跑起来,但为了给 Isaac Sim 让路,那台机器别的深度学习项目都不敢乱动了。最崩溃的是,某次升级驱动后整个环境再次报废,检查一遍发现完全没有回滚手段。这种时候才意识到:仿真环境的依赖地狱,单靠手工管理是没有出路的。
1.2 Docker 方案的核心优势与边界
Docker 解决的核心问题就四个字:环境隔离。官方已经在 nvcr.io 上维护了 Isaac Sim 的现成镜像,CUDA、OpenGL、Omniverse 依赖全部预装好,你不需要知道它内部是怎么编译的,只需要确保宿主机的 NVIDIA 驱动和 toolkit 能配合就行。
实际用下来,Docker 还有几个原生安装比不了的好处。第一是可复现:团队里每个人 pull 同一个 tag,跑出来的行为基本一致,"在我机器上是好的"这种话直接失去意义。第二是版本共存:我本地同时放过 Isaac Sim 4.1 和 4.2 两个容器,互不干扰,想对比哪个版本行为更稳定就分别启动。第三是卸载干净:docker rm 一删,整个环境消失,不会在系统里留下一堆残留依赖。
但它也有明确的边界,别指望它解决所有问题。首先宿主机必须有 NVIDIA GPU,驱动版本不合适照样白搭;其次容器里的图形界面天生有显示问题,要么做 X11 转发,要么走 VNC,要么干脆无头模式;最后,Docker 只解决运行环境,强化学习算法本身还是得你自己调,环境装好只是万里长征第一步。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Docker 环境准备:硬件、驱动与容器运行时
2.1 硬件底线与软件版本对照
先说硬件。别看到 Docker 就觉得省资源,Isaac Sim 是一个吃显卡的大户,8GB 显存的卡跑 Cartpole、Ant 这类简单任务够用,但真要上机械臂操作或者人形机器人,建议 16GB 起步,否则并行环境数量上不去,训练效率会很难看。内存建议 32GB,16GB 会很紧张,尤其是开启渲染的时候。磁盘是经常被忽略的坑:镜像压完十几个 GB,解压后更大,加上 shader 缓存和训练日志,至少留 80GB 到 100GB 比较稳妥。
软件版本我直接列个表,照着核对就行:
| 组件 | 建议 | 说明 |
|---|---|---|
| 操作系统 | Ubuntu 20.04 / 22.04 | 22.04 最省心,文档支持也最全 |
| NVIDIA 驱动 | 535 及以上 | 以你所用 Isaac Sim 对应的 CUDA 版本为准,nvidia-smi 确认 |
| Docker Engine | 24 及以上 | 太老的版本对 --gpus 支持不完整 |
| NVIDIA Container Toolkit | 最新稳定版 | 宿主机装一次即可,容器不需要重复装 |
| Isaac Sim 镜像 | 4.x 具体 tag | 必须和 Isaac Lab 分支严格对齐,见第 4 章 |
2.2 Linux 下安装 Docker 与 NVIDIA Container Toolkit
Linux 是本篇的主场,命令直接抄:
bash复制# 1. 安装 docker engine
curl -fsSL https://get.docker.com | bash
# 2. 当前用户加入 docker 组,避免每条命令都 sudo
sudo usermod -aG docker $USER
newgrp docker
# 3. 安装 NVIDIA Container Toolkit
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
# 4. 重启 docker daemon 使 runtime 生效
sudo systemctl restart docker
装完必须做一步验证,确认 GPU 真的能被容器看到:
bash复制docker run --rm --gpus all nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smi
如果能看到显卡信息表格,说明 GPU 透传已经通了。这一步千万别跳,后面所有问题里,最难受的就是容器起来之后 GPU 不可用。
这里解释一下原理:Docker daemon 本身根本不知道 GPU 是什么东西,nvidia-container-toolkit 做的事情是在 runc 创建容器之前注入一个 hook,把宿主机上的 GPU 设备和驱动库按需挂载进容器。所以 toolkit 没装或者 daemon 没重启,docker run 就算加了 --gpus all 也会直接报错。
2.3 Windows 用户走 WSL2 与 Docker Desktop 的注意点
Windows 不是主线,但不少同学确实是在 Windows 上做开发验证。建议路线是 WSL2 + Docker Desktop,而不是 Docker Desktop 的 Windows 容器模式,因为 Isaac Sim 需要 Linux 容器。
很多人在这一步卡在著名的报错:"Docker Desktop failed to start because virtualisation support wasn't detected"。这个基本就是 BIOS 里没开虚拟化。解决路径:重启进 BIOS,打开 Intel VT-x 或 AMD SVM;然后在 Windows 功能里勾选"适用于 Linux 的 Windows 子系统"和"虚拟机平台";最后在管理员 PowerShell 里跑 wsl --update 把 WSL 内核更新到新版。
GPU 方面有个好消息:Windows 下只需要装普通的 NVIDIA Game Ready 或 Studio 驱动,WSL2 内部会自动获得 CUDA 支持,不需要在 WSL 里再装独立驱动。真正要注意的是文件存放位置:项目仓库千万别放在 /mnt/c/ 下面,跨文件系统 IO 对 Isaac Sim 这种大量小文件的应用来说慢到难以忍受。把代码放在 WSL 自己的文件系统里,比如 ~/isaaclab,体验会好非常多。
3. 拉取 Isaac Sim 镜像并启动容器:关键挂载与参数逐项拆解
3.1 先选对镜像 Tag:这个错一步,后面全白搭
镜像源只有一个标准答案:nvcr.io/nvidia/isaac-sim。注意这不是 Docker Hub,是 NVIDIA 自己的容器仓库,pull 的时候路径前缀一定要带全。
tag 的选择是整条部署链路上最容易被忽略、但后果最严重的一步。不要无脑用 latest,因为 Isaac Lab 每个发布版本都会锁定一个经过测试的 Isaac Sim 版本,两者是一一对应的关系。我的做法是先去 IsaacLab 仓库的 README 里看 Compatibility 矩阵,确认镜像是 4.2.0 还是 4.5.0,再决定 pull 哪个 tag。拉取命令:
bash复制docker pull nvcr.io/nvidia/isaac-sim:4.2.0
版本对不上的典型症状是:容器能启动,但 Isaac Lab 脚本 import 阶段直接报错,或者是完全不兼容的警告。这类问题排查起来非常浪费时间,所以把选 tag 放在第一步,成本最低。
3.2 docker run 完整命令与参数拆解
我常用的启动命令如下,建议先照着跑通,再根据自己情况裁剪:
bash复制docker run --name isaac-lab \
--gpus all \
-it \
--network host \
--ipc host \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=$DISPLAY \
-v ~/isaaclab:/workspace/isaaclab \
-v ~/docker/isaac-sim/cache/kit:/isaac-sim/kit/cache:rw \
-v ~/docker/isaac-sim/cache/ov:/root/.cache/ov:rw \
-v ~/docker/isaac-sim/cache/pip:/root/.cache/pip:rw \
-v ~/docker/isaac-sim/cache/glcache:/root/.cache/glcache:rw \
-v ~/docker/isaac-sim/cache/computecache:/root/.cache/computecache:rw \
-v ~/docker/isaac-sim/logs:/root/.nvidia-omniverse/logs:rw \
-v ~/docker/isaac-sim/data:/root/.local/share/ov/data:rw \
nvcr.io/nvidia/isaac-sim:4.2.0
每个参数的作用,我按重要程度讲:
--gpus all 不用说,不写这个容器就看不到 GPU,训练直接变 CPU 慢动作。--network host 是把容器网络直接挂在宿主机上,这个参数对 Isaac Sim 很关键,因为 Omniverse 框架内部有大量本地服务需要互通端口,host 模式可以省掉一堆端口映射和连不上服务的诡异问题。--ipc host 是共享宿主机的 IPC 命名空间,PyTorch 的多进程数据加载和 RL 训练采样都重度依赖共享内存,不设这个后期容易出问题。
然后是 X11 图形转发,-v /tmp/.X11-unix 和 -e DISPLAY=$DISPLAY 这两行配合使用,才能让本机有显示器的用户直接看到仿真窗口。如果你的机器没有显示器,直接把这两行去掉,走后面的 VNC 方案或者无头模式。
3.3 无显示器服务器的 VNC 远程可视化方案
在机房或者云服务器上跑的时候,最尴尬的是想看渲染效果却没屏幕。官方镜像里其实内置了 noVNC 支持,启动容器时加上两个参数:
bash复制docker run --name isaac-lab --gpus all -it \
-e VNC=1 -p 6080:6080 \
<上面提到的挂载参数> \
nvcr.io/nvidia/isaac-sim:4.2.0
然后本地浏览器打开 http://宿主机IP:6080 就能看到一个网页版桌面,里面可以直接操作 Isaac Sim 界面。这个方法对远程调试特别友好,我用它在一台没有显示器的 4090 服务器上确认过渲染效果完全正常。不过要提醒一句:VNC 模式会额外消耗资源,如果只做训练验证,用无头模式就足够,没必要一直开着远程桌面。
3.4 缓存目录为什么要全部挂载出来
上面命令里那好几行 cache 挂载,是我认为最值得展开讲的细节。Isaac Sim 首次启动会编译渲染 shader、生成 Vulkan/PhysX 缓存,这些文件零零散散分布在镜像内的多个目录里。如果不挂载出来,每次 docker rm 之后重新 docker run,所有缓存清空,又要重新编译一遍,第一次启动等 10 到 20 分钟是常事,极其劝退。
把这些目录映射到宿主机之后,只要镜像 tag 不变,缓存直接命中,秒进界面。另外多容器共享同一份缓存也能省不少磁盘。我自己习惯在宿主机建一个 ~/docker/isaac-sim/ 目录统一管理这些缓存,重装系统也不慌。
4. 在容器里安装 Isaac Lab:官方脚本的隐藏逻辑
4.1 获取源码与目录规划
进入容器之后(docker exec -it isaac-lab bash),第一步是把 Isaac Lab 源码准备好。注意这个仓库的名字改成过,早期叫 orbit,现在叫 IsaacLab,clone 的时候用最新路径:
bash复制cd /workspace
git clone https://github.com/isaac-sim/IsaacLab.git
cd IsaacLab
git checkout v2.0.0 # 以官网最新 Compatibility 表为准
目录规划方面,我的建议是源码挂载而不是在容器里 clone。上面 docker run 命令里 -v ~/isaaclab:/workspace/isaaclab 已经把宿主机的 ~/isaaclab 挂进去了,所以你其实可以直接在宿主机 git clone,然后容器内直接使用。这样做的好处后面会讲到,核心是为了"宿主机改代码、容器里跑"的开发循环。
4.2 isaaclab.sh 脚本背后做了什么
Isaac Lab 提供了一个统一的入口脚本 isaaclab.sh,Windows 下对应 isaaclab.bat。安装命令很简单:
bash复制./isaaclab.sh --install
但这行命令背后做了不少事,我拆开讲一下,免得你等安装的时候胡思乱想。脚本会先检查系统里的 Python 版本,在仓库根目录创建一个 .venv 虚拟环境;然后根据版本配置文件安装指定 CUDA 版本的 PyTorch;接着 clone rl_games、rsl_rl、sb3 这些强化学习训练库并装进环境;最后把 Isaac Lab 的核心扩展以 editable 模式注册进 venv,这样你后续改源码不用重新安装。
注意一个小细节:如果你按我的方式把源码挂载在宿主机的 ~/isaaclab,那么 .venv 也会创建在宿主机文件系统里。这本身不是问题,但意味着换镜像 tag(比如从 4.2 升级到 4.5)之后,这个 venv 很可能不再兼容,属于正常现象,删掉重装就行,别怀疑是自己操作错了。
另外脚本里的 -p 参数很实用:./isaaclab.sh -p script.py 表示用项目自带的 Python 解释器运行脚本,你不用手动 source 环境。后面所有实验命令我都会用这种写法。
4.3 验证安装是否成功
安装完成先别急着跑实验,花两分钟做个 sanity check。官方的验证命令是:
bash复制./isaaclab.sh --test
这行会执行一系列 import 检查和多环境创建测试,输出里如果全部通过,说明核心链路是通的。另外一个快速验证方式是列出可用任务:
bash复制./isaaclab.sh -p scripts/tools/list_tasks.py | head -50
能看到一串 Isaac- 开头的任务名就说明扩展注册成功了。如果这一步报错,大概率是版本不匹配,回到 3.1 章重新核对 tag。
5. 跑通第一个实验:从训练到看渲染
5.1 用 Cartpole 验证强化学习闭环
环境都通了,第一个实验强烈建议用 Cartpole,这是 Isaac Lab 里最小最简单的任务,单次迭代只要几秒钟,非常适合当部署完成度测试。训练命令:
bash复制./isaaclab.sh -p scripts/reinforcement_learning/rl_games/train.py \
--task Isaac-Cartpole-RLamp \
--headless \
--max_iterations 200
--headless 的意思是关闭渲染,但物理仿真照常进行。很多人会疑惑:训练不用渲染不影响效果吗?其实强化学习采样和 GPU 物理仿真是核心,渲染只是把结果画出来看,无头模式完全不影响训练结果,反而省掉图形栈的资源开销。
启动后盯两个指标:平均 reward 是否在往上走,以及每个 iteration 耗时是否稳定。如果一切正常,你会看到日志里 reward 从 0 附近逐步爬升,同时 GPU 利用率(用 nvidia-smi 查看)保持在较高水平。训练结束后,checkpoint 和日志会落在 logs/rl_games/ 目录下,路径会在启动日志里打印出来,检查一下确保它落在挂载卷里。
5.2 训练完怎么看效果
训练出 checkpoint 之后,很多人想先看看策略跑起来是什么效果。Isaac Lab 的 scripts 目录里提供了查看策略的脚本,我常用的命令是:
bash复制./isaaclab.sh -p scripts/enjoy_task.py \
--task Isaac-Cartpole-RLamp \
--checkpoint /path/to/your/checkpoint.pt
注意这次不要再加 --headless,否则画面出不来。确保你的容器是通过 X11 或 VNC 方式启动的,能看到渲染窗口后才能确认策略行为。如果加了 --headless 但不小心跑起来了,程序其实在正常工作,只是没有画面,别误以为是卡死。
命令行里会实时打印每步的观测和奖励。Cartpole 训练良好的策略应该能让杆子长时间不倒,如果几秒就倒下,通常是训练不够或者超参数没调好,这是算法问题,不是部署问题。
5.3 无头模式下训练与日志检查
在无显示器服务器上训练,核心方案就是无头模式。除了脚本加 --headless 参数,你不需要任何额外配置。但有几个检查习惯要养成:训练启动后,在另一个终端用 docker exec -it isaac-lab bash 进入容器,tail -f 一下日志文件确认状态;同时用 nvidia-smi 确认 GPU 确实在工作,确保不是容器没拿到 GPU 而用 CPU 硬跑。
还有一条血泪教训:日志和 checkpoint 必须落在挂载卷里。如果项目源码是通过 -v 挂载进去的,默认日志目录也在源码下,这个没问题;但如果容器里某些工具把输出写到 /root 或其它临时目录,一旦容器被删除,数据直接消失。所以训练开始前花一分钟确认输出路径,比事后后悔强一百倍。
6. 真实部署中高频踩坑记录:从启动报错到性能问题
6.1 GPU 无法识别与 nvidia-smi 失效
这个坑我见过太多次了,症状是 docker run --gpus all 直接报错:could not select device driver "" with capabilities: [[gpu]]。先别怀疑硬件,大概率是 toolkit 没装或者 daemon 没重启,按这个链路排查:
- 宿主机跑 nvidia-smi,如果不正常,先修宿主机驱动;
- docker info | grep -i runtime,确认输出里有 nvidia runtime;
- docker run --rm --gpus all nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smi 验证容器内 GPU 可见性;
- 第 3 步报错就重装 nvidia-container-toolkit 并 systemctl restart docker。
如果是多卡机器,想指定某张 GPU 给某个容器,用环境变量 NVIDIA_VISIBLE_DEVICES=0 或 NVIDIA_VISIBLE_DEVICES=1,这个变量会覆盖 --gpus all 的默认行为。
6.2 显示链接失败与 EGL/OpenGL 报错
容器里跑 GUI 相关的报错种类很多,我把最常见的几种和对应的解法列出来:
| 报错特征 | 原因 | 解决 |
|---|---|---|
| Cannot connect to X server :0 | X11 socket 没挂载或 DISPLAY 不对 | 检查 -v /tmp/.X11-unix 和 -e DISPLAY=$DISPLAY,宿主机执行 xhost +local:docker |
| libGL error: failed to open swrast | 软件渲染失败,通常意味着 GPU 没进容器 | 回 6.1 查 GPU 透传 |
| VK_ERROR_INITIALIZATION_FAILED | Vulkan 初始化失败 | 优先换无头模式训练,绕开渲染栈 |
| Windows WSL2 下画面黑屏 | DISPLAY 没走 WSLg | 确认 wsl --update,检查 WSLg 提供的 DISPLAY 变量是否被覆盖 |
最省心的原则是:训练一律无头模式,只在需要看效果的时候才开图形界面。这样能绕开 90% 的显示相关报错。
6.3 版本不匹配导致的 ImportError
这个坑在 3.1 章已经预警过,但这里还是要专门给一条排查链路,因为报错信息非常容易误导人。典型症状是各种 ModuleNotFoundError,比如 isaacsim.xxx 找不到、omni.isaac.core 找不到,或者直接提示 Isaac Lab 与 Isaac Sim 版本不兼容。
排查顺序:
- 打开 IsaacLab 仓库 README,确认当前分支对应的 Isaac Sim 版本,对照你 pull 的镜像 tag;
- 查看 IsaacLab 的 VERSION 或 setup.py 里写的兼容信息;
- 如果确实不匹配,git checkout 到兼容的分支,然后 rm -rf .venv,重新 ./isaaclab.sh --install。
千万别试着改代码绕过版本检查,仿真框架内部接口变化很大,强行绕过只会引入更隐蔽的问题。版本对齐是这条路线唯一的捷径。
6.4 磁盘空间与镜像拉取慢的问题
镜像大是客观事实,十几个 GB 的镜像下载慢很正常。先说磁盘:用 docker system df 查看当前占用,docker system prune -a 可以清理没用到的镜像。特别提醒一下,/var/lib/docker 所在的系统盘一定要留够空间,否则容器运行中途磁盘写满,报错会非常莫名其妙。
拉取慢这个事,要注意一个误区:很多人给 Docker 配置 registry-mirror 加速源,但那个主要对 Docker Hub 的镜像生效。Isaac Sim 镜像是从 nvcr.io 拉取的,属于 NVIDIA 自己的仓库,镜像加速配置对它基本无效。实际可用的手段是:错峰下载、保持网络稳定、或者让团队内部的镜像仓库(比如 Harbor)提前做一次缓存,成员从内网拉取。对于个人用户,最实际的建议就是选一个网络平稳的时间段,一次下载完成,别中途反复断。
6.5 共享内存不足导致的随机报错
这个坑容易伪造成各种随机错误:训练中途 Bus error、DataLoader 报 unable to mmap、或者进程不明原因崩溃。根因是 Docker 默认给容器分配的 /dev/shm 只有 64MB,而 PyTorch 的多进程数据加载依赖共享内存。解法很简单,启动容器时加上 --shm-size=8g 或者更大。这个参数在官方文档里经常被一笔带过,但实际遇到时排查成本很高,我建议直接默认加上,没有副作用。
7. 让容器真正好用:日常开发与多项目隔离的落地技巧
7.1 用挂载卷固定训练产物与日志
环境跑通之后,下一步是把它变成能长期用的开发工具。我的目录规划是固定的:源码挂在 ~/isaaclab,缓存统一放 ~/docker/isaac-sim/cache,日志输出跟着训练项目走。这样无论容器怎么删、怎么重建,模型 checkpoint 和实验结果都在宿主机上留着。
如果你同时跑多个项目,不同的任务目录可以各自挂载或直接在源码下分目录管理,重点只保证一条:所有有价值的产出物都落在宿主机文件系统里,而不是容器的可写层。容器本身是无状态的,随时可以删掉重来,数据必须留在卷里。
7.2 宿主机改代码、容器里跑的开发循环
因为源码是通过 volume 挂载的,你可以用宿主机的 IDE 直接编辑 Isaac Lab 或你自己的实验代码,然后进容器执行。这个循环是我认为 Docker 方案对比原生安装最大的体验优势。
有一点要提前知道:容器里的 .venv 是 Linux 路径下的 Python 解释器,宿主机 IDE(尤其是 Windows 或 Mac 上)没法直接把它当解释器用。我长期用的是最朴素但最稳定的方案:宿主机只当编辑器,运行和调试都在终端里 docker exec 进容器操作。如果想用 VS Code,也可以用 Dev Containers 插件 attach 到运行中的容器,工具链全部在容器内,代码提示和调试都能工作,配置略复杂但体验更完整。
7.3 多开容器与 GPU 资源隔离
同一台机器想跑多个实验时,Docker 的资源隔离能力就派上用场了。基本套路是启动多个容器,每只分配不同的 GPU 和资源上限:
bash复制docker run -e NVIDIA_VISIBLE_DEVICES=0 --name exp1 --shm-size=8g ...
docker run -e NVIDIA_VISIBLE_DEVICES=1 --name exp2 --shm-size=8g ...
需要控制 CPU 和内存时,加上 --cpus 16 --memory 32g 这类限制,然后用 docker stats 实时查看资源占用。这套方案比在宿主机上裸跑多个 Python 进程干净得多,一个实验崩了不会影响另一个。
7.4 用 docker compose 固化启动参数
最后分享一个我自己的习惯:把上面那一长串 docker run 参数固化成 compose 文件。这样换机器、重建环境都不用再背参数,团队共享一个文件就能保证所有人启动参数一致。
yaml复制services:
isaac-lab:
image: nvcr.io/nvidia/isaac-sim:4.2.0
container_name: isaac-lab
network_mode: host
ipc: host
environment:
- DISPLAY=${DISPLAY}
- NVIDIA_VISIBLE_DEVICES=all
volumes:
- ~/isaaclab:/workspace/isaaclab
- ~/docker/isaac-sim/cache/kit:/isaac-sim/kit/cache
# 其余缓存和日志挂载按需补齐
stdin_open: true
tty: true
新版 Docker Compose 支持直接用 gpus: all 声明 GPU 资源,效果等同于旧版的 runtime: nvidia。写完配置后 docker compose up -d 启动,docker compose exec isaac-lab bash 进入容器,日常操作基本就这几个命令了。
最后说一个自己踩过多次的教训:升级 Isaac Lab 之前,一定先看一眼官方仓库的 Release 说明和 Isaac Sim 兼容性表格,然后果断把 .venv 删了重装。别心疼那十几分钟的安装时间,版本对齐的容器环境比什么都值钱。整套流程跑顺之后,我现在的工作流已经固化成:docker compose 拉起容器,isaaclab.sh 装好环境,剩下的时间基本都花在改 reward 和调参上,环境问题几乎再没找过我。
