univla复现libero
好的!我给你一个完整的、一步步可执行的LIBERO复现指南。
🎯 UniVLA在LIBERO上的完整复现指南
📋 第一部分:环境准备(已完成大部分)
1.1 确认当前环境状态
conda activate univla# 检查Python版本
python --version # 应该是 3.10.x# 检查PyTorch
python -c "import torch; print(f'PyTorch: {torch.__version__}'); print(f'CUDA可用: {torch.cuda.is_available()}')"
# 应该输出: PyTorch: 2.2.0+cu121, CUDA可用: True# 检查UniVLA是否安装
python -c "import univla; print('UniVLA已安装')" 2>/dev/null || echo "UniVLA未安装"
1.2 处理Flash Attention(可选)
如果只做评估,可以跳过。如果要训练,执行:
cd ~/downloads
mkdir -p flash_attn && cd flash_attn# 下载预编译wheel
wget https://ghproxy.com/https://github.com/Dao-AILab/flash-attention/releases/download/v2.5.5/flash_attn-2.5.5+cu121torch2.2cxx11abiFALSE-cp310-cp310-linux_x86_64.whl# 安装
pip install flash_attn-2.5.5+cu121torch2.2cxx11abiFALSE-cp310-cp310-linux_x86_64.whl# 验证
python -c "import flash_attn; print('Flash Attention安装成功')"
如果下载失败,暂时跳过,不影响评估。
📦 第二部分:下载数据和模型
2.1 创建目录结构
# 创建数据和模型目录
mkdir -p ~/data/libero_datasets
mkdir -p ~/models/univla
mkdir -p ~/UniVLA/logs
2.2 下载LIBERO数据集
cd ~/data/libero_datasets# 安装git-lfs
conda install git-lfs -y
git lfs install
方法A:从HuggingFace下载(推荐)
# 下载LIBERO数据集
git clone https://huggingface.co/datasets/Lifelong-Robot-Learning/LIBERO
如果git clone太慢,使用HuggingFace镜像:
# 使用镜像
export HF_ENDPOINT=https://hf-mirror.com
git clone https://hf-mirror.com/datasets/Lifelong-Robot-Learning/LIBERO
方法B:使用Python脚本下载
cd ~/data/libero_datasetspython << 'EOF'
from huggingface_hub import snapshot_download
import osos.environ['HF_ENDPOINT'] = 'https://hf-mirror.com' # 使用镜像# 下载数据集
snapshot_download(repo_id="Lifelong-Robot-Learning/LIBERO",repo_type="dataset",local_dir="./libero_data",resume_download=True
)
print("✓ 数据集下载完成")
EOF
2.3 下载预训练模型
cd ~/models/univla# 设置镜像
export HF_ENDPOINT=https://hf-mirror.com# 方法1: 下载已经在LIBERO上微调的模型(推荐,用于快速评估)
git clone https://hf-mirror.com/qwbu/univla-7b-224-sft-libero# 方法2: 如果要自己训练,还需要下载基础模型
git clone https://hf-mirror.com/qwbu/univla-7b
git clone https://hf-mirror.com/qwbu/univla-latent-action-model
检查下载的文件:
# 检查数据集
ls ~/data/libero_datasets/# 检查模型
ls ~/models/univla/
🚀 第三部分:快速评估(使用预训练模型)
3.1 安装LIBERO依赖
cd ~/UniVLA
pip install -r experiments/robot/libero/libero_requirements.txt
3.2 运行评估
cd ~/UniVLA# 评估 LIBERO-Spatial(快速测试,每个任务10次)
python experiments/robot/libero/run_libero_eval.py \--task_suite_name libero_spatial \--action_decoder_path ~/models/univla/univla-7b-224-sft-libero/action_decoder.pt \--pretrained_checkpoint ~/models/univla/univla-7b-224-sft-libero \--num_trials_per_task 10 \--seed 7 \--save_video False# 如果成功,继续评估其他套件(每个任务50次,论文标准)
python experiments/robot/libero/run_libero_eval.py \--task_suite_name libero_spatial \--action_decoder_path ~/models/univla/univla-7b-224-sft-libero/action_decoder.pt \--pretrained_checkpoint ~/models/univla/univla-7b-224-sft-libero \--num_trials_per_task 50 \--seed 7 \--save_video False# 评估 LIBERO-Object
python experiments/robot/libero/run_libero_eval.py \--task_suite_name libero_object \--action_decoder_path ~/models/univla/univla-7b-224-sft-libero/action_decoder.pt \--pretrained_checkpoint ~/models/univla/univla-7b-224-sft-libero \--num_trials_per_task 50 \--seed 7# 评估 LIBERO-Goal
python experiments/robot/libero/run_libero_eval.py \--task_suite_name libero_goal \--action_decoder_path ~/models/univla/univla-7b-224-sft-libero/action_decoder.pt \--pretrained_checkpoint ~/models/univla/univla-7b-224-sft-libero \--num_trials_per_task 50 \--seed 7# 评估 LIBERO-Long (10)
python experiments/robot/libero/run_libero_eval.py \--task_suite_name libero_10 \--action_decoder_path ~/models/univla/univla-7b-224-sft-libero/action_decoder.pt \--pretrained_checkpoint ~/models/univla/univla-7b-224-sft-libero \--num_trials_per_task 50 \--seed 7
🔥 第四部分:训练(可选)
如果你想自己训练模型而不是使用预训练的:
4.1 修改训练配置
cd ~/UniVLA
nano vla-scripts/finetune_libero.py
找到第107行左右,修改路径:
vla_path = "/home/gpu/models/univla/univla-7b"
lam_path = "/home/gpu/models/univla/univla-latent-action-model/lam-stage-2.ckpt"
在文件中搜索 data_root_dir,修改为:
data_root_dir = "/home/gpu/data/libero_datasets/LIBERO" # 或者你的实际路径
4.2 开始训练
cd ~/UniVLA# 单卡训练 LIBERO-Spatial (30k steps)
python vla-scripts/finetune_libero.py \--dataset_name "libero_spatial_no_noops" \--run_root_dir "logs/libero_spatial" \--max_steps 30000# 多卡训练(如果有8卡)
torchrun --standalone --nnodes 1 --nproc-per-node 8 vla-scripts/finetune_libero.py \--dataset_name "libero_spatial_no_noops" \--run_root_dir "logs/libero_spatial" \--max_steps 30000
训练其他套件:
# LIBERO-Object (30k steps)
python vla-scripts/finetune_libero.py \--dataset_name "libero_object_no_noops" \--run_root_dir "logs/libero_object" \--max_steps 30000# LIBERO-Goal (30k steps)
python vla-scripts/finetune_libero.py \--dataset_name "libero_goal_no_noops" \--run_root_dir "logs/libero_goal" \--max_steps 30000# LIBERO-Long (40k steps)
python vla-scripts/finetune_libero.py \--dataset_name "libero_10_no_noops" \--run_root_dir "logs/libero_10" \--max_steps 40000
4.3 评估训练的模型
python experiments/robot/libero/run_libero_eval.py \--task_suite_name libero_spatial \--action_decoder_path logs/libero_spatial/action_decoder.pt \--pretrained_checkpoint logs/libero_spatial \--num_trials_per_task 50 \--seed 7
📊 第五部分:保存和分析结果
5.1 保存评估视频
# 保存视频以便分析
python experiments/robot/libero/run_libero_eval.py \--task_suite_name libero_spatial \--action_decoder_path ~/models/univla/univla-7b-224-sft-libero/action_decoder.pt \--pretrained_checkpoint ~/models/univla/univla-7b-224-sft-libero \--num_trials_per_task 5 \--seed 7 \--save_video True \--video_dir ./eval_videos/libero_spatial
5.2 查看结果
评估结果会保存在终端输出和日志中,包含:
- 每个任务的成功率
- 平均成功率
- 标准差
🛠️ 完整自动化脚本
保存为 reproduce_libero_univla.sh:
#!/bin/bash
set -eecho "================================"
echo "UniVLA LIBERO 完整复现脚本"
echo "================================"# 配置路径
DATA_DIR=~/data/libero_datasets
MODEL_DIR=~/models/univla
WORK_DIR=~/UniVLA
LOG_DIR=$WORK_DIR/logs# 激活环境
conda activate univlaecho "[1/6] 创建目录..."
mkdir -p $DATA_DIR $MODEL_DIR $LOG_DIRecho "[2/6] 下载LIBERO数据集..."
if [ ! -d "$DATA_DIR/LIBERO" ]; thencd $DATA_DIRexport HF_ENDPOINT=https://hf-mirror.comgit lfs installgit clone https://hf-mirror.com/datasets/Lifelong-Robot-Learning/LIBEROecho "✓ 数据集下载完成"
elseecho "✓ 数据集已存在"
fiecho "[3/6] 下载预训练模型..."
if [ ! -d "$MODEL_DIR/univla-7b-224-sft-libero" ]; thencd $MODEL_DIRexport HF_ENDPOINT=https://hf-mirror.comgit clone https://hf-mirror.com/qwbu/univla-7b-224-sft-liberoecho "✓ 模型下载完成"
elseecho "✓ 模型已存在"
fiecho "[4/6] 安装LIBERO依赖..."
cd $WORK_DIR
pip install -r experiments/robot/libero/libero_requirements.txt -qecho "[5/6] 开始评估..."
cd $WORK_DIRSUITES=("libero_spatial" "libero_object" "libero_goal" "libero_10")for SUITE in "${SUITES[@]}"; doecho "================================"echo "评估 $SUITE..."echo "================================"python experiments/robot/libero/run_libero_eval.py \--task_suite_name $SUITE \--action_decoder_path $MODEL_DIR/univla-7b-224-sft-libero/action_decoder.pt \--pretrained_checkpoint $MODEL_DIR/univla-7b-224-sft-libero \--num_trials_per_task 50 \--seed 7 \--save_video False \2>&1 | tee $LOG_DIR/eval_${SUITE}.logecho "✓ $SUITE 评估完成"
doneecho "[6/6] 汇总结果..."
echo "================================"
echo "所有评估完成!"
echo "结果保存在: $LOG_DIR/eval_*.log"
echo "================================"# 提取成功率
for SUITE in "${SUITES[@]}"; doif [ -f "$LOG_DIR/eval_${SUITE}.log" ]; thenecho "=== $SUITE ==="grep -i "success rate\|average" $LOG_DIR/eval_${SUITE}.log | tail -5fi
done
运行脚本:
chmod +x reproduce_libero_univla.sh
./reproduce_libero_univla.sh
📈 期望结果
根据论文,UniVLA在LIBERO上的成功率:
| 任务套件 | 论文成功率 | 你的目标 |
|---|---|---|
| LIBERO-Spatial | 96.5% ± 0.5% | >95% |
| LIBERO-Object | 96.8% ± 0.5% | >95% |
| LIBERO-Goal | 95.6% ± 0.4% | >94% |
| LIBERO-Long | 92.0% ± 1.0% | >90% |
| 平均 | 95.2% | >93% |
⚠️ 常见问题解决
问题1:数据下载失败
# 使用Python直接下载
python << 'EOF'
from huggingface_hub import snapshot_download
snapshot_download(repo_id="Lifelong-Robot-Learning/LIBERO",repo_type="dataset",local_dir="~/data/libero_datasets/LIBERO",resume_download=True
)
EOF
问题2:模型下载失败
# 使用Python下载
python << 'EOF'
from huggingface_hub import snapshot_download
snapshot_download(repo_id="qwbu/univla-7b-224-sft-libero",local_dir="~/models/univla/univla-7b-224-sft-libero",resume_download=True
)
EOF
问题3:评估时CUDA内存不足
# 减少并行任务数(修改评估脚本)
# 或使用更小的batch size
问题4:找不到LIBERO环境
# 确保LIBERO正确安装
pip install -e ~/LIBERO # 如果已克隆LIBERO仓库
🎯 最简复现流程(3步走)
如果只想快速验证结果:
# 步骤1: 下载模型
cd ~/models/univla
export HF_ENDPOINT=https://hf-mirror.com
git clone https://hf-mirror.com/qwbu/univla-7b-224-sft-libero# 步骤2: 安装依赖
cd ~/UniVLA
pip install -r experiments/robot/libero/libero_requirements.txt# 步骤3: 快速评估(每个任务10次)
python experiments/robot/libero/run_libero_eval.py \--task_suite_name libero_spatial \--action_decoder_path ~/models/univla/univla-7b-224-sft-libero/action_decoder.pt \--pretrained_checkpoint ~/models/univla/univla-7b-224-sft-libero \--num_trials_per_task 10 \--seed 7
按照这个指南,你应该能够成功在LIBERO上复现UniVLA的结果。如果遇到任何具体问题,请告诉我错误信息!
