autowzry-agent

配置管理改进与流式HDF5写入

日期: 2025-11-24 类型: 架构改进


改动概述

本次开发完成两个核心改进:配置管理统一化和流式HDF5写入机制,解决内存爆炸问题并提升代码一致性。


1. 配置管理改进

1.1 新增 use_autowzry_lite 参数

修改文件: config/config.py, config/agent.config.yaml

改动内容

原因:明确控制autowzry库来源,便于开发和部署环境切换。

1.2 动态导入autowzry

修改文件: environment/compatibility.py

改动内容

原因:避免在配置加载前导入,确保根据配置选择正确的库。

1.3 统一脚本参数行为

修改文件: scripts/train.py, scripts/battle.py, scripts/collect_from_device.py

改动内容

原因:解决训练和对战时action space不匹配的问题,保持配置一致性。


2. 流式HDF5写入机制

2.1 问题分析

原有实现问题

2.2 StreamingRecorder类

新增文件内容: data/data_manager.py

新增类

class StreamingRecorder:
    """流式HDF5记录器 - 边记录边写入磁盘,避免内存爆炸"""

    def __init__(filepath):
        # 初始化HDF5文件,设置recording_mode='streaming'

    def append_frame(frame_data: Dict[str, Any]):
        # 立即写入一帧到HDF5(支持任意字段)
        # 内存占用仅为单帧大小

    def finalize() -> str:
        # 完成记录,添加finished_at时间戳

    def get_frame_count() -> int:
        # 获取已记录的帧数

特点

2.3 统一采集流程

修改文件: data/data_manager.py

改动内容

效果

2.4 battle.py录制功能

修改文件: scripts/battle.py

新增参数

改动内容

用途

示例

# 离线测试并录制
python scripts/battle.py --model checkpoints/model.pth --video moive/1.mp4 --interval 1.0 --record-interval 1.0 --output battle_test.hdf5

# 在线对战并录制
python scripts/battle.py --model checkpoints/model.pth --interval 1.0 --record-interval 1.0 --output battle_online.hdf5

3. 其他修复

3.1 AMP弃用警告修复

修改文件: core/trainer.py

改动内容

3.2 execute_move()稳定性修复

修改文件: environment/compatibility.py

改动内容


4. 配置文件更新

修改文件: config/agent.config.yaml

更新内容


5. 影响范围

5.1 用户可见变化

  1. 内存占用大幅降低:长时间采集不再有内存爆炸风险
  2. battle.py新增录制功能:可记录模型输出用于分析
  3. 配置更明确:use_autowzry_lite参数清晰控制库来源

5.2 开发者变化

  1. 新API:data_manager.create_streaming_recorder()
  2. 废弃API:data_manager.save()(改用collect()或StreamingRecorder)
  3. HDF5新格式:battle.py录制的文件包含q_values字段

6. 测试建议

  1. 测试长时间采集(>1000帧),观察内存占用
  2. 测试battle.py录制功能,检查q_values字段完整性
  3. 测试中断场景,确认数据正确保存
  4. 测试use_autowzry_lite=false时能否正常导入已安装的autowzry

总结

本次改进从根本上解决了内存爆炸问题,将所有采集场景统一为流式写入,显著提升系统稳定性。同时完善了配置管理,修复了脚本参数不一致导致的action space错误。battle.py新增的录制功能为模型分析和调试提供了强大工具。