Convert Figma logo to code with AI

pytorch logoignite

High-level library to help with training and evaluating neural networks in PyTorch flexibly and transparently.

4,509
609
4,509
157

Top Related Projects

26,090

The fastai deep learning library

185,446

An Open Source Machine Learning Framework for Everyone

61,580

Deep Learning for humans

scikit-learn: machine learning in Python

🤗 Transformers: State-of-the-art Machine Learning for Pytorch, TensorFlow, and JAX.

Pretrain, finetune and deploy AI models on multiple GPUs, TPUs with zero code changes.

Quick Overview

PyTorch-Ignite is a high-level library for PyTorch, designed to help with training and evaluating neural networks. It provides a lightweight, flexible, and extensible framework that simplifies the process of writing training loops and implementing common deep learning tasks. Ignite is particularly useful for researchers and practitioners who want to focus on their models rather than boilerplate code.

Pros

  • Simplifies the training process with pre-built engines and handlers
  • Highly customizable and extensible architecture
  • Integrates well with other PyTorch ecosystem tools
  • Provides built-in metrics and logging capabilities

Cons

  • Steeper learning curve compared to some other high-level libraries
  • Less extensive documentation compared to more established frameworks
  • Smaller community and ecosystem compared to alternatives like TensorFlow
  • May require more manual setup for complex scenarios

Code Examples

  1. Basic training loop with Ignite:
from ignite.engine import Engine, Events
from ignite.handlers import ModelCheckpoint

def train_step(engine, batch):
    model.train()
    optimizer.zero_grad()
    x, y = batch
    y_pred = model(x)
    loss = criterion(y_pred, y)
    loss.backward()
    optimizer.step()
    return loss.item()

trainer = Engine(train_step)
ModelCheckpoint(dirname='checkpoints', filename_prefix='model').attach(trainer)

trainer.run(train_loader, max_epochs=10)
  1. Adding metrics to the evaluation engine:
from ignite.engine import create_supervised_evaluator
from ignite.metrics import Accuracy, Loss

evaluator = create_supervised_evaluator(model, metrics={
    'accuracy': Accuracy(),
    'loss': Loss(criterion)
})

@trainer.on(Events.EPOCH_COMPLETED)
def run_validation(engine):
    evaluator.run(val_loader)
  1. Using built-in progress bars:
from ignite.contrib.handlers import ProgressBar

pbar = ProgressBar()
pbar.attach(trainer, ['loss'])

Getting Started

To get started with PyTorch-Ignite, first install it using pip:

pip install pytorch-ignite

Then, import the necessary components and create a basic training loop:

from ignite.engine import Engine, Events
from ignite.handlers import ModelCheckpoint

def train_step(engine, batch):
    # Your training logic here
    pass

trainer = Engine(train_step)
trainer.run(train_loader, max_epochs=10)

For more advanced usage, refer to the official documentation and examples provided in the GitHub repository.

Competitor Comparisons

26,090

The fastai deep learning library

Pros of fastai

  • Higher-level API with more built-in functionality for common tasks
  • Extensive documentation and educational resources
  • Integrated support for advanced techniques like transfer learning

Cons of fastai

  • Less flexibility for customizing low-level components
  • Steeper learning curve for those familiar with PyTorch basics
  • May be overkill for simpler projects or research experiments

Code Comparison

fastai:

from fastai.vision.all import *
path = untar_data(URLs.PETS)
dls = ImageDataLoaders.from_folder(path, valid_pct=0.2, seed=42)
learn = cnn_learner(dls, resnet34, metrics=error_rate)
learn.fine_tune(1)

Ignite:

from ignite.engine import Events, create_supervised_trainer, create_supervised_evaluator
from ignite.metrics import Accuracy

model = ResNet34()
optimizer = optim.SGD(model.parameters(), lr=0.01)
trainer = create_supervised_trainer(model, optimizer, F.nll_loss)
evaluator = create_supervised_evaluator(model, metrics={'accuracy': Accuracy()})
185,446

An Open Source Machine Learning Framework for Everyone

Pros of TensorFlow

  • Larger ecosystem and more extensive documentation
  • Better support for production deployment and mobile/edge devices
  • More robust visualization tools (TensorBoard)

Cons of TensorFlow

  • Steeper learning curve and more complex API
  • Less dynamic computation graph, making debugging more challenging
  • Slower development cycle for new features

