RTX 4090 上配置 ManiSkill2 + RDT(Robotics Diffusion Transformer)推理评测环境:完整踩坑与最短可跑通路线
目标是在 RTX 4090(nvidia-smi 显示 CUDA 12.2)上跑通 ManiSkill2 仿真环境,并用 RDT(Robotics Diffusion Transformer) 的公开权重在 ManiSkill 基准任务上完成推理评测,导出结果与视频。重点是环境能稳定复现。
0. 目标与总体思路
我们要达成的闭环是:
- ManiSkill2 能创建环境并 step(渲染/物理可用)
- RDT 代码依赖安装完整(PyTorch)
- flash-attn 能正常 import(避免编译/ABI 坑)
- 模型权重与语言 embedding 能下载到本地(网络环境常出问题)
eval_sim.eval_rdt_maniskill能运行并输出成功率(评测闭环)
关键策略:
- 只在 conda env 内安装,不要污染 base
- flash-attn 尽量用预编译 wheel,避免从源码编译
- Hugging Face 下载若被 reset,直接用 镜像 + wget 断点续传
1. 环境准备:创建 conda 环境 + 安装 PyTorch
建议 Python 3.10(RDT 与生态普遍兼容),并用 PyTorch 的 CUDA 12.1 wheel(驱动 12.2 一般能兼容运行)。
conda create -n rdt python=3.10 -y
conda activate rdtpip install -U pip setuptools wheel
pip install "numpy<2" psutil ninja packaging# 安装 torch 2.1 + CUDA 12.1 wheel
pip install torch==2.1.0 torchvision==0.16.0 --index-url https://download.pytorch.org/whl/cu121
验证:
python -c "import torch, numpy; print('torch', torch.__version__, 'cuda', torch.cuda.is_available()); print('numpy', numpy.__version__)"
2. 安装 RDT 依赖
cd ~/RoboticsDiffusionTransformer
pip install -r requirements.txt
如果 requirements 里包含
flash-attn,建议先不要让它自动编译;下一节我们用预编译 wheel 的方式安装。
3. 安装 flash-attn:避坑要点
3.1 为什么会踩坑?
典型坑包括:
- NumPy 2.x 与一些 C++/CUDA 扩展不兼容(需
numpy<2) - flash-attn 新版本可能要求更高 PyTorch(例如 PyTorch>=2.2)
- 从源码编译时容易遇到编译工具链、CUDA toolkit、缓存跨文件系统等问题
3.2 最稳做法:使用与 torch 2.1 匹配的预编译 wheel
在我的配置里最终稳定组合是:
torch==2.1.0+cu121flash-attn==2.5.2- wheel 名称带
torch2.1、cp310、linux_x86_64
安装方式(从本地 wheel 安装):
pip install --no-cache-dir ./flash_attn-2.5.2+cu122torch2.1cxx11abiFALSE-cp310-cp310-linux_x86_64.whl
验证:
python -c "import flash_attn; print('flash_attn import ok')"
python -c "import torch; import flash_attn; print('torch', torch.__version__, 'cuda', torch.cuda.is_available())"
如果能输出 flash_attn import ok 且 cuda True,就说明 flash-attn 的二进制扩展与 torch ABI 匹配。
经验:不要在 base 环境里装 torch/flash-attn;否则很容易把 torch 升级到不匹配版本,导致
undefined symbol这类 ABI 错误。
4. 安装 ManiSkill2 并进行冒烟测试
安装:
pip install --upgrade mani_skill
最小冒烟测试(确认环境能创建、reset、step):
python - <<'PY'
import gymnasium as gym
env = gym.make("PickCube-v1", obs_mode="rgbd", control_mode="pd_joint_pos")
obs, info = env.reset(seed=0)
for _ in range(5):obs, rew, terminated, truncated, info = env.step(env.action_space.sample())
print("maniskill env ok")
PY
看到 maniskill env ok 说明仿真链路基本没问题。
5. 下载 RDT ManiSkill 权重与 lang_embeds:网络问题的最稳解决
5.1 CLI 下载为何容易失败?
很多服务器网络对 huggingface.co 会出现 TLS 握手被 reset(Connection reset by peer),导致 huggingface-cli/hf/snapshot_download 全部失败。
5.2 最稳方案:使用镜像 + wget 断点续传
这一步是我最终能稳定下载的关键。
在 RDT 仓库下创建目录,然后下载:
cd ~/RoboticsDiffusionTransformer
mkdir -p models/maniskill/rdt models/maniskill/lang_embeds# 1) 大模型权重(断点续传)
wget -c -O models/maniskill/rdt/mp_rank_00_model_states.pt \"https://hf-mirror.com/robotics-diffusion-transformer/maniskill-model/resolve/main/rdt/mp_rank_00_model_states.pt"# 2) 5 个语言 embedding(小文件)
for f in PegInsertionSide PickCube StackCube PlugCharger PushCube; dowget -c -O "models/maniskill/lang_embeds/text_embed_${f}.pt" \"https://hf-mirror.com/robotics-diffusion-transformer/maniskill-model/resolve/main/lang_embeds/text_embed_${f}.pt"
done
下载完成后验收:
ls -lh models/maniskill/rdt/mp_rank_00_model_states.pt
ls -lh models/maniskill/lang_embeds/*.pt | wc -l
应当看到 1 个大权重文件存在,embedding 文件数量为 5。
6. 跑 RDT ManiSkill 推理评测
先看脚本参数(确认是否支持 episode 数、视频输出等):
python -m eval_sim.eval_rdt_maniskill -h
最小运行(先跑通闭环):
python -m eval_sim.eval_rdt_maniskill \--pretrained_path ./models/maniskill/rdt/mp_rank_00_model_states.pt
建议把输出保存到日志文件,便于写报告:
python -m eval_sim.eval_rdt_maniskill \--pretrained_path ./models/maniskill/rdt/mp_rank_00_model_states.pt \| tee outputs/rdt_maniskill_eval.txt
7. 我遇到的典型坑与解决总结
坑 1:flash-attn 安装失败(NumPy 2 / 编译依赖 / wheel 缓存)
- 解决:固定
numpy<2;优先装与 torch 版本匹配的预编译 wheel;必要时从本地 wheel 安装。
坑 2:误装到 base 环境导致 torch 升级,出现 undefined symbol
- 解决:只在
conda activate rdt后装包;随时用echo $CONDA_DEFAULT_ENV、which python自检。
坑 3:Hugging Face 下载被 reset
- 解决:用
hf-mirror.com镜像 +wget -c断点续传,直接下载指定文件路径。
8. 最终可复现的一套命令清单(核心步骤浓缩版)
# 1) env
conda create -n rdt python=3.10 -y
conda activate rdt
pip install -U pip setuptools wheel
pip install "numpy<2" psutil ninja packaging
pip install torch==2.1.0 torchvision==0.16.0 --index-url https://download.pytorch.org/whl/cu121# 2) RDT deps + flash-attn wheel
cd ~/RoboticsDiffusionTransformer
pip install -r requirements.txt
pip install --no-cache-dir ./flash_attn-2.5.2+cu122torch2.1cxx11abiFALSE-cp310-cp310-linux_x86_64.whl# 3) ManiSkill2
pip install --upgrade mani_skill# 4) download weights via mirror
mkdir -p models/maniskill/rdt models/maniskill/lang_embeds
wget -c -O models/maniskill/rdt/mp_rank_00_model_states.pt \"https://hf-mirror.com/robotics-diffusion-transformer/maniskill-model/resolve/main/rdt/mp_rank_00_model_states.pt"
for f in PegInsertionSide PickCube StackCube PlugCharger PushCube; dowget -c -O "models/maniskill/lang_embeds/text_embed_${f}.pt" \"https://hf-mirror.com/robotics-diffusion-transformer/maniskill-model/resolve/main/lang_embeds/text_embed_${f}.pt"
done# 5) run eval
python -m eval_sim.eval_rdt_maniskill \--pretrained_path ./models/maniskill/rdt/mp_rank_00_model_states.pt