Console, system metrics, and integrations

Capture stdout/stderr, system metrics, local audit events, and lightweight framework adapters.

Open .md

Turn on console capture, tune automatic system-metrics sampling, control source-metadata collection, and wire framework adapters — each feature is explicit and enabled per run.

Capture console logs

Log individual lines directly:

python
run.log_stdout("epoch=1 loss=0.42")
run.log_stderr(["warning: entropy dipped", "retrying evaluation"])

Or let the SDK wrap stdout and stderr:

python
import instantml as im

run = im.init(
    project="train-loop",
    name="seed-7",
    capture_console=True,
)

Captured console lines are written through to the original stream and also sent to InstantML as text-series attributes named console/stdout and console/stderr. They appear in the Run Detail Logs section, which only fetches log rows when you open it.

Sample system metrics

System metrics are collected automatically: im.init() samples CPU, memory, disk, network, and GPU stats every 15 seconds by default. Pass system_metrics=False to disable, or system_metrics_interval=<seconds> to change the cadence.

python
run = im.init(
    project="train-loop",
    name="seed-7",
    system_metrics_interval=30.0,
)

System metrics log under system/... at the current step without incrementing the run's implicit step counter. Install the system extra for the optional system dependencies:

bash
python3 -m pip install "instantml[system]"

Keep a local audit store

The local SQLite audit store records attempted SDK events before submit:

python
run = im.init(
    project="train-loop",
    local_store=True,
    local_store_dir=".instantml/local",
)

Control source metadata

By default, the SDK captures privacy-safe reproducibility context when it can:

  • Python version.
  • Platform.
  • Git availability, commit, and dirty state.
  • Entrypoint basename when available.

Hostname, process ID, current working directory, full command argv, branch, and git diff metadata are opt-in:

python
run = im.init(
    project="train-loop",
    source_tracking=im.SourceTracking(
        command=True,
        paths=True,
        branch=True,
        hostname=True,
        pid=True,
        git_diff=True,
    ),
)

Disable source capture entirely for sensitive jobs:

python
run = im.init(project="private-run", source_tracking=False)

SDK-owned source metadata is reserved and cannot be overwritten by user-provided metadata.

Use framework adapters

Adapters stay deliberately thin. They help common frameworks call the same public SDK methods rather than adding a second integration model.

python
run.watch(model, log="gradients", log_freq=100)
trainer.add_callback(im.TransformersCallback(run=run))
logger = im.LightningLogger(project="cartpole")

Prefer direct run.log(...) calls for custom loops. Use adapters when a framework already owns the training lifecycle — see the per-framework guides for setup details.

Next steps