GithubHelp home page GithubHelp logo

jexio / fulmo Goto Github PK

View Code? Open in Web Editor NEW
4.0 1.0 0.0 502 KB

A very general, feature-rich template for rapid and scalable ML experimentation with best practices.

License: MIT License

Python 100.00%
config template experiments reproducibility baseline project-structure python pytorch pytorch-lightning hydra deep-learning

fulmo's Introduction

GitHub release (latest SemVer) Python Version Tests Conventional Commits

Black pre-commit

fulmo

Template to start your deep learning project based on PyTorchLightning for rapid prototyping.

Contents


Why Lightning + Hydra + Albumentations?

  • PyTorch Lightning provides great abstractions for well structured ML code and advanced features like checkpointing, gradient accumulation, distributed training, etc.
  • Hydra provides convenient way to manage experiment configurations and advanced features like overriding any config parameter from command line, scheduling execution of many runs, etc.
  • Albumentations (Optional) provides many image augmentation. Albumentations supports all common computer vision tasks such as classification, semantic segmentation, instance segmentation, object detection, and pose estimation.

Features

Pipelines based on hydra-core configs and PytorchLightning modules

  • Predefined folder structure. Modularity: all abstractions are split into different submodule
  • Rapid Experimentation. Thanks to automating pipeline with config files and hydra command line superpowers
  • Little Boilerplate. So pipeline can be easily modified
  • Main Configuration. Main config file specifies default training configuration
  • Experiment Configurations. Stored in a separate folder, they can be composed out of smaller configs, override chosen parameters or define everything from scratch
  • Experiment Tracking. Many logging frameworks can be easily integrated
  • Logs. All logs (checkpoints, data from loggers, chosen hparams, etc.) are stored in a convenient folder structure imposed by Hydra
  • Automates PyTorch Lightning training pipeline with little boilerplate, so it can be easily modified
  • Augmentations with albumentations described in a yaml config.
  • Support of timm models, pytorch-optimizer and TorchMetrics
  • Exponential Moving Average for a more stable training, and Stochastic Moving Average for a better generalization and just overall performance.

Project structure

The directory structure of new project looks like this:

├── src
│   ├── fulmo
│   │   ├── callbacks               <- PyTorch Lightning callbacks
│   │   ├── core                    <- PyTorch Lightning models
│   │   ├── datasets                <- PyTorch datasets
│   │   ├── losses                  <- PyTorch losses
│   │   ├── metrics                 <- PyTorch metrics  
│   │   ├── models                  <- PyTorch model architectures
│   │   ├── optimizers              <- PyTorch optimizers
│   │   ├── readers                 <- Data readers
│   │   ├── samples                 <- PyTorch samplers
│   │   ├── schedulers              <- PyTorch schedulers
│   │   └── utils
├── tests
│   ├── test_fulmo                  <- Tests
│
├── .bumpversion.cfg
├── .darglint
├── .gitignore
├── .pre-commit-config.yaml <- Configuration of hooks for automatic code formatting
├── CHANGELOG.md
├── mypy.ini
├── noxfile.py
├── poetry.lock             <- File for installing python dependencies
├── pyproject.toml          <- File for installing python dependencies
├── README.md
└── tasks.py

Workflow

  1. Write your PyTorch model
  2. Write your PyTorch Lightning datamodule
  3. Write your experiment config, containing paths to your model and datamodule
  4. Run training with chosen experiment config:
python train.py +experiment=experiment_name

Experiment Tracking

PyTorch Lightning provides built in loggers for Weights&Biases, Neptune, Comet, MLFlow, Tensorboard and CSV. To use one of them, simply add its config to configs/logger and run:

python train.py logger=logger_name

Quickstart

First, install dependencies
pip install fulmo | poetry add fulmo
Second, create your project

See examples folder.

Next, you can train model with default configuration without logging
python train.py
Or you can train model with chosen experiment config
python train.py +experiment=experiment_name
Resume from a checkpoint
# checkpoint can be either path or URL
# path should be either absolute or prefixed with `${work_dir}/`
# use quotes '' around argument or otherwise $ symbol breaks it
python train.py '+trainer.resume_from_checkpoint=${work_dir}/logs/runs/2021-06-23/16-50-49/checkpoints/last.ckpt'

TODO


Credits

fulmo's People

Contributors

dependabot[bot] avatar jexio avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.