ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

TensorBoard Scalar 插件 HTTP API 完全指南:tags 索引、单 run 查询与多 run 批量读取

TensorBoard Scalar 插件 HTTP API 完全指南:tags 索引、单 run 查询与多 run 批量读取 数据可视化机器学习前端后端【免费下载链接】tensorboardTensorFlows Visualization Toolkit项目地址https://gitcode.com/gh_mirrors/te/tensorboard点击查看免费下载Scalar标量插件是 TensorBoard 中最常用、最基础的插件负责把训练过程中的 loss、accuracy、learning rate 等随时间变化的数值以时间序列的形式可视化。本文以官方 tensorboard/plugins/scalar/http_api.md 为骨架结合当前仓库中 scalars_plugin.py、scalars_plugin_test.py 等源码实现系统讲解该插件三个 HTTP 端点的请求/响应协议、参数约定、错误语义与底层数据读取机制。读完本文你将能直接用curl或fetch从运行中的 TensorBoard 实例拉取标量数据也能理解这些接口背后从事件文件到 JSON/CSV 输出的完整调用链。路由总览/data/plugin/scalarsScalar 插件的插件名为scalars因此它暴露的所有路由都挂在/data/plugin/scalars之下。该插件一共注册了三个端点注册逻辑见 scalars_plugin.py 的get_plugin_apps()路由方法功能/data/plugin/scalars/tagsGET返回所有包含标量数据的 run 及其 tag 索引含 displayName 与 HTML 化的 description/data/plugin/scalars/scalars?runfootagbarGET返回指定 run、tag 的标量事件数组支持formatcsv输出 CSV/data/plugin/scalars/scalars_multirunPOST接收表单编码数据一次查询多个 run 的同一 tag三个端点的响应都经由 http_util.Respond 包装JSON 数据以application/json返回CSV 数据以text/csv返回。同时插件通过plugin_name metadata.PLUGIN_NAME值为scalars见 metadata.py把自己挂接到 TensorBoard 的插件路由系统中前端对应渲染组件为tf-scalar-dashboard。数据从哪来scalar summary 的写入与元数据要理解这三个端点的响应先要知道标量数据本身是如何产生的。当前仓库提供了两套写入 APIV2 推荐用法tf.summary.scalar(name, data, step, description)实现见 summary_v2.py。数据必须是可转换为float32的标量step是单调递增的int64description支持 Markdown写入时会通过metadata.create_summary_metadata()把displayName与description打包进 Summary 元数据。V1 兼容用法summary.op(...)/summary.pb(...)见 summary.py。注意 V1 写法生成的实际 tag 会带上scalar_summary后缀例如loss变成loss/scalar_summary这一点在测试 scalars_plugin_test.py 中有明确体现。每条 scalar summary 的SummaryMetadata.plugin_data中plugin_name为scalarscontent是 plugin_data.proto 中ScalarPluginData消息的二进制编码目前仅支持version 0见 metadata.py。插件在读取时会做版本校验跳过未知版本的数据具体逻辑在 scalars_plugin.py。想快速生成一批可查询的标量数据可以直接运行仓库自带的演示脚本python tensorboard/plugins/scalar/scalars_demo.pyscalars_demo.py它会模拟一个温度扩散过程向/tmp/scalars_demo写入 18 个 run 的标量事件随后用tensorboard --logdir/tmp/scalars_demo启动服务即可体验下文所有端点。端点一GET /data/plugin/scalars/tags请求与响应结构该端点检索所有包含标量数据的 tag 索引无参数。响应是一个嵌套 JSON 对象外层 key 为runNamerun 名内层 key 为tagNametag 名每个 tag 对应一个对象包含两个字段displayName展示名字符串description描述字符串内容是经过消毒sanitize的 HTML可以直接安全地插入 DOM 渲染。官方文档给出的响应示例{ train_run: { loss: { displayName: Loss, description: pModel loss, computed with a cross-entropy metric./p }, learning_rate: { displayName: Learning rate, description: } }, eval: { precision: { displayName: Precision, description: pProportion of true positives over all positives./p }, recall: { displayName: Recall, description: pProportion of true positives over all true samples./p } } }关键语义没有任何标量 tag 的 run 会被整体省略。这意味着你不能指望响应里出现所有已注册 run前端通常需要把/tags的结果与运行列表做并集处理。源码级实现tags路由的处理函数是tags_routescalars_plugin.py它从 WSGI 环境取出RequestContext与 experiment ID 后调用index_implscalars_plugin.py。index_impl的核心调用链调用self._data_provider.list_scalars(...)获取 run → tag → 元数据 的嵌套映射该接口定义在 tensorboard/data/provider.py 的DataProvider.list_scalars对每个 tag 的元数据解析plugin_content中的ScalarPluginData并用plugin_util._MetadataVersionChecker校验版本latest_known_version0不兼容的 tag 会被静默跳过通过 plugin_util.markdown_to_safe_html 把写入时提供的 Markdown 描述转换成安全的 HTML。该函数使用带表格、围栏代码扩展的 Markdown 渲染器再经 Bleach 消毒保证描述中的原始 HTML 不会构成 XSS 风险。集成测试test_indexscalars_plugin_test.py验证了三点响应为application/json含标量数据的 run/tag 全部出现在结果中V2 的displayName与 HTML 描述被正确回传只含 histogram 数据的 run 不出现在结果里。端点二GET /data/plugin/scalars/scalars?runfootagbar请求参数参数必填说明run是run 名称tag是tag 名称format否取值为csv时返回 CSV 格式缺省返回 JSON两个必填参数缺一不可源码中scalars_routescalars_plugin.py在tag is None or run is None时直接抛出errors.InvalidArgumentError对应 HTTP 400。测试 test_scalars_with_scalars_unspecified_run 与test_scalars_with_scalars_unspecified_tag分别验证了缺 run、缺 tag 时返回 400。JSON 响应默认返回一个事件数组每个事件是三元组[wall_time, step, value]wall_time浮点数自 Unix 纪元epoch起的秒数step整数步数计数器value实际的标量值。官方示例[ [1443856985.705543, 1448, 0.7461960315704346], [1443857105.704628, 3438, 0.5427092909812927], [1443857225.705133, 5417, 0.5457325577735901] ]CSV 响应当请求带formatcsv时响应体变为纯文本 CSV首行为表头Wall time,Step,Value随后每行一个数据点Wall time,Step,Value 1443856985.705543,1448,0.7461960315704346 1443857105.704628,3438,0.5427092909812927 1443857225.705133,5417,0.5457325577735901实现细节在scalars_implscalars_plugin.pyCSV 分支使用 Python 标准库csv.writer写入io.StringIO表头固定为[Wall time, Step, Value]MIME 类型为text/csvJSON 分支直接返回三元组列表MIME 类型为application/json。测试 test_download_url_csv 断言了 CSV 表头、行数与 Content-Type。下采样与数据缺失语义响应中的点数受**下采样downsample**影响scalars_impl调用read_scalars时传入downsampleself._downsample_to该值默认取_DEFAULT_DOWNSAMPLING 1000scalars_plugin.py即每个时间序列最多返回约 1000 个点总是保留最近的一个数据点。如果通过sampling_hints对scalars插件做了覆盖配置则优先使用配置值scalars_plugin.py。关于downsample的语义见 tensorboard/data/provider.py 中DataProvider.read_scalars的文档说明。若指定的 run tag 组合没有任何数据all_scalars.get(run, {}).get(tag, None)会得到None此时抛出errors.NotFoundError对应 HTTP 404测试test_scalars_with_histogram验证了用 histogram tag 查询标量数据返回 404见 scalars_plugin_test.py。端点三POST /data/plugin/scalars/scalars_multirun请求格式与 GET 端点不同该端点用于一次查询多个 run 的同一个 tag只能使用 POST 方法tag**必填、单值singleton**键只能出现一次runs可重复出现的键每个值是一个 run 名。官方给出的前端调用示例JavaScriptconst formData new FormData(); formData.set(tag, xent/xent_1); formData.append(runs, mnist/lr_1E-03,conv1,fc2); formData.append(runs, mnist/lr_1E-03,conv2,fc2); const response await fetch( /data/plugin/scalars/scalars_multirun, {method: POST, body: formData} );注意 run 名可以包含逗号如mnist/lr_1E-03,conv1,fc2因此表单按runs键逐个 append而非用逗号拼接。响应结构响应是 JSON 对象把 run 名映射到与/data/plugin/scalars/scalars相同形式的事件数组{ mnist/lr_1E-03,conv1,fc2: [ [1563406328.158425, 0, 3.8424863815307617], [1563406328.5136807, 5, 5.210817337036133] ], mnist/lr_1E-03,conv2,fc2: [ [1563406405.8505669, 0, 11.278410911560059], [1563406406.357564, 5, 7.649646759033203] ] }容错语义这是该端点与单 run 端点最大的区别不存在数据的 run-tag 组合不会导致报错。具体表现为只有真实存在数据的 run 才会出现在输出中若部分或全部请求的 run 都无数据响应可能缺少某些请求过的 run甚至整体返回空对象{}。源码中scalars_multirun_implscalars_plugin.py直接以read_scalars返回的映射构造 body天然省略了无数据的 run。测试 test_scalars_multirun 验证了请求中混入无该 tag 数据的 run 与完全不存在的 run 时响应只包含有数据的两个 runtest_scalars_multirun_no_runs 验证了不传runs时返回{}且状态码为 200。参数校验scalars_multirun_routescalars_plugin.py做了三处校验非 POST 请求返回 405并在Allow头中声明POST测试见 test_scalars_multirun_bad_methodtag必须恰好出现一次缺失或多传都会返回 400错误消息为 tag must be specified exactly once测试见test_scalars_multirun_no_tag与test_scalars_multirun_two_tagsscalars_plugin_test.pyruns可以为空列表不传此时响应为空对象而非报错。实战用 curl 直接调用这三个端点假设 TensorBoard 已在本机 6006 端口运行--logdir指向包含标量数据的目录# 1. 查看所有含标量数据的 run 与 tag 索引 curl -s http://localhost:6006/data/plugin/scalars/tags # 2. 查询单个 run 单个 tagJSON curl -s http://localhost:6006/data/plugin/scalars/scalars?runtraintagloss # 3. 查询单个 run 单个 tagCSV适合直接落盘做离线分析 curl -s http://localhost:6006/data/plugin/scalars/scalars?runtraintaglossformatcsv -o loss.csv # 4. 批量查询多个 run 的同一 tagPOST 表单编码 curl -s -X POST http://localhost:6006/data/plugin/scalars/scalars_multirun \ -F tagloss \ -F runstrain_run \ -F runseval_run错误与边界情况速查场景状态码说明/scalars缺少run或tag400错误消息为 Both run and tag must be specified/scalars查询的 runtag 无数据404错误消息为 No scalar data for run..., tag.../scalars_multirun使用 GET405响应头Allow: POST/scalars_multirun的tag缺失或出现多次400错误消息为 tag must be specified exactly once/scalars_multirun部分/全部 run 无数据200不报错省略对应 run 或返回空对象tag 元数据版本不兼容忽略在/tags索引与读取中被静默跳过进阶理解底层数据读取链路这三个端点最终都汇入tensorboard.data.provider.DataProvider抽象接口tensorboard/data/provider.py。list_scalars与read_scalars是两个核心方法实际运行时由具体实现如本地事件文件的MultiplexerDataProvider或未来的 gRPC 数据服务提供。插件层与数据层解耦的设计意味着同样的 HTTP API 契约无论是本地--logdir模式还是远端数据源模式都保持一致这也是官方文档把这三个端点作为稳定接口对外公开的原因。对于希望基于 TensorBoard 做二次开发如导出训练曲线、构建自定义仪表盘的开发者推荐按以下顺序深入阅读tensorboard/plugins/scalar/http_api.md——本文所述的官方接口规范原文tensorboard/plugins/scalar/scalars_plugin.py——三个端点的完整实现tensorboard/plugins/scalar/scalars_plugin_test.py——覆盖正常、错误与边界路径的集成测试是理解协议语义最直接的可执行文档tensorboard/plugins/scalar/summary_v2.py——数据写入端 API掌握 tag、displayName、description的生成规则tensorboard/plugins/scalar/metadata.py 与 tensorboard/plugins/scalar/plugin_data.proto——插件名、元数据版本等协议细节。赞分享数据可视化机器学习前端后端【免费下载链接】tensorboardTensorFlows Visualization Toolkit项目地址https://gitcode.com/gh_mirrors/te/tensorboard点击查看免费下载相关推荐TensorBoard Histograms 插件 HTTP API 完全指南tags 索引与直方图数据端点解析TensorBoard Histograms 插件 HTTP API 完全指南tags 索引与直方图数据端点解析 本篇技术指南以 TensorBoard 开源数据可视化机器学习前端后端ToolJet Run Query 动作完全指南事件触发查询与 Debounce 防抖机制ToolJet Run Query 动作完全指南事件触发查询与 Debounce 防抖机制 Run Query 是 ToolJet 应用构建器中用途最广的事件低代码后端前端AI 应用MCP 服务Apache Iceberg Flink 查询指南SQL 与 DataStream 的批量读取、流式读取与元数据表查询Apache Iceberg Flink 查询指南SQL 与 DataStream 的批量读取、流式读取与元数据表查询 Apache Iceberg 与 Ap数据湖大数据数据存储上一篇QMCDecode解锁QQ音乐加密音频的macOS专业解决方案下一篇3分钟掌握QMCDecode让QQ音乐加密音频在macOS上自由播放创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表