Skip to main content
August 5, 2026

Performance

  • Spool writes are about 45x faster. 2,000 sequential batch writes dropped from 16.7 seconds to 373 ms, or 8.3 ms to 187 microseconds per write. The writer keeps a running byte total instead of rescanning the spool directory on every write.
  • About 80% less per-step overhead in the PyTorch hook, from 91 to 19 microseconds per optimizer step at ResNet50 scale, returning roughly 72 ms per 1,000-step epoch. Applies to runs with snapshots enabled and a model registered through ci.watch().
  • CUDA event objects are pooled rather than allocated per timed span, and pending-event draining runs on a cadence instead of on every operation.
  • Constant-cost flush path, with bounded memory if the flush thread stalls.

Diagnostics

  • ci.health() now reports swallowed_error_count and swallowed_errors, so instrumentation that quietly stops collecting is visible rather than looking like a model with nothing to report.

Bug Fixes

  • Fixed diverged runs invalidating an entire batch of profiling data. Non-finite values are written as strict JSON with a companion field naming the value.
  • Fixed GPU timings intermittently missing from spans when kernels finished after the flush tick.
  • Fixed long epochs being split into several when an epoch ran past the step-count fallback. Two real epochs were previously reported as four.
  • Fixed flush_now() ignoring your configured spool directory and size cap.
  • Fixed orphaned temp files never counting toward the spool cap or being reclaimed.
  • Fixed unserializable values in attrs breaking batch writes.
  • Fixed warnings printed into your training log when a model diverged.
May 7, 2026

Initial Release

The Cirron Python SDK is now generally available on PyPI. It is a profiler that attaches to the running process with one line, captures what’s happening inside training and inference, and writes open artifacts that work standalone or stream to the platform.

ci.profile(): one line, no scope wrapping

  • Auto-detects PyTorch, TensorFlow / Keras, and HuggingFace Transformers and installs hooks without scope wrappers or callbacks
  • Same zero-touch experience for Trainer.train(), model.fit(), and plain training loops

What gets captured automatically

  • Per-epoch and per-batch wall time, GPU seconds, and memory peak
  • Weight and gradient statistics (mean, std, norm, histogram) per epoch
  • DataLoader stall time broken out from compute time
  • ci.mark() for user metrics alongside the auto-captured signals

ci.load(): unified data loader

  • Returns pandas, polars, Arrow, or datasets.Dataset based on the optional extras installed
  • Reads from local files, object storage (S3, GCS, Azure Blob), and SQL warehouses (Postgres, MySQL, Databricks, Snowflake)

@ci.inference: serving instrumentation

  • Decorator-based capture of p50 / p95 / p99 latency, throughput, error rate, and cost-per-request
  • Token counts and time-to-first-token surface automatically for LLM endpoints

Local-first, platform-optional

  • Writes structured JSON spans and safetensors snapshots to ./.cirron/ with no credentials required
  • Set CIRRON_API_KEY to stream to the platform; pipeline, deployment, and run context are injected automatically inside Cirron-managed environments
  • Snapshot modes for full, sampled, and stats-only captures
Read the SDK documentation →