模型评估#

scripts/eval.sh 使用指南

概述#

scripts/eval.sh 是一个用于启动分布式模型评估的 Shell 脚本,它封装了 torchrun 命令,用于在多节点多 GPU 环境下评估训练好的模型。

基本用法#

bash scripts/eval.sh [CONFIG] [CKPT_PATH] [额外参数...]

脚本参数#

位置参数#

参数

位置

说明

CONFIG

$1

评估配置文件路径(通常使用训练时的配置文件)

CKPT_PATH

$2

模型 checkpoint 文件路径

额外参数

$3+

直接传递给 eval.py 的额外参数

环境变量(分布式评估必需)#

这些环境变量用于配置 torchrun 的分布式参数:

环境变量

说明

示例

MLP_WORKER_GPU

每个节点使用的 GPU 数量

8

MLP_WORKER_NUM

参与评估的节点总数

1

MLP_ROLE_INDEX

当前节点的 rank 索引(从 0 开始)

0

MLP_WORKER_0_HOST

主节点(rank 0)的 IP 地址或主机名

{MASTER_NODE_IP}

MLP_WORKER_0_PORT

主节点用于通信的端口

29500

eval.py 支持的额外参数#

以下参数可以作为额外参数传递给 eval.py

参数

类型

说明

--config

路径

配置文件路径(由脚本自动传递)

--ckpt-path

路径

checkpoint 文件路径(由脚本自动传递)

--cfg-options

key=value 对

覆盖配置文件中的设置,格式为 xxx=yyy

使用示例#

1. 单节点单 GPU 评估#

# 设置环境变量
export MLP_WORKER_GPU=1
export MLP_WORKER_NUM=1
export MLP_ROLE_INDEX=0
export MLP_WORKER_0_HOST=localhost
export MLP_WORKER_0_PORT=29500

# 启动评估
bash scripts/eval.sh \
    configs/pi05/pi05_paligemma_libero10_full_finetune.py \
    work_dirs/pi05_paligemma_libero10_full_finetune/checkpoint_step_10000.pt

2. 单节点多 GPU 评估(8 GPU)#

export MLP_WORKER_GPU=8
export MLP_WORKER_NUM=1
export MLP_ROLE_INDEX=0
export MLP_WORKER_0_HOST=localhost
export MLP_WORKER_0_PORT=29500

bash scripts/eval.sh \
    configs/pi05/pi05_paligemma_libero10_full_finetune.py \
    work_dirs/pi05_paligemma_libero10_full_finetune/checkpoint_step_10000.pt

3. 火山云平台评估#

在火山云 MLP 平台上,环境变量 MLP_WORKER_GPUMLP_WORKER_NUMMLP_ROLE_INDEXMLP_WORKER_0_HOSTMLP_WORKER_0_PORT 由平台自动注入,无需手动设置,直接运行即可。

bash scripts/eval.sh \
    configs/pi05/pi05_paligemma_libero10_full_finetune.py \
    work_dirs/pi05_paligemma_libero10_full_finetune/checkpoint_step_10000.pt

4. 多节点分布式评估(手动配置)#

如果不在火山云平台上,需要手动设置环境变量:

节点 0(主节点):

export MLP_WORKER_GPU=8
export MLP_WORKER_NUM=2
export MLP_ROLE_INDEX=0
export MLP_WORKER_0_HOST={MASTER_NODE_IP}
export MLP_WORKER_0_PORT=29500

bash scripts/eval.sh \
    configs/pi05/pi05_paligemma_libero10_full_finetune.py \
    work_dirs/pi05_paligemma_libero10_full_finetune/checkpoint_step_10000.pt

节点 1:

export MLP_WORKER_GPU=8
export MLP_WORKER_NUM=2
export MLP_ROLE_INDEX=1
export MLP_WORKER_0_HOST={MASTER_NODE_IP}
export MLP_WORKER_0_PORT=29500

bash scripts/eval.sh \
    configs/pi05/pi05_paligemma_libero10_full_finetune.py \
    work_dirs/pi05_paligemma_libero10_full_finetune/checkpoint_step_10000.pt

5. 使用额外参数覆盖配置#

# 修改评估环境
bash scripts/eval.sh \
    configs/pi05/pi05_paligemma_libero10_full_finetune.py \
    work_dirs/pi05_paligemma_libero10_full_finetune/checkpoint_step_10000.pt \
    --cfg-options eval.env.task_suite_name=libero_goal

6. 评估最新的 checkpoint#

# 使用 latest.pt 符号链接(如果存在)
bash scripts/eval.sh \
    configs/pi05/pi05_paligemma_libero10_full_finetune.py \
    work_dirs/pi05_paligemma_libero10_full_finetune/latest-checkpoint.pt

输出内容#

评估完成后,会在工作目录下生成以下内容:

  • rollouts/ - 评估过程中的视频录制(如果启用 save_rollout_videos

    • 视频文件命名格式:{date}--episode={n}--success={True/False}--task={task_name}.mp4

  • 评估指标日志 - 包含成功率、完成度等统计信息

注意事项#

  1. Checkpoint 路径:确保 CKPT_PATH 指向有效的 checkpoint 文件,通常位于训练的 work_dir 目录下。

  2. 配置一致性:评估时使用的配置文件应与训练时保持一致,或者至少保证模型结构相关的配置相同。

  3. 环境变量必须设置:在运行脚本前,必须正确设置所有 MLP_* 环境变量,否则 torchrun 无法正确启动分布式评估。

  4. GPU 内存:评估时的显存占用通常比训练低,但仍需确保有足够的 GPU 内存。

  5. 评估环境依赖:某些评估任务(如 LIBERO)可能需要额外的环境依赖,确保已正确安装。

  6. 端口冲突:确保 MLP_WORKER_0_PORT 指定的端口未被占用,且在防火墙中开放。

  7. NCCL 后端:默认使用 NCCL 作为分布式后端,确保 CUDA 和 NCCL 版本兼容。