Implementation:Microsoft Onnxruntime CPU SummaryOps
| Knowledge Sources | |
|---|---|
| Domains | Training, CPU_Kernels |
| Last Updated | 2026-02-10 04:00 GMT |
Overview
Concrete tool for generating TensorBoard summary protocol buffers on CPU in the ONNX Runtime training framework.
Description
This file implements four TensorBoard summary kernels, originally adapted from TensorFlow:
SummaryScalarOp: Creates a TensorBoard Summary protobuf containing tagged scalar values. Each input element is paired with a tag from the tags attribute and serialized as a simple_value. Supports float, double, and bool input types.
SummaryHistogramOp: Creates a TensorBoard Summary containing a histogram of the input tensor. The internal Histogram class uses default bucket limits growing by 10% from 1e-12 to 1e20 (matching TensorFlow defaults), computes min/max/num/sum/sum_squares statistics, and bins values. NaN and Inf values are skipped. Neighboring empty buckets are merged.
SummaryMergeOp: Merges multiple serialized Summary protobufs into a single Summary, checking for duplicate tags.
SummaryTextOp: Creates a TensorBoard Summary with text content. The input string tensor is copied into a TensorProto with the "text" plugin metadata, enabling TensorBoard text visualization.
All output summaries are serialized to strings.
Usage
These kernels are invoked during training to produce TensorBoard-compatible summary data for visualization of scalars, histograms, and text during training monitoring.
Code Reference
Source Location
- Repository: Microsoft_Onnxruntime
- File: orttraining/orttraining/training_ops/cpu/tensorboard/summary_op.cc
- Lines: 1-284
Signature
SummaryScalarOp::SummaryScalarOp(const OpKernelInfo& info);
Status SummaryScalarOp::Compute(OpKernelContext* context) const;
template <typename T>
Status SummaryScalarOp::ComputeImpl(OpKernelContext& context, const Tensor& input) const;
SummaryHistogramOp::SummaryHistogramOp(const OpKernelInfo& info);
Status SummaryHistogramOp::Compute(OpKernelContext* context) const;
template <typename T>
Status SummaryHistogramOp::ComputeImpl(OpKernelContext& context, const Tensor& input) const;
SummaryMergeOp::SummaryMergeOp(const OpKernelInfo& info);
Status SummaryMergeOp::Compute(OpKernelContext* context) const;
SummaryTextOp::SummaryTextOp(const OpKernelInfo& info);
Status SummaryTextOp::Compute(OpKernelContext* context) const;
Import
#include "orttraining/orttraining/training_ops/cpu/tensorboard/summary_op.h"
I/O Contract
Inputs (SummaryScalar)
| Name | Type | Required | Description |
|---|---|---|---|
| input | Tensor(float/double/bool) | Yes | Scalar values to summarize (size must match tags) |
Outputs (SummaryScalar)
| Name | Type | Description |
|---|---|---|
| summary | Tensor(string) | Serialized TensorBoard Summary protobuf |
Inputs (SummaryHistogram)
| Name | Type | Required | Description |
|---|---|---|---|
| input | Tensor(float/double) | Yes | Values to build histogram from |
Outputs (SummaryHistogram)
| Name | Type | Description |
|---|---|---|
| summary | Tensor(string) | Serialized TensorBoard Summary protobuf with histogram |
Inputs (SummaryMerge)
| Name | Type | Required | Description |
|---|---|---|---|
| summaries (variadic) | Tensor(string) | Yes | Serialized Summary protobufs to merge |
Outputs (SummaryMerge)
| Name | Type | Description |
|---|---|---|
| merged_summary | Tensor(string) | Serialized merged TensorBoard Summary protobuf |
Inputs (SummaryText)
| Name | Type | Required | Description |
|---|---|---|---|
| input | Tensor(string) | Yes | Text values to summarize |
Outputs (SummaryText)
| Name | Type | Description |
|---|---|---|
| summary | Tensor(string) | Serialized TensorBoard Summary protobuf with text |
Usage Examples
ONNX_OPERATOR_KERNEL_EX(
SummaryScalar, kMSDomain, 1, kCpuExecutionProvider,
KernelDefBuilder()
.TypeConstraint("T", {DataTypeImpl::GetTensorType<float>(),
DataTypeImpl::GetTensorType<double>(),
DataTypeImpl::GetTensorType<bool>()})
.TypeConstraint("S", DataTypeImpl::GetTensorType<std::string>()),
SummaryScalarOp);
ONNX_OPERATOR_KERNEL_EX(
SummaryHistogram, kMSDomain, 1, kCpuExecutionProvider,
KernelDefBuilder()
.TypeConstraint("T", {DataTypeImpl::GetTensorType<float>(),
DataTypeImpl::GetTensorType<double>()})
.TypeConstraint("S", DataTypeImpl::GetTensorType<std::string>()),
SummaryHistogramOp);