
这套组合我前前后后折腾了一周踩了不少坑终于把 Ubuntu 24.04 RTX 5090 这台机器从裸机状态跑通了 OpenVLA-OFT 的部署和机器人任务评估。OpenVLA-OFT 这套视觉-语言-动作模型Vision-Language-Action Model核心就是让机器人根据摄像头画面加一句自然语言指令直接输出机械臂动作在 LIBERO 这类仿真任务里做评测。整个过程里 RTX 5090 这种最新 Blackwell 架构显卡带来的兼容性问题比我想象中多得多。我把完整链路拆成六段照着走基本能复现。1. 项目背景与整体方案选型1.1 OpenVLA-OFT 到底解决什么问题OpenVLA 是开源社区里比较有代表性的 VLA 模型全称是 Open Vision-Language-Action Model。它的结构可以粗暴理解成三块拼在一起一个视觉编码器负责看图像一个大语言模型负责理解自然语言指令并做推理一个动作头负责把推理结果映射成机器人可执行的动作。你给它输入一张当前摄像头画面和一句“把红色方块放到白色碗里”它直接吐出一串 7 维动作向量机械臂照着走就行。OFT 这个后缀在社区里没有特别统一的官方定义我个人的理解是 OpenVLA Fine-Tuning and Evaluation Toolkit也就是围绕 OpenVLA 官方仓库衍生出来的那套微调和评估流程。说白了光有预训练权重不能直接用在你自己的机器人上得针对你的任务数据做微调然后在仿真环境里批量评测效果。这套东西解决的核心问题就是让没有太多强化学习背景的机器人工程师也能用模仿学习的方式训出一个“眼睛 大脑 手”一体的策略。我这次的任务很明确在一台全新的 Ubuntu 24.04 系统上部署这套 OpenVLA-OFT用官方 7B 权重完成 LIBERO 仿真任务评估验证显卡、驱动、框架版本是否兼容为后续微调自己的真机数据做准备。听起来不复杂但过程中遇到的新卡兼容性问题很多是网上查不到现成答案的。1.2 为什么偏偏选 Ubuntu 24.04 RTX 5090先说系统。Ubuntu 24.04 LTS 是当前长期支持版本内核 6.8Python 3.12软件源里对深度学习相关工具链的更新比较及时。最关键的是NVIDIA 新一代驱动对 24.04 的支持比 22.04 更友好尤其是针对 Blackwell 架构消费级显卡新内核 新驱动的组合踩坑概率更低。再说显卡。RTX 5090 用的是 Blackwell 架构计算能力compute capability是 sm_120。上一代 RTX 4090 是 Ada Lovelace 架构sm_120 跟 sm_89 之间是断崖式的差异老版本 CUDA 和 PyTorch 根本不认识这张卡。我见过很多人在 4090 上好好的代码换到 5090 直接报 “no kernel image available for execution on the device”就是因为编译出来的 CUDA kernel 不包含 Blackwell 架构的适配。选这套组合的另一个原因是显存。OpenVLA-7B 是 70 亿参数模型BF16 精度下权重就要 14GB 左右加上推理时的激活值和 KV cacheRTX 5090 的 32GB 显存非常从容。如果是 8GB 或者 16GB 的卡跑 7B 模型会很痛苦要上量化才能勉强推理。当然这套组合的代价也很明显软硬件都太新很多第三方库还没有完全适配。我建议如果只是学习 OpenVLA 的推理逻辑用 RTX 4090 加 Ubuntu 22.04 会更省心如果想认真跑 7B 模型的微调和长任务评估RTX 5090 的 32GB 显存优势就体现出来了。1.3 整套部署链路总览先给一张我实际采用的版本对照表后面所有步骤都基于这套组合如果你用的版本不同遇到问题可以对照排查组件推荐版本说明操作系统Ubuntu 24.04.2 LTS内核 6.8支持新显卡驱动NVIDIA 驱动570.x 或更高Blackwell 架构最低要求CUDA Toolkit12.8官方支持 sm_120PyTorch2.7.0cu128 版本低于 2.6 大概率不识别 5090Python3.10conda 环境OpenVLA 依赖兼容性最好Transformers4.44.xOpenVLA 官方 requirements 指定OpenVLA 仓库官方 main 分支包含训练和评估脚本整条链路是系统安装 - NVIDIA 驱动 - CUDA 工具链 - Miniconda 环境 - PyTorch 安装 - OpenVLA 依赖安装 - 模型权重下载 - LIBERO 数据集准备 - 运行评估脚本 - 解读指标和可视化结果。每一个环节都有坑尤其前两步决定了后面能不能顺利跑起来。我强烈建议你严格按照顺序来不要想当然地跳过驱动验证直接装 PyTorch否则后面排查问题时你根本不知道是驱动问题还是框架问题。2. 基础环境配置从裸机到深度学习环境2.1 系统安装与磁盘分区排坑Ubuntu 24.04 的安装整体没什么难度下载官方镜像用 Rufus 或者 Ventoy 做启动盘U 盘启动后选择 “Install Ubuntu” 就行。但有两个地方需要特别注意。第一是 BIOS 设置。RTX 5090 这类新显卡强烈建议在 BIOS 里关闭 Secure Boot同时开启 Above 4G Decoding 和 Resizable BAR。这两个选项通常在 “Advanced” 或 “PCI Subsystem Settings” 里。关闭 Secure Boot 的原因很简单NVIDIA 官方驱动默认没有微软签名如果你开着 Secure Boot驱动安装后需要额外签名才能加载新手在这里能卡一整天。Resizable BAR 开启后CPU 可以访问显卡全部显存对部分推理任务有性能提升。第二是磁盘分区。如果你是纯深度学习用途我建议分三个区就够了/根分区给 100GB 左右/home占剩余空间swap给 32GB特别是你要跑模型微调内存不够时 swap 能救命。第一次装的时候我没单独分 swap后来跑数据预处理时内存吃满整个系统直接假死只能强制重启。网上有人建议系统盘用 ZFS 或 Btrfs追求稳定的话我用的是默认 ext4省心。安装完成后进入系统第一件事就是更新软件源和基础工具sudo apt update sudo apt upgrade -y sudo apt install -y build-essential git curl wget net-tools htopbuild-essential里含 gcc、make 这些编译工具后面装某些 Python 包时需要本地编译没有它你会在安装阶段收到一堆莫名其妙的报错。2.2 驱动安装RTX 5090 必须绕开的两个坑这是整条链路里最容易翻车的一步。Ubuntu 桌面版安装时可能自带一个开源的 nouveau 驱动它对 NVIDIA 新卡支持很糟糕必须禁用掉。另外系统仓库里的nvidia-driver-535之类的老版本驱动不要装它们根本不支持 RTX 5090。我推荐的方案是从 NVIDIA 官网下载最新的.run驱动包手动安装。以 570 系列为例大致流程是# 1. 禁用 nouveau 驱动 sudo bash -c echo blacklist nouveau /etc/modprobe.d/blacklist-nvidia.conf sudo bash -c echo options nouveau modeset0 /etc/modprobe.d/blacklist-nvidia.conf sudo update-initramfs -u # 2. 重启后切换到命令行模式确保图形界面已关闭 sudo systemctl set-default multi-user.target # 3. 在纯命令行模式下执行驱动安装 sudo chmod x NVIDIA-Linux-x86_64-570.124.06.run sudo ./NVIDIA-Linux-x86_64-570.124.06.run # 4. 装完切回图形界面 sudo systemctl set-default graphical.target sudo reboot驱动安装程序会问你 “Would you like to register the kernel module sources with DKMS?”一定要选 Yes这样后续内核升级时驱动模块能自动重编不然内核一升级你的显卡驱动就挂了。第二个坑是安装选项里会提示要不要顺便装 CUDA Toolkit。我全部选 No因为 CUDA 我打算单独用 conda 或官方 runfile 管理避免驱动自带的 CUDA 版本和 PyTorch 需要的版本互相污染。装完后验证nvidia-smi如果能看到这张表显示 Driver Version 是 570.1xx说明驱动正常工作了。如果提示No devices were found大概率是 nouveau 没禁干净或者 Secure Boot 没关。2.3 用 Miniconda 搭建隔离的 Python 环境系统自带的 Python 3.12 能用但我不建议直接拿来跑 OpenVLA。原因很简单OpenVLA 的依赖里很多包对 Python 版本有兼容要求尤其是一些老版本的 PyTorch 相关组件在 3.12 下会有问题。我的做法是用 Miniconda 建一个独立的 Python 3.10 环境。wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh source ~/.bashrc conda create -n openvla python3.10 -y conda activate openvla为什么不用 Anaconda 全量版因为大部分深度学习的包我们只通过 pip 安装Miniconda 更轻量启动也快。如果你已经装了 Anaconda也能用只是环境会稍微臃肿一些。注意conda create之后一定要确认python --version输出的是 3.10.x。我遇到过 Conda 环境创建成功但 shell 没有正确激活的情况命令行里python依然指向系统路径导致后续 pip 包装错环境。开发时我习惯用 VSCode 的 Remote SSH 插件远程连到这台机器写代码配置好 Python 解释器路径指向/home/用户名/miniconda3/envs/openvla/bin/python省得每次在终端和编辑器之间切来切去。2.4 CUDA、cuDNN 与 PyTorch 的版本匹配逻辑很多人以为装完驱动就万事大吉了其实驱动只是底层的图形和计算接口PyTorch 真正调用 GPU 计算时依赖的是 CUDA runtime 和 cuDNN。对于 RTX 5090 这种 sm_120 架构的卡CUDA 版本必须 12.8PyTorch 也必须用对应 cu128 或更新版本的预编译包。我的安装顺序是这样的先用 NVIDIA 官方的 runfile 安装 CUDA Toolkit 12.8 到/usr/local/cuda-12.8然后配置环境变量export PATH/usr/local/cuda-12.8/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda-12.8/lib64:$LD_LIBRARY_PATH把这两行加到~/.bashrc里。你可能会问PyTorch 的 pip 包不是自带 CUDA runtime 吗确实自带但 OpenVLA 里有些自定义算子需要本地编译编译时要用到 nvcc 编译器没有系统级 CUDA Toolkit 会直接报错。接下来安装 PyTorch。这是整个环境配置中最关键的一步不能装默认源里的torch默认版本通常不带 CUDA 支持或用的是老 CUDApip install torch2.7.0 torchvision0.22.0 --index-url https://download.pytorch.org/whl/cu128装完立刻验证一下显卡识别情况python -c import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_capability())如果输出True和(12, 0)说明 PyTorch 正确识别了 sm_120 架构。如果此时报错no kernel image is available for execution on the device不用怀疑一定是 PyTorch 版本太老回到上一步升级。cuDNN 我用的是 pip 直接装 NVIDIA 的独立包省得手动拷贝文件pip install nvidia-cudnn-cu12注意如果你的 PyTorch wheel 已经依赖了 cuDNN这一步不是必须的但后续某些自定义算子或 TensorFlow 类工具可能还需要装了更保险。3. OpenVLA-OFT 模型部署与权重准备3.1 拉取项目与安装依赖环境基础打好了接下来进入正题。OpenVLA 的官方仓库是 openvla/openvla我这里说的 OpenVLA-OFT 流程可以理解成这个仓库的完整落地实践。git clone https://github.com/openvla/openvla.git cd openvla pip install -e .pip install -e .会读取setup.py里的依赖列表并安装。这一步需要耐心等待可能要编译一些本地组件。如果中途报错一定要仔细看是哪个包失败。我遇到的一个典型问题是系统缺少libgl1导致 OpenCV 的某些依赖装不上sudo apt install -y libgl1 libglib2.0-0还有一个高频坑是 numpy 版本冲突。OpenVLA 的依赖里一些老包在 numpy 2.x 下会崩建议先在环境里固定 numpy 版本pip install numpy2如果你打算用 Flash Attention 加速可以额外编译安装但这步我要警告你在 RTX 5090 这种新架构上Flash Attention 的源码编译很可能失败因为它的 kernel 还没有针对 sm_120 适配好。我实测下来OpenVLA-7B 生成的动作序列很短Flash Attention 带来的加速有限不用它也能跑所以果断放弃了。3.2 模型权重下载与文件结构OpenVLA-7B 的权重托管在 Hugging Face 上仓库名是openvla/openvla-7b。下载前需要先注册账号并同意模型许可协议然后通过 huggingface-cli 下载pip install huggingface_hub huggingface-cli login huggingface-cli download openvla/openvla-7b --local-dir ./openvla-7b如果你不想登录命令行也可以直接在网页上点下载按钮把整个目录下载下来。模型目录里核心文件是这几个文件作用config.json模型结构配置包括视觉塔类型、隐藏层大小等pytorch_model.bin或 safetensors模型权重约 15GBtokenizer.modelLLaMA 分词器processor_config.json图像处理器配置下载完成后建议先看一眼目录大小du -sh ./openvla-7b如果只有几百 MB说明权重文件没下全多半是网络问题导致中断。我一开始就吃过这个亏模型加载时报错找不到某个张量排查了半天最后发现是权重文件不完整。3.3 模型加载与推理动作解码OpenVLA 官方提供了非常简洁的加载方式基于 Transformers 库的AutoModelForVision2Seq。下面是我实际验证过的最小推理代码import torch from transformers import AutoModelForVision2Seq, AutoProcessor model_id ./openvla-7b processor AutoProcessor.from_pretrained(model_id) model AutoModelForVision2Seq.from_pretrained( model_id, torch_dtypetorch.bfloat16, device_mapcuda ) image load_image(test.png) # 假设这里是你的摄像头画面 prompt pick up the red block and place it in the bowl inputs processor(image, prompt, return_tensorspt).to(cuda, torch.bfloat16) gen_outputs model.generate( **inputs, max_new_tokens32, do_sampleFalse )注意OpenVLA 的generate输出的并不是最终动作而是一串离散的 token。动作解码这一步是新手最容易迷惑的地方。简单讲OpenVLA 把连续动作空间离散成了 256 个 bins每个动作维度对应一个 token模型实际上做的是一个分类任务输出 token 后再通过查表还原成连续的机器人动作值。另外还会输出一个额外的 token 表示是否终止。官方仓库里提供了get_action这样的封装方法它把 generate 结果自动解析成(action, action_token)的格式。我建议你直接调用官方方法不要自己重新实现一是避免边界情况 bug二是官方实现已经处理好了维度对齐和标准化逻辑。3.4 前向推理的显存与速度实测在 RTX 5090 上加载 OpenVLA-7BBF16 精度下显存占用大概是 14GB 到 16GB比预期小很多。单步推理生成 7 个动作 token速度大约在 0.12 到 0.25 秒之间具体取决于是否开了缓存和输入图像分辨率。我强烈建议你在正式评估前先跑一次单次推理确认整条链路通顺。如果这一步能出动作向量说明模型部署成功后面评估只是脚本参数的问题。很多人在这一步就失败99% 的可能是版本问题——要么 PyTorch 不支持显卡要么 Transformers 版本和模型配置不匹配。Transformers 版本方面官方 requirements 锁定的是 4.44.x不要为了追新随便升级升级后可能某个 API 变了导致加载失败。4. 机器人任务评估实操流程4.1 理解 LIBERO 基准与任务类型模型部署完真正的重头戏是评估。OpenVLA 官方用得最多的评估基准是 LIBERO这是一个基于 MuJoCo 模拟器的机器人长期任务基准专门用来测 VLA 模型在语言条件、空间关系、目标泛化三个维度上的表现。LIBERO 包含四个主流任务套件libero_spatial空间关系理解、libero_object物体识别、libero_goal目标状态理解、libero_1010 个长程任务。每个任务套件里都有若干条任务描述比如 “pick up the red block and place it on the wooden table” 这样的自然语言指令。仿真环境会给出一个初始状态机器人需要连续执行多步动作最后判断是否达成了任务目标。评估指标最核心的就是成功率Success Rate也就是所有 evaluation episodes 里成功完成的比例。安装 LIBERO 依赖很简单pip install libero但要注意LIBERO 的数据集需要单独下载。官方推荐你设置环境变量LIBERO_DATASET_PATH指向数据集目录。数据文件是 HDF5 格式包含了每个 episode 的初始状态、动作轨迹、语言指令。下载后我习惯先解压看一眼目录结构确认没有缺文件因为 LIBERO 数据量不小中断下载会导致某个任务文件损坏。4.2 评估脚本运行与关键参数解读OpenVLA 官方仓库里提供了现成的评估脚本路径在experiments/robot/eval/eval_libero.py。我实际运行时的命令是cd openvla python experiments/robot/eval/eval_libero.py \ --model_family openvla \ --model_path ./openvla-7b \ --task_suite libero_spatial \ --batch_size 8 \ --use_bf16几个参数值得展开讲。--model_path可以传 Hugging Face 仓库 ID也可以传本地路径我建议用本地路径避免评估过程中反复请求网络。--task_suite指定任务套件第一次先跑libero_spatial因为它 episode 数量少方便快速验证整个流程。--batch_size决定并行 rollout 的数量RTX 5090 显存大开到 8 没问题如果你的显存小记得调低否则会 OOM。脚本运行后会经历一段模型的加载和 warmup然后进入正式的 rollout 循环。每个 episode 里仿真环境会重置初始状态模型接收当前观测图像和语言指令输出动作执行动作后返回新的观测循环直到任务成功或达到步数上限。这个过程非常直观你能看到终端里不断刷新的每一步信息。评估结果会以 JSON 格式保存在results/目录下包含每个任务的成功标志和完整统计。我建议跑完一次后立刻打开 JSON 文件看一下不要等到所有套件跑完再检查。4.3 结果指标解读成功率、平均步数与随机种子评估完成后终端会打印类似这样的汇总Success Rate: 0.82 Average Episode Length: 34.6这个 0.82 意味着 82% 的任务成功完成了。OpenVLA-7B 基座模型在 LIBERO 上的成绩有高有低不同任务套件差异很大libero_spatial上可能超过 80%但libero_10长程任务上会明显下降。只看成功率不够还要看平均 episode 长度。如果一个策略成功率很高但平均步数远超人类水平说明它在任务里表现得犹豫或走了很多弯路这对真机部署时的执行效率是有影响的。另外强烈建议同一个任务套件跑多个随机种子取平均。LIBERO 的初始状态有随机性单次评估的方差可能很大跑 3 到 5 个不同 seed 后才能得到稳定结论。我自己实际跑完libero_spatial和libero_object后明显感觉到空间类任务的成功率高于长程任务这和 OpenVLA 论文里报告的趋势一致。如果你要比较不同微调策略的效果务必固定 seed、固定评估脚本版本、固定任务套件否则比较出来的差异根本不可信。4.4 生成可视化结果与失败案例分析评估脚本支持把每个 episode 的 rollout 过程保存成视频。运行时加一个参数即可python experiments/robot/eval/eval_libero.py \ --model_family openvla \ --model_path ./openvla-7b \ --task_suite libero_spatial \ --save_rollout_videos视频会保存在results/下的对应目录里。我强烈建议你一定要打开视频看看尤其是失败案例。很多时候指标数字一样但失败的方式天差地别有的模型是拿错了物体有的是动作执行到一半卡住有的是语言指令理解错误。只看成功率根本无法定位模型的问题到底出在哪个环节。这里有个实用技巧把成功和失败的 rollout 视频分目录存放然后在终端里用 VLC 或 mpv 按顺序播放。我就发现某个任务成功率低是因为模型在目标物体被遮挡的时候反复尝试抓取遮挡物这说明视觉编码器对遮挡场景的泛化能力不足而不是动作预测的问题。这种结论只有看视频才能得出。5. 常见问题排查与性能调优实录5.1 RTX 5090 专属问题sm_120 与 CUDA 版本不匹配我在调试过程中最常遇到的错误就是RuntimeError: CUDA error: no kernel image is available for execution on the device这个错误 100% 是因为编译当前代码时用的 CUDA 版本或 PyTorch 版本不支持 Blackwell 架构。解决思路只有一条升级。先把 NVIDIA 驱动升到 570再把 PyTorch 换成 cu128 版本基本上就能解决。如果你是在源码编译某个自定义算子时遇到这个报错那就要检查 CUDA Toolkit 版本和TORCH_CUDA_ARCH_LIST环境变量。我的建议是在环境变量里显式指定export TORCH_CUDA_ARCH_LIST12.0这样编译自定义算子时编译器会针对 Blackwell 架构生成对应的 kernel避免生成一堆你用不上的老架构代码编译时间也能缩短。5.2 显存不足与并发批次调整OpenVLA-7B 基座模型其实不太容易把 32GB 显存吃满但如果你的观测图像分辨率很高或者你同时加载了多个模型还是会遇到 OOM。评估时最容易触发 OOM 的地方是model.generate阶段尤其是max_new_tokens设得过大。OpenVLA 的动作序列一般不超过 10 个 token我建议设置为 32 已经足够不要学 NLP 任务那样设成 1024。显存不够时最优先的调整是减小--batch_size从 8 降到 4 或 2。其次是确认模型以 BF16 加载而不是 FP32。如果你还想压显存可以把输入图像从 336x336 缩到 224x224但要注意这可能导致视觉理解精度下降成功率会有波动。还有一个小技巧是养成用nvidia-smi监控显存的习惯。评估跑一半时另一个终端执行watch -n 1 nvidia-smi能实时看到显存占用曲线预先判断峰值会不会爆。我遇到一次系统假死就是没看显存16GB 的小卡硬跑了 4 个并行 rollout。5.3 推理速度优化量化与编译取舍评估 LIBERO 任务时一台 RTX 5090 跑完整套libero_spatial大概需要几十分钟到两个小时主要瓶颈是模型前向推理和 MuJoCo 仿真环境的交互。如果想提速可以从几个角度入手。第一使用torch.compile对模型进行编译优化。OpenVLA 仓库里有个--compile参数开启后第一次运行会编译很久但之后推理速度可能提升 20% 到 40%。我实测下来在 RTX 5090 上编译是能成功的但你得确保 PyTorch 版本足够新老版本对 Blackwell 的编译支持不够。第二考虑量化。OpenVLA 社区里有人用 AWQ 或 GPTQ 量化版本可以把显存占用降到 8GB 以下推理速度也有提升。但我个人不推荐在评估阶段用量化模型因为量化会不可避免地损失动作预测精度成功率可能会有几个点的波动。你最终要是做真机部署可以在评估阶段用 BF16部署阶段再量化。第三模型常驻显存不要每次评估都重新加载。如果你要跑多个任务套件写脚本时把 model 加载放在循环外只换数据集和任务指令。别问我为什么提这个我一开始就是每跑一个套件重新加载一次权重白白浪费了大量时间。5.4 依赖冲突与数据加载问题速查OpenVLA 的依赖不少实际安装和运行中会碰到各种小问题我把最典型的整理成一个速查表问题现象常见原因解决办法Object of type numpy.int64 is not JSON serializablenumpy 版本过高JSON 解析失败固定 numpy2libgomp.so.1: cannot open shared object file缺少 OpenMP 运行库sudo apt install libomp-devNo module named torchvision.transforms.functional_tensortorchvision 版本与 torch 不匹配统一用 cu128 版安装不要混装LIBERO 数据集加载时提示文件损坏下载中断或解压不完整删除对应 hdf5 文件重新下载评估过程中 MuJoCo 报错GLFW error缺少图形环境依赖sudo apt install libglfw3-dev libglew-dev这些坑单独看都不难解决但一旦在你跑评估到一半时冒出来打断的节奏非常难受。我后来想了个办法先把所有依赖问题在跑单次推理时排干净再开始正式评估。单次推理不涉及仿真环境但仍然覆盖模型加载、图像处理、动作输出这几个核心环节作为冒烟测试非常有效。6. 这次实战留下的几点体会折腾完这一整套 Ubuntu 24.04 RTX 5090 下的 OpenVLA-OFT 部署和评估最大的体会是新硬件 新模型的组合一定要有“版本洁癖”。驱动、CUDA、PyTorch、Transformers 这四个组件的版本必须严格配套少一个都不行。建议先照着一套验证过的稳定组合跑通全流程再考虑升级某个组件。我踩了好几次“升级一个包导致另一个包崩掉”的循环最后干脆全部按官方 requirements 锁定版本世界才安静下来。另外还有两个实用小技巧。第一个如果实验室的散热条件一般可以给 RTX 5090 设置功耗限制nvidia-smi -pl 450把它从默认 575W 降到 450W性能损失很小但发热和噪音明显改善。第二个评估时固定所有随机种子包括 numpy、torch、Python random 和 LIBERO 环境本身的 seed这样不同机器之间的结果才有可比性。最后说句实话OpenVLA 这类 VLA 模型在 LIBERO 仿真上跑出漂亮成功率只是第一步。仿真环境里观测是干净的、动作是理想的真机上的相机标定误差、机械臂控制延迟、物体抓取的不确定性每一项都会让成功率大打折扣。但先把仿真评估流程跑通至少能帮你把模型选型、微调方向、超参偏好这些更高层的问题确认下来。接下来我打算用这套环境基于自己采集的真机数据做 OpenVLA-OFT 微调到时候再把数据清洗和微调训练的经验整理出来。