lightning 2.5.5


pip install lightning

  Latest version

Released: Sep 05, 2025


Meta
Author: Lightning AI et al.
Requires Python: >=3.9

Classifiers

Environment
  • Console

Natural Language
  • English

Development Status
  • 4 - Beta

Intended Audience
  • Developers

Topic
  • Scientific/Engineering :: Artificial Intelligence
  • Scientific/Engineering :: Information Analysis

License
  • OSI Approved :: Apache Software License

Operating System
  • OS Independent

Programming Language
  • Python :: 3
  • Python :: 3.9
  • Python :: 3.10
  • Python :: 3.11
  • Python :: 3.12
Lightning

The deep learning framework to pretrain, finetune and deploy AI models.

NEW- Deploying models? Check out LitServe, the PyTorch Lightning for model serving


Quick startExamplesPyTorch LightningFabricLightning AICommunityDocs

PyPI - Python Version PyPI Status PyPI - Downloads Conda codecov

Discord GitHub commit activity license

 

Get started

 

Why PyTorch Lightning?

Training models in plain PyTorch is tedious and error-prone - you have to manually handle things like backprop, mixed precision, multi-GPU, and distributed training, often rewriting code for every new project. PyTorch Lightning organizes PyTorch code to automate those complexities so you can focus on your model and data, while keeping full control and scaling from CPU to multi-node without changing your core code. But if you want control of those things, you can still opt into more DIY.

Fun analogy: If PyTorch is Javascript, PyTorch Lightning is ReactJS or NextJS.

Lightning has 2 core packages

PyTorch Lightning: Train and deploy PyTorch at scale.
Lightning Fabric: Expert control.

Lightning gives you granular control over how much abstraction you want to add over PyTorch.

 

Quick start

Install Lightning:

pip install lightning

PyTorch Lightning example

Define the training workflow. Here's a toy example (explore real examples):

# main.py
# ! pip install torchvision
import torch, torch.nn as nn, torch.utils.data as data, torchvision as tv, torch.nn.functional as F
import lightning as L

# --------------------------------
# Step 1: Define a LightningModule
# --------------------------------
# A LightningModule (nn.Module subclass) defines a full *system*
# (ie: an LLM, diffusion model, autoencoder, or simple image classifier).


class LitAutoEncoder(L.LightningModule):
    def __init__(self):
        super().__init__()
        self.encoder = nn.Sequential(nn.Linear(28 * 28, 128), nn.ReLU(), nn.Linear(128, 3))
        self.decoder = nn.Sequential(nn.Linear(3, 128), nn.ReLU(), nn.Linear(128, 28 * 28))

    def forward(self, x):
        # in lightning, forward defines the prediction/inference actions
        embedding = self.encoder(x)
        return embedding

    def training_step(self, batch, batch_idx):
        # training_step defines the train loop. It is independent of forward
        x, _ = batch
        x = x.view(x.size(0), -1)
        z = self.encoder(x)
        x_hat = self.decoder(z)
        loss = F.mse_loss(x_hat, x)
        self.log("train_loss", loss)
        return loss

    def configure_optimizers(self):
        optimizer = torch.optim.Adam(self.parameters(), lr=1e-3)
        return optimizer


# -------------------
# Step 2: Define data
# -------------------
dataset = tv.datasets.MNIST(".", download=True, transform=tv.transforms.ToTensor())
train, val = data.random_split(dataset, [55000, 5000])

# -------------------
# Step 3: Train
# -------------------
autoencoder = LitAutoEncoder()
trainer = L.Trainer()
trainer.fit(autoencoder, data.DataLoader(train), data.DataLoader(val))

Run the model on your terminal

pip install torchvision
python main.py

 

Why PyTorch Lightning?

PyTorch Lightning is just organized PyTorch - Lightning disentangles PyTorch code to decouple the science from the engineering.

 


Examples

Explore various types of training possible with PyTorch Lightning. Pretrain and finetune ANY kind of model to perform ANY task like classification, segmentation, summarization and more:

