Loggers#
Logger classes for experiment tracking and visualization.
Loggers support an owner/client deployment model. The direct backend returns
the logger itself from client(). Process and Ray backends return a
picklable client that only exposes logging operations; lifecycle calls remain
on the owner. Remote calls preserve direct-logger semantics: they return after
the concrete logger method has run, propagate service-side errors immediately,
and preserve custom log_* return values. Bounded transport queues provide
backpressure when several clients log concurrently.
from torchrl.record import CSVLogger
logger = CSVLogger(
exp_name="run",
log_dir="logs",
service_backend="process",
service_backend_options={"max_queue_size": 256},
)
worker_logger = logger.client()
worker_logger.log_scalar("loss", 1.0, step=0)
logger.flush() # Flush buffers owned by the concrete logging SDK.
logger.shutdown()
|
A template for loggers. |
|
Driver-owned logger service running in a dedicated process. |
|
Driver-owned Ray logger service with restricted worker clients. |
|
A minimal-dependency CSV logger. |
|
Wrapper for the mlflow logger. |
|
Wrapper for the Tensoarboard logger. |
|
Wrapper for the trackio logger. |
|
Wrapper for the wandb logger. |
|
Get a logger instance of the provided logger_type. |
|
Generates an ID (str) for the described experiment using UUID and current date. |
Monitoring collectors and replay buffers#
Any collector or replay buffer exposes a cheap
stats() /
stats() snapshot of operational counters
(frames collected, buffer size, write count, worker liveness, …). A
LoggerMonitor periodically pulls
those snapshots on a wall-clock or counter
(Every) schedule, derives rates
such as frames per second, and forwards namespaced metrics to any logger,
without adding work to collection or sampling hot paths. This works with
local, multiprocessing and Ray implementations alike.
from torchrl.record import WandbLogger
from torchrl.record.loggers.monitoring import Every, LoggerMonitor
logger = WandbLogger(exp_name="experiment", project="torchrl")
with LoggerMonitor(logger, poll_interval=1.0) as monitor:
monitor.watch(collector, name="collector", schedule=Every.counter("frames", 10_000))
monitor.watch(replay_buffer, name="replay_buffer", schedule=Every.seconds(5), step="write_count")
collector.start()
run_training()
|
A pull-based monitor logging operational statistics of collectors and replay buffers. |
|
A logging schedule for |
Recording utils#
|
Video Recorder transform. |
|
TensorDict recorder. |
|
A transform to call render on the parent environment and register the pixel observation in the tensordict. |