如何使用ClearML捕获PFRL通过logger.info输出的指标到Scalars面板
ClearML采集PFRL日志指标到Scalars面板的解决方案
你可以根据自己的需求选择以下三种方案:
方案1:配置ClearML自动日志解析规则(无需改代码,最便捷)
ClearML原生支持自定义正则规则解析控制台输出,自动提取为Scalar指标:
- 打开对应实验的详情页,进入「设置」选项卡下的「日志解析规则」模块
- 参考PFRL输出的指标日志格式编写正则匹配规则,比如默认输出
episode: 100, average_reward: 256.7, loss: 0.342,可以为每个指标编写对应正则,例如匹配平均奖励的正则可写为average_reward: (\d+\.?\d*),将匹配到的数值组对应到指标值,自定义填写指标名即可 - 规则保存后既可以对后续新实验生效,也可以触发历史实验重新解析,无需重跑即可生成Scalars图表
方案2:修改PFRL日志模块实现自动上报(一劳永逸)
如果需要所有PFRL相关实验都自动上报指标,可以直接修改PFRL的日志逻辑:
- 找到PFRL安装目录下的
pfrl/utils/logger.py文件,定位到输出统计指标的info调用逻辑 - 提取指标名、数值、训练步数三个参数后,添加ClearML上报调用:
Logger.current_logger().report_scalar(title="训练指标", series=指标名, value=数值, iteration=步数) - 也可以直接为PFRL的日志实例注册自定义处理器,将所有带统计指标的
logger.info输出自动转发到ClearML的Scalar上报接口
方案3:训练代码添加日志拦截器(侵入性低)
不想改PFRL源码也不想每次配置规则,可以在训练启动前加几行代码拦截PFRL日志:
- 用Python标准库
logging为PFRL的logger实例添加自定义Handler,每次logger.info输出时先过自定义的解析函数 - 解析出指标相关的参数后直接调用ClearML的
report_scalar方法实时上报,不影响原有日志输出逻辑
小提示:如果PFRL的统计指标日志有统一的前缀标识(比如
[STAT]),写正则的时候可以加上前缀过滤,避免误匹配普通的日志内容。
内容的提问来源于stack exchange,提问作者Ventose
相关产品推荐
相关产品推荐