Task Description Run
Hello world Pretrain - Hello world example Open In Studio
Image classification Finetune - ResNet-34 model to classify images of cars Open In Studio
Image segmentation Finetune - ResNet-50 model to segment images Open In Studio
Object detection Finetune - Faster R-CNN model to detect objects Open In Studio
Text classification Finetune - text classifier (BERT model) Open In Studio
Text summarization Finetune - text summarization (Hugging Face transformer model) Open In Studio
Audio generation Finetune - audio generator (transformer model) Open In Studio
LLM finetuning Finetune - LLM (Meta Llama 3.1 8B) Open In Studio
Image generation Pretrain - Image generator (diffusion model) Open In Studio
Recommendation system Train - recommendation system (factorization and embedding) Open In Studio
Time-series forecasting Train - Time-series forecasting with LSTM Open In Studio

Advanced features

Lightning has over 40+ advanced features designed for professional AI research at scale.

Here are some examples:

Train on 1000s of GPUs without code changes
# 8 GPUs
# no code changes needed
trainer = Trainer(accelerator="gpu", devices=8)

# 256 GPUs
trainer = Trainer(accelerator="gpu", devices=8, num_nodes=32)
Train on other accelerators like TPUs without code changes
# no code changes needed
trainer = Trainer(accelerator="tpu", devices=8)
16-bit precision
# no code changes needed
trainer = Trainer(precision=16)
Experiment managers
from lightning import loggers

# tensorboard
trainer = Trainer(logger=TensorBoardLogger("logs/"))

# weights and biases
trainer = Trainer(logger=loggers.WandbLogger())

# comet
trainer = Trainer(logger=loggers.CometLogger())

# mlflow
trainer = Trainer(logger=loggers.MLFlowLogger())

# neptune
trainer = Trainer(logger=loggers.NeptuneLogger())

# ... and dozens more
Early Stopping
es = EarlyStopping(monitor="val_loss")
trainer = Trainer(callbacks=[es])
Checkpointing
checkpointing = ModelCheckpoint(monitor="val_loss")
trainer = Trainer(callbacks=[checkpointing])
Export to torchscript (JIT) (production use)
# torchscript
autoencoder = LitAutoEncoder()
torch.jit.save(autoencoder.to_torchscript(), "model.pt")
Export to ONNX (production use)
# onnx
with tempfile.NamedTemporaryFile(suffix=".onnx", delete=False) as tmpfile:
    autoencoder = LitAutoEncoder()
    input_sample = torch.randn((1, 64))
    autoencoder.to_onnx(tmpfile.name, input_sample, export_params=True)
    os.path.isfile(tmpfile.name)

Advantages over unstructured PyTorch

  • Models become hardware agnostic
  • Code is clear to read because engineering code is abstracted away
  • Easier to reproduce
  • Make fewer mistakes because lightning handles the tricky engineering
  • Keeps all the flexibility (LightningModules are still PyTorch modules), but removes a ton of boilerplate
  • Lightning has dozens of integrations with popular machine learning tools.
  • Tested rigorously with every new PR. We test every combination of PyTorch and Python supported versions, every OS, multi GPUs and even TPUs.
  • Minimal running speed overhead (about 300 ms per epoch compared with pure PyTorch).


   

Lightning Fabric: Expert control

Run on any device at any scale with expert-level control over PyTorch training loop and scaling strategy. You can even write your own Trainer.

Fabric is designed for the most complex models like foundation model scaling, LLMs, diffusion, transformers, reinforcement learning, active learning. Of any size.

What to change Resulting Fabric Code (copy me!)
+ import lightning as L
  import torch; import torchvision as tv

 dataset = tv.datasets.CIFAR10("data", download=True,
                               train=True,
                               transform=tv.transforms.ToTensor())

+ fabric = L.Fabric()
+ fabric.launch()

  model = tv.models.resnet18()
  optimizer = torch.optim.SGD(model.parameters(), lr=0.001)
- device = "cuda" if torch.cuda.is_available() else "cpu"
- model.to(device)
+ model, optimizer = fabric.setup(model, optimizer)

  dataloader = torch.utils.data.DataLoader(dataset, batch_size=8)
