🌟 Summary
v8.3.184 introduces a new SystemLogger for real-time system metrics and a high-performance ConsoleLogger for early, continuous training log capture — improving observability, reliability, and integrations across YOLO11 workflows. 📈🖥️📝
📊 Key Changes
- New SystemLogger (ultralytics.utils.logger.SystemLogger)
- Collects CPU, RAM, disk I/O, network I/O, and NVIDIA GPU stats via pynvml.
- Integrated into training via platform callbacks; metrics sampled at epoch end.
- New ConsoleLogger (ultralytics.utils.logger.ConsoleLogger)
- Captures stdout/stderr and Ultralytics logger output early in training.
- Deduplicates noisy lines/progress bars and streams to file (train.log) or an API.
- Enabled via new platform callbacks; logging now starts on trainer initialization.
- Platform callbacks module
- ultralytics.utils.callbacks.platform registers start/stop hooks for console capture and metrics collection.
- Metrics type consistency
- Checkpoints now save metrics as plain Python floats for better serialization and tool compatibility.
- Cleaner CI progress bars
- TQDM updates are throttled on GitHub Actions for cleaner logs; no change for local runs.
- Documentation improvements
- API docs now include async functions and a reference for the new NDJSON-to-YOLO converter.
- New docs pages for platform callbacks and the logger utilities.
🎯 Purpose & Impact
- Better training visibility and debugging
- SystemLogger provides actionable telemetry (CPU/GPU/memory/disk/network) to diagnose bottlenecks and environment issues. 🔍
- More reliable, complete logs
- ConsoleLogger starts early and deduplicates noise for stable, searchable training logs locally or via APIs. 📜
- Smoother integrations and exports
- Float metrics avoid serialization errors when working with Ultralytics HUB, W&B, TensorBoard, JSON/CSV/YAML. 🔗
- Cleaner CI pipelines
- Reduced log spam and fewer rate-limit risks on GitHub Actions. ✅
- Documentation catch-up
- Clearer API references and discoverability for new utilities and data conversion tools. 📚
Quick start examples:
- Capture console output to file:
from ultralytics.utils.logger import ConsoleLogger
logger = ConsoleLogger("train.log")
logger.start_capture()
print("Training starts...")
logger.stop_capture()
- Fetch system metrics on demand:
from ultralytics.utils.logger import SystemLogger
syslog = SystemLogger()
print(syslog.get_metrics()) # {'cpu': ..., 'ram': ..., 'disk': {...}, 'network': {...}, 'gpus': {...}}
See the Ultralytics Docs for details.
What's Changed
- Fix missing
async
functions in Docs bug by @glenn-jocher in #21760 - Add ConsoleLogger class by @glenn-jocher in #21761
- Update metrics.py from numpy to floats by @glenn-jocher in #21773
- Cleaner TQDM in CI by @glenn-jocher in #21775
ultralytics 8.3.184
New SystemLogger class by @glenn-jocher in #21764
Full Changelog: v8.3.183...v8.3.184