模型评估#
scripts/eval.sh 使用指南
概述#
scripts/eval.sh 是一个用于启动分布式模型评估的 Shell 脚本,它封装了 torchrun 命令,用于在多节点多 GPU 环境下评估训练好的模型。
基本用法#
bash scripts/eval.sh [CONFIG] [CKPT_PATH] [额外参数...]
脚本参数#
位置参数#
参数 |
位置 |
说明 |
|---|---|---|
|
$1 |
评估配置文件路径(通常使用训练时的配置文件) |
|
$2 |
模型 checkpoint 文件路径 |
额外参数 |
$3+ |
直接传递给 |
环境变量(分布式评估必需)#
这些环境变量用于配置 torchrun 的分布式参数:
环境变量 |
说明 |
示例 |
|---|---|---|
|
每个节点使用的 GPU 数量 |
|
|
参与评估的节点总数 |
|
|
当前节点的 rank 索引(从 0 开始) |
|
|
主节点(rank 0)的 IP 地址或主机名 |
|
|
主节点用于通信的端口 |
|
eval.py 支持的额外参数#
以下参数可以作为额外参数传递给 eval.py:
参数 |
类型 |
说明 |
|---|---|---|
|
路径 |
配置文件路径(由脚本自动传递) |
|
路径 |
checkpoint 文件路径(由脚本自动传递) |
|
key=value 对 |
覆盖配置文件中的设置,格式为 |
使用示例#
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_GPU、MLP_WORKER_NUM、MLP_ROLE_INDEX、MLP_WORKER_0_HOST、MLP_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
评估指标日志 - 包含成功率、完成度等统计信息
注意事项#
Checkpoint 路径:确保
CKPT_PATH指向有效的 checkpoint 文件,通常位于训练的work_dir目录下。配置一致性:评估时使用的配置文件应与训练时保持一致,或者至少保证模型结构相关的配置相同。
环境变量必须设置:在运行脚本前,必须正确设置所有
MLP_*环境变量,否则torchrun无法正确启动分布式评估。GPU 内存:评估时的显存占用通常比训练低,但仍需确保有足够的 GPU 内存。
评估环境依赖:某些评估任务(如 LIBERO)可能需要额外的环境依赖,确保已正确安装。
端口冲突:确保
MLP_WORKER_0_PORT指定的端口未被占用,且在防火墙中开放。NCCL 后端:默认使用 NCCL 作为分布式后端,确保 CUDA 和 NCCL 版本兼容。