Code Comparison

Ignite (PyTorch-based):

from ignite.engine import Engine, Events

def train_step(engine, batch):
    # Training logic here
    return loss

trainer = Engine(train_step)
trainer.run(data_loader, max_epochs=10)

TensorFlow:

import tensorflow as tf

model = tf.keras.Sequential([
    # Model layers here
])

model.compile(optimizer='adam', loss='mse')
model.fit(x_train, y_train, epochs=10)

While Ignite provides a more flexible and customizable training loop, TensorFlow offers a higher-level API with Keras, making it easier to quickly define and train models. Ignite's approach allows for more fine-grained control over the training process, while TensorFlow's Keras API abstracts away many details for simplicity.

61,580

Deep Learning for humans

Pros of Keras

  • Higher-level API, making it more user-friendly and easier to learn
  • Supports multiple backend engines (TensorFlow, Theano, CNTK)
  • Extensive documentation and large community support

Cons of Keras

  • Less flexibility for custom implementations compared to PyTorch-based libraries
  • Slower development cycle for new features due to its higher-level abstraction

Code Comparison

Keras:

from keras.models import Sequential
from keras.layers import Dense

model = Sequential([
    Dense(64, activation='relu', input_shape=(10,)),
    Dense(1, activation='sigmoid')
])

Ignite:

import torch.nn as nn
from ignite.engine import Engine

model = nn.Sequential(
    nn.Linear(10, 64),
    nn.ReLU(),
    nn.Linear(64, 1),
    nn.Sigmoid()
)

def train_step(engine, batch):
    # Training logic here
    pass

trainer = Engine(train_step)

Ignite provides a more PyTorch-like experience with greater flexibility, while Keras offers a simpler, more abstracted approach to building neural networks. Ignite requires more explicit definition of training loops and processes, whereas Keras handles much of this behind the scenes.

scikit-learn: machine learning in Python

Pros of scikit-learn

  • Extensive collection of traditional machine learning algorithms
  • Excellent documentation and community support
  • Easy to use with a consistent API across different algorithms

Cons of scikit-learn

  • Limited support for deep learning and neural networks
  • Not optimized for GPU acceleration out of the box

Code Comparison

scikit-learn:

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification

X, y = make_classification(n_samples=1000, n_features=4)
clf = RandomForestClassifier()
clf.fit(X, y)

Ignite:

import torch
from ignite.engine import Engine, Events

def train_step(engine, batch):
    # Training logic here
    return loss

trainer = Engine(train_step)
trainer.run(data_loader, max_epochs=10)

scikit-learn focuses on traditional machine learning algorithms with a simple, consistent API. It's great for quick prototyping and working with smaller datasets. Ignite, built on PyTorch, is more suited for deep learning tasks, offering flexibility and GPU acceleration. While scikit-learn excels in classical ML, Ignite shines in complex neural network architectures and distributed training scenarios.

🤗 Transformers: State-of-the-art Machine Learning for Pytorch, TensorFlow, and JAX.

Pros of Transformers

  • Extensive pre-trained model library for NLP tasks
  • Seamless integration with popular NLP datasets and benchmarks
  • Active community and frequent updates

Cons of Transformers

  • Steeper learning curve for beginners
  • Primarily focused on NLP, less versatile for other domains

Code Comparison

Transformers:

from transformers import BertTokenizer, BertModel
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')
inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
outputs = model(**inputs)

Ignite:

from ignite.engine import Engine, Events
from ignite.metrics import Accuracy

def train_step(engine, batch):
    # Training logic here
    return loss

trainer = Engine(train_step)
Accuracy().attach(trainer, "accuracy")

Transformers excels in NLP tasks with its vast model library, while Ignite provides a flexible framework for general deep learning workflows. Transformers offers more out-of-the-box solutions for NLP, but Ignite allows for greater customization across various domains. The code examples highlight Transformers' focus on pre-trained models and Ignite's emphasis on training pipeline construction.

Pretrain, finetune and deploy AI models on multiple GPUs, TPUs with zero code changes.

Pros of PyTorch Lightning

  • More comprehensive and feature-rich, offering a wider range of built-in functionalities
  • Stronger community support and more frequent updates
  • Better integration with popular ML tools and frameworks (e.g., Weights & Biases, TensorBoard)