+ dataloader = fabric.setup_dataloaders(dataloader)

  model.train()
  num_epochs = 10
  for epoch in range(num_epochs):
      for batch in dataloader:
          inputs, labels = batch
-         inputs, labels = inputs.to(device), labels.to(device)
          optimizer.zero_grad()
          outputs = model(inputs)
          loss = torch.nn.functional.cross_entropy(outputs, labels)
-         loss.backward()
+         fabric.backward(loss)
          optimizer.step()
          print(loss.data)
import lightning as L
import torch; import torchvision as tv

dataset = tv.datasets.CIFAR10("data", download=True,
                              train=True,
                              transform=tv.transforms.ToTensor())

fabric = L.Fabric()
fabric.launch()

model = tv.models.resnet18()
optimizer = torch.optim.SGD(model.parameters(), lr=0.001)
model, optimizer = fabric.setup(model, optimizer)

dataloader = torch.utils.data.DataLoader(dataset, batch_size=8)
dataloader = fabric.setup_dataloaders(dataloader)

model.train()
num_epochs = 10
for epoch in range(num_epochs):
    for batch in dataloader:
        inputs, labels = batch
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = torch.nn.functional.cross_entropy(outputs, labels)
        fabric.backward(loss)
        optimizer.step()
        print(loss.data)

Key features

Easily switch from running on CPU to GPU (Apple Silicon, CUDA, …), TPU, multi-GPU or even multi-node training
# Use your available hardware
# no code changes needed
fabric = Fabric()

# Run on GPUs (CUDA or MPS)
fabric = Fabric(accelerator="gpu")

# 8 GPUs
fabric = Fabric(accelerator="gpu", devices=8)

# 256 GPUs, multi-node
fabric = Fabric(accelerator="gpu", devices=8, num_nodes=32)

# Run on TPUs
fabric = Fabric(accelerator="tpu")
Use state-of-the-art distributed training strategies (DDP, FSDP, DeepSpeed) and mixed precision out of the box
# Use state-of-the-art distributed training techniques
fabric = Fabric(strategy="ddp")
fabric = Fabric(strategy="deepspeed")
fabric = Fabric(strategy="fsdp")

# Switch the precision
fabric = Fabric(precision="16-mixed")
fabric = Fabric(precision="64")
All the device logic boilerplate is handled for you
  # no more of this!
- model.to(device)
- batch.to(device)
Build your own custom Trainer using Fabric primitives for training checkpointing, logging, and more
import lightning as L


class MyCustomTrainer:
    def __init__(self, accelerator="auto", strategy="auto", devices="auto", precision="32-true"):
        self.fabric = L.Fabric(accelerator=accelerator, strategy=strategy, devices=devices, precision=precision)

    def fit(self, model, optimizer, dataloader, max_epochs):
        self.fabric.launch()

        model, optimizer = self.fabric.setup(model, optimizer)
        dataloader = self.fabric.setup_dataloaders(dataloader)
        model.train()

        for epoch in range(max_epochs):
            for batch in dataloader:
                input, target = batch
                optimizer.zero_grad()
                output = model(input)
                loss = loss_fn(output, target)
                self.fabric.backward(loss)
                optimizer.step()

You can find a more extensive example in our examples



   

Examples

Self-supervised Learning
Convolutional Architectures
Reinforcement Learning
GANs
Classic ML

   

Continuous Integration

Lightning is rigorously tested across multiple CPUs, GPUs and TPUs and against major Python and PyTorch versions.

*Codecov is > 90%+ but build delays may show less
Current build statuses
System / PyTorch ver. 1.13 2.0 2.1
Linux py3.9 [GPUs] Build Status
Linux (multiple Python versions) Test PyTorch Test PyTorch Test PyTorch
OSX (multiple Python versions) Test PyTorch Test PyTorch Test PyTorch
Windows (multiple Python versions) Test PyTorch Test PyTorch Test PyTorch

   

Community

The lightning community is maintained by

  • 10+ core contributors who are all a mix of professional engineers, Research Scientists, and Ph.D. students from top AI labs.
  • 800+ community contributors.

Want to help us build Lightning and reduce boilerplate for thousands of researchers? Learn how to make your first contribution here

