autowzry-agent

Buffer检查工具开发

日期: 2025-11-20 类型: 功能开发 状态: ✅ 已完成


开发背景

在训练流程中,TrainingBuffer负责从HDF5文件加载数据并提供给Trainer使用。为了验证buffer的数据加载逻辑是否正确,需要一个工具来:

  1. 检查buffer中的数据是否正确加载
  2. 检测异常的reward值(用于发现数据标记问题)
  3. 导出buffer数据供人工检查

在正式训练前,这个工具可以帮助开发者快速发现数据问题,避免无效训练。


实现功能

1. TrainingBuffer.save_to_hdf5() 方法

文件: data/training_buffer.py

功能:

技术细节:

def save_to_hdf5(self, filepath: str):
    """
    Save all buffer samples to HDF5

    - 动态字段检测: 通过 self.samples[0].keys() 获取所有字段
    - 智能压缩: 大型数组(size > 1000)使用gzip压缩
    - 元数据记录: num_frames, created_at, source, buffer_capacity, available_keys
    """

关键设计:

2. scripts/check_buffer.py 预检查脚本

功能:

命令行接口:

# 基本用法
python scripts/check_buffer.py --files data/episodes/episode_xxx.hdf5

# 多文件
python scripts/check_buffer.py --files data/episodes/*.hdf5

# 自定义输出和阈值
python scripts/check_buffer.py --files episode.hdf5 --output custom.hdf5 --threshold 0.5

异常检测逻辑:

输出格式(全英文):

Abnormal sample #49: reward=-10.0000, state_shape=(540, 960, 3),
actions=[move=[0.00012873 0. 0.05386265 0.], attack=[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]],
next_state_shape=(540, 960, 3), done=N/A

技术实现

动态字段检测实现

# 获取所有字段(从第一个样本)
sample_keys = list(self.samples[0].keys())

# 遍历保存所有字段
for key in sample_keys:
    value = sample[key]
    if value is not None:
        if isinstance(value, np.ndarray) and value.size > 1000:
            grp.create_dataset(key, data=value, compression='gzip')
        else:
            grp.create_dataset(key, data=value)

优势:

代码风格一致性

参考 train.pylabel_data.py


测试结果

测试文件: data/episodes/episode_20251120_221647.hdf5

结果:

Total samples: 95
Abnormal samples: 1 (1.05%)
Output saved to: data/buffer_check\buffer_samples_20251120_230817.hdf5

异常样本分析:

文件大小: 176.55 MB(95个样本,包含完整state和next_state图像)


文件变更记录

新增文件

  1. scripts/check_buffer.py - Buffer验证脚本(128行)
  2. docs/logs/2025-11-20_buffer_check_tool.md - 本开发日志

修改文件

  1. data/training_buffer.py
    • 新增方法: save_to_hdf5(filepath) (52行)
    • 新增导入: h5py, os, datetime
  2. docs/logs/development_log.md
    • 添加2025-11-20开发记录索引
    • 更新项目状态(5个核心脚本)

后续优化建议

1. 性能优化

2. 功能扩展

3. 集成建议


总结

本次开发实现了TrainingBuffer的数据验证工具,具有以下特点:

动态适配: 自动检测所有字段,适配未来扩展 ✅ 独立实现: Buffer保存逻辑与DataManager分离 ✅ 代码规范: 遵循项目代码风格 ✅ 实用性强: 帮助快速发现数据问题

该工具已通过测试,可用于日常开发调试。