Cons of PyTorch Lightning

  • Steeper learning curve due to its more complex structure and abstractions
  • Less flexibility in some aspects of the training loop customization
  • Potentially higher overhead for simpler projects

Code Comparison

PyTorch Lightning:

class LightningModel(pl.LightningModule):
    def training_step(self, batch, batch_idx):
        x, y = batch
        y_hat = self(x)
        loss = F.cross_entropy(y_hat, y)
        return loss

Ignite:

def train_step(engine, batch):
    model.train()
    optimizer.zero_grad()
    x, y = batch
    y_pred = model(x)
    loss = F.cross_entropy(y_pred, y)
    loss.backward()
    optimizer.step()
    return loss.item()

Both PyTorch Lightning and Ignite aim to simplify the PyTorch training process, but they differ in their approach and level of abstraction. Lightning provides a more structured and opinionated framework, while Ignite offers a more flexible and lightweight solution. The choice between the two depends on the project's complexity, desired level of control, and personal preference.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

image image image image image
image image ・ image image ・ image
image image image
image Twitter discord numfocus
image link

TL;DR

Ignite is a high-level library to help with training and evaluating neural networks in PyTorch flexibly and transparently.

PyTorch-Ignite teaser

Click on the image to see complete code

Features

  • Less code than pure PyTorch while ensuring maximum control and simplicity

  • Library approach and no program's control inversion - Use ignite where and when you need

  • Extensible API for metrics, experiment managers, and other components

Table of Contents

Why Ignite?

Ignite is a library that provides three high-level features:

  • Extremely simple engine and event system
  • Out-of-the-box metrics to easily evaluate models
  • Built-in handlers to compose training pipeline, save artifacts and log parameters and metrics

Simplified training and validation loop

No more coding for/while loops on epochs and iterations. Users instantiate engines and run them.

Example
from ignite.engine import Engine, Events, create_supervised_evaluator
from ignite.metrics import Accuracy


# Setup training engine:
def train_step(engine, batch):
    # Users can do whatever they need on a single iteration
    # Eg. forward/backward pass for any number of models, optimizers, etc
    # ...

trainer = Engine(train_step)

# Setup single model evaluation engine
evaluator = create_supervised_evaluator(model, metrics={"accuracy": Accuracy()})

def validation():
    state = evaluator.run(validation_data_loader)
    # print computed metrics
    print(trainer.state.epoch, state.metrics)

# Run model's validation at the end of each epoch
trainer.add_event_handler(Events.EPOCH_COMPLETED, validation)

# Start the training
trainer.run(training_data_loader, max_epochs=100)

Power of Events & Handlers

The cool thing with handlers is that they offer unparalleled flexibility (compared to, for example, callbacks). Handlers can be any function: e.g. lambda, simple function, class method, etc. Thus, we do not require to inherit from an interface and override its abstract methods which could unnecessarily bulk up your code and its complexity.

Execute any number of functions whenever you wish

Examples
trainer.add_event_handler(Events.STARTED, lambda _: print("Start training"))

# attach handler with args, kwargs
mydata = [1, 2, 3, 4]
logger = ...

def on_training_ended(data):
    print(f"Training is ended. mydata={data}")
    # User can use variables from another scope
    logger.info("Training is ended")


trainer.add_event_handler(Events.COMPLETED, on_training_ended, mydata)
# call any number of functions on a single event
trainer.add_event_handler(Events.COMPLETED, lambda engine: print(engine.state.times))

@trainer.on(Events.ITERATION_COMPLETED)
def log_something(engine):
    print(engine.state.output)

Built-in events filtering

Examples
# run the validation every 5 epochs
@trainer.on(Events.EPOCH_COMPLETED(every=5))
def run_validation():
    # run validation

# change some training variable once on 20th epoch
@trainer.on(Events.EPOCH_STARTED(once=20))
def change_training_variable():
    # ...

# Trigger handler with customly defined frequency
@trainer.on(Events.ITERATION_COMPLETED(event_filter=first_x_iters))
def log_gradients():
    # ...

Stack events to share some actions

Examples

Events can be stacked together to enable multiple calls:

@trainer.on(Events.COMPLETED | Events.EPOCH_COMPLETED(every=10))
def run_validation():
    # ...

Custom events to go beyond standard events

Examples

Custom events related to backward and optimizer step calls:

from ignite.engine import EventEnum