Lightning is also part of the PyTorch ecosystem which requires projects to have solid testing, documentation and support.

Asking for help

If you have any questions please:

  1. Read the docs.
  2. Search through existing Discussions, or add a new question
  3. Join our discord.
2.6.0.dev20251019 Oct 19, 2025
2.6.0.dev20251012 Oct 12, 2025
2.6.0.dev20251005 Oct 05, 2025
2.6.0.dev20250928 Sep 28, 2025
2.6.0.dev20250921 Sep 21, 2025
2.6.0.dev20250914 Sep 14, 2025
2.6.0.dev20250831 Aug 31, 2025
2.6.0.dev20250824 Aug 24, 2025
2.6.0.dev20250817 Aug 17, 2025
2.6.0.dev20250810 Aug 10, 2025
2.6.0.dev20250803 Aug 03, 2025
2.6.0.dev20250727 Jul 27, 2025
2.6.0.dev20250720 Jul 20, 2025
2.6.0.dev20250713 Jul 13, 2025
2.6.0.dev20250706 Jul 06, 2025
2.6.0.dev20250629 Jun 29, 2025
2.5.5 Sep 05, 2025
2.5.4 Aug 29, 2025
2.5.3 Aug 13, 2025
2.5.2 Jun 20, 2025
2.5.1.post0 Apr 25, 2025
2.5.1 Mar 19, 2025
2.5.1rc2 Mar 17, 2025
2.5.1rc1 Mar 08, 2025
2.5.1rc0 Mar 05, 2025
2.5.1.dev20250622 Jun 22, 2025
2.5.1.dev20250615 Jun 15, 2025
2.5.1.dev20250608 Jun 08, 2025
2.5.1.dev20250601 Jun 01, 2025
2.5.1.dev20250525 May 25, 2025
2.5.1.dev20250518 May 18, 2025
2.5.1.dev20250511 May 11, 2025
2.5.1.dev20250504 May 04, 2025
2.5.1.dev20250427 Apr 27, 2025
2.5.1.dev20250420 Apr 20, 2025
2.5.1.dev20250413 Apr 13, 2025
2.5.1.dev20250406 Apr 06, 2025
2.5.1.dev20250330 Mar 30, 2025
2.5.1.dev20250323 Mar 23, 2025
2.5.0.post0 Dec 21, 2024
2.5.0 Dec 20, 2024
2.5.0rc0 Dec 12, 2024
2.5.0.dev20250316 Mar 16, 2025
2.5.0.dev20250309 Mar 09, 2025
2.5.0.dev20250302 Mar 02, 2025
2.5.0.dev20250223 Feb 23, 2025
2.5.0.dev20250216 Feb 16, 2025
2.5.0.dev20250209 Feb 09, 2025
2.5.0.dev20250202 Feb 02, 2025
2.5.0.dev20250126 Jan 26, 2025
2.5.0.dev20250119 Jan 19, 2025
2.5.0.dev20250112 Jan 12, 2025
2.5.0.dev20250105 Jan 05, 2025
2.5.0.dev20241229 Dec 29, 2024
2.5.0.dev20241222 Dec 22, 2024
2.5.0.dev20241215 Dec 15, 2024
2.5.0.dev20241208 Dec 08, 2024
2.5.0.dev20241201 Dec 01, 2024
2.5.0.dev20241124 Nov 24, 2024
2.5.0.dev20241117 Nov 17, 2024
2.5.0.dev20241110 Nov 10, 2024
2.5.0.dev20241103 Nov 03, 2024
2.5.0.dev20241027 Oct 27, 2024
2.4.0 Aug 07, 2024
2.4.0.dev20241020 Oct 20, 2024
2.4.0.dev20241013 Oct 13, 2024
2.4.0.dev20241006 Oct 06, 2024
2.4.0.dev20240929 Sep 29, 2024
2.4.0.dev20240922 Sep 22, 2024
2.4.0.dev20240915 Sep 15, 2024
2.4.0.dev20240908 Sep 08, 2024
2.4.0.dev20240901 Sep 01, 2024
2.4.0.dev20240825 Aug 25, 2024
2.4.0.dev20240818 Aug 18, 2024
2.4.0.dev20240811 Aug 11, 2024
2.4.0.dev20240804 Aug 04, 2024
2.4.0.dev20240728 Jul 28, 2024
2.4.0.dev20240721 Jul 21, 2024
2.4.0.dev20240714 Jul 14, 2024
2.4.0.dev20240707 Jul 07, 2024
2.4.0.dev20240630 Jun 30, 2024
2.3.3 Jul 08, 2024
2.3.2 Jul 04, 2024
2.3.1 Jun 27, 2024
2.3.0 Jun 13, 2024
2.3.0.dev20240623 Jun 23, 2024
2.3.0.dev20240616 Jun 16, 2024
2.3.0.dev20240609 Jun 09, 2024
2.3.0.dev20240602 Jun 02, 2024
2.3.0.dev20240526 May 26, 2024
2.3.0.dev20240519 May 19, 2024
2.3.0.dev20240505 May 05, 2024
2.3.0.dev20240428 Apr 28, 2024
2.3.0.dev20240421 Apr 21, 2024
2.3.0.dev20240414 Apr 14, 2024
2.3.0.dev20240407 Apr 07, 2024
2.3.0.dev20240331 Mar 31, 2024
2.3.0.dev20240328 Mar 28, 2024
2.3.0.dev20240324 Mar 24, 2024
2.3.0.dev20240318 Mar 18, 2024
2.2.5 May 22, 2024
2.2.4 May 01, 2024
2.2.3 Apr 23, 2024
2.2.2 Apr 12, 2024
2.2.1 Mar 04, 2024
2.2.0.post0 Feb 12, 2024
2.2.0 Feb 08, 2024
2.2.0rc0 Feb 01, 2024
2.1.4 Feb 01, 2024
2.1.3 Dec 21, 2023
2.1.2 Nov 15, 2023
2.1.1 Nov 08, 2023
2.1.0 Oct 12, 2023
2.1.0rc1 Oct 10, 2023
2.1.0rc0 Aug 16, 2023
2.0.9.post0 Sep 28, 2023
2.0.9 Sep 14, 2023
2.0.8 Aug 30, 2023
2.0.7 Aug 16, 2023
2.0.6 Jul 25, 2023
2.0.5 Jul 10, 2023
2.0.4 Jun 22, 2023
2.0.3 Jun 07, 2023
2.0.2 Apr 24, 2023
2.0.1.post0 Apr 11, 2023
2.0.1 Mar 30, 2023
2.0.0 Mar 15, 2023
2.0.0rc0 Feb 23, 2023
1.9.5 Apr 12, 2023
1.9.4 Mar 02, 2023
1.9.3 Feb 21, 2023
1.9.2 Feb 15, 2023
1.9.1 Feb 10, 2023
1.9.0 Jan 18, 2023
1.9.0rc0 Jan 06, 2023
1.8.6 Dec 21, 2022
1.8.5.post0 Dec 16, 2022
1.8.5 Dec 15, 2022
1.8.4.post0 Dec 10, 2022
1.8.4 Dec 09, 2022
1.8.3.post2 Dec 09, 2022
1.8.3.post1 Nov 25, 2022
1.8.3.post0 Nov 23, 2022
1.8.3 Nov 23, 2022
1.8.2 Nov 18, 2022
1.8.1 Nov 10, 2022
1.8.0.post1 Nov 02, 2022
1.8.0 Nov 01, 2022
1.8.0rc2 Nov 01, 2022
1.8.0rc1 Oct 27, 2022

Wheel compatibility matrix

Platform Python 3
any

Files in release

Extras:
Dependencies:
PyYAML (<8.0,>5.4)
fsspec[http] (<2027.0,>=2022.5.0)
lightning-utilities (<2.0,>=0.10.0)
packaging (<27.0,>=20.0)
torch (<4.0,>=2.1.0)
torchmetrics (<3.0,>0.7.0)
tqdm (<6.0,>=4.57.0)
typing-extensions (<6.0,>4.5.0)
pytorch-lightning