Lightning-AI/pytorch-lightning · error · RuntimeError

Experiment is not initialized

Error message

Experiment is not initialized

What it means

LitLogger (the AI experiment logger) lazily initializes its Experiment object; _require_experiment is called by url, log_metrics, log_hyperparams, log_metadata, log_model and log_model_artifact and raises if self.experiment is still None, i.e. initialization never succeeded/was never triggered.

Source

Thrown at src/lightning/pytorch/loggers/litlogger.py:230

            self._version = timestamp.replace(":", "-").replace("+00:00", "Z")

        self._experiment = litlogger.Experiment(
            name=self._experiment_name,
            teamspace=self._teamspace,
            metadata={k: str(v) for k, v in self._metadata.items()},
            store_step=True,
            store_created_at=True,
            log_dir=self.log_dir,
            save_logs=self._save_logs,
        )
        self._experiment.print_url()

        return self._experiment

    def _require_experiment(self) -> "Experiment":
        experiment = self.experiment
        if experiment is None:
            raise RuntimeError("Experiment is not initialized")
        return experiment

    @property
    @rank_zero_only
    def url(self) -> str:
        return self._require_experiment().url

    # ──────────────────────────────────────────────────────────────────────────────
    # Override methods from Logger
    # ──────────────────────────────────────────────────────────────────────────────

    @override
    @rank_zero_only
    def log_metrics(self, metrics: Mapping[str, float], step: Optional[int] = None) -> None:
        assert rank_zero_only.rank == 0, "experiment tried to log from global_rank != 0"

        # Ensure experiment is initialized
        experiment = self._require_experiment()

View on GitHub (pinned to 9fed5c27d2)

Solutions

  1. Touch logger.experiment once (on rank 0) before using url/log methods to force initialization
  2. Ensure you're inside a training run or explicit initialization context so setup occurs
  3. Inspect earlier logs for a failed experiment-init error (auth/network) and fix that root cause

Example fix

// before
logger = LitLogger(...)
print(logger.url)  # RuntimeError
// after
logger = LitLogger(...)
_ = logger.experiment  # force init
print(logger.url)
Defensive patterns

Strategy: validation

Validate before calling

exp = logger.experiment
if exp is None:
    raise RuntimeError("LitLogger experiment failed to initialize")

Type guard

def logger_ready(logger) -> bool:
    return logger.experiment is not None

Try / catch

try:
    logger.log_metrics(metrics, step=step)
except RuntimeError as e:
    if "not initialized" in str(e):
        _ = logger.experiment  # retry init once
        logger.log_metrics(metrics, step=step)
    else:
        raise

Prevention

When it happens

Trigger: Accessing logger.url or calling logger.log_metrics(...) before the experiment was created — e.g. before the logger's experiment property ran its rank-zero initialization, or after a failed initialization left _experiment as None.

Common situations: Using the logger outside a Trainer where lazy init never happens, calling logging methods on rank!=0 processes after init only ran on rank 0, or a network/credential failure during experiment creation swallowed earlier.

Related errors


AI-assisted analysis of Lightning-AI/pytorch-lightning@9fed5c27d2 (2026-08-28). Data as JSON: /api/errors/361aed023e091309. Report an issue: GitHub.