class BackpropEvents(EventEnum):
    BACKWARD_STARTED = 'backward_started'
    BACKWARD_COMPLETED = 'backward_completed'
    OPTIM_STEP_COMPLETED = 'optim_step_completed'

def update(engine, batch):
    # ...
    loss = criterion(y_pred, y)
    engine.fire_event(BackpropEvents.BACKWARD_STARTED)
    loss.backward()
    engine.fire_event(BackpropEvents.BACKWARD_COMPLETED)
    optimizer.step()
    engine.fire_event(BackpropEvents.OPTIM_STEP_COMPLETED)
    # ...

trainer = Engine(update)
trainer.register_events(*BackpropEvents)

@trainer.on(BackpropEvents.BACKWARD_STARTED)
def function_before_backprop(engine):
    # ...

Out-of-the-box metrics

Example
precision = Precision(average=False)
recall = Recall(average=False)
F1_per_class = (precision * recall * 2 / (precision + recall))
F1_mean = F1_per_class.mean()  # torch mean method
F1_mean.attach(engine, "F1")

Installation

From pip:

pip install pytorch-ignite

From conda:

conda install ignite -c pytorch

From source:

pip install git+https://github.com/pytorch/ignite

Nightly releases

From pip:

pip install --pre pytorch-ignite

From conda (this suggests to install pytorch nightly release instead of stable version as dependency):

conda install ignite -c pytorch-nightly

Docker Images

Using pre-built images

Pull a pre-built docker image from our Docker Hub and run it with docker v19.03+.

docker run --gpus all -it -v $PWD:/workspace/project --network=host --shm-size 16G pytorchignite/base:latest /bin/bash
List of available pre-built images

Base

  • pytorchignite/base:latest
  • pytorchignite/apex:latest
  • pytorchignite/hvd-base:latest
  • pytorchignite/hvd-apex:latest
  • pytorchignite/msdp-apex:latest

Vision:

  • pytorchignite/vision:latest
  • pytorchignite/hvd-vision:latest
  • pytorchignite/apex-vision:latest
  • pytorchignite/hvd-apex-vision:latest
  • pytorchignite/msdp-apex-vision:latest

NLP:

  • pytorchignite/nlp:latest
  • pytorchignite/hvd-nlp:latest
  • pytorchignite/apex-nlp:latest
  • pytorchignite/hvd-apex-nlp:latest
  • pytorchignite/msdp-apex-nlp:latest

For more details, see here.

Getting Started

Few pointers to get you started:

Documentation

Additional Materials

Examples

Tutorials

Reproducible Training Examples

Inspired by torchvision/references, we provide several reproducible baselines for vision tasks:

  • ImageNet - logs on Ignite Trains server coming soon ...
  • Pascal VOC2012 - logs on Ignite Trains server coming soon ...

Features:

Code-Generator application

The easiest way to create your training scripts with PyTorch-Ignite:

Communication

User feedback

We have created a form for "user feedback". We appreciate any type of feedback, and this is how we would like to see our community:

  • If you like the project and want to say thanks, this the right place.
  • If you do not like something, please, share it with us, and we can see how to improve it.

Thank you!

Contributing

Please see the contribution guidelines for more information.

As always, PRs are welcome :)

Projects using Ignite

Research papers
Blog articles, tutorials, books
Toolkits
Others

See other projects at "Used by"

If your project implements a paper, represents other use-cases not covered in our official tutorials, Kaggle competition's code, or just your code presents interesting results and uses Ignite. We would like to add your project to this list, so please send a PR with brief description of the project.

Citing Ignite

If you use PyTorch-Ignite in a scientific publication, we would appreciate citations to our project.

@misc{pytorch-ignite,
  author = {V. Fomin and J. Anmol and S. Desroziers and J. Kriss and A. Tejani},
  title = {High-level library to help with training neural networks in PyTorch},
  year = {2020},
  publisher = {GitHub},
  journal = {GitHub repository},
  howpublished = {\url{https://github.com/pytorch/ignite}},
}

About the team & Disclaimer

PyTorch-Ignite is a NumFOCUS Affiliated Project, operated and maintained by volunteers in the PyTorch community in their capacities as individuals (and not as representatives of their employers). See the "About us" page for a list of core contributors. For usage questions and issues, please see the various channels here. For all other questions and inquiries, please send an email to contact@pytorch-ignite.ai.