> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/nemo/automodel/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/nemo/automodel/_mcp/server.

# nemo_automodel.components.loggers.metric_logger

## Module Contents

### Classes

| Name                                                                                    | Description                                              |
| --------------------------------------------------------------------------------------- | -------------------------------------------------------- |
| [`MetricLogger`](#nemo_automodel-components-loggers-metric_logger-MetricLogger)         | Simple JSON Lines logger.                                |
| [`MetricLoggerDist`](#nemo_automodel-components-loggers-metric_logger-MetricLoggerDist) | Rank-zero JSON Lines metric logger for distributed jobs. |
| [`MetricsSample`](#nemo_automodel-components-loggers-metric_logger-MetricsSample)       | Single timestamped metrics record.                       |

### Functions

| Name                                                                                                                            | Description                                                                     |
| ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
| [`build_metric_logger`](#nemo_automodel-components-loggers-metric_logger-build_metric_logger)                                   | Build a local or distributed metric logger depending on distributed state.      |
| [`stack_and_move_tensor_metrics_to_cpu`](#nemo_automodel-components-loggers-metric_logger-stack_and_move_tensor_metrics_to_cpu) | Convert tensor metrics in buffered samples to CPU-backed scalar or list values. |

### API

```python
class nemo_automodel.components.loggers.metric_logger.MetricLogger(
    filepath: str,
    flush: bool = False,
    append: bool = True,
    buffer_size: int = 100
)
```

Simple JSON Lines logger.

* Appends one JSON object per line.
* Thread-safe writes via an internal lock.
* Creates parent directories as needed.
* UTF-8 without BOM, newline per record.

```python
nemo_automodel.components.loggers.metric_logger.MetricLogger.__enter__() -> nemo_automodel.components.loggers.metric_logger.MetricLogger
```

```python
nemo_automodel.components.loggers.metric_logger.MetricLogger.__exit__(
    exc_type: type[BaseException] | None,
    exc: BaseException | None,
    tb: typing.Any
) -> None
```

```python
nemo_automodel.components.loggers.metric_logger.MetricLogger._move_to_cpu(
    buffer: typing.List[nemo_automodel.components.loggers.metric_logger.MetricsSample]
) -> typing.List[str]
```

```python
nemo_automodel.components.loggers.metric_logger.MetricLogger._save(
    lines: typing.List[str]
) -> None
```

```python
nemo_automodel.components.loggers.metric_logger.MetricLogger.close() -> None
```

```python
nemo_automodel.components.loggers.metric_logger.MetricLogger.log(
    record: nemo_automodel.components.loggers.metric_logger.MetricsSample
) -> None
```

```python
class nemo_automodel.components.loggers.metric_logger.MetricLoggerDist(
    filepath: str,
    flush: bool = False,
    append: bool = True
)
```

**Bases:** [MetricLogger](#nemo_automodel-components-loggers-metric_logger-MetricLogger)

Rank-zero JSON Lines metric logger for distributed jobs.

```python
nemo_automodel.components.loggers.metric_logger.MetricLoggerDist.__enter__() -> nemo_automodel.components.loggers.metric_logger.MetricLoggerDist
```

```python
nemo_automodel.components.loggers.metric_logger.MetricLoggerDist.__exit__(
    exc_type: type[BaseException] | None,
    exc: BaseException | None,
    tb: typing.Any
) -> None
```

```python
nemo_automodel.components.loggers.metric_logger.MetricLoggerDist.close() -> None
```

```python
nemo_automodel.components.loggers.metric_logger.MetricLoggerDist.log(
    record: nemo_automodel.components.loggers.metric_logger.MetricsSample
) -> None
```

```python
class nemo_automodel.components.loggers.metric_logger.MetricsSample(
    step: int,
    epoch: int,
    metrics: typing.Dict[str, typing.Any] = dict(),
    timestamp: str | None = None
)
```

Dataclass

Single timestamped metrics record.

```python
nemo_automodel.components.loggers.metric_logger.MetricsSample.__post_init__() -> None
```

```python
nemo_automodel.components.loggers.metric_logger.MetricsSample.to_dict() -> typing.Dict[str, typing.Any]
```

```python
nemo_automodel.components.loggers.metric_logger.build_metric_logger(
    filepath: str,
    flush: bool = False,
    append: bool = True
) -> nemo_automodel.components.loggers.metric_logger.MetricLogger
```

Build a local or distributed metric logger depending on distributed state.

```python
nemo_automodel.components.loggers.metric_logger.stack_and_move_tensor_metrics_to_cpu(
    metric_vector: typing.List[nemo_automodel.components.loggers.metric_logger.MetricsSample]
) -> typing.List[nemo_automodel.components.loggers.metric_logger.MetricsSample]
```

Convert tensor metrics in buffered samples to CPU-backed scalar or list values.