From 5477d869ce2352a03a143a05cc82de43319df662 Mon Sep 17 00:00:00 2001 From: vfdev Date: Thu, 18 Jun 2020 23:26:34 +0200 Subject: [PATCH 001/114] Updated ImageNet example (#1138) * [WIP] Updated ImageNet example - minor fixes for Pascal VOC12 * Fixed flake8 --- .../classification/imagenet/NOTES_MLflow.md | 31 ++- .../classification/imagenet/NOTES_Polyaxon.md | 11 +- .../classification/imagenet/NOTES_Trains.md | 196 ++++++++++++++ .../classification/imagenet/README.md | 41 ++- .../imagenet/code/dataflow/dataloaders.py | 56 +--- .../imagenet/code/scripts/mlflow_training.py | 60 ----- .../imagenet/code/scripts/plx_training.py | 54 ---- .../{common_training.py => training.py} | 250 ++++++++++++------ .../imagenet/code/utils/exp_tracking.py | 125 +++++++++ .../configs/train/baseline_resnet50.py | 12 +- .../configs/train/check_baseline_resnet50.py | 13 +- .../imagenet/experiments/mlflow/MLproject | 2 +- .../imagenet/experiments/mlflow/conda.yaml | 13 +- .../experiments/plx/xp_training.yml.tmpl | 13 +- .../experiments/{mlflow => }/setup_apex.sh | 0 .../experiments/{mlflow => }/setup_opencv.sh | 0 .../experiments/trains/requirements.txt | 1 + .../classification/imagenet/requirements.txt | 11 + .../pascal_voc2012/NOTES_MLflow.md | 2 +- .../pascal_voc2012/NOTES_Polyaxon.md | 2 +- .../pascal_voc2012/NOTES_Trains.md | 6 +- .../segmentation/pascal_voc2012/README.md | 4 - .../code/dataflow/dataloaders.py | 20 +- .../pascal_voc2012/code/scripts/training.py | 4 +- .../configs/train/baseline_resnet101.py | 16 +- .../experiments/mlflow/conda.yaml | 3 +- .../experiments/plx/xp_training.yml.tmpl | 24 +- 27 files changed, 641 insertions(+), 329 deletions(-) create mode 100644 examples/references/classification/imagenet/NOTES_Trains.md delete mode 100644 examples/references/classification/imagenet/code/scripts/mlflow_training.py delete mode 100644 examples/references/classification/imagenet/code/scripts/plx_training.py rename examples/references/classification/imagenet/code/scripts/{common_training.py => training.py} (50%) create mode 100644 examples/references/classification/imagenet/code/utils/exp_tracking.py rename examples/references/classification/imagenet/experiments/{mlflow => }/setup_apex.sh (100%) rename examples/references/classification/imagenet/experiments/{mlflow => }/setup_opencv.sh (100%) create mode 100644 examples/references/classification/imagenet/experiments/trains/requirements.txt create mode 100644 examples/references/classification/imagenet/requirements.txt diff --git a/examples/references/classification/imagenet/NOTES_MLflow.md b/examples/references/classification/imagenet/NOTES_MLflow.md index 62e40bc6f1d0..8fc35cf3547c 100644 --- a/examples/references/classification/imagenet/NOTES_MLflow.md +++ b/examples/references/classification/imagenet/NOTES_MLflow.md @@ -1,5 +1,7 @@ # Experiments tracking with MLflow - + +User can run ImageNet training using MLflow experiments tracking system on the local machine. + ## Requirements We use `conda` and [MLflow](https://github.com/mlflow/mlflow) to @@ -9,6 +11,14 @@ Please, install these tools: - [MLflow](https://github.com/mlflow/mlflow): `pip install mlflow` - [conda](https://conda.io/en/latest/miniconda.html) +We need to also install Nvidia/APEX and libraries for opencv. APEX is automatically installed on the first run. +Manually, all can be installed with the following commands. +**Important**, please, check the content of `experiments/setup_opencv.sh` before running. +```bash +sh experiments/setup_apex.sh + +sh experiments/setup_opencv.sh +``` ## Usage @@ -27,7 +37,7 @@ export DATASET_PATH=/path/to/imagenet ### MLflow setup -Setup mlflow output path as +Setup mlflow output path as a local storage (option with remote storage is not supported): ```bash export MLFLOW_TRACKING_URI=/path/to/output/mlruns # e.g export MLFLOW_TRACKING_URI=$PWD/output/mlruns @@ -42,7 +52,20 @@ or check existing experiments: mlflow experiments list ``` -### Single node with multiple GPUs +### Training on single node with single GPU + +Please, make sure to adapt training data loader batch size to your GPU type. By default, batch size is 64. + +```bash +export MLFLOW_TRACKING_URI=/path/to/output/mlruns +# e.g export MLFLOW_TRACKING_URI=$PWD/output/mlruns +mlflow run experiments/mlflow --experiment-name=Trainings -P config_path=configs/train/baseline_r50.py -P num_gpus=1 +``` + +### Training on single node with multiple GPUs + +For optimal devices usage, please, make sure to adapt training data loader batch size to your infrastructure. +By default, batch size is 64 per process. ```bash export MLFLOW_TRACKING_URI=/path/to/output/mlruns @@ -57,7 +80,7 @@ mlflow run experiments/mlflow --experiment-name=Trainings -P config_path=configs To visualize experiments and runs, user can start mlflow dashboard: ```bash -mlflow server --backend-store-uri /path/to/output/mlruns --default-artifact-root /path/to/output/mlruns -p 6026 -h 0.0.0.0 +mlflow server --backend-store-uri /path/to/output/mlruns --default-ainfrastructure/path/to/output/mlruns -p 6026 -h 0.0.0.0 # e.g mlflow server --backend-store-uri $PWD/output/mlruns --default-artifact-root $PWD/output/mlruns -p 6026 -h 0.0.0.0 ``` diff --git a/examples/references/classification/imagenet/NOTES_Polyaxon.md b/examples/references/classification/imagenet/NOTES_Polyaxon.md index a991cf5c5cb8..0bf623e7db4e 100644 --- a/examples/references/classification/imagenet/NOTES_Polyaxon.md +++ b/examples/references/classification/imagenet/NOTES_Polyaxon.md @@ -1,5 +1,7 @@ # Experiments tracking with Polyaxon +User can run ImageNet training using [Polyaxon experiments tracking system](https://polyaxon.com/). + ## Requirements In this case we assume, user has [Polyaxon](https://polyaxon.com/) installed on a machine/cluster/cloud and can schedule experiments with `polyaxon-cli`. @@ -9,11 +11,11 @@ In this case we assume, user has [Polyaxon](https://polyaxon.com/) installed on ### Setup Polyaxon project Create project on the cluster -``` +```bash polyaxon project create --name=imagenet --description="Classification on ImageNet" ``` Initialize local project -``` +```bash polyaxon init imagenet ``` @@ -25,7 +27,10 @@ to adapt to your cluster configuration. Since 10/2019, we need to register an account in order to download the dataset. To download the dataset, use the following form : http://www.image-net.org/download.php -### Single node with multiple GPUs +### Training on single node with single or multiple GPU + +For optimal devices usage, please, make sure to adapt training data loader batch size to your infrastructure. +By default, batch size is 64 per process. Please, adapt `xp_training.yml` to your cluster configuration and run it, for example, as ```bash polyaxon run -u -f experiments/plx/xp_training.yml --name="baseline_resnet50" --tags=train,resnet50 diff --git a/examples/references/classification/imagenet/NOTES_Trains.md b/examples/references/classification/imagenet/NOTES_Trains.md new file mode 100644 index 000000000000..073bffe0d5e0 --- /dev/null +++ b/examples/references/classification/imagenet/NOTES_Trains.md @@ -0,0 +1,196 @@ +# Experiments tracking with Trains + +[Allegro Trains](https://allegro.ai/docs/) is a full system open source ML / DL experiment manager and ML-Ops solution. +It is composed of a server, Python SDK and web UI. **Allegro Trains** enables data scientists and data engineers +to effortlessly track, manage, compare and collaborate on their experiments as well as easily manage their +training workloads on remote machines. + + +## Install trains + +Install [trains](https://github.com/allegroai/trains) by executing the following command: + +```bash +pip install --upgrade trains +``` + +## Install requirements + +```bash +pip install -r requirements.txt +``` + +We need to also install Nvidia/APEX and libraries for opencv. +**Important**, please, check the content of `experiments/setup_opencv.sh` before running the script. +```bash +sh experiments/setup_apex.sh + +sh experiments/setup_opencv.sh +``` + + +#### Download ImageNet dataset + +Since 10/2019, we need to register an account in order to download the dataset. +To download the dataset, use the following form : http://www.image-net.org/download.php + +## Setup the environment variables + +### Setup the dataset path + +To configure the path to already existing ImageNet dataset, please specify `DATASET_PATH` environment variable +```bash +export DATASET_PATH=/path/to/imagenet +# export DATASET_PATH=$PWD/input/imagenet +``` + +## Run the experiment code + +In **Trains**, when you run the experiment code, ``trains`` stores the experiment in [trains-server](https://github.com/allegroai/trains-server). + +By default, ``trains`` works with the demo **Trains Server** ([https://demoapp.trains.allegro.ai/dashboard](https://demoapp.trains.allegro.ai/dashboard)), +which is open to anyone (although once a week it is refreshing and deleting all data). You can also set up your own [self-hosted](https://github.com/allegroai/trains-server) **Trains Server**. + +After the experiment code runs once, you can [reproduce the experiment](#reproducing-the-experiment) using the +**Trains Web-App (UI)**, which is part of ``trains-server``. You only need to run the code once to store it +in ``trains-server``. + + +### Setup + +This setup is a specific for this code and is not required in general usage of Trains. +We setup an output path as a local storage: +```bash +export TRAINS_OUTPUT_PATH=/path/to/output/trains +# e.g export TRAINS_OUTPUT_PATH=$PWD/output/trains +``` + +This environment variable helps to choose Trains as experiment tracking system among all others. + +### Run the code + +#### Training on single node and single GPU + +Please, make sure to adapt training data loader batch size to your GPU type. By default, batch size is 64 per process. + +Execute the following command: + +```bash +export TRAINS_OUTPUT_PATH=/path/to/output/trains +# e.g export TRAINS_OUTPUT_PATH=$PWD/output/trains +export PYTHONPATH=$PWD/code:$PYTHONPATH + +py_config_runner ./code/scripts/training.py ./configs/train/baseline_resnet50.py +``` + +#### Training on single node and multiple GPUs + +Please, make sure to adapt training data loader batch size to your GPU type. By default, batch size is 64 per process. +```bash +export TRAINS_OUTPUT_PATH=/path/to/output/trains +# e.g export TRAINS_OUTPUT_PATH=$PWD/output/trains +export PYTHONPATH=$PWD/code:$PYTHONPATH + +python -m torch.distributed.launch --nproc 2 --use_env -m py_config_runner ./code/scripts/training.py ./configs/train/baseline_resnet50.py +``` + + +In **Trains Web-App** a new project named *"ImageNet Training"* will be created, +with an experiment named *"baseline_resnet50"* inside. + +In your local environment, the console output includes the URL of the experiment's **RESULTS** page. + +You can now view your experiment in **Trains** by clicking the link or copying the URL into your browser. +It opens the results in the experiment's details pane, in the **Trains Web-App (UI)**. + + +#### Trains automatic Logging + +When the experiment code runs, **Trains** automatically logs your environment, code, and the outputs. +Which means that you don't need to change your code. + +All you need is 2 lines of integration at the top of your main script +```python +from trains import Task +Task.init("ImageNet Training", "baseline_resnet50") +``` +Once it's there, the following will be automatically logged by **Trains**: + +* **Resource Monitoring** CPU/GPU utilization, temperature, IO, network, etc +* **Development Environment** Python environment, Git (repo, branch, commit) including uncommitted changes +* **Configuration** Including configuration files, command line arguments (ArgParser), and general dictionaries +* Full **stdout** and **stderr** automatic logging +* Model snapshots, with optional automatic upload to central storage. +* Artifacts log & store, including shared folders, S3, GS, Azure, and Http/s +* Matplotlib / Seaborn / TensorBoard / TensorBoardX scalars, metrics, histograms, images, audio, video, etc + +Additionally, **Trains** supports explicit logging by adding calls to the **Trains** Python client ``Logger`` +class methods in the code. For more information, +see [Explicit Reporting](https://allegro.ai/docs/examples/examples_explicit_reporting/) in the **Trains** documentation. + +## Track the experiment and visualize the results + +In the **Trains Web-App (UI)**, track the experiment and visualize results in the experiment's details pane, +which is organized in tabs and provides the following information; + +* Source code, uncommitted changes, Python packages and versions, and other information, in the **EXECUTION** tab +* Hyperparameters in the **HYPERPARAMETERS** tab +* Input model, Configuration, Output model, and other artifacts in the **ARTIFACTS** tab +* Experiment Comments and General experiment information in the **INFO** tab +* Results in the **RESULTS** tab, including the log, scalar metric plots, plots of any data, and debug samples + +## Reproducing the experiments + +In **Trains**, reproduce experiments using ``trains-agent`` for remote execution. Rerun the same experiment, +by making an exact copy of it (a clone), and remotely execute the cloned experiment. + +First, install ``trains-agent`` and then configure it to work with your self-hosted **Trains Server**. + +Once ``trains-agent`` is installed and configured, run ``trains-agent daemon``. +In **Trains**, we call these *workers*, they pop experiments from a job execution queue and execute them. +Every machine with a *trains-agent daemon*, becomes a registered *worker* in your **trains-server** cluster. + +Using the **Trains Web-App** you can easily send experiments to be remotely executed on one of these machines. + +More details can be found on the *trains-agent* [github](https://github.com/allegroai/trains-agent/) + +### Install and configure trains-agent + +1. Install ``trains-agent`` + + pip install trains-agent + +1. Configure ``trains-agent`` by running the setup wizard + + trains-agent init + +### Remotely execute the experiment + +1. Start a **Trains** worker. Run a ``trains-agent daemon`` listening to a queue + + For example, run a ``trains-agent daemon`` listening to the ``default`` queue and using multiple GPUs. + + trains-agent daemon --gpus 0,1 --queue default + +1. Locate the experiment. In the **Trains Web-App (UI)**, Projects page, click on the project card + +1. Make a copy of the experiment + 1. In the experiment table, right-click the experiment + 1. On the sub-menu, select **Clone** + 1. Select the project, type a name for the copy, and type a description, or accept the defaults + 1. Click the **CLONE** button + + The copy of the experiment is created. Its details pane opens. + +1. Send the experiment for remote execution, by enqueuing it in one of the job execution queues + + 1. In the experiment table, right-click the experiment + 1. On the sub-menu, select **Enqueue** + 1. Select the *default* queue + 1. Click the **ENQUEUE** button + + The experiment's status changes to Pending. + +When the experiment reaches the top of the job execution queue, the ``trains-agent deamon`` fetches it, +its status changes to Running, and ``trains-agent`` executes it while logging and monitoring. +You can track the experiment while it is in progress, and anytime afterwards. diff --git a/examples/references/classification/imagenet/README.md b/examples/references/classification/imagenet/README.md index 50bd66af1872..f1857a2dac79 100644 --- a/examples/references/classification/imagenet/README.md +++ b/examples/references/classification/imagenet/README.md @@ -5,17 +5,19 @@ dataset. Features: - Distributed training with mixed precision by [nvidia/apex](https://github.com/NVIDIA/apex/) -- Experiments tracking with [MLflow](https://mlflow.org/) or [Polyaxon](https://polyaxon.com/) +- Experiments tracking with [MLflow](https://mlflow.org/) or [Polyaxon](https://polyaxon.com/) or [TRAINS](https://github.com/allegroai/trains) ![tb_dashboard](assets/tb_dashboard.png) -There are two possible options: 1) Experiments tracking with MLflow or 2) Experiments tracking with Polyaxon. -Experiments tracking with MLflow is more suitable for a local machine with GPUs. For experiments tracking with Polyaxon +There are three possible options: 1) Experiments tracking with MLflow, 2) Experiments tracking with Polyaxon or 3) Experiments tracking with TRAINS. + +Experiments tracking with TRAINS / MLflow is more suitable for a local machine with GPU(s). For experiments tracking with Polyaxon user needs to have Polyaxon installed on a machine/cluster/cloud and can schedule experiments with `polyaxon-cli`. User can choose one option and skip the descriptions of another option. - Notes for [experiments tracking with MLflow](NOTES_MLflow.md) - Notes for [experiments tracking with Polyaxon](NOTES_Polyaxon.md) +- Notes for [experiments tracking with TRAINS](NOTES_Trains.md) ## Implementation details @@ -23,7 +25,7 @@ Files tree description: ``` code |___ dataflow : module privides data loaders and various transformers - |___ scripts : executable training scripts + |___ scripts : executable training script |___ utils : other helper modules configs @@ -32,6 +34,7 @@ configs experiments |___ mlflow : MLflow related files |___ plx : Polyaxon related files + |___ trains : requirements.txt to install Trains python package notebooks : jupyter notebooks to check specific parts from code modules ``` @@ -42,18 +45,30 @@ notebooks : jupyter notebooks to check specific parts from code modules We use [py_config_runner](https://github.com/vfdev-5/py_config_runner) package to execute python scripts with python configuration files. -### Training scripts +### Training script -Training scripts are located [code/scripts](code/scripts/) and contains +Training script is located [code/scripts](code/scripts/) and contains -- `mlflow_training.py`, training script with MLflow experiments tracking -- `plx_training.py`, training script with Polyaxon experiments tracking -- `common_training.py`, common training code used by above files +- `training.py`, single training script with possiblity to use one of MLflow / Polayaxon / Trains experiments tracking systems. -Training scripts contain `run` method required by [py_config_runner](https://github.com/vfdev-5/py_config_runner) to -run a script with a configuration. Training logic is setup inside `training` method and configures a distributed trainer, -2 evaluators and various logging handlers to tensorboard, mlflow/polyaxon logger and tqdm. - +Training script contains `run` method required by [py_config_runner](https://github.com/vfdev-5/py_config_runner) to +run a script with a configuration. + +The split between training script and configuration python file is the following. +Configuration file being a python script defines necessary components for neural network training: +- Dataflow: training/validation/train evaluation data loaders with custom data augmentations +- Model +- Optimizer +- Criterion +- LR scheduler +- other parameters: device, number of epochs, etc + +Training script uses these components to setup and run training and validation loops. By default, +processing group with "nccl" backend is initialized for distributed configuration (even for a single GPU). + +Training script is generic, uses [`ignite.distributed` API](https://pytorch.org/ignite/master/distributed.html), and adapts +training components to provided distributed configuration (e.g. uses DistribtedDataParallel model wrapper, +uses distributed sampling, scales batch size etc). ### Configurations diff --git a/examples/references/classification/imagenet/code/dataflow/dataloaders.py b/examples/references/classification/imagenet/code/dataflow/dataloaders.py index fab5e1d68993..e29b1eb70f2e 100644 --- a/examples/references/classification/imagenet/code/dataflow/dataloaders.py +++ b/examples/references/classification/imagenet/code/dataflow/dataloaders.py @@ -1,13 +1,14 @@ -from typing import Callable, Optional, Tuple, Union +from typing import Callable, Optional, Tuple import numpy as np import cv2 -from torch.utils.data import DataLoader, Sampler +from torch.utils.data import DataLoader from torch.utils.data.dataset import Subset -import torch.utils.data.distributed as data_dist from torchvision.datasets import ImageNet +import ignite.distributed as idist + def opencv_loader(path): img = cv2.imread(path) @@ -22,10 +23,6 @@ def get_train_val_loaders( batch_size: int = 16, num_workers: int = 8, val_batch_size: Optional[int] = None, - pin_memory: bool = True, - random_seed: Optional[int] = None, - train_sampler: Optional[Union[Sampler, str]] = None, - val_sampler: Optional[Union[Sampler, str]] = None, limit_train_num_samples: Optional[int] = None, limit_val_num_samples: Optional[int] = None, ) -> Tuple[DataLoader, DataLoader, DataLoader]: @@ -38,61 +35,34 @@ def get_train_val_loaders( ) if limit_train_num_samples is not None: - if random_seed is not None: - np.random.seed(random_seed) + np.random.seed(limit_train_num_samples) train_indices = np.random.permutation(len(train_ds))[:limit_train_num_samples] train_ds = Subset(train_ds, train_indices) if limit_val_num_samples is not None: + np.random.seed(limit_val_num_samples) val_indices = np.random.permutation(len(val_ds))[:limit_val_num_samples] val_ds = Subset(val_ds, val_indices) # random samples for evaluation on training dataset if len(val_ds) < len(train_ds): + np.random.seed(len(val_ds)) train_eval_indices = np.random.permutation(len(train_ds))[: len(val_ds)] train_eval_ds = Subset(train_ds, train_eval_indices) else: train_eval_ds = train_ds - if isinstance(train_sampler, str): - assert train_sampler == "distributed" - train_sampler = data_dist.DistributedSampler(train_ds) - - train_eval_sampler = None - if isinstance(val_sampler, str): - assert val_sampler == "distributed" - val_sampler = data_dist.DistributedSampler(val_ds, shuffle=False) - train_eval_sampler = data_dist.DistributedSampler(train_eval_ds, shuffle=False) - - train_loader = DataLoader( - train_ds, - shuffle=train_sampler is None, - batch_size=batch_size, - num_workers=num_workers, - sampler=train_sampler, - pin_memory=pin_memory, - drop_last=True, + train_loader = idist.auto_dataloader( + train_ds, shuffle=True, batch_size=batch_size, num_workers=num_workers, drop_last=True, ) val_batch_size = batch_size * 4 if val_batch_size is None else val_batch_size - val_loader = DataLoader( - val_ds, - shuffle=False, - sampler=val_sampler, - batch_size=val_batch_size, - num_workers=num_workers, - pin_memory=pin_memory, - drop_last=False, + val_loader = idist.auto_dataloader( + val_ds, shuffle=False, batch_size=val_batch_size, num_workers=num_workers, drop_last=False, ) - train_eval_loader = DataLoader( - train_eval_ds, - shuffle=False, - sampler=train_eval_sampler, - batch_size=val_batch_size, - num_workers=num_workers, - pin_memory=pin_memory, - drop_last=False, + train_eval_loader = idist.auto_dataloader( + train_eval_ds, shuffle=False, batch_size=val_batch_size, num_workers=num_workers, drop_last=False, ) return train_loader, val_loader, train_eval_loader diff --git a/examples/references/classification/imagenet/code/scripts/mlflow_training.py b/examples/references/classification/imagenet/code/scripts/mlflow_training.py deleted file mode 100644 index 7119791e80fb..000000000000 --- a/examples/references/classification/imagenet/code/scripts/mlflow_training.py +++ /dev/null @@ -1,60 +0,0 @@ -# This a training script launched with py_config_runner -# It should obligatory contain `run(config, **kwargs)` method - -from pathlib import Path - -import torch -import torch.distributed as dist - -import mlflow -import ignite - -from py_config_runner.config_utils import get_params, TRAINVAL_CONFIG, assert_config - -from common_training import training - - -def run(config, logger=None, local_rank=0, **kwargs): - - assert torch.cuda.is_available() - assert torch.backends.cudnn.enabled, "Nvidia/Amp requires cudnn backend to be enabled." - - dist.init_process_group("nccl", init_method="env://") - - # As we passed config with option --manual_config_load - assert hasattr(config, "setup"), ( - "We need to manually setup the configuration, please set --manual_config_load " "to py_config_runner" - ) - - config = config.setup() - - assert_config(config, TRAINVAL_CONFIG) - # The following attributes are automatically added by py_config_runner - assert hasattr(config, "config_filepath") and isinstance(config.config_filepath, Path) - assert hasattr(config, "script_filepath") and isinstance(config.script_filepath, Path) - - # dump python files to reproduce the run - mlflow.log_artifact(config.config_filepath.as_posix()) - mlflow.log_artifact(config.script_filepath.as_posix()) - - output_path = mlflow.get_artifact_uri() - config.output_path = Path(output_path) - - if dist.get_rank() == 0: - mlflow.log_params( - {"pytorch version": torch.__version__, "ignite version": ignite.__version__,} - ) - mlflow.log_params(get_params(config, TRAINVAL_CONFIG)) - - try: - training(config, local_rank=local_rank, with_mlflow_logging=True, with_plx_logging=False) - except KeyboardInterrupt: - logger.info("Catched KeyboardInterrupt -> exit") - except Exception as e: # noqa - logger.exception("") - mlflow.log_param("Run Status", "FAILED") - dist.destroy_process_group() - raise e - - mlflow.log_param("Run Status", "OK") - dist.destroy_process_group() diff --git a/examples/references/classification/imagenet/code/scripts/plx_training.py b/examples/references/classification/imagenet/code/scripts/plx_training.py deleted file mode 100644 index e38967c3a180..000000000000 --- a/examples/references/classification/imagenet/code/scripts/plx_training.py +++ /dev/null @@ -1,54 +0,0 @@ -# This a training script launched with py_config_runner -# It should obligatory contain `run(config, **kwargs)` method - -from pathlib import Path - -import torch -import torch.distributed as dist - -import ignite -from polyaxon_client.tracking import get_outputs_path, Experiment - -from py_config_runner.config_utils import get_params, TRAINVAL_CONFIG, assert_config - -from common_training import training - - -def run(config, logger=None, local_rank=0, **kwargs): - - assert torch.cuda.is_available(), torch.cuda.is_available() - assert torch.backends.cudnn.enabled, "Nvidia/Amp requires cudnn backend to be enabled." - - dist.init_process_group("nccl", init_method="env://") - - # As we passed config with option --manual_config_load - assert hasattr(config, "setup"), ( - "We need to manually setup the configuration, please set --manual_config_load " "to py_config_runner" - ) - - config = config.setup() - - assert_config(config, TRAINVAL_CONFIG) - # The following attributes are automatically added by py_config_runner - assert hasattr(config, "config_filepath") and isinstance(config.config_filepath, Path) - assert hasattr(config, "script_filepath") and isinstance(config.script_filepath, Path) - - config.output_path = Path(get_outputs_path()) - - if dist.get_rank() == 0: - plx_exp = Experiment() - plx_exp.log_params( - **{"pytorch version": torch.__version__, "ignite version": ignite.__version__,} - ) - plx_exp.log_params(**get_params(config, TRAINVAL_CONFIG)) - - try: - training(config, local_rank=local_rank, with_mlflow_logging=False, with_plx_logging=True) - except KeyboardInterrupt: - logger.info("Catched KeyboardInterrupt -> exit") - except Exception as e: # noqa - logger.exception("") - dist.destroy_process_group() - raise e - - dist.destroy_process_group() diff --git a/examples/references/classification/imagenet/code/scripts/common_training.py b/examples/references/classification/imagenet/code/scripts/training.py similarity index 50% rename from examples/references/classification/imagenet/code/scripts/common_training.py rename to examples/references/classification/imagenet/code/scripts/training.py index fda9a6805006..4b15a1715f3e 100644 --- a/examples/references/classification/imagenet/code/scripts/common_training.py +++ b/examples/references/classification/imagenet/code/scripts/training.py @@ -1,54 +1,44 @@ # This a training script launched with py_config_runner # It should obligatory contain `run(config, **kwargs)` method +from pathlib import Path + import torch -import torch.distributed as dist from apex import amp -from apex.parallel import DistributedDataParallel as DDP - -from ignite.engine import Engine, Events, _prepare_batch, create_supervised_evaluator -from ignite.metrics import Accuracy, TopKCategoricalAccuracy -from ignite.contrib.handlers import ProgressBar +import ignite +import ignite.distributed as idist from ignite.contrib.engines import common +from ignite.engine import Engine, Events, create_supervised_evaluator, _prepare_batch +from ignite.metrics import Accuracy, TopKCategoricalAccuracy +from ignite.utils import setup_logger from py_config_runner.utils import set_seed +from py_config_runner.config_utils import get_params, TRAINVAL_CONFIG, assert_config from utils.handlers import predictions_gt_images_handler +from utils import exp_tracking -def training(config, local_rank=None, with_mlflow_logging=False, with_plx_logging=False): - - if not getattr(config, "use_fp16", True): - raise RuntimeError("This training script uses by default fp16 AMP") +def initialize(config): - set_seed(config.seed + local_rank) - torch.cuda.set_device(local_rank) - device = "cuda" + model = config.model.to(config.device) + optimizer = config.optimizer + # Setup Nvidia/Apex AMP + model, optimizer = amp.initialize(model, optimizer, opt_level=getattr(config, "fp16_opt_level", "O2"), num_losses=1) - torch.backends.cudnn.benchmark = True + # Adapt model to dist conf + model = idist.auto_model(model) - train_loader = config.train_loader - train_sampler = getattr(train_loader, "sampler", None) - assert train_sampler is not None, "Train loader of type '{}' " "should have attribute 'sampler'".format( - type(train_loader) - ) - assert hasattr(train_sampler, "set_epoch") and callable( - train_sampler.set_epoch - ), "Train sampler should have a callable method `set_epoch`" + criterion = config.criterion.to(config.device) - train_eval_loader = config.train_eval_loader - val_loader = config.val_loader + return model, optimizer, criterion - model = config.model.to(device) - optimizer = config.optimizer - model, optimizer = amp.initialize(model, optimizer, opt_level=getattr(config, "fp16_opt_level", "O2"), num_losses=1) - model = DDP(model, delay_allreduce=True) - criterion = config.criterion.to(device) - prepare_batch = getattr(config, "prepare_batch", _prepare_batch) - non_blocking = getattr(config, "non_blocking", True) +def create_trainer(model, optimizer, criterion, train_sampler, config, logger): + prepare_batch = config.prepare_batch + device = config.device # Setup trainer accumulation_steps = getattr(config, "accumulation_steps", 1) @@ -58,7 +48,7 @@ def train_update_function(engine, batch): model.train() - x, y = prepare_batch(batch, device=device, non_blocking=non_blocking) + x, y = prepare_batch(batch, device=device, non_blocking=True) y_pred = model(x) y_pred = model_output_transform(y_pred) loss = criterion(y_pred, y) / accumulation_steps @@ -74,10 +64,14 @@ def train_update_function(engine, batch): "supervised batch loss": loss.item(), } + output_names = getattr(config, "output_names", ["supervised batch loss",]) + lr_scheduler = config.lr_scheduler + trainer = Engine(train_update_function) + trainer.logger = logger + + to_save = {"model": model, "optimizer": optimizer, "lr_scheduler": lr_scheduler, "trainer": trainer, "amp": amp} - lr_scheduler = config.lr_scheduler - to_save = {"model": model, "optimizer": optimizer, "lr_scheduler": lr_scheduler, "trainer": trainer} common.setup_common_training_handlers( trainer, train_sampler, @@ -86,59 +80,119 @@ def train_update_function(engine, batch): output_path=config.output_path.as_posix(), lr_scheduler=lr_scheduler, with_gpu_stats=True, - output_names=["supervised batch loss",], - with_pbars=True, - with_pbar_on_iters=with_mlflow_logging, - log_every_iters=1, + output_names=output_names, + with_pbars=False, ) - if getattr(config, "benchmark_dataflow", False): - benchmark_dataflow_num_iters = getattr(config, "benchmark_dataflow_num_iters", 1000) - DataflowBenchmark(benchmark_dataflow_num_iters, prepare_batch=prepare_batch, device=device).attach( - trainer, train_loader - ) + common.ProgressBar(persist=False).attach(trainer, metric_names="all") - # Setup evaluators - val_metrics = { - "Accuracy": Accuracy(device=device), - "Top-5 Accuracy": TopKCategoricalAccuracy(k=5, device=device), - } + return trainer - if hasattr(config, "val_metrics") and isinstance(config.val_metrics, dict): - val_metrics.update(config.val_metrics) +def create_evaluators(model, metrics, config): model_output_transform = getattr(config, "model_output_transform", lambda x: x) evaluator_args = dict( model=model, - metrics=val_metrics, - device=device, - non_blocking=non_blocking, - prepare_batch=prepare_batch, + metrics=metrics, + device=config.device, + non_blocking=True, + prepare_batch=config.prepare_batch, output_transform=lambda x, y, y_pred: (model_output_transform(y_pred), y,), ) train_evaluator = create_supervised_evaluator(**evaluator_args) evaluator = create_supervised_evaluator(**evaluator_args) - if dist.get_rank() == 0 and with_mlflow_logging: - ProgressBar(persist=False, desc="Train Evaluation").attach(train_evaluator) - ProgressBar(persist=False, desc="Val Evaluation").attach(evaluator) + return evaluator, train_evaluator + + +def log_metrics(logger, epoch, elapsed, tag, metrics): + logger.info( + "\nEpoch {} - elapsed: {} - {} metrics:\n {}".format( + epoch, elapsed, tag, "\n".join(["\t{}: {}".format(k, v) for k, v in metrics.items()]) + ) + ) + + +def log_basic_info(logger, config): + + msg = "\n- PyTorch version: {}".format(torch.__version__) + msg += "\n- Ignite version: {}".format(ignite.__version__) + logger.info(msg) + + if idist.get_world_size() > 1: + msg = "\nDistributed setting:" + msg += "\tbackend: {}".format(idist.backend()) + msg += "\trank: {}".format(idist.get_rank()) + msg += "\tworld size: {}".format(idist.get_world_size()) + logger.info(msg) - def run_validation(_): - train_evaluator.run(train_eval_loader) - evaluator.run(val_loader) + +def training(local_rank, config, logger=None): + + if not getattr(config, "use_fp16", True): + raise RuntimeError("This training script uses by default fp16 AMP") + + torch.backends.cudnn.benchmark = True + + set_seed(config.seed + local_rank) + + train_loader, val_loader, train_eval_loader = config.train_loader, config.val_loader, config.train_eval_loader + + # Setup model, optimizer, criterion + model, optimizer, criterion = initialize(config) + + if not hasattr(config, "prepare_batch"): + config.prepare_batch = _prepare_batch + + # Setup trainer for this specific task + trainer = create_trainer(model, optimizer, criterion, train_loader.sampler, config, logger) + + if getattr(config, "benchmark_dataflow", False): + benchmark_dataflow_num_iters = getattr(config, "benchmark_dataflow_num_iters", 1000) + DataflowBenchmark(benchmark_dataflow_num_iters, prepare_batch=config.prepare_batch).attach( + trainer, train_loader + ) + + # Setup evaluators + val_metrics = { + "Accuracy": Accuracy(), + "Top-5 Accuracy": TopKCategoricalAccuracy(k=5), + } + + if hasattr(config, "val_metrics") and isinstance(config.val_metrics, dict): + val_metrics.update(config.val_metrics) + + evaluator, train_evaluator = create_evaluators(model, val_metrics, config) + + @trainer.on(Events.EPOCH_COMPLETED(every=getattr(config, "val_interval", 1)) | Events.COMPLETED) + def run_validation(): + epoch = trainer.state.epoch + state = train_evaluator.run(train_eval_loader) + log_metrics(logger, epoch, state.times["COMPLETED"], "Train", state.metrics) + state = evaluator.run(val_loader) + log_metrics(logger, epoch, state.times["COMPLETED"], "Test", state.metrics) if getattr(config, "start_by_validation", False): trainer.add_event_handler(Events.STARTED, run_validation) - trainer.add_event_handler(Events.EPOCH_COMPLETED(every=getattr(config, "val_interval", 1)), run_validation) - trainer.add_event_handler(Events.COMPLETED, run_validation) score_metric_name = "Accuracy" if hasattr(config, "es_patience"): common.add_early_stopping_by_val_score(config.es_patience, evaluator, trainer, metric_name=score_metric_name) - if dist.get_rank() == 0: + # Store 3 best models by validation accuracy: + common.save_best_model_by_val_score( + config.output_path.as_posix(), + evaluator, + model=model, + metric_name=score_metric_name, + n_saved=3, + trainer=trainer, + tag="val", + ) + + if idist.get_rank() == 0: tb_logger = common.setup_tb_logging( config.output_path.as_posix(), @@ -146,18 +200,9 @@ def run_validation(_): optimizer, evaluators={"training": train_evaluator, "validation": evaluator}, ) - if with_mlflow_logging: - common.setup_mlflow_logging( - trainer, optimizer, evaluators={"training": train_evaluator, "validation": evaluator} - ) - - if with_plx_logging: - common.setup_plx_logging( - trainer, optimizer, evaluators={"training": train_evaluator, "validation": evaluator} - ) - - common.save_best_model_by_val_score( - config.output_path.as_posix(), evaluator, model, metric_name=score_metric_name, trainer=trainer + + exp_tracking_logger = exp_tracking.setup_logging( + trainer, optimizer, evaluators={"training": train_evaluator, "validation": evaluator} ) # Log train/val predictions: @@ -179,12 +224,59 @@ def run_validation(_): trainer.run(train_loader, max_epochs=config.num_epochs) + if idist.get_rank() == 0: + tb_logger.close() + exp_tracking_logger.close() + + +def run(config, **kwargs): + """This is the main method to run the training. As this training script is launched with `py_config_runner` + it should obligatory contain `run(config, **kwargs)` method. + + """ + + assert torch.cuda.is_available(), torch.cuda.is_available() + assert torch.backends.cudnn.enabled, "Nvidia/Amp requires cudnn backend to be enabled." + + with idist.Parallel(backend="nccl") as parallel: + + logger = setup_logger(name="ImageNet Training", distributed_rank=idist.get_rank()) + + assert_config(config, TRAINVAL_CONFIG) + # The following attributes are automatically added by py_config_runner + assert hasattr(config, "config_filepath") and isinstance(config.config_filepath, Path) + assert hasattr(config, "script_filepath") and isinstance(config.script_filepath, Path) + + if idist.get_rank() == 0 and exp_tracking.has_trains: + from trains import Task + + task = Task.init("ImageNet Training", config.config_filepath.stem) + task.connect_configuration(config.config_filepath.as_posix()) + + log_basic_info(logger, config) + + config.output_path = Path(exp_tracking.get_output_path()) + # dump python files to reproduce the run + exp_tracking.log_artifact(config.config_filepath.as_posix()) + exp_tracking.log_artifact(config.script_filepath.as_posix()) + exp_tracking.log_params(get_params(config, TRAINVAL_CONFIG)) + + try: + parallel.run(training, config, logger=logger) + except KeyboardInterrupt: + logger.info("Catched KeyboardInterrupt -> exit") + except Exception as e: # noqa + logger.exception("") + raise e + class DataflowBenchmark: - def __init__(self, num_iters=100, prepare_batch=None, device="cuda"): + def __init__(self, num_iters=100, prepare_batch=None): from ignite.handlers import Timer + device = idist.device() + def upload_to_gpu(engine, batch): if prepare_batch is not None: x, y = prepare_batch(batch, device=device, non_blocking=False) @@ -196,7 +288,7 @@ def upload_to_gpu(engine, batch): def stop_benchmark_dataflow(engine): engine.terminate() - if dist.is_available() and dist.get_rank() == 0: + if idist.get_rank() == 0: @self.benchmark_dataflow.on(Events.ITERATION_COMPLETED(every=num_iters // 100)) def show_progress_benchmark_dataflow(engine): @@ -217,14 +309,14 @@ def attach(self, trainer, train_loader): @trainer.on(Events.STARTED) def run_benchmark(_): - if dist.is_available() and dist.get_rank() == 0: + if idist.get_rank() == 0: print("-" * 50) print(" - Dataflow benchmark") self.benchmark_dataflow.run(train_loader) t = self.timer.value() - if dist.is_available() and dist.get_rank() == 0: + if idist.get_rank() == 0: print(" ") print(" Total time ({} iterations) : {:.5f} seconds".format(self.num_iters, t)) print(" time per iteration : {} seconds".format(t / self.num_iters)) diff --git a/examples/references/classification/imagenet/code/utils/exp_tracking.py b/examples/references/classification/imagenet/code/utils/exp_tracking.py new file mode 100644 index 000000000000..2c8f0f833216 --- /dev/null +++ b/examples/references/classification/imagenet/code/utils/exp_tracking.py @@ -0,0 +1,125 @@ +# Module for common exp tracking methods + +import os +from pathlib import Path + +import torch + +import ignite +import ignite.distributed as idist +from ignite.contrib.engines import common + +try: + import polyaxon_client.tracking + + if "POLYAXON_RUN_OUTPUTS_PATH" not in os.environ: + raise ImportError("Not in Polyaxon cluster") + + has_plx = True +except ImportError: + has_plx = False + + +try: + import mlflow + + if "MLFLOW_TRACKING_URI" not in os.environ: + raise ImportError("MLFLOW_TRACKING_URI should be defined") + + has_mlflow = True +except ImportError: + has_mlflow = False + + +try: + import trains + + if "TRAINS_OUTPUT_PATH" not in os.environ: + raise ImportError("TRAINS_OUTPUT_PATH should be defined") + + has_trains = True +except ImportError: + has_trains = False + + +def _plx_get_output_path(): + from polyaxon_client.tracking import get_outputs_path + + return get_outputs_path() + + +@idist.one_rank_only() +def _plx_log_artifact(fp): + from polyaxon_client.tracking import Experiment + + plx_exp = Experiment() + plx_exp.log_artifact(fp) + + +@idist.one_rank_only() +def _plx_log_params(params_dict): + from polyaxon_client.tracking import Experiment + + plx_exp = Experiment() + plx_exp.log_params( + **{"pytorch version": torch.__version__, "ignite version": ignite.__version__,} + ) + plx_exp.log_params(**params_dict) + + +def _mlflow_get_output_path(): + return mlflow.get_artifact_uri() + + +@idist.one_rank_only() +def _mlflow_log_artifact(fp): + mlflow.log_artifact(fp) + + +@idist.one_rank_only() +def _mlflow_log_params(params_dict): + mlflow.log_params( + {"pytorch version": torch.__version__, "ignite version": ignite.__version__,} + ) + mlflow.log_params(params_dict) + + +def _trains_get_output_path(): + from datetime import datetime + + output_path = Path(os.environ["TRAINS_OUTPUT_PATH"]) + output_path = output_path / "trains" / datetime.now().strftime("%Y%m%d-%H%M%S") + return output_path.as_posix() + + +@idist.one_rank_only() +def _trains_log_artifact(fp): + from trains import Task + + task = Task.current_task() + task.upload_artifact(Path(fp).name, fp) + + +@idist.one_rank_only() +def _trains_log_params(params_dict): + from trains import Task + + task = Task.current_task() + task.connect(params_dict) + + +if has_plx: + get_output_path = _plx_get_output_path + log_params = _plx_log_params + setup_logging = common.setup_plx_logging + log_artifact = _plx_log_artifact +elif has_mlflow: + get_output_path = _mlflow_get_output_path + log_params = _mlflow_log_params + setup_logging = common.setup_mlflow_logging + log_artifact = _mlflow_log_artifact +elif has_trains: + get_output_path = _trains_get_output_path + log_params = _trains_log_params + setup_logging = common.setup_trains_logging + log_artifact = _trains_log_artifact diff --git a/examples/references/classification/imagenet/configs/train/baseline_resnet50.py b/examples/references/classification/imagenet/configs/train/baseline_resnet50.py index 715e5a6e39c4..3b205903f5ac 100644 --- a/examples/references/classification/imagenet/configs/train/baseline_resnet50.py +++ b/examples/references/classification/imagenet/configs/train/baseline_resnet50.py @@ -5,13 +5,14 @@ import torch.nn as nn import torch.optim as optim import torch.optim.lr_scheduler as lrs -import torch.distributed as dist from torchvision.models.resnet import resnet50 import albumentations as A from albumentations.pytorch import ToTensorV2 as ToTensor +import ignite.distributed as idist + from dataflow.dataloaders import get_train_val_loaders from dataflow.transforms import denormalize @@ -33,8 +34,8 @@ train_crop_size = 224 val_crop_size = 320 -batch_size = 64 # batch size per local rank -num_workers = 10 # num_workers per local rank +batch_size = 64 * idist.get_world_size() # total batch size +num_workers = 10 # ############################## @@ -75,9 +76,6 @@ batch_size=batch_size, num_workers=num_workers, val_batch_size=batch_size, - pin_memory=True, - train_sampler="distributed", - val_sampler="distributed", ) # Image denormalization function to plot predictions with images @@ -100,6 +98,6 @@ le = len(train_loader) -base_lr = 0.1 * (batch_size * dist.get_world_size() / 256.0) +base_lr = 0.1 * (batch_size / 256.0) optimizer = optim.SGD(model.parameters(), lr=base_lr, momentum=0.9, weight_decay=1e-4) lr_scheduler = lrs.MultiStepLR(optimizer, milestones=[30 * le, 60 * le, 90 * le, 100 * le], gamma=0.1) diff --git a/examples/references/classification/imagenet/configs/train/check_baseline_resnet50.py b/examples/references/classification/imagenet/configs/train/check_baseline_resnet50.py index 908ac4c8dd9a..0f162c63d2b6 100644 --- a/examples/references/classification/imagenet/configs/train/check_baseline_resnet50.py +++ b/examples/references/classification/imagenet/configs/train/check_baseline_resnet50.py @@ -5,13 +5,14 @@ import torch.nn as nn import torch.optim as optim import torch.optim.lr_scheduler as lrs -import torch.distributed as dist from torchvision.models.resnet import resnet50 import albumentations as A from albumentations.pytorch import ToTensorV2 as ToTensor +import ignite.distributed as idist + from dataflow.dataloaders import get_train_val_loaders from dataflow.transforms import denormalize @@ -29,12 +30,13 @@ fp16_opt_level = "O2" val_interval = 2 +start_by_validation = True train_crop_size = 224 val_crop_size = 320 -batch_size = 64 # batch size per local rank -num_workers = 10 # num_workers per local rank +batch_size = 64 * idist.get_world_size() # total batch size +num_workers = 10 # ############################## @@ -75,9 +77,6 @@ batch_size=batch_size, num_workers=num_workers, val_batch_size=batch_size, - pin_memory=True, - train_sampler="distributed", - val_sampler="distributed", ) # Image denormalization function to plot predictions with images @@ -100,6 +99,6 @@ le = len(train_loader) -base_lr = 0.1 * (batch_size * dist.get_world_size() / 256.0) +base_lr = 0.1 * (batch_size / 256.0) optimizer = optim.SGD(model.parameters(), lr=base_lr, momentum=0.9, weight_decay=1e-4) lr_scheduler = lrs.MultiStepLR(optimizer, milestones=[30 * le, 60 * le, 90 * le, 100 * le], gamma=0.1) diff --git a/examples/references/classification/imagenet/experiments/mlflow/MLproject b/examples/references/classification/imagenet/experiments/mlflow/MLproject index bd0c921d08bc..7a85b3a9a42d 100644 --- a/examples/references/classification/imagenet/experiments/mlflow/MLproject +++ b/examples/references/classification/imagenet/experiments/mlflow/MLproject @@ -8,4 +8,4 @@ entry_points: parameters: config_path: path num_gpus: float - command: "sh setup_apex.sh && sh setup_opencv.sh && export PYTHONPATH=$PWD/../../code:$PYTHONPATH && python -m torch.distributed.launch --nproc_per_node={num_gpus} -m py_config_runner ../../code/scripts/mlflow_training.py {config_path} --manual_config_load" + command: "sh ../setup_apex.sh && export PYTHONPATH=$PWD/../../code:$PYTHONPATH && python -m torch.distributed.launch --nproc_per_node={num_gpus} --use_env -m py_config_runner ../../code/scripts/training.py {config_path}" diff --git a/examples/references/classification/imagenet/experiments/mlflow/conda.yaml b/examples/references/classification/imagenet/experiments/mlflow/conda.yaml index f66ddb3fac6d..ec42b74dce4c 100644 --- a/examples/references/classification/imagenet/experiments/mlflow/conda.yaml +++ b/examples/references/classification/imagenet/experiments/mlflow/conda.yaml @@ -1,20 +1,19 @@ name: imagenet_env channels: - - defaults - pytorch dependencies: - python=3.7 - numpy - # Forces conda to install pytorch with CUDA support, otherwise it can install CPU version - - cudatoolkit=10.1.243=h6bb024c_0 - - pytorch=1.3.1=py3.7_cuda10.1.243_cudnn7.6.3_0 - - torchvision=0.4.2=py37_cu101 + - cudatoolkit + - pytorch + - torchvision + - pip - pip: - mlflow + - albumentations - tqdm - tensorboardX - - albumentations - py_config_runner - pynvml - - git+https://github.com/pytorch/ignite.git + - pytorch-ignite - git+https://github.com/vfdev-5/ImageDatasetViz.git diff --git a/examples/references/classification/imagenet/experiments/plx/xp_training.yml.tmpl b/examples/references/classification/imagenet/experiments/plx/xp_training.yml.tmpl index a28bcbcb6b18..590fe4ae0049 100644 --- a/examples/references/classification/imagenet/experiments/plx/xp_training.yml.tmpl +++ b/examples/references/classification/imagenet/experiments/plx/xp_training.yml.tmpl @@ -2,6 +2,8 @@ version: 1 kind: experiment +tags: ["training", "resnet50"] + # Setup running node: environment: node_selector: @@ -13,11 +15,13 @@ environment: # Setup running environment: build: - image: pytorch/pytorch:1.3-cuda10.1-cudnn7-devel + image: pytorch/pytorch:1.5-cuda10.1-cudnn7-devel build_steps: + # For opencv - apt-get update && - apt-get -y install --no-install-recommends libglib2.0 libsm6 libxext6 libxrender-dev + TZ=America/New_York DEBIAN_FRONTEND="noninteractive" apt-get -y install tzdata && + apt-get -y install --no-install-recommends libglib2.0 libsm6 libxext6 libxrender-dev git # Install Nvidia/APEX - git clone https://github.com/NVIDIA/apex /tmp/apex && cd /tmp/apex && @@ -32,7 +36,7 @@ build: declarations: config_file: "baseline_resnet50.py" - script_file: "plx_training.py" + script_file: "training.py" num_gpus: 2 run: @@ -48,5 +52,6 @@ run: # Copy configuration file to the output - cp $config_file $POLYAXON_RUN_OUTPUTS_PATH + - cp $script_file $POLYAXON_RUN_OUTPUTS_PATH - - python -m torch.distributed.launch --nproc_per_node={{num_gpus}} -m py_config_runner $script_file $config_file --manual_config_load + - python -m torch.distributed.launch --nproc_per_node={{num_gpus}} -m py_config_runner $script_file $config_file \ No newline at end of file diff --git a/examples/references/classification/imagenet/experiments/mlflow/setup_apex.sh b/examples/references/classification/imagenet/experiments/setup_apex.sh similarity index 100% rename from examples/references/classification/imagenet/experiments/mlflow/setup_apex.sh rename to examples/references/classification/imagenet/experiments/setup_apex.sh diff --git a/examples/references/classification/imagenet/experiments/mlflow/setup_opencv.sh b/examples/references/classification/imagenet/experiments/setup_opencv.sh similarity index 100% rename from examples/references/classification/imagenet/experiments/mlflow/setup_opencv.sh rename to examples/references/classification/imagenet/experiments/setup_opencv.sh diff --git a/examples/references/classification/imagenet/experiments/trains/requirements.txt b/examples/references/classification/imagenet/experiments/trains/requirements.txt new file mode 100644 index 000000000000..450ecdee9cf9 --- /dev/null +++ b/examples/references/classification/imagenet/experiments/trains/requirements.txt @@ -0,0 +1 @@ +trains >= 0.15.0 diff --git a/examples/references/classification/imagenet/requirements.txt b/examples/references/classification/imagenet/requirements.txt new file mode 100644 index 000000000000..d110af83c572 --- /dev/null +++ b/examples/references/classification/imagenet/requirements.txt @@ -0,0 +1,11 @@ +albumentations +image-dataset-viz +numpy +opencv-python +py_config_runner +pytorch-ignite +pillow +tensorboard +torch +torchvision +tqdm diff --git a/examples/references/segmentation/pascal_voc2012/NOTES_MLflow.md b/examples/references/segmentation/pascal_voc2012/NOTES_MLflow.md index 3576b7bce535..b0589b895335 100644 --- a/examples/references/segmentation/pascal_voc2012/NOTES_MLflow.md +++ b/examples/references/segmentation/pascal_voc2012/NOTES_MLflow.md @@ -76,7 +76,7 @@ mlflow run experiments/mlflow --experiment-name=Trainings -P config_path=configs ### Training on single node with multiple GPUs -For optimal devices usage, please, make sure to adapt training data loader batch size to your infrasture. +For optimal devices usage, please, make sure to adapt training data loader batch size to your infrastructure. For example, a single GPU with 11GB can have a batch size of 8-9, thus, on N devices, we can set it as `N * 9`. ```bash diff --git a/examples/references/segmentation/pascal_voc2012/NOTES_Polyaxon.md b/examples/references/segmentation/pascal_voc2012/NOTES_Polyaxon.md index 706347504445..0e806c232458 100644 --- a/examples/references/segmentation/pascal_voc2012/NOTES_Polyaxon.md +++ b/examples/references/segmentation/pascal_voc2012/NOTES_Polyaxon.md @@ -32,7 +32,7 @@ polyaxon run -u -f experiments/plx/job_download_datasets.yml ### Training on single node with single or multiple GPU -For optimal devices usage, please, make sure to adapt training data loader batch size to your infrasture. +For optimal devices usage, please, make sure to adapt training data loader batch size to your infrastructure. For example, a single GPU with 11GB can have a batch size of 8-9, thus, on N devices, we can set it as `N * 9`. Please, adapt `xp_training.yml` to your cluster configuration and run it, for example, as diff --git a/examples/references/segmentation/pascal_voc2012/NOTES_Trains.md b/examples/references/segmentation/pascal_voc2012/NOTES_Trains.md index 0842336cdc48..891682f3a410 100644 --- a/examples/references/segmentation/pascal_voc2012/NOTES_Trains.md +++ b/examples/references/segmentation/pascal_voc2012/NOTES_Trains.md @@ -106,7 +106,7 @@ py_config_runner ./code/scripts/training.py ./configs/train/baseline_resnet101.p For optimal devices usage, please, make sure to adapt training data loader batch size to your infrasture. For example, a single GPU with 11GB can have a batch size of 8-9, thus, on N devices, we can set it as `N * 9`. -``` +```bash export TRAINS_OUTPUT_PATH=/path/to/output/trains # e.g export TRAINS_OUTPUT_PATH=$PWD/output/trains export PYTHONPATH=$PWD/code:$PYTHONPATH @@ -119,10 +119,6 @@ In **Trains Web-App** a new project named *"Pascal-VOC12 Training"* will be crea with an experiment named *"baseline_resnet101"* inside. In your local environment, the console output includes the URL of the experiment's **RESULTS** page. - -```console -TRAINS results page: https://demoapp.trains.allegro.ai/projects/21643e0f1c4a4c99953302fc88a1a84c/experiments/60763e04c0ba45ea9fe3cfe79f3f06a3/output/log -``` You can now view your experiment in **Trains** by clicking the link or copying the URL into your browser. It opens the results in the experiment's details pane, in the **Trains Web-App (UI)**. diff --git a/examples/references/segmentation/pascal_voc2012/README.md b/examples/references/segmentation/pascal_voc2012/README.md index 32c4ce7e27b0..4fede1aae33c 100644 --- a/examples/references/segmentation/pascal_voc2012/README.md +++ b/examples/references/segmentation/pascal_voc2012/README.md @@ -52,10 +52,6 @@ We use [py_config_runner](https://github.com/vfdev-5/py_config_runner) package t Training script is located [code/scripts](code/scripts/) and contains - `training.py`, single training script with possiblity to use one of MLflow / Polayaxon / Trains experiments tracking systems. - Training script contains `run` method required by [py_config_runner](https://github.com/vfdev-5/py_config_runner) to run a script with a configuration. diff --git a/examples/references/segmentation/pascal_voc2012/code/dataflow/dataloaders.py b/examples/references/segmentation/pascal_voc2012/code/dataflow/dataloaders.py index b43e71641d0e..c8595fdb98dd 100644 --- a/examples/references/segmentation/pascal_voc2012/code/dataflow/dataloaders.py +++ b/examples/references/segmentation/pascal_voc2012/code/dataflow/dataloaders.py @@ -2,9 +2,8 @@ import numpy as np -from torch.utils.data import DataLoader, Sampler +from torch.utils.data import DataLoader from torch.utils.data.dataset import Subset, ConcatDataset -import torch.utils.data.distributed as data_dist import ignite.distributed as idist @@ -18,7 +17,6 @@ def get_train_val_loaders( batch_size: int = 16, num_workers: int = 8, val_batch_size: Optional[int] = None, - pin_memory: bool = True, with_sbd: Optional[str] = None, limit_train_num_samples: Optional[int] = None, limit_val_num_samples: Optional[int] = None, @@ -54,26 +52,16 @@ def get_train_val_loaders( train_eval_ds = TransformedDataset(train_eval_ds, transform_fn=val_transforms) train_loader = idist.auto_dataloader( - train_ds, shuffle=True, batch_size=batch_size, num_workers=num_workers, pin_memory=pin_memory, drop_last=True, + train_ds, shuffle=True, batch_size=batch_size, num_workers=num_workers, drop_last=True, ) val_batch_size = batch_size * 4 if val_batch_size is None else val_batch_size val_loader = idist.auto_dataloader( - val_ds, - shuffle=False, - batch_size=val_batch_size, - num_workers=num_workers, - pin_memory=pin_memory, - drop_last=False, + val_ds, shuffle=False, batch_size=val_batch_size, num_workers=num_workers, drop_last=False, ) train_eval_loader = idist.auto_dataloader( - train_eval_ds, - shuffle=False, - batch_size=val_batch_size, - num_workers=num_workers, - pin_memory=pin_memory, - drop_last=False, + train_eval_ds, shuffle=False, batch_size=val_batch_size, num_workers=num_workers, drop_last=False, ) return train_loader, val_loader, train_eval_loader diff --git a/examples/references/segmentation/pascal_voc2012/code/scripts/training.py b/examples/references/segmentation/pascal_voc2012/code/scripts/training.py index 313dd6c8e820..f0c1f481bf07 100644 --- a/examples/references/segmentation/pascal_voc2012/code/scripts/training.py +++ b/examples/references/segmentation/pascal_voc2012/code/scripts/training.py @@ -1,10 +1,10 @@ # This a training script launched with py_config_runner # It should obligatory contain `run(config, **kwargs)` method + from pathlib import Path from collections.abc import Mapping import torch -import torch.nn as nn from apex import amp @@ -85,7 +85,7 @@ def train_update_function(engine, batch): to_save=to_save, save_every_iters=1000, output_path=config.output_path.as_posix(), - lr_scheduler=config.lr_scheduler, + lr_scheduler=lr_scheduler, with_gpu_stats=True, output_names=output_names, with_pbars=False, diff --git a/examples/references/segmentation/pascal_voc2012/configs/train/baseline_resnet101.py b/examples/references/segmentation/pascal_voc2012/configs/train/baseline_resnet101.py index a36747780174..4a21508fc1af 100644 --- a/examples/references/segmentation/pascal_voc2012/configs/train/baseline_resnet101.py +++ b/examples/references/segmentation/pascal_voc2012/configs/train/baseline_resnet101.py @@ -16,21 +16,20 @@ from dataflow.transforms import ignore_mask_boundaries, prepare_batch_fp32, denormalize -assert "DATASET_PATH" in os.environ -data_path = os.environ["DATASET_PATH"] - - -debug = False -seed = 12 +# ############################## +# Global configs +# ############################## +seed = 19 device = "cuda" +debug = False fp16_opt_level = "O2" num_classes = 21 -batch_size = 18 +batch_size = 18 # total batch size val_batch_size = 24 num_workers = 12 val_interval = 1 @@ -44,6 +43,9 @@ # Setup Dataflow # ############################## +assert "DATASET_PATH" in os.environ +data_path = os.environ["DATASET_PATH"] + mean = (0.485, 0.456, 0.406) std = (0.229, 0.224, 0.225) diff --git a/examples/references/segmentation/pascal_voc2012/experiments/mlflow/conda.yaml b/examples/references/segmentation/pascal_voc2012/experiments/mlflow/conda.yaml index 7c512c4a01f5..d9ea176ab94f 100644 --- a/examples/references/segmentation/pascal_voc2012/experiments/mlflow/conda.yaml +++ b/examples/references/segmentation/pascal_voc2012/experiments/mlflow/conda.yaml @@ -1,6 +1,5 @@ name: pascal_voc2012_env channels: - - defaults - pytorch dependencies: - python=3.7 @@ -16,5 +15,5 @@ dependencies: - tensorboardX - py_config_runner - pynvml - - git+https://github.com/pytorch/ignite.git + - pytorch-ignite - git+https://github.com/vfdev-5/ImageDatasetViz.git diff --git a/examples/references/segmentation/pascal_voc2012/experiments/plx/xp_training.yml.tmpl b/examples/references/segmentation/pascal_voc2012/experiments/plx/xp_training.yml.tmpl index 78bbee458d45..cade0ec8f600 100644 --- a/examples/references/segmentation/pascal_voc2012/experiments/plx/xp_training.yml.tmpl +++ b/examples/references/segmentation/pascal_voc2012/experiments/plx/xp_training.yml.tmpl @@ -2,6 +2,8 @@ version: 1 kind: experiment +tags: ["training", "deeplabv3", "sbd"] + # Setup running node: environment: node_selector: @@ -13,25 +15,28 @@ environment: # Setup running environment: build: - image: pytorch/pytorch:1.3-cuda10.1-cudnn7-devel + image: pytorch/pytorch:1.5-cuda10.1-cudnn7-devel build_steps: - # Install ignite and other useful packages - - pip install --upgrade --pre pytorch-ignite && - pip install git+https://github.com/vfdev-5/ImageDatasetViz.git albumentations && - pip install polyaxon-client tqdm tensorboardX py_config_runner pynvml + # For opencv + - apt-get update && + TZ=America/New_York DEBIAN_FRONTEND="noninteractive" apt-get -y install tzdata && + apt-get -y install --no-install-recommends libglib2.0 libsm6 libxext6 libxrender-dev git # Install Nvidia/APEX - git clone https://github.com/NVIDIA/apex /tmp/apex && cd /tmp/apex && export TORCH_CUDA_ARCH_LIST="6.0;6.1;6.2;7.0;7.5" && pip install --upgrade --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" . - # For opencv - - apt-get update && apt-get -y install --no-install-recommends libglib2.0 + # Install ignite and other useful packages + - pip install --upgrade --pre pytorch-ignite && + pip install git+https://github.com/vfdev-5/ImageDatasetViz.git albumentations && + pip install polyaxon-client tqdm tensorboardX py_config_runner pynvml + declarations: config_file: "baseline_resnet101_sbd.py" - script_file: "plx_training.py" + script_file: "training.py" num_gpus: 2 run: @@ -48,5 +53,6 @@ run: # Copy configuration file to the output - cp $config_file $POLYAXON_RUN_OUTPUTS_PATH + - cp $script_file $POLYAXON_RUN_OUTPUTS_PATH - - python -m torch.distributed.launch --nproc_per_node={{num_gpus}} -m py_config_runner $script_file $config_file --manual_config_load \ No newline at end of file + - python -m torch.distributed.launch --nproc_per_node={{num_gpus}} -m py_config_runner $script_file $config_file \ No newline at end of file From a10bf6e298740557111783020870867f8a15eaa6 Mon Sep 17 00:00:00 2001 From: Anmol Joshi Date: Thu, 18 Jun 2020 15:02:18 -0700 Subject: [PATCH 002/114] Updated pytorch-version-tests.yml to run cron every day at 00:00 UTC (#1141) Co-authored-by: Sylvain Desroziers --- .github/workflows/pytorch-version-tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pytorch-version-tests.yml b/.github/workflows/pytorch-version-tests.yml index 383342bf272a..43da2aae7fa9 100644 --- a/.github/workflows/pytorch-version-tests.yml +++ b/.github/workflows/pytorch-version-tests.yml @@ -1,7 +1,7 @@ on: schedule: - # Run at 00:00 UTC on Sunday - - cron: '0 0 * * 0' + # Run at 00:00 UTC Every Day + - cron: '0 0 * * *' jobs: build: From 454e1a3e491397b0f9ec27efd203fb461cf6af08 Mon Sep 17 00:00:00 2001 From: Anmol Joshi Date: Fri, 19 Jun 2020 02:40:51 -0700 Subject: [PATCH 003/114] Added check_compute_fn argument to EpochMetric and related metrics (#1140) * Added check_compute_fn argument to EpochMetric and related functions. * Updated docstrings * Added check_compute_fn to _BaseRegressionEpoch * Adding typing hints for check_compute_fn * Update roc_auc.py Co-authored-by: Sylvain Desroziers Co-authored-by: vfdev --- ignite/contrib/metrics/average_precision.py | 10 ++++++-- .../contrib/metrics/precision_recall_curve.py | 10 ++++++-- ignite/contrib/metrics/regression/_base.py | 6 +++-- ignite/contrib/metrics/roc_auc.py | 24 ++++++++++++++----- ignite/metrics/epoch_metric.py | 9 +++++-- .../contrib/metrics/regression/test__base.py | 16 +++++++++++++ .../metrics/test_precision_recall_curve.py | 18 ++++++++++++++ tests/ignite/contrib/metrics/test_roc_auc.py | 18 ++++++++++++++ .../ignite/contrib/metrics/test_roc_curve.py | 18 ++++++++++++++ tests/ignite/metrics/test_epoch_metric.py | 15 ++++++++++++ 10 files changed, 130 insertions(+), 14 deletions(-) diff --git a/ignite/contrib/metrics/average_precision.py b/ignite/contrib/metrics/average_precision.py index 5e81bcefdaf5..df7a4d967095 100644 --- a/ignite/contrib/metrics/average_precision.py +++ b/ignite/contrib/metrics/average_precision.py @@ -22,6 +22,10 @@ class AveragePrecision(EpochMetric): :class:`~ignite.engine.Engine`'s `process_function`'s output into the form expected by the metric. This can be useful if, for example, you have a multi-output model and you want to compute the metric with respect to one of the outputs. + check_compute_fn (bool): Optional default False. If True, `sklearn.metrics.average_precision_score + `_ is run on the first batch of data to ensure there are + no issues. User will be warned in case there are any issues computing the function. AveragePrecision expects y to be comprised of 0's and 1's. y_pred must either be probability estimates or confidence values. To apply an activation to y_pred, use output_transform as shown below: @@ -37,5 +41,7 @@ def activated_output_transform(output): """ - def __init__(self, output_transform=lambda x: x): - super(AveragePrecision, self).__init__(average_precision_compute_fn, output_transform=output_transform) + def __init__(self, output_transform=lambda x: x, check_compute_fn: bool = False): + super(AveragePrecision, self).__init__( + average_precision_compute_fn, output_transform=output_transform, check_compute_fn=check_compute_fn + ) diff --git a/ignite/contrib/metrics/precision_recall_curve.py b/ignite/contrib/metrics/precision_recall_curve.py index 50a75317fe44..9e1ecfdb8d0e 100644 --- a/ignite/contrib/metrics/precision_recall_curve.py +++ b/ignite/contrib/metrics/precision_recall_curve.py @@ -23,6 +23,10 @@ class PrecisionRecallCurve(EpochMetric): :class:`~ignite.engine.Engine`'s `process_function`'s output into the form expected by the metric. This can be useful if, for example, you have a multi-output model and you want to compute the metric with respect to one of the outputs. + check_compute_fn (bool): Optional default False. If True, `sklearn.metrics.precision_recall_curve + `_ is run on the first batch of data to ensure there are + no issues. User will be warned in case there are any issues computing the function. PrecisionRecallCurve expects y to be comprised of 0's and 1's. y_pred must either be probability estimates or confidence values. To apply an activation to y_pred, use output_transform as shown below: @@ -38,5 +42,7 @@ def activated_output_transform(output): """ - def __init__(self, output_transform=lambda x: x): - super(PrecisionRecallCurve, self).__init__(precision_recall_curve_compute_fn, output_transform=output_transform) + def __init__(self, output_transform=lambda x: x, check_compute_fn: bool = False): + super(PrecisionRecallCurve, self).__init__( + precision_recall_curve_compute_fn, output_transform=output_transform, check_compute_fn=check_compute_fn + ) diff --git a/ignite/contrib/metrics/regression/_base.py b/ignite/contrib/metrics/regression/_base.py index ef70856e1e8a..ba08441a4574 100644 --- a/ignite/contrib/metrics/regression/_base.py +++ b/ignite/contrib/metrics/regression/_base.py @@ -56,8 +56,10 @@ class _BaseRegressionEpoch(EpochMetric): # `update` method check the shapes and call internal overloaded method `_update`. # Class internally stores complete history of predictions and targets of type float32. - def __init__(self, compute_fn, output_transform=lambda x: x): - super(_BaseRegressionEpoch, self).__init__(compute_fn=compute_fn, output_transform=output_transform) + def __init__(self, compute_fn, output_transform=lambda x: x, check_compute_fn: bool = True): + super(_BaseRegressionEpoch, self).__init__( + compute_fn=compute_fn, output_transform=output_transform, check_compute_fn=check_compute_fn + ) def _check_type(self, output): _check_output_types(output) diff --git a/ignite/contrib/metrics/roc_auc.py b/ignite/contrib/metrics/roc_auc.py index e732bfdaad8c..272106e638bd 100644 --- a/ignite/contrib/metrics/roc_auc.py +++ b/ignite/contrib/metrics/roc_auc.py @@ -31,9 +31,13 @@ class ROC_AUC(EpochMetric): Args: output_transform (callable, optional): a callable that is used to transform the - :class:`~ignite.engine.Engine`'s `process_function`'s output into the + :class:`~ignite.engine.Engine`'s ``process_function``'s output into the form expected by the metric. This can be useful if, for example, you have a multi-output model and you want to compute the metric with respect to one of the outputs. + check_compute_fn (bool): Optional default False. If True, `sklearn.metrics.roc_curve + `_ is run on the first batch of data to ensure there are + no issues. User will be warned in case there are any issues computing the function. ROC_AUC expects y to be comprised of 0's and 1's. y_pred must either be probability estimates or confidence values. To apply an activation to y_pred, use output_transform as shown below: @@ -49,8 +53,10 @@ def activated_output_transform(output): """ - def __init__(self, output_transform=lambda x: x): - super(ROC_AUC, self).__init__(roc_auc_compute_fn, output_transform=output_transform) + def __init__(self, output_transform=lambda x: x, check_compute_fn: bool = False): + super(ROC_AUC, self).__init__( + roc_auc_compute_fn, output_transform=output_transform, check_compute_fn=check_compute_fn + ) class RocCurve(EpochMetric): @@ -61,9 +67,13 @@ class RocCurve(EpochMetric): Args: output_transform (callable, optional): a callable that is used to transform the - :class:`~ignite.engine.Engine`'s `process_function`'s output into the + :class:`~ignite.engine.Engine`'s ``process_function``'s output into the form expected by the metric. This can be useful if, for example, you have a multi-output model and you want to compute the metric with respect to one of the outputs. + check_compute_fn (bool): Optional default False. If True, `sklearn.metrics.roc_curve + `_ is run on the first batch of data to ensure there are + no issues. User will be warned in case there are any issues computing the function. RocCurve expects y to be comprised of 0's and 1's. y_pred must either be probability estimates or confidence values. To apply an activation to y_pred, use output_transform as shown below: @@ -79,5 +89,7 @@ def activated_output_transform(output): """ - def __init__(self, output_transform=lambda x: x): - super(RocCurve, self).__init__(roc_auc_curve_compute_fn, output_transform=output_transform) + def __init__(self, output_transform=lambda x: x, check_compute_fn: bool = False): + super(RocCurve, self).__init__( + roc_auc_curve_compute_fn, output_transform=output_transform, check_compute_fn=check_compute_fn + ) diff --git a/ignite/metrics/epoch_metric.py b/ignite/metrics/epoch_metric.py index b46556081327..65b69fea5b59 100644 --- a/ignite/metrics/epoch_metric.py +++ b/ignite/metrics/epoch_metric.py @@ -34,16 +34,21 @@ class EpochMetric(Metric): :class:`~ignite.engine.Engine`'s `process_function`'s output into the form expected by the metric. This can be useful if, for example, you have a multi-output model and you want to compute the metric with respect to one of the outputs. + check_compute_fn (bool): if True, compute_fn is run on the first batch of data to ensure there are no + issues. If issues exist, user is warned that there might be an issue with the ``compute_fn``. + Warnings: + EpochMetricWarning: User is warned that there are issues with compute_fn on a batch of data processed. """ - def __init__(self, compute_fn: Callable, output_transform: Callable = lambda x: x): + def __init__(self, compute_fn: Callable, output_transform: Callable = lambda x: x, check_compute_fn: bool = True): if not callable(compute_fn): raise TypeError("Argument compute_fn should be callable.") super(EpochMetric, self).__init__(output_transform=output_transform, device="cpu") self.compute_fn = compute_fn + self._check_compute_fn = check_compute_fn def reset(self) -> None: self._predictions = [] @@ -95,7 +100,7 @@ def update(self, output: Sequence[torch.Tensor]) -> None: self._targets.append(y) # Check once the signature and execution of compute_fn - if len(self._predictions) == 1: + if len(self._predictions) == 1 and self._check_compute_fn: try: self.compute_fn(self._predictions[0], self._targets[0]) except Exception as e: diff --git a/tests/ignite/contrib/metrics/regression/test__base.py b/tests/ignite/contrib/metrics/regression/test__base.py index 897225911811..ef7e02c85e4f 100644 --- a/tests/ignite/contrib/metrics/regression/test__base.py +++ b/tests/ignite/contrib/metrics/regression/test__base.py @@ -3,6 +3,7 @@ import torch from ignite.contrib.metrics.regression._base import _BaseRegression, _BaseRegressionEpoch +from ignite.metrics.epoch_metric import EpochMetricWarning def test_base_regression_shapes(): @@ -84,3 +85,18 @@ def test_base_regression_compute_fn(): # Wrong compute function with pytest.raises(TypeError): _BaseRegressionEpoch(12345) + + +def test_check_compute_fn(): + def compute_fn(y_preds, y_targets): + raise Exception + + em = _BaseRegressionEpoch(compute_fn, check_compute_fn=True) + + em.reset() + output1 = (torch.rand(4, 1).float(), torch.randint(0, 2, size=(4, 1), dtype=torch.float32)) + with pytest.warns(EpochMetricWarning, match=r"Probably, there can be a problem with `compute_fn`"): + em.update(output1) + + em = _BaseRegressionEpoch(compute_fn, check_compute_fn=False) + em.update(output1) diff --git a/tests/ignite/contrib/metrics/test_precision_recall_curve.py b/tests/ignite/contrib/metrics/test_precision_recall_curve.py index 7a5d643aecb0..eb696606e2c5 100644 --- a/tests/ignite/contrib/metrics/test_precision_recall_curve.py +++ b/tests/ignite/contrib/metrics/test_precision_recall_curve.py @@ -1,9 +1,11 @@ import numpy as np +import pytest import torch from sklearn.metrics import precision_recall_curve from ignite.contrib.metrics.precision_recall_curve import PrecisionRecallCurve from ignite.engine import Engine +from ignite.metrics.epoch_metric import EpochMetricWarning def test_precision_recall_curve(): @@ -89,3 +91,19 @@ def update_fn(engine, batch): assert np.array_equal(recall, sk_recall) # assert thresholds almost equal, due to numpy->torch->numpy conversion np.testing.assert_array_almost_equal(thresholds, sk_thresholds) + + +def test_check_compute_fn(): + y_pred = torch.zeros((8, 13)) + y_pred[:, 1] = 1 + y_true = torch.zeros_like(y_pred) + output = (y_pred, y_true) + + em = PrecisionRecallCurve(check_compute_fn=True) + + em.reset() + with pytest.warns(EpochMetricWarning, match=r"Probably, there can be a problem with `compute_fn`"): + em.update(output) + + em = PrecisionRecallCurve(check_compute_fn=False) + em.update(output) diff --git a/tests/ignite/contrib/metrics/test_roc_auc.py b/tests/ignite/contrib/metrics/test_roc_auc.py index 92ce92d775ea..c36746521698 100644 --- a/tests/ignite/contrib/metrics/test_roc_auc.py +++ b/tests/ignite/contrib/metrics/test_roc_auc.py @@ -1,9 +1,11 @@ import numpy as np +import pytest import torch from sklearn.metrics import roc_auc_score from ignite.contrib.metrics import ROC_AUC from ignite.engine import Engine +from ignite.metrics.epoch_metric import EpochMetricWarning def test_roc_auc_score(): @@ -110,3 +112,19 @@ def update_fn(engine, batch): roc_auc = engine.run(data, max_epochs=1).metrics["roc_auc"] assert roc_auc == np_roc_auc + + +def test_check_compute_fn(): + y_pred = torch.zeros((8, 13)) + y_pred[:, 1] = 1 + y_true = torch.zeros_like(y_pred) + output = (y_pred, y_true) + + em = ROC_AUC(check_compute_fn=True) + + em.reset() + with pytest.warns(EpochMetricWarning, match=r"Probably, there can be a problem with `compute_fn`"): + em.update(output) + + em = ROC_AUC(check_compute_fn=False) + em.update(output) diff --git a/tests/ignite/contrib/metrics/test_roc_curve.py b/tests/ignite/contrib/metrics/test_roc_curve.py index 696078b4ae63..4aa718a824ee 100644 --- a/tests/ignite/contrib/metrics/test_roc_curve.py +++ b/tests/ignite/contrib/metrics/test_roc_curve.py @@ -1,9 +1,11 @@ import numpy as np +import pytest import torch from sklearn.metrics import roc_curve from ignite.contrib.metrics.roc_auc import RocCurve from ignite.engine import Engine +from ignite.metrics.epoch_metric import EpochMetricWarning def test_roc_curve(): @@ -89,3 +91,19 @@ def update_fn(engine, batch): assert np.array_equal(tpr, sk_tpr) # assert thresholds almost equal, due to numpy->torch->numpy conversion np.testing.assert_array_almost_equal(thresholds, sk_thresholds) + + +def test_check_compute_fn(): + y_pred = torch.zeros((8, 13)) + y_pred[:, 1] = 1 + y_true = torch.zeros_like(y_pred) + output = (y_pred, y_true) + + em = RocCurve(check_compute_fn=True) + + em.reset() + with pytest.warns(EpochMetricWarning, match=r"Probably, there can be a problem with `compute_fn`"): + em.update(output) + + em = RocCurve(check_compute_fn=False) + em.update(output) diff --git a/tests/ignite/metrics/test_epoch_metric.py b/tests/ignite/metrics/test_epoch_metric.py index b110a4eb8992..64829cb4912d 100644 --- a/tests/ignite/metrics/test_epoch_metric.py +++ b/tests/ignite/metrics/test_epoch_metric.py @@ -144,6 +144,21 @@ def compute_fn(y_preds, y_targets): EpochMetric(compute_fn) +def test_check_compute_fn(): + def compute_fn(y_preds, y_targets): + raise Exception + + em = EpochMetric(compute_fn, check_compute_fn=True) + + em.reset() + output1 = (torch.rand(4, 3), torch.randint(0, 2, size=(4, 3), dtype=torch.long)) + with pytest.warns(EpochMetricWarning, match=r"Probably, there can be a problem with `compute_fn`"): + em.update(output1) + + em = EpochMetric(compute_fn, check_compute_fn=False) + em.update(output1) + + @pytest.mark.distributed @pytest.mark.skipif(not idist.has_native_dist_support, reason="Skip if no native dist support") @pytest.mark.skipif(torch.cuda.device_count() < 1, reason="Skip if no GPU") From 04bdede6a041110ae9790d3f011a7da9ce21c40d Mon Sep 17 00:00:00 2001 From: vfdev Date: Fri, 19 Jun 2020 12:48:32 +0200 Subject: [PATCH 004/114] Docs cosmetics (#1142) * Updated docs, replaced single quote by double quote if is code - fixed missing link to Engine - cosmetics * More doc updates * More updates --- docs/source/metrics.rst | 10 +-- ignite/contrib/handlers/base_logger.py | 15 ++-- ignite/contrib/handlers/tqdm_logger.py | 10 +-- ignite/contrib/handlers/visdom_logger.py | 4 +- ignite/contrib/metrics/average_precision.py | 4 +- .../contrib/metrics/precision_recall_curve.py | 4 +- .../metrics/regression/canberra_metric.py | 2 +- .../regression/fractional_absolute_error.py | 2 +- .../metrics/regression/fractional_bias.py | 2 +- .../geometric_mean_absolute_error.py | 2 +- .../geometric_mean_relative_absolute_error.py | 2 +- .../metrics/regression/manhattan_distance.py | 2 +- .../regression/maximum_absolute_error.py | 2 +- .../mean_absolute_relative_error.py | 2 +- .../contrib/metrics/regression/mean_error.py | 2 +- .../regression/mean_normalized_bias.py | 2 +- .../regression/median_absolute_error.py | 2 +- .../median_absolute_percentage_error.py | 2 +- .../median_relative_absolute_error.py | 2 +- ignite/contrib/metrics/regression/r2_score.py | 2 +- .../regression/wave_hedges_distance.py | 2 +- ignite/contrib/metrics/roc_auc.py | 6 +- ignite/engine/__init__.py | 2 +- ignite/engine/deterministic.py | 4 +- ignite/engine/engine.py | 53 +++++++------- ignite/engine/events.py | 8 +-- ignite/handlers/checkpoint.py | 69 ++++++++++--------- ignite/handlers/early_stopping.py | 2 +- ignite/handlers/terminate_on_nan.py | 2 +- ignite/metrics/accumulation.py | 14 ++-- ignite/metrics/accuracy.py | 4 +- ignite/metrics/confusion_matrix.py | 4 +- ignite/metrics/epoch_metric.py | 16 +++-- ignite/metrics/fbeta.py | 2 +- ignite/metrics/loss.py | 2 +- ignite/metrics/mean_absolute_error.py | 2 +- ignite/metrics/mean_pairwise_distance.py | 2 +- ignite/metrics/mean_squared_error.py | 2 +- ignite/metrics/metric.py | 26 +++---- ignite/metrics/metrics_lambda.py | 2 +- ignite/metrics/precision.py | 4 +- ignite/metrics/recall.py | 4 +- ignite/metrics/root_mean_squared_error.py | 2 +- ignite/metrics/top_k_categorical_accuracy.py | 2 +- 44 files changed, 159 insertions(+), 152 deletions(-) diff --git a/docs/source/metrics.rst b/docs/source/metrics.rst index 3e2e76907cd1..650baf867a16 100644 --- a/docs/source/metrics.rst +++ b/docs/source/metrics.rst @@ -179,13 +179,13 @@ We can check this implementation in a simple case: # Out: 1 3 0.3333333333333333 Metrics and its usages -^^^^^^^^^^^^^^^^^^^^^^ +---------------------- By default, `Metrics` are epoch-wise, it means -- `reset()` is triggered every :attr:`~ignite.engine.Events.EPOCH_STARTED` -- `update(output)` is triggered every :attr:`~ignite.engine.Events.ITERATION_COMPLETED` -- `compute()` is triggered every :attr:`~ignite.engine.Events.EPOCH_COMPLETED` +- `reset()` is triggered every ``EPOCH_STARTED`` (See :class:`~ignite.engine.events.Events`). +- `update(output)` is triggered every ``ITERATION_COMPLETED``. +- `compute()` is triggered every ``EPOCH_COMPLETED``. Usages can be user defined by creating a class inheriting for :class:`~ignite.metrics.MetricUsage`. See the list below of usages. @@ -198,7 +198,7 @@ Complete list of usages - :class:`~ignite.metrics.BatchFiltered` Metrics and distributed computations -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +------------------------------------ In the above example, `CustomAccuracy` constructor has `device` argument and `reset`, `update`, `compute` methods are decorated with `reinit__is_reduced`, `sync_all_reduce`. The purpose of these features is to adapt metrics in distributed computations on CUDA devices and assuming the backend to support `"all_reduce" operation `_. User can specify the device (by default, `cuda`) at metric's initialization. This device _can_ be used to store internal variables on and to collect all results from all participating devices. More precisely, in the above example we added `@sync_all_reduce("_num_examples", "_num_correct")` over `compute` method. This means that when `compute` method is called, metric's interal variables `self._num_examples` and `self._num_correct` are summed up over all participating devices. Therefore, once collected, these internal variables can be used to compute the final metric value. diff --git a/ignite/contrib/handlers/base_logger.py b/ignite/contrib/handlers/base_logger.py index 7d0035c7dd33..ce11b57efe57 100644 --- a/ignite/contrib/handlers/base_logger.py +++ b/ignite/contrib/handlers/base_logger.py @@ -141,8 +141,9 @@ def attach(self, engine, log_handler, event_name): Args: engine (Engine): engine object. log_handler (callable): a logging handler to execute - event_name: event to attach the logging handler to. Valid events are from :class:`~ignite.engine.Events` - or any `event_name` added by :meth:`~ignite.engine.Engine.register_events`. + event_name: event to attach the logging handler to. Valid events are from + :class:`~ignite.engine.events.Events` or any `event_name` added by + :meth:`~ignite.engine.engine.Engine.register_events`. Returns: :class:`~ignite.engine.RemovableEventHandle`, which can be used to remove the handler. @@ -159,8 +160,9 @@ def attach_output_handler(self, engine: Engine, event_name: Any, *args: Any, **k Args: engine (Engine): engine object. - event_name: event to attach the logging handler to. Valid events are from :class:`~ignite.engine.Events` - or any `event_name` added by :meth:`~ignite.engine.Engine.register_events`. + event_name: event to attach the logging handler to. Valid events are from + :class:`~ignite.engine.events.Events` or any `event_name` added by + :meth:`~ignite.engine.engine.Engine.register_events`. *args: args to initialize `OutputHandler` **kwargs: kwargs to initialize `OutputHandler` @@ -174,8 +176,9 @@ def attach_opt_params_handler(self, engine: Engine, event_name: Any, *args: Any, Args: engine (Engine): engine object. - event_name: event to attach the logging handler to. Valid events are from :class:`~ignite.engine.Events` - or any `event_name` added by :meth:`~ignite.engine.Engine.register_events`. + event_name: event to attach the logging handler to. Valid events are from + :class:`~ignite.engine.events.Events` or any `event_name` added by + :meth:`~ignite.engine.engine.Engine.register_events`. *args: args to initialize `OptimizerParamsHandler` **kwargs: kwargs to initialize `OptimizerParamsHandler` diff --git a/ignite/contrib/handlers/tqdm_logger.py b/ignite/contrib/handlers/tqdm_logger.py index 42dd01b3ff64..6697c3f2683f 100644 --- a/ignite/contrib/handlers/tqdm_logger.py +++ b/ignite/contrib/handlers/tqdm_logger.py @@ -21,8 +21,8 @@ class _OutputHandler(BaseOutputHandler): This function can also return a dictionary, e.g `{'loss': loss1, 'another_loss': loss2}` to label the plot with corresponding keys. closing_event_name: event's name on which the progress bar is closed. Valid events are from - :class:`~ignite.engine.Events` or any `event_name` added by - :meth:`~ignite.engine.Engine.register_events`. + :class:`~ignite.engine.events.Events` or any `event_name` added by + :meth:`~ignite.engine.engine.Engine.register_events`. """ @@ -122,7 +122,7 @@ class ProgressBar(BaseLogger): pbar = ProgressBar(file=log_file) pbar.attach(trainer) - Attach metrics that already have been computed at :attr:`~ignite.engine.Events.ITERATION_COMPLETED` + Attach metrics that already have been computed at :attr:`~ignite.engine.events.Events.ITERATION_COMPLETED` (such as :class:`~ignite.metrics.RunningAverage`) .. code-block:: python @@ -238,9 +238,9 @@ def attach( output. This function may return either a dictionary with entries in the format of ``{name: value}``, or a single scalar, which will be displayed with the default name `output`. event_name: event's name on which the progress bar advances. Valid events are from - :class:`~ignite.engine.Events`. + :class:`~ignite.engine.events.Events`. closing_event_name: event's name on which the progress bar is closed. Valid events are from - :class:`~ignite.engine.Events`. + :class:`~ignite.engine.events.Events`. Note: accepted output value types are numbers, 0d and 1d torch tensors and strings diff --git a/ignite/contrib/handlers/visdom_logger.py b/ignite/contrib/handlers/visdom_logger.py index a1ca3e1690fb..f8002e3565aa 100644 --- a/ignite/contrib/handlers/visdom_logger.py +++ b/ignite/contrib/handlers/visdom_logger.py @@ -36,8 +36,8 @@ def add_scalar(self, logger, k, v, event_name, global_step): k (str): scalar name which is used to set window title and y-axis label v (int or float): scalar value, y-axis value event_name: Event name which is used to setup x-axis label. Valid events are from - :class:`~ignite.engine.Events` or any `event_name` added by - :meth:`~ignite.engine.Engine.register_events`. + :class:`~ignite.engine.events.Events` or any `event_name` added by + :meth:`~ignite.engine.engine.Engine.register_events`. global_step (int): global step, x-axis value """ diff --git a/ignite/contrib/metrics/average_precision.py b/ignite/contrib/metrics/average_precision.py index df7a4d967095..589dbe506213 100644 --- a/ignite/contrib/metrics/average_precision.py +++ b/ignite/contrib/metrics/average_precision.py @@ -19,10 +19,10 @@ class AveragePrecision(EpochMetric): Args: output_transform (callable, optional): a callable that is used to transform the - :class:`~ignite.engine.Engine`'s `process_function`'s output into the + :class:`~ignite.engine.engine.Engine`'s ``process_function``'s output into the form expected by the metric. This can be useful if, for example, you have a multi-output model and you want to compute the metric with respect to one of the outputs. - check_compute_fn (bool): Optional default False. If True, `sklearn.metrics.average_precision_score + check_compute_fn (bool): Optional default False. If True, `average_precision_score `_ is run on the first batch of data to ensure there are no issues. User will be warned in case there are any issues computing the function. diff --git a/ignite/contrib/metrics/precision_recall_curve.py b/ignite/contrib/metrics/precision_recall_curve.py index 9e1ecfdb8d0e..cc6cf18595de 100644 --- a/ignite/contrib/metrics/precision_recall_curve.py +++ b/ignite/contrib/metrics/precision_recall_curve.py @@ -20,10 +20,10 @@ class PrecisionRecallCurve(EpochMetric): Args: output_transform (callable, optional): a callable that is used to transform the - :class:`~ignite.engine.Engine`'s `process_function`'s output into the + :class:`~ignite.engine.engine.Engine`'s ``process_function``'s output into the form expected by the metric. This can be useful if, for example, you have a multi-output model and you want to compute the metric with respect to one of the outputs. - check_compute_fn (bool): Optional default False. If True, `sklearn.metrics.precision_recall_curve + check_compute_fn (bool): Optional default False. If True, `precision_recall_curve `_ is run on the first batch of data to ensure there are no issues. User will be warned in case there are any issues computing the function. diff --git a/ignite/contrib/metrics/regression/canberra_metric.py b/ignite/contrib/metrics/regression/canberra_metric.py index 55ab0460f0d0..d6cbb48037b9 100644 --- a/ignite/contrib/metrics/regression/canberra_metric.py +++ b/ignite/contrib/metrics/regression/canberra_metric.py @@ -13,7 +13,7 @@ class CanberraMetric(_BaseRegression): More details can be found in `Botchkarev 2018`__. - - `update` must receive output of the form `(y_pred, y)` or `{'y_pred': y_pred, 'y': y}`. + - ``update`` must receive output of the form ``(y_pred, y)`` or ``{'y_pred': y_pred, 'y': y}``. - `y` and `y_pred` must be of same shape `(N, )` or `(N, 1)`. __ https://arxiv.org/abs/1809.03006 diff --git a/ignite/contrib/metrics/regression/fractional_absolute_error.py b/ignite/contrib/metrics/regression/fractional_absolute_error.py index 70bb48dad768..4e554c1e5a57 100644 --- a/ignite/contrib/metrics/regression/fractional_absolute_error.py +++ b/ignite/contrib/metrics/regression/fractional_absolute_error.py @@ -14,7 +14,7 @@ class FractionalAbsoluteError(_BaseRegression): More details can be found in `Botchkarev 2018`__. - - `update` must receive output of the form `(y_pred, y)` or `{'y_pred': y_pred, 'y': y}`. + - ``update`` must receive output of the form ``(y_pred, y)`` or ``{'y_pred': y_pred, 'y': y}``. - `y` and `y_pred` must be of same shape `(N, )` or `(N, 1)`. __ https://arxiv.org/abs/1809.03006 diff --git a/ignite/contrib/metrics/regression/fractional_bias.py b/ignite/contrib/metrics/regression/fractional_bias.py index 70a9571dd0cd..335f3a975e76 100644 --- a/ignite/contrib/metrics/regression/fractional_bias.py +++ b/ignite/contrib/metrics/regression/fractional_bias.py @@ -14,7 +14,7 @@ class FractionalBias(_BaseRegression): More details can be found in `Botchkarev 2018`__. - - `update` must receive output of the form `(y_pred, y)` or `{'y_pred': y_pred, 'y': y}`. + - ``update`` must receive output of the form ``(y_pred, y)`` or ``{'y_pred': y_pred, 'y': y}``. - `y` and `y_pred` must be of same shape `(N, )` or `(N, 1)`. __ https://arxiv.org/abs/1809.03006 diff --git a/ignite/contrib/metrics/regression/geometric_mean_absolute_error.py b/ignite/contrib/metrics/regression/geometric_mean_absolute_error.py index 79d77393d37e..f610bcb9b06a 100644 --- a/ignite/contrib/metrics/regression/geometric_mean_absolute_error.py +++ b/ignite/contrib/metrics/regression/geometric_mean_absolute_error.py @@ -14,7 +14,7 @@ class GeometricMeanAbsoluteError(_BaseRegression): More details can be found in `Botchkarev 2018`__. - - `update` must receive output of the form `(y_pred, y)` or `{'y_pred': y_pred, 'y': y}`. + - ``update`` must receive output of the form ``(y_pred, y)`` or ``{'y_pred': y_pred, 'y': y}``. - `y` and `y_pred` must be of same shape `(N, )` or `(N, 1)`. __ https://arxiv.org/abs/1809.03006 diff --git a/ignite/contrib/metrics/regression/geometric_mean_relative_absolute_error.py b/ignite/contrib/metrics/regression/geometric_mean_relative_absolute_error.py index 075b8cae7e50..5da526b390fd 100644 --- a/ignite/contrib/metrics/regression/geometric_mean_relative_absolute_error.py +++ b/ignite/contrib/metrics/regression/geometric_mean_relative_absolute_error.py @@ -13,7 +13,7 @@ class GeometricMeanRelativeAbsoluteError(_BaseRegression): More details can be found in `Botchkarev 2018`__. - - `update` must receive output of the form `(y_pred, y)` or `{'y_pred': y_pred, 'y': y}`. + - ``update`` must receive output of the form ``(y_pred, y)`` or ``{'y_pred': y_pred, 'y': y}``. - `y` and `y_pred` must be of same shape `(N, )` or `(N, 1)`. diff --git a/ignite/contrib/metrics/regression/manhattan_distance.py b/ignite/contrib/metrics/regression/manhattan_distance.py index dad6e98bf4dc..2b9c82a623de 100644 --- a/ignite/contrib/metrics/regression/manhattan_distance.py +++ b/ignite/contrib/metrics/regression/manhattan_distance.py @@ -13,7 +13,7 @@ class ManhattanDistance(_BaseRegression): More details can be found in `Botchkarev 2018`__. - - `update` must receive output of the form `(y_pred, y)` or `{'y_pred': y_pred, 'y': y}`. + - ``update`` must receive output of the form ``(y_pred, y)`` or ``{'y_pred': y_pred, 'y': y}``. - `y` and `y_pred` must be of same shape `(N, )` or `(N, 1)`. __ https://arxiv.org/abs/1809.03006 diff --git a/ignite/contrib/metrics/regression/maximum_absolute_error.py b/ignite/contrib/metrics/regression/maximum_absolute_error.py index fb487095246d..4c63d243114c 100644 --- a/ignite/contrib/metrics/regression/maximum_absolute_error.py +++ b/ignite/contrib/metrics/regression/maximum_absolute_error.py @@ -14,7 +14,7 @@ class MaximumAbsoluteError(_BaseRegression): More details can be found in `Botchkarev 2018`__. - - `update` must receive output of the form `(y_pred, y)` or `{'y_pred': y_pred, 'y': y}`. + - ``update`` must receive output of the form ``(y_pred, y)`` or ``{'y_pred': y_pred, 'y': y}``. - `y` and `y_pred` must be of same shape `(N, )` or `(N, 1)`. __ https://arxiv.org/abs/1809.03006 diff --git a/ignite/contrib/metrics/regression/mean_absolute_relative_error.py b/ignite/contrib/metrics/regression/mean_absolute_relative_error.py index 6f14e41e29a9..e423c0b92eb7 100644 --- a/ignite/contrib/metrics/regression/mean_absolute_relative_error.py +++ b/ignite/contrib/metrics/regression/mean_absolute_relative_error.py @@ -14,7 +14,7 @@ class MeanAbsoluteRelativeError(_BaseRegression): More details can be found in the reference `Botchkarev 2018`__. - - `update` must receive output of the form `(y_pred, y)` or `{'y_pred': y_pred, 'y': y}`. + - ``update`` must receive output of the form ``(y_pred, y)`` or ``{'y_pred': y_pred, 'y': y}``. - `y` and `y_pred` must be of same shape `(N, )` or `(N, 1)`. __ https://arxiv.org/ftp/arxiv/papers/1809/1809.03006.pdf diff --git a/ignite/contrib/metrics/regression/mean_error.py b/ignite/contrib/metrics/regression/mean_error.py index ca13bb481ae5..f95f9644fd57 100644 --- a/ignite/contrib/metrics/regression/mean_error.py +++ b/ignite/contrib/metrics/regression/mean_error.py @@ -14,7 +14,7 @@ class MeanError(_BaseRegression): More details can be found in the reference `Botchkarev 2018`__. - - `update` must receive output of the form `(y_pred, y)` or `{'y_pred': y_pred, 'y': y}`. + - ``update`` must receive output of the form ``(y_pred, y)`` or ``{'y_pred': y_pred, 'y': y}``. - `y` and `y_pred` must be of same shape `(N, )` or `(N, 1)`. __ https://arxiv.org/abs/1809.03006 diff --git a/ignite/contrib/metrics/regression/mean_normalized_bias.py b/ignite/contrib/metrics/regression/mean_normalized_bias.py index 54863c7e37c2..d1ea8603a9dd 100644 --- a/ignite/contrib/metrics/regression/mean_normalized_bias.py +++ b/ignite/contrib/metrics/regression/mean_normalized_bias.py @@ -14,7 +14,7 @@ class MeanNormalizedBias(_BaseRegression): More details can be found in the reference `Botchkarev 2018`__. - - `update` must receive output of the form `(y_pred, y)` or `{'y_pred': y_pred, 'y': y}`. + - ``update`` must receive output of the form ``(y_pred, y)`` or ``{'y_pred': y_pred, 'y': y}``. - `y` and `y_pred` must be of same shape `(N, )` or `(N, 1)`. __ https://arxiv.org/abs/1809.03006 diff --git a/ignite/contrib/metrics/regression/median_absolute_error.py b/ignite/contrib/metrics/regression/median_absolute_error.py index 08c0741ce0d8..215198e2be7e 100644 --- a/ignite/contrib/metrics/regression/median_absolute_error.py +++ b/ignite/contrib/metrics/regression/median_absolute_error.py @@ -18,7 +18,7 @@ class MedianAbsoluteError(_BaseRegressionEpoch): More details can be found in `Botchkarev 2018`__. - - `update` must receive output of the form `(y_pred, y)` or `{'y_pred': y_pred, 'y': y}`. + - ``update`` must receive output of the form ``(y_pred, y)`` or ``{'y_pred': y_pred, 'y': y}``. - `y` and `y_pred` must be of same shape `(N, )` or `(N, 1)` and of type `float32`. .. warning:: diff --git a/ignite/contrib/metrics/regression/median_absolute_percentage_error.py b/ignite/contrib/metrics/regression/median_absolute_percentage_error.py index b629d70354d9..9c30afa4ad41 100644 --- a/ignite/contrib/metrics/regression/median_absolute_percentage_error.py +++ b/ignite/contrib/metrics/regression/median_absolute_percentage_error.py @@ -18,7 +18,7 @@ class MedianAbsolutePercentageError(_BaseRegressionEpoch): More details can be found in `Botchkarev 2018`__. - - `update` must receive output of the form `(y_pred, y)` or `{'y_pred': y_pred, 'y': y}`. + - ``update`` must receive output of the form ``(y_pred, y)`` or ``{'y_pred': y_pred, 'y': y}``. - `y` and `y_pred` must be of same shape `(N, )` or `(N, 1)` and of type `float32`. .. warning:: diff --git a/ignite/contrib/metrics/regression/median_relative_absolute_error.py b/ignite/contrib/metrics/regression/median_relative_absolute_error.py index 18584de56bb1..b83730f36bac 100644 --- a/ignite/contrib/metrics/regression/median_relative_absolute_error.py +++ b/ignite/contrib/metrics/regression/median_relative_absolute_error.py @@ -18,7 +18,7 @@ class MedianRelativeAbsoluteError(_BaseRegressionEpoch): More details can be found in `Botchkarev 2018`__. - - `update` must receive output of the form `(y_pred, y)` or `{'y_pred': y_pred, 'y': y}`. + - ``update`` must receive output of the form ``(y_pred, y)`` or ``{'y_pred': y_pred, 'y': y}``. - `y` and `y_pred` must be of same shape `(N, )` or `(N, 1)` and of type `float32`. .. warning:: diff --git a/ignite/contrib/metrics/regression/r2_score.py b/ignite/contrib/metrics/regression/r2_score.py index 59cc23c9db1a..bc5fa47f33a2 100644 --- a/ignite/contrib/metrics/regression/r2_score.py +++ b/ignite/contrib/metrics/regression/r2_score.py @@ -14,7 +14,7 @@ class R2Score(_BaseRegression): where :math:`A_j` is the ground truth, :math:`P_j` is the predicted value and :math:`\bar{A}` is the mean of the ground truth. - - `update` must receive output of the form `(y_pred, y)` or `{'y_pred': y_pred, 'y': y}`. + - ``update`` must receive output of the form ``(y_pred, y)`` or ``{'y_pred': y_pred, 'y': y}``. - `y` and `y_pred` must be of same shape `(N, )` or `(N, 1)` and of type `float32`. """ diff --git a/ignite/contrib/metrics/regression/wave_hedges_distance.py b/ignite/contrib/metrics/regression/wave_hedges_distance.py index bf70c15273af..d5572455ba4d 100644 --- a/ignite/contrib/metrics/regression/wave_hedges_distance.py +++ b/ignite/contrib/metrics/regression/wave_hedges_distance.py @@ -12,7 +12,7 @@ class WaveHedgesDistance(_BaseRegression): More details can be found in `Botchkarev 2018`__. - - `update` must receive output of the form `(y_pred, y)` or `{'y_pred': y_pred, 'y': y}`. + - ``update`` must receive output of the form ``(y_pred, y)`` or ``{'y_pred': y_pred, 'y': y}``. - `y` and `y_pred` must be of same shape `(N, )` or `(N, 1)`. __ https://arxiv.org/abs/1809.03006 diff --git a/ignite/contrib/metrics/roc_auc.py b/ignite/contrib/metrics/roc_auc.py index 272106e638bd..b2e8235e9dd7 100644 --- a/ignite/contrib/metrics/roc_auc.py +++ b/ignite/contrib/metrics/roc_auc.py @@ -31,10 +31,10 @@ class ROC_AUC(EpochMetric): Args: output_transform (callable, optional): a callable that is used to transform the - :class:`~ignite.engine.Engine`'s ``process_function``'s output into the + :class:`~ignite.engine.engine.Engine`'s ``process_function``'s output into the form expected by the metric. This can be useful if, for example, you have a multi-output model and you want to compute the metric with respect to one of the outputs. - check_compute_fn (bool): Optional default False. If True, `sklearn.metrics.roc_curve + check_compute_fn (bool): Optional default False. If True, `roc_curve `_ is run on the first batch of data to ensure there are no issues. User will be warned in case there are any issues computing the function. @@ -67,7 +67,7 @@ class RocCurve(EpochMetric): Args: output_transform (callable, optional): a callable that is used to transform the - :class:`~ignite.engine.Engine`'s ``process_function``'s output into the + :class:`~ignite.engine.engine.Engine`'s ``process_function``'s output into the form expected by the metric. This can be useful if, for example, you have a multi-output model and you want to compute the metric with respect to one of the outputs. check_compute_fn (bool): Optional default False. If True, `sklearn.metrics.roc_curve diff --git a/ignite/engine/__init__.py b/ignite/engine/__init__.py index cc6f98c0c79d..65f18859fb04 100644 --- a/ignite/engine/__init__.py +++ b/ignite/engine/__init__.py @@ -64,7 +64,7 @@ def create_supervised_trainer( output_transform (callable, optional): function that receives 'x', 'y', 'y_pred', 'loss' and returns value to be assigned to engine's state.output after each iteration. Default is returning `loss.item()`. deterministic (bool, optional): if True, returns deterministic engine of type - :class:`~ignite.engine.deterministic.DeterministicEngine`, otherwise :class:`~ignite.engine.Engine` + :class:`~ignite.engine.deterministic.DeterministicEngine`, otherwise :class:`~ignite.engine.engine.Engine` (default: False). Note: `engine.state.output` for this engine is defined by `output_transform` parameter and is the loss diff --git a/ignite/engine/deterministic.py b/ignite/engine/deterministic.py index bc6eeac19980..348a5740eba9 100644 --- a/ignite/engine/deterministic.py +++ b/ignite/engine/deterministic.py @@ -133,10 +133,10 @@ def wrapper(*args, **kwargs): class DeterministicEngine(Engine): - """Deterministic engine derived from :class:`~ignite.engine.Engine`. + """Deterministic engine derived from :class:`~ignite.engine.engine.Engine`. "Deterministic" run is done by adding additional handlers to synchronize the dataflow and overriding some methods of - :class:`~ignite.engine.Engine`: + :class:`~ignite.engine.engine.Engine`: .. code-block:: python diff --git a/ignite/engine/engine.py b/ignite/engine/engine.py index 90d8c65229ed..2679e97ccc8f 100644 --- a/ignite/engine/engine.py +++ b/ignite/engine/engine.py @@ -16,7 +16,7 @@ class Engine(Serializable): - """Runs a given `process_function` over each batch of a dataset, emitting events as it goes. + """Runs a given ``process_function`` over each batch of a dataset, emitting events as it goes. Args: process_function (callable): A function receiving a handle to the engine and the current batch @@ -24,8 +24,8 @@ class Engine(Serializable): Attributes: state (State): object that is used to pass internal and user-defined state between event handlers. - It is created with the engine and its attributes (e.g. `state.iteration`, `state.epoch` etc) are reset - on every :meth:`~ignite.engine.Engine.run`. + It is created with the engine and its attributes (e.g. ``state.iteration``, ``state.epoch`` etc) are reset + on every :meth:`~ignite.engine.engine.Engine.run`. last_event_name (Events): last event name triggered by the engine. Examples: @@ -144,14 +144,13 @@ def register_events(self, *event_names: Any, event_to_attr: Optional[dict] = Non """Add events that can be fired. Registering an event will let the user fire these events at any point. - This opens the door to make the :meth:`~ignite.engine.Engine.run` loop even more + This opens the door to make the :meth:`~ignite.engine.engine.Engine.run` loop even more configurable. - By default, the events from :class:`~ignite.engine.Events` are registered. + By default, the events from :class:`~ignite.engine.events.Events` are registered. Args: - *event_names: An object (ideally a string or int) to define the - name of the event being supported. + *event_names: An object (ideally a string or int) to define the name of the event being supported. event_to_attr (dict, optional): A dictionary to map an event to a state attribute. Example usage: @@ -217,17 +216,17 @@ def add_event_handler(self, event_name: Any, handler: Callable, *args, **kwargs) Args: event_name: An event or a list of events to attach the handler. Valid events are - from :class:`~ignite.engine.Events` or any `event_name` added by - :meth:`~ignite.engine.Engine.register_events`. + from :class:`~ignite.engine.events.Events` or any ``event_name`` added by + :meth:`~ignite.engine.engine.Engine.register_events`. handler (callable): the callable event handler that should be invoked. No restrictions on its signature. - The first argument can be optionally `engine`, the :class:`~ignite.engine.Engine` object, handler is - bound to. - *args: optional args to be passed to `handler`. - **kwargs: optional keyword args to be passed to `handler`. + The first argument can be optionally `engine`, the :class:`~ignite.engine.engine.Engine` object, + handler is bound to. + *args: optional args to be passed to ``handler``. + **kwargs: optional keyword args to be passed to ``handler``. Note: Note that other arguments can be passed to the handler in addition to the `*args` and `**kwargs` - passed here, for example during :attr:`~ignite.engine.Events.EXCEPTION_RAISED`. + passed here, for example during :attr:`~ignite.engine.events.Events.EXCEPTION_RAISED`. Returns: :class:`~ignite.engine.RemovableEventHandle`, which can be used to remove the handler. @@ -253,7 +252,7 @@ def execute_something(): Note: Since v0.3.0, Events become more flexible and allow to pass an event filter to the Engine. - See :class:`~ignite.engine.Events` for more details. + See :class:`~ignite.engine.events.Events` for more details. """ if isinstance(event_name, EventsList): @@ -342,8 +341,8 @@ def on(self, event_name, *args, **kwargs): """Decorator shortcut for add_event_handler. Args: - event_name: An event to attach the handler to. Valid events are from :class:`~ignite.engine.Events` or - any `event_name` added by :meth:`~ignite.engine.Engine.register_events`. + event_name: An event to attach the handler to. Valid events are from :class:`~ignite.engine.events.Events` + or any ``event_name`` added by :meth:`~ignite.engine.engine.Engine.register_events`. *args: optional args to be passed to `handler`. **kwargs: optional keyword args to be passed to `handler`. @@ -375,12 +374,12 @@ def _fire_event(self, event_name: Any, *event_args, **event_kwargs) -> None: This method executes all handlers associated with the event `event_name`. Optional positional and keyword arguments can be used to pass arguments to **all** handlers added with this event. These - arguments updates arguments passed using :meth:`~ignite.engine.Engine.add_event_handler`. + arguments updates arguments passed using :meth:`~ignite.engine.engine.Engine.add_event_handler`. Args: event_name: event for which the handlers should be executed. Valid - events are from :class:`~ignite.engine.Events` or any `event_name` added by - :meth:`~ignite.engine.Engine.register_events`. + events are from :class:`~ignite.engine.events.Events` or any `event_name` added by + :meth:`~ignite.engine.engine.Engine.register_events`. *event_args: optional args to be passed to all handlers. **event_kwargs: optional keyword args to be passed to all handlers. @@ -397,11 +396,11 @@ def fire_event(self, event_name: Any) -> None: """Execute all the handlers associated with given event. This method executes all handlers associated with the event - `event_name`. This is the method used in :meth:`~ignite.engine.Engine.run` to call the - core events found in :class:`~ignite.engine.Events`. + `event_name`. This is the method used in :meth:`~ignite.engine.engine.Engine.run` to call the + core events found in :class:`~ignite.engine.events.Events`. Custom events can be fired if they have been registered before with - :meth:`~ignite.engine.Engine.register_events`. The engine `state` attribute should be used + :meth:`~ignite.engine.engine.Engine.register_events`. The engine `state` attribute should be used to exchange "dynamic" data among `process_function` and handlers. This method is called automatically for core events. If no custom @@ -410,8 +409,8 @@ def fire_event(self, event_name: Any) -> None: Args: event_name: event for which the handlers should be executed. Valid - events are from :class:`~ignite.engine.Events` or any `event_name` added by - :meth:`~ignite.engine.Engine.register_events`. + events are from :class:`~ignite.engine.events.Events` or any `event_name` added by + :meth:`~ignite.engine.engine.Engine.register_events`. """ return self._fire_event(event_name) @@ -599,8 +598,8 @@ def run( State: output state. Note: - User can dynamically preprocess input batch at :attr:`~ignite.engine.Events.ITERATION_STARTED` and store - output batch in `engine.state.batch`. Latter is passed as usually to `process_function` as argument: + User can dynamically preprocess input batch at :attr:`~ignite.engine.events.Events.ITERATION_STARTED` and + store output batch in `engine.state.batch`. Latter is passed as usually to `process_function` as argument: .. code-block:: python diff --git a/ignite/engine/events.py b/ignite/engine/events.py index 9c7834a0e2fe..445e45cf651d 100644 --- a/ignite/engine/events.py +++ b/ignite/engine/events.py @@ -146,7 +146,7 @@ class EventEnum(CallableEventWithFilter, Enum): class Events(EventEnum): - """Events that are fired by the :class:`~ignite.engine.Engine` during execution. Built-in events: + """Events that are fired by the :class:`~ignite.engine.engine.Engine` during execution. Built-in events: - STARTED : triggered when engine's run is started - EPOCH_STARTED : triggered when the epoch is started @@ -159,10 +159,10 @@ class Events(EventEnum): - EXCEPTION_RAISED : triggered when an exception is encountered - TERMINATE_SINGLE_EPOCH : triggered when the run is about to end the current epoch, - after receiving :meth:`~ignite.engine.Engine.terminate_epoch()` call. + after receiving :meth:`~ignite.engine.engine.Engine.terminate_epoch()` call. - TERMINATE : triggered when the run is about to end completely, - after receiving :meth:`~ignite.engine.Engine.terminate()` call. + after receiving :meth:`~ignite.engine.engine.Engine.terminate()` call. - EPOCH_COMPLETED : triggered when the epoch is ended - COMPLETED : triggered when engine's run is completed @@ -348,7 +348,7 @@ class RemovableEventHandle: A handle that may be used to remove a registered event handler via the remove method, with-statement, or context manager protocol. Returned from - :meth:`~ignite.engine.Engine.add_event_handler`. + :meth:`~ignite.engine.engine.Engine.add_event_handler`. Args: diff --git a/ignite/handlers/checkpoint.py b/ignite/handlers/checkpoint.py index e3e43e966350..a2faf3b92d42 100644 --- a/ignite/handlers/checkpoint.py +++ b/ignite/handlers/checkpoint.py @@ -64,34 +64,34 @@ def remove(self, filename: str) -> None: class Checkpoint: """Checkpoint handler can be used to periodically save and load objects which have attribute - `state_dict`/`load_state_dict`. This class can use specific save handlers to store on the disk or a cloud + ``state_dict`/`load_state_dict``. This class can use specific save handlers to store on the disk or a cloud storage, etc. The Checkpoint handler (if used with :class:`~ignite.handlers.DiskSaver`) also handles automatically moving data on TPU to CPU before writing the checkpoint. Args: - to_save (Mapping): Dictionary with the objects to save. Objects should have implemented `state_dict` and ` - load_state_dict` methods. If contains objects of type torch `DistributedDataParallel`_ or + to_save (Mapping): Dictionary with the objects to save. Objects should have implemented ``state_dict`` and + ``load_state_dict`` methods. If contains objects of type torch `DistributedDataParallel`_ or `DataParallel`_, their internal wrapped model is automatically saved (to avoid additional key ``module.`` in the state dictionary). save_handler (callable or :class:`~ignite.handlers.checkpoint.BaseSaveHandler`): Method or callable class to use to save engine and other provided objects. Function receives two objects: checkpoint as a dictionary - and filename. If `save_handler` is callable class, it can - inherit of :class:`~ignite.handlers.checkpoint.BaseSaveHandler` and optionally implement `remove` method to - keep a fixed number of saved checkpoints. In case if user needs to save engine's checkpoint on a disk, - `save_handler` can be defined with :class:`~ignite.handlers.DiskSaver`. - filename_prefix (str, optional): Prefix for the filename to which objects will be saved. See Note for details. + and filename. If ``save_handler`` is callable class, it can + inherit of :class:`~ignite.handlers.checkpoint.BaseSaveHandler` and optionally implement ``remove`` method + to keep a fixed number of saved checkpoints. In case if user needs to save engine's checkpoint on a disk, + ``save_handler`` can be defined with :class:`~ignite.handlers.DiskSaver`. + filename_prefix (str, optional): Prefix for the file name to which objects will be saved. See Note for details. score_function (callable, optional): If not None, it should be a function taking a single argument, - :class:`~ignite.engine.Engine` object, and returning a score (`float`). Objects with highest scores will be - retained. - score_name (str, optional): If `score_function` not None, it is possible to store its value using - `score_name`. See Notes for more details. + :class:`~ignite.engine.engine.Engine` object, and returning a score (`float`). Objects with highest scores + will be retained. + score_name (str, optional): If ``score_function`` not None, it is possible to store its value using + ``score_name``. See Notes for more details. n_saved (int, optional): Number of objects that should be kept on disk. Older files will be removed. If set to `None`, all objects are kept. global_step_transform (callable, optional): global step transform function to output a desired global step. - Input of the function is `(engine, event_name)`. Output of function should be an integer. + Input of the function is ``(engine, event_name)``. Output of function should be an integer. Default is None, global_step based on attached engine. If provided, uses function output as global_step. To setup global step from another engine, please use :meth:`~ignite.handlers.global_step_from_engine`. - archived (bool, optional): Deprecated argument as models saved by `torch.save` are already compressed. + archived (bool, optional): Deprecated argument as models saved by ``torch.save`` are already compressed. .. _DistributedDataParallel: https://pytorch.org/docs/stable/nn.html#torch.nn.parallel.DistributedDataParallel .. _DataParallel: https://pytorch.org/docs/stable/nn.html#torch.nn.DataParallel @@ -100,28 +100,28 @@ class Checkpoint: This class stores a single file as a dictionary of provided objects to save. The filename has the following structure: `{filename_prefix}_{name}_{suffix}.{ext}` where - - `filename_prefix` is the argument passed to the constructor, - - `name` is the key in `to_save` if a single object is to store, otherwise `name` is "checkpoint". + - ``filename_prefix`` is the argument passed to the constructor, + - `name` is the key in ``to_save`` if a single object is to store, otherwise `name` is "checkpoint". - `suffix` is composed as following `{global_step}_{score_name}={score}`. Above `global_step` defined by the output of `global_step_transform` and `score` defined by the output of `score_function`. - By default, none of `score_function`, `score_name`, `global_step_transform` is defined, then suffix is + By default, none of ``score_function``, ``score_name``, ``global_step_transform`` is defined, then suffix is setup by attached engine's current iteration. The filename will be `{filename_prefix}_{name}_{engine.state.iteration}.{ext}`. - If defined a `score_function`, but without `score_name`, then suffix is defined by provided score. + If defined a ``score_function``, but without ``score_name``, then suffix is defined by provided score. The filename will be `{filename_prefix}_{name}_{global_step}_{score}.pt`. - If defined `score_function` and `score_name`, then the filename will - be `{filename_prefix}_{name}_{score_name}={score}.{ext}`. If `global_step_transform` is provided, then + If defined ``score_function`` and ``score_name``, then the filename will + be `{filename_prefix}_{name}_{score_name}={score}.{ext}`. If ``global_step_transform`` is provided, then the filename will be `{filename_prefix}_{name}_{global_step}_{score_name}={score}.{ext}` - For example, `score_name="neg_val_loss"` and `score_function` that returns `-loss` (as objects with highest + For example, ``score_name="neg_val_loss"`` and ``score_function`` that returns `-loss` (as objects with highest scores will be retained), then saved filename will be `{filename_prefix}_{name}_neg_val_loss=-0.1234.pt`. - To get the last stored filename, handler exposes attribute `last_checkpoint`: + To get the last stored filename, handler exposes attribute ``last_checkpoint``: .. code-block:: python @@ -410,8 +410,9 @@ class DiskSaver(BaseSaveHandler): atomic (bool, optional): if True, checkpoint is serialized to a temporary file, and then moved to final destination, so that files are guaranteed to not be damaged (for example if exception occurs during saving). - create_dir (bool, optional): if True, will create directory 'dirname' if it doesnt exist. - require_empty (bool, optional): If True, will raise exception if there are any files in the directory 'dirname'. + create_dir (bool, optional): if True, will create directory ``dirname`` if it doesnt exist. + require_empty (bool, optional): If True, will raise exception if there are any files in the + directory ``dirname``. """ def __init__( @@ -494,7 +495,7 @@ class ModelCheckpoint(Checkpoint): This handler expects two arguments: - - an :class:`~ignite.engine.Engine` object + - an :class:`~ignite.engine.engine.Engine` object - a `dict` mapping names (`str`) to objects that should be saved to disk. See Examples for further details. @@ -503,10 +504,10 @@ class ModelCheckpoint(Checkpoint): Behaviour of this class has been changed since v0.3.0. - Argument `save_as_state_dict` is deprecated and should not be used. It is considered as True. + Argument ``save_as_state_dict`` is deprecated and should not be used. It is considered as True. - Argument `save_interval` is deprecated and should not be used. Please, use events filtering instead, e.g. - :attr:`~ignite.engine.Events.ITERATION_STARTED(every=1000)` + Argument ``save_interval`` is deprecated and should not be used. Please, use events filtering instead, e.g. + :attr:`~ignite.engine.events.Events.ITERATION_STARTED(every=1000)` There is no more internal counter that has been used to indicate the number of save actions. User could see its value `step_number` in the filename, e.g. `{filename_prefix}_{name}_{step_number}.pt`. Actually, @@ -517,12 +518,12 @@ class ModelCheckpoint(Checkpoint): Args: dirname (str): Directory path where objects will be saved. - filename_prefix (str): Prefix for the filenames to which objects will be saved. See Notes of + filename_prefix (str): Prefix for the file names to which objects will be saved. See Notes of :class:`~ignite.handlers.Checkpoint` for more details. score_function (callable, optional): if not None, it should be a function taking a single argument, an - :class:`~ignite.engine.Engine` object, and return a score (`float`). Objects with highest scores will be - retained. - score_name (str, optional): if `score_function` not None, it is possible to store its value using + :class:`~ignite.engine.engine.Engine` object, and return a score (`float`). Objects with highest scores + will be retained. + score_name (str, optional): if ``score_function`` not None, it is possible to store its value using `score_name`. See Notes for more details. n_saved (int, optional): Number of objects that should be kept on disk. Older files will be removed. If set to `None`, all objects are kept. @@ -530,8 +531,8 @@ class ModelCheckpoint(Checkpoint): destination, so that files are guaranteed to not be damaged (for example if exception occurs during saving). require_empty (bool, optional): If True, will raise exception if there are any files starting with - `filename_prefix` in the directory 'dirname'. - create_dir (bool, optional): If True, will create directory 'dirname' if it doesnt exist. + ``filename_prefix`` in the directory ``dirname``. + create_dir (bool, optional): If True, will create directory ``dirname`` if it does not exist. global_step_transform (callable, optional): global step transform function to output a desired global step. Input of the function is `(engine, event_name)`. Output of function should be an integer. Default is None, global_step based on attached engine. If provided, uses function output as global_step. diff --git a/ignite/handlers/early_stopping.py b/ignite/handlers/early_stopping.py index 28d5002d61ad..8c7efa207aa2 100644 --- a/ignite/handlers/early_stopping.py +++ b/ignite/handlers/early_stopping.py @@ -13,7 +13,7 @@ class EarlyStopping: patience (int): Number of events to wait if no improvement and then stop the training. score_function (callable): - It should be a function taking a single argument, an :class:`~ignite.engine.Engine` object, + It should be a function taking a single argument, an :class:`~ignite.engine.engine.Engine` object, and return a score `float`. An improvement is considered if the score is higher. trainer (Engine): trainer engine to stop the run if no improvement. diff --git a/ignite/handlers/terminate_on_nan.py b/ignite/handlers/terminate_on_nan.py index cff9a3496eef..be4113b4718d 100644 --- a/ignite/handlers/terminate_on_nan.py +++ b/ignite/handlers/terminate_on_nan.py @@ -19,7 +19,7 @@ class TerminateOnNan: Args: output_transform (callable, optional): a callable that is used to transform the - :class:`~ignite.engine.Engine`'s `process_function`'s output into a number or `torch.tensor` + :class:`~ignite.engine.engine.Engine`'s ``process_function``'s output into a number or `torch.tensor` or collection of them. This can be useful if, for example, you have a multi-output model and you want to check one or multiple values of the output. diff --git a/ignite/metrics/accumulation.py b/ignite/metrics/accumulation.py index c3bbbfc51e24..dff45ee87fcc 100644 --- a/ignite/metrics/accumulation.py +++ b/ignite/metrics/accumulation.py @@ -12,7 +12,7 @@ class VariableAccumulation(Metric): """Single variable accumulator helper to compute (arithmetic, geometric, harmonic) average of a single variable. - - `update` must receive output of the form `x`. + - ``update`` must receive output of the form `x`. - `x` can be a number or `torch.Tensor`. Note: @@ -28,7 +28,7 @@ class VariableAccumulation(Metric): op (callable): a callable to update accumulator. Method's signature is `(accumulator, output)`. For example, to compute arithmetic mean value, `op = lambda a, x: a + x`. output_transform (callable, optional): a callable that is used to transform the - :class:`~ignite.engine.Engine`'s `process_function`'s output into the + :class:`~ignite.engine.engine.Engine`'s ``process_function``'s output into the form expected by the metric. This can be useful if, for example, you have a multi-output model and you want to compute the metric with respect to one of the outputs. device (str of torch.device, optional): optional device specification for internal storage. @@ -80,7 +80,7 @@ def compute(self) -> list: class Average(VariableAccumulation): """Helper class to compute arithmetic average of a single variable. - - `update` must receive output of the form `x`. + - ``update`` must receive output of the form `x`. - `x` can be a number or `torch.Tensor`. Note: @@ -108,7 +108,7 @@ class Average(VariableAccumulation): Args: output_transform (callable, optional): a callable that is used to transform the - :class:`~ignite.engine.Engine`'s `process_function`'s output into the + :class:`~ignite.engine.engine.Engine`'s ``process_function``'s output into the form expected by the metric. This can be useful if, for example, you have a multi-output model and you want to compute the metric with respect to one of the outputs. device (str of torch.device, optional): optional device specification for internal storage. @@ -136,8 +136,8 @@ def compute(self) -> Union[Any, torch.Tensor, numbers.Number]: class GeometricAverage(VariableAccumulation): """Helper class to compute geometric average of a single variable. - - `update` must receive output of the form `x`. - - `x` can be a positive number or a positive `torch.Tensor`, such that `torch.log(x)` is not `nan`. + - ``update`` must receive output of the form `x`. + - `x` can be a positive number or a positive `torch.Tensor`, such that ``torch.log(x)`` is not `nan`. Note: @@ -152,7 +152,7 @@ class GeometricAverage(VariableAccumulation): Args: output_transform (callable, optional): a callable that is used to transform the - :class:`~ignite.engine.Engine`'s `process_function`'s output into the + :class:`~ignite.engine.engine.Engine`'s ``process_function``'s output into the form expected by the metric. This can be useful if, for example, you have a multi-output model and you want to compute the metric with respect to one of the outputs. device (str of torch.device, optional): optional device specification for internal storage. diff --git a/ignite/metrics/accuracy.py b/ignite/metrics/accuracy.py index 559cda8d5994..8ac5a25f083f 100644 --- a/ignite/metrics/accuracy.py +++ b/ignite/metrics/accuracy.py @@ -97,7 +97,7 @@ class Accuracy(_BaseClassification): """ Calculates the accuracy for binary, multiclass and multilabel data. - - `update` must receive output of the form `(y_pred, y)` or `{'y_pred': y_pred, 'y': y}`. + - ``update`` must receive output of the form ``(y_pred, y)`` or ``{'y_pred': y_pred, 'y': y}``. - `y_pred` must be in the following shape (batch_size, num_categories, ...) or (batch_size, ...). - `y` must be in the following shape (batch_size, ...). - `y` and `y_pred` must be in the following shape of (batch_size, num_categories, ...) and @@ -118,7 +118,7 @@ def thresholded_output_transform(output): Args: output_transform (callable, optional): a callable that is used to transform the - :class:`~ignite.engine.Engine`'s `process_function`'s output into the + :class:`~ignite.engine.engine.Engine`'s ``process_function``'s output into the form expected by the metric. This can be useful if, for example, you have a multi-output model and you want to compute the metric with respect to one of the outputs. is_multilabel (bool, optional): flag to use in multilabel case. By default, False. diff --git a/ignite/metrics/confusion_matrix.py b/ignite/metrics/confusion_matrix.py index e0a532b5ee31..44f318a95b10 100644 --- a/ignite/metrics/confusion_matrix.py +++ b/ignite/metrics/confusion_matrix.py @@ -13,7 +13,7 @@ class ConfusionMatrix(Metric): """Calculates confusion matrix for multi-class data. - - `update` must receive output of the form `(y_pred, y)` or `{'y_pred': y_pred, 'y': y}`. + - ``update`` must receive output of the form ``(y_pred, y)`` or ``{'y_pred': y_pred, 'y': y}``. - `y_pred` must contain logits and has the following shape (batch_size, num_categories, ...) - `y` should have the following shape (batch_size, ...) and contains ground-truth class indices with or without the background class. During the computation, argmax of `y_pred` is taken to determine @@ -27,7 +27,7 @@ class ConfusionMatrix(Metric): represent class recalls. If `average="precision"` then confusion matrix values are normalized such that diagonal values represent class precisions. output_transform (callable, optional): a callable that is used to transform the - :class:`~ignite.engine.Engine`'s `process_function`'s output into the + :class:`~ignite.engine.engine.Engine`'s ``process_function``'s output into the form expected by the metric. This can be useful if, for example, you have a multi-output model and you want to compute the metric with respect to one of the outputs. device (str of torch.device, optional): optional device specification for internal storage. diff --git a/ignite/metrics/epoch_metric.py b/ignite/metrics/epoch_metric.py index 65b69fea5b59..f2eec7fca1d6 100644 --- a/ignite/metrics/epoch_metric.py +++ b/ignite/metrics/epoch_metric.py @@ -10,7 +10,7 @@ class EpochMetric(Metric): """Class for metrics that should be computed on the entire output history of a model. - Model's output and targets are restricted to be of shape `(batch_size, n_classes)`. Output + Model's output and targets are restricted to be of shape ``(batch_size, n_classes)``. Output datatype should be `float32`. Target datatype should be `long`. .. warning:: @@ -23,18 +23,19 @@ class EpochMetric(Metric): Current implementation does not work with distributed computations. Results are not gather across all devices and computed results are valid for a single device only. - - `update` must receive output of the form `(y_pred, y)` or `{'y_pred': y_pred, 'y': y}`. + - ``update`` must receive output of the form ``(y_pred, y)`` or ``{'y_pred': y_pred, 'y': y}``. - If target shape is `(batch_size, n_classes)` and `n_classes > 1` than it should be binary: e.g. `[[0, 1, 0, 1], ]`. + If target shape is ``(batch_size, n_classes)`` and ``n_classes > 1`` than it should be binary: + e.g. ``[[0, 1, 0, 1], ]``. Args: compute_fn (callable): a callable with the signature (`torch.tensor`, `torch.tensor`) takes as the input `predictions` and `targets` and returns a scalar. output_transform (callable, optional): a callable that is used to transform the - :class:`~ignite.engine.Engine`'s `process_function`'s output into the + :class:`~ignite.engine.engine.Engine`'s ``process_function``'s output into the form expected by the metric. This can be useful if, for example, you have a multi-output model and you want to compute the metric with respect to one of the outputs. - check_compute_fn (bool): if True, compute_fn is run on the first batch of data to ensure there are no + check_compute_fn (bool): if True, ``compute_fn`` is run on the first batch of data to ensure there are no issues. If issues exist, user is warned that there might be an issue with the ``compute_fn``. Warnings: @@ -46,10 +47,13 @@ def __init__(self, compute_fn: Callable, output_transform: Callable = lambda x: if not callable(compute_fn): raise TypeError("Argument compute_fn should be callable.") - super(EpochMetric, self).__init__(output_transform=output_transform, device="cpu") + self._predictions = None + self._targets = None self.compute_fn = compute_fn self._check_compute_fn = check_compute_fn + super(EpochMetric, self).__init__(output_transform=output_transform, device="cpu") + def reset(self) -> None: self._predictions = [] self._targets = [] diff --git a/ignite/metrics/fbeta.py b/ignite/metrics/fbeta.py index 4ec829f280ca..05e217846115 100644 --- a/ignite/metrics/fbeta.py +++ b/ignite/metrics/fbeta.py @@ -26,7 +26,7 @@ def Fbeta( precision (Precision, optional): precision object metric with `average=False` to compute F-beta score recall (Precision, optional): recall object metric with `average=False` to compute F-beta score output_transform (callable, optional): a callable that is used to transform the - :class:`~ignite.engine.Engine`'s `process_function`'s output into the + :class:`~ignite.engine.engine.Engine`'s ``process_function``'s output into the form expected by the metric. It is used only if precision or recall are not provided. device (str of torch.device, optional): optional device specification for internal storage. diff --git a/ignite/metrics/loss.py b/ignite/metrics/loss.py index db75cf2e513d..5a4133c84d95 100644 --- a/ignite/metrics/loss.py +++ b/ignite/metrics/loss.py @@ -17,7 +17,7 @@ class Loss(Metric): tensor, optionally other arguments, and returns the average loss over all observations in the batch. output_transform (callable): a callable that is used to transform the - :class:`~ignite.engine.Engine`'s `process_function`'s output into the + :class:`~ignite.engine.engine.Engine`'s ``process_function``'s output into the form expected by the metric. This can be useful if, for example, you have a multi-output model and you want to compute the metric with respect to one of the outputs. diff --git a/ignite/metrics/mean_absolute_error.py b/ignite/metrics/mean_absolute_error.py index dd979b593009..86e699be096f 100644 --- a/ignite/metrics/mean_absolute_error.py +++ b/ignite/metrics/mean_absolute_error.py @@ -12,7 +12,7 @@ class MeanAbsoluteError(Metric): """ Calculates the mean absolute error. - - `update` must receive output of the form `(y_pred, y)` or `{'y_pred': y_pred, 'y': y}`. + - ``update`` must receive output of the form ``(y_pred, y)`` or ``{'y_pred': y_pred, 'y': y}``. """ @reinit__is_reduced diff --git a/ignite/metrics/mean_pairwise_distance.py b/ignite/metrics/mean_pairwise_distance.py index f33f3b370dbc..9e9239ee6553 100644 --- a/ignite/metrics/mean_pairwise_distance.py +++ b/ignite/metrics/mean_pairwise_distance.py @@ -13,7 +13,7 @@ class MeanPairwiseDistance(Metric): """ Calculates the mean pairwise distance: average of pairwise distances computed on provided batches. - - `update` must receive output of the form `(y_pred, y)` or `{'y_pred': y_pred, 'y': y}`. + - ``update`` must receive output of the form ``(y_pred, y)`` or ``{'y_pred': y_pred, 'y': y}``. """ def __init__( diff --git a/ignite/metrics/mean_squared_error.py b/ignite/metrics/mean_squared_error.py index 2aa5eef62b13..4c5a9ee3371c 100644 --- a/ignite/metrics/mean_squared_error.py +++ b/ignite/metrics/mean_squared_error.py @@ -12,7 +12,7 @@ class MeanSquaredError(Metric): """ Calculates the mean squared error. - - `update` must receive output of the form `(y_pred, y)` or `{'y_pred': y_pred, 'y': y}`. + - ``update`` must receive output of the form ``(y_pred, y)`` or ``{'y_pred': y_pred, 'y': y}``. """ @reinit__is_reduced diff --git a/ignite/metrics/metric.py b/ignite/metrics/metric.py index 9b054aa7d0cc..07ca46159804 100644 --- a/ignite/metrics/metric.py +++ b/ignite/metrics/metric.py @@ -17,7 +17,7 @@ class MetricUsage: Base class for all usages of metrics. A usage of metric defines the events when a metric starts to compute, updates and completes. - Valid events are from :class:`~ignite.engine.Events`. + Valid events are from :class:`~ignite.engine.events.Events`. Args: started: event when the metric starts to compute. This event will be associated to @@ -52,9 +52,9 @@ class EpochWise(MetricUsage): Metric's methods are triggered on the following engine events: - - :meth:`~ignite.metrics.Metric.started` on every :attr:`~ignite.engine.Events.EPOCH_STARTED`. - - :meth:`~ignite.metrics.Metric.iteration_completed` on every :attr:`~ignite.engine.Events.ITERATION_COMPLETED`. - - :meth:`~ignite.metrics.Metric.completed` on every :attr:`~ignite.engine.Events.EPOCH_COMPLETED`. + - :meth:`~ignite.metrics.Metric.started` on every ``EPOCH_STARTED`` (See :class:`~ignite.engine.events.Events`). + - :meth:`~ignite.metrics.Metric.iteration_completed` on every ``ITERATION_COMPLETED``. + - :meth:`~ignite.metrics.Metric.completed` on every ``EPOCH_COMPLETED``. """ usage_name = "epoch_wise" @@ -73,9 +73,9 @@ class BatchWise(MetricUsage): Metric's methods are triggered on the following engine events: - - :meth:`~ignite.metrics.Metric.started` on every :attr:`~ignite.engine.Events.ITERATION_STARTED`. - - :meth:`~ignite.metrics.Metric.iteration_completed` on every :attr:`~ignite.engine.Events.ITERATION_COMPLETED`. - - :meth:`~ignite.metrics.Metric.completed` on every :attr:`~ignite.engine.Events.ITERATION_COMPLETED`. + - :meth:`~ignite.metrics.Metric.started` on every ``ITERATION_STARTED`` (See :class:`~ignite.engine.events.Events`). + - :meth:`~ignite.metrics.Metric.iteration_completed` on every ``ITERATION_COMPLETED``. + - :meth:`~ignite.metrics.Metric.completed` on every ``ITERATION_COMPLETED``. """ usage_name = "batch_wise" @@ -94,12 +94,12 @@ class BatchFiltered(MetricUsage): Metric's methods are triggered on the following engine events: - - :meth:`~ignite.metrics.Metric.started` on every :attr:`~ignite.engine.Events.EPOCH_STARTED`. - - :meth:`~ignite.metrics.Metric.iteration_completed` on filtered :attr:`~ignite.engine.Events.ITERATION_COMPLETED`. - - :meth:`~ignite.metrics.Metric.completed` on every :attr:`~ignite.engine.Events.EPOCH_COMPLETED`. + - :meth:`~ignite.metrics.Metric.started` on every ``EPOCH_STARTED`` (See :class:`~ignite.engine.events.Events`). + - :meth:`~ignite.metrics.Metric.iteration_completed` on filtered ``ITERATION_COMPLETED``. + - :meth:`~ignite.metrics.Metric.completed` on every ``EPOCH_COMPLETED``. Args: - args (sequence): arguments for the setup of :attr:`~ignite.engine.Events.ITERATION_COMPLETED` handled by + args (sequence): arguments for the setup of :attr:`~ignite.engine.events.Events.ITERATION_COMPLETED` handled by :meth:`~ignite.metrics.Metric.iteration_completed`. """ @@ -118,10 +118,10 @@ class Metric(metaclass=ABCMeta): Args: output_transform (callable, optional): a callable that is used to transform the - :class:`~ignite.engine.Engine`'s `process_function`'s output into the + :class:`~ignite.engine.engine.Engine`'s ``process_function``'s output into the form expected by the metric. This can be useful if, for example, you have a multi-output model and you want to compute the metric with respect to one of the outputs. - By default, metrics require the output as `(y_pred, y)` or `{'y_pred': y_pred, 'y': y}`. + By default, metrics require the output as ``(y_pred, y)`` or ``{'y_pred': y_pred, 'y': y}``. device (str of torch.device, optional): optional device specification for internal storage. """ diff --git a/ignite/metrics/metrics_lambda.py b/ignite/metrics/metrics_lambda.py index 03554dce3e9d..651edca933b8 100644 --- a/ignite/metrics/metrics_lambda.py +++ b/ignite/metrics/metrics_lambda.py @@ -16,7 +16,7 @@ class MetricsLambda(Metric): When update, this metric does not recursively update the metrics it depends on. When reset, all its dependency metrics would be resetted. When attach, all its dependency metrics would be attached - automatically (but partially, e.g `is_attached()` will return False). + automatically (but partially, e.g :meth:`~ignite.metrics.Metric.is_attached()` will return False). Args: f (callable): the function that defines the computation diff --git a/ignite/metrics/precision.py b/ignite/metrics/precision.py index da78a429c657..0674aba81e51 100644 --- a/ignite/metrics/precision.py +++ b/ignite/metrics/precision.py @@ -68,7 +68,7 @@ class Precision(_BasePrecisionRecall): """ Calculates precision for binary and multiclass data. - - `update` must receive output of the form `(y_pred, y)` or `{'y_pred': y_pred, 'y': y}`. + - ``update`` must receive output of the form ``(y_pred, y)`` or ``{'y_pred': y_pred, 'y': y}``. - `y_pred` must be in the following shape (batch_size, num_categories, ...) or (batch_size, ...). - `y` must be in the following shape (batch_size, ...). @@ -108,7 +108,7 @@ def thresholded_output_transform(output): Args: output_transform (callable, optional): a callable that is used to transform the - :class:`~ignite.engine.Engine`'s `process_function`'s output into the + :class:`~ignite.engine.engine.Engine`'s ``process_function``'s output into the form expected by the metric. This can be useful if, for example, you have a multi-output model and you want to compute the metric with respect to one of the outputs. average (bool, optional): if True, precision is computed as the unweighted average (across all classes diff --git a/ignite/metrics/recall.py b/ignite/metrics/recall.py index c78b56a5c377..048c11b10c5b 100644 --- a/ignite/metrics/recall.py +++ b/ignite/metrics/recall.py @@ -13,7 +13,7 @@ class Recall(_BasePrecisionRecall): """ Calculates recall for binary and multiclass data. - - `update` must receive output of the form `(y_pred, y)` or `{'y_pred': y_pred, 'y': y}`. + - ``update`` must receive output of the form ``(y_pred, y)`` or ``{'y_pred': y_pred, 'y': y}``. - `y_pred` must be in the following shape (batch_size, num_categories, ...) or (batch_size, ...). - `y` must be in the following shape (batch_size, ...). @@ -53,7 +53,7 @@ def thresholded_output_transform(output): Args: output_transform (callable, optional): a callable that is used to transform the - :class:`~ignite.engine.Engine`'s `process_function`'s output into the + :class:`~ignite.engine.engine.Engine`'s ``process_function``'s output into the form expected by the metric. This can be useful if, for example, you have a multi-output model and you want to compute the metric with respect to one of the outputs. average (bool, optional): if True, precision is computed as the unweighted average (across all classes diff --git a/ignite/metrics/root_mean_squared_error.py b/ignite/metrics/root_mean_squared_error.py index da91511c86be..76014fc59342 100644 --- a/ignite/metrics/root_mean_squared_error.py +++ b/ignite/metrics/root_mean_squared_error.py @@ -12,7 +12,7 @@ class RootMeanSquaredError(MeanSquaredError): """ Calculates the root mean squared error. - - `update` must receive output of the form (y_pred, y) or `{'y_pred': y_pred, 'y': y}`. + - ``update`` must receive output of the form (y_pred, y) or `{'y_pred': y_pred, 'y': y}`. """ def compute(self) -> Union[torch.Tensor, float]: diff --git a/ignite/metrics/top_k_categorical_accuracy.py b/ignite/metrics/top_k_categorical_accuracy.py index e17cedca9c0d..3fb493ed8441 100644 --- a/ignite/metrics/top_k_categorical_accuracy.py +++ b/ignite/metrics/top_k_categorical_accuracy.py @@ -12,7 +12,7 @@ class TopKCategoricalAccuracy(Metric): """ Calculates the top-k categorical accuracy. - - `update` must receive output of the form `(y_pred, y)` or `{'y_pred': y_pred, 'y': y}`. + - ``update`` must receive output of the form ``(y_pred, y)`` or ``{'y_pred': y_pred, 'y': y}``. """ def __init__( From 676890b1d99a25ff3eb4d8746b7332ffeddf2e6b Mon Sep 17 00:00:00 2001 From: Marijan Smetko Date: Sun, 21 Jun 2020 21:39:23 +0200 Subject: [PATCH 005/114] Fix batch size calculation error (#1137) * Fix batch size calculation error * Add tests for fixed batch size calculation * Fix tests * Test for num_workers * Fix nproc comparison * Improve docs * Fixed docstring Co-authored-by: vfdev --- ignite/distributed/auto.py | 11 ++++---- tests/ignite/distributed/test_auto.py | 36 ++++++++++++++++++--------- 2 files changed, 29 insertions(+), 18 deletions(-) diff --git a/ignite/distributed/auto.py b/ignite/distributed/auto.py index a37077b9f860..efe6ec6f4dff 100644 --- a/ignite/distributed/auto.py +++ b/ignite/distributed/auto.py @@ -21,8 +21,8 @@ def auto_dataloader(dataset, **kwargs): Internally, we create a dataloader with provided kwargs while applying the following updates: - - batch size is scaled by world size: ``batch_size / world_size``. - - number of workers is scaled by number of local processes: ``num_workers / nprocs``. + - batch size is scaled by world size: ``batch_size / world_size`` if larger or equal world size. + - number of workers is scaled by number of local processes: ``num_workers / nprocs`` if larger or equal world size. - if no sampler provided by user, `torch DistributedSampler` is setup. - if a sampler is provided by user, it is wrapped by :class:`~ignite.distributed.auto.DistributedProxySampler`. - if the default device is 'cuda', `pin_memory` is automatically set to `True`. @@ -63,13 +63,12 @@ def auto_dataloader(dataset, **kwargs): world_size = idist.get_world_size() logger = setup_logger(__name__ + ".auto_dataloader") - if world_size > 1: - if "batch_size" in kwargs: + if "batch_size" in kwargs and kwargs["batch_size"] >= world_size: kwargs["batch_size"] //= world_size - if "num_workers" in kwargs: - nproc = idist.get_nproc_per_node() + nproc = idist.get_nproc_per_node() + if "num_workers" in kwargs and kwargs["num_workers"] >= nproc: kwargs["num_workers"] = (kwargs["num_workers"] + nproc - 1) // nproc if "batch_sampler" not in kwargs: diff --git a/tests/ignite/distributed/test_auto.py b/tests/ignite/distributed/test_auto.py index c319978705c2..8be766bad8be 100644 --- a/tests/ignite/distributed/test_auto.py +++ b/tests/ignite/distributed/test_auto.py @@ -12,7 +12,7 @@ from ignite.distributed.auto import DistributedProxySampler, auto_dataloader, auto_model, auto_optim -def _test_auto_dataloader(ws, nproc, sampler_name=None, dl_type=DataLoader): +def _test_auto_dataloader(ws, nproc, batch_size, num_workers=1, sampler_name=None, dl_type=DataLoader): data = torch.rand(100, 3, 12, 12) @@ -25,14 +25,22 @@ def _test_auto_dataloader(ws, nproc, sampler_name=None, dl_type=DataLoader): # Test auto_dataloader assert idist.get_world_size() == ws - dataloader = auto_dataloader(data, batch_size=10, num_workers=2, sampler=sampler, shuffle=sampler is None) + dataloader = auto_dataloader( + data, batch_size=batch_size, num_workers=num_workers, sampler=sampler, shuffle=sampler is None + ) assert isinstance(dataloader, dl_type) if hasattr(dataloader, "_loader"): dataloader = dataloader._loader + if ws < batch_size: + assert dataloader.batch_size == batch_size // ws + else: + assert dataloader.batch_size == batch_size + if ws <= num_workers: + assert dataloader.num_workers == (num_workers + nproc - 1) // nproc + else: + assert dataloader.num_workers == num_workers - assert dataloader.batch_size == 10 // ws - assert dataloader.num_workers == (2 + nproc - 1) // nproc if ws < 2: sampler_type = RandomSampler if sampler is None else type(sampler) assert isinstance(dataloader.sampler, sampler_type) @@ -69,8 +77,9 @@ def _test_auto_model_optimizer(ws, device): def test_auto_methods_no_dist(): - _test_auto_dataloader(1, 1) - _test_auto_dataloader(1, 1, sampler_name="WeightedRandomSampler") + _test_auto_dataloader(1, 1, batch_size=1) + _test_auto_dataloader(1, 1, batch_size=10, num_workers=10) + _test_auto_dataloader(1, 1, batch_size=10, sampler_name="WeightedRandomSampler") _test_auto_model_optimizer(1, "cpu") @@ -80,8 +89,9 @@ def test_auto_methods_no_dist(): def test_auto_methods_gloo(distributed_context_single_node_gloo): ws = distributed_context_single_node_gloo["world_size"] - _test_auto_dataloader(ws=ws, nproc=ws) - _test_auto_dataloader(ws=ws, nproc=ws, sampler_name="WeightedRandomSampler") + _test_auto_dataloader(ws=ws, nproc=ws, batch_size=1) + _test_auto_dataloader(ws=ws, nproc=ws, batch_size=10, num_workers=10) + _test_auto_dataloader(ws=ws, nproc=ws, batch_size=10, sampler_name="WeightedRandomSampler") _test_auto_model_optimizer(ws, "cpu") @@ -93,8 +103,9 @@ def test_auto_methods_nccl(distributed_context_single_node_nccl): ws = distributed_context_single_node_nccl["world_size"] lrank = distributed_context_single_node_nccl["local_rank"] - _test_auto_dataloader(ws=ws, nproc=ws) - _test_auto_dataloader(ws=ws, nproc=ws, sampler_name="WeightedRandomSampler") + _test_auto_dataloader(ws=ws, nproc=ws, batch_size=1) + _test_auto_dataloader(ws=ws, nproc=ws, batch_size=10, num_workers=10) + _test_auto_dataloader(ws=ws, nproc=ws, batch_size=1, sampler_name="WeightedRandomSampler") device = "cuda" _test_auto_model_optimizer(ws, device) @@ -115,8 +126,9 @@ def _test_auto_methods_xla(index, ws): except ImportError: pass - _test_auto_dataloader(ws=ws, nproc=ws, dl_type=dl_type) - _test_auto_dataloader(ws=ws, nproc=ws, sampler_name="WeightedRandomSampler", dl_type=dl_type) + _test_auto_dataloader(ws=ws, nproc=ws, batch_size=1, dl_type=dl_type) + _test_auto_dataloader(ws=ws, nproc=ws, batch_size=10, num_workers=10, dl_type=dl_type) + _test_auto_dataloader(ws=ws, nproc=ws, batch_size=1, sampler_name="WeightedRandomSampler", dl_type=dl_type) device = "xla" _test_auto_model_optimizer(ws, device) From 0ee7553b90c97d3cdaeca7e97618576f5b4257b5 Mon Sep 17 00:00:00 2001 From: vfdev Date: Sun, 21 Jun 2020 22:30:32 +0200 Subject: [PATCH 006/114] Docs updates (#1139) * [WIP] Added teaser gif * [WIP] Updated README * [WIP] Updated README * [WIP] Updated docs * Reverted unintended pyproject.toml edits * Updated README and examples parts * More updates of README * Added badge to check pytorch/python compatible versions * Updated README * Added ref to blog "Using Optuna to Optimize PyTorch Ignite Hyperparameters" * Update README.md * Fixed bad internal link in examples * Updated README --- README.md | 300 ++++++++-------- assets/tldr/pytorch-ignite-teaser.gif | Bin 0 -> 410520 bytes assets/tldr/teaser.py | 224 ++++++++++++ docs/source/_templates/layout.html | 4 +- docs/source/concepts.rst | 321 +++++++----------- docs/source/conf.py | 1 + docs/source/contrib/metrics.rst | 7 +- docs/source/engine.rst | 247 +++++++++++++- docs/source/examples.rst | 50 ++- docs/source/faq.rst | 2 +- docs/source/index.rst | 56 ++- docs/source/metrics.rst | 61 ++-- docs/source/quickstart.rst | 138 ++++---- examples/mnist/mnist.py | 9 +- examples/mnist/mnist_with_tensorboard.py | 22 +- .../mnist/mnist_with_tensorboard_on_tpu.py | 8 +- ignite/engine/__init__.py | 19 +- ignite/engine/deterministic.py | 6 +- ignite/metrics/metric.py | 18 +- pyproject.toml | 1 + setup.cfg | 2 +- 21 files changed, 996 insertions(+), 500 deletions(-) create mode 100644 assets/tldr/pytorch-ignite-teaser.gif create mode 100644 assets/tldr/teaser.py diff --git a/README.md b/README.md index 74df94356f43..2e50f1d8f4e3 100644 --- a/README.md +++ b/README.md @@ -22,39 +22,50 @@ [![image](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) [![Twitter](https://img.shields.io/badge/news-twitter-blue)](https://twitter.com/pytorch_ignite) +![image](https://img.shields.io/badge/-Supported_PyTorch/Python_versions:-black?style=flat-square) [![link](https://img.shields.io/badge/-check_here-blue)](https://github.com/pytorch/ignite/actions?query=workflow%3A.github%2Fworkflows%2Fpytorch-version-tests.yml) + + ## TL;DR -Ignite is a high-level library to help with training neural networks in -PyTorch: +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](https://raw.githubusercontent.com/pytorch/ignite/master/assets/ignite_vs_bare_pytorch.png) +while ensuring maximum control and simplicity -- ignite helps you write compact but full-featured training loops in a - few lines of code -- you get a training loop with metrics, early-stopping, model - checkpointing and other features without the boilerplate +- Library approach and no program's control inversion - *Use ignite where and when you need* -Below we show a side-by-side comparison of using pure pytorch and using -ignite to create a training loop to train and validate your model with -occasional checkpointing: +- Extensible API for metrics, experiment managers, and other components -[![image](assets/ignite_vs_bare_pytorch.png)](https://raw.githubusercontent.com/pytorch/ignite/master/assets/ignite_vs_bare_pytorch.png) -As you can see, the code is more concise and readable with ignite. -Furthermore, adding additional metrics, or things like early stopping is -a breeze in ignite, but can start to rapidly increase the complexity of -your code when \"rolling your own\" training loop. + + # Table of Contents -- [Installation](#installation) - [Why Ignite?](#why-ignite) +- [Installation](#installation) +- [Getting Started](#getting-started) - [Documentation](#documentation) - [Structure](#structure) - [Examples](#examples) - * [MNIST Example](#mnist-example) * [Tutorials](#tutorials) - * [Distributed CIFAR10 Example](#distributed-cifar10-example) - * [Other Examples](#other-examples) * [Reproducible Training Examples](#reproducible-training-examples) - [Communication](#communication) - [Contributing](#contributing) @@ -62,57 +73,60 @@ your code when \"rolling your own\" training loop. - [About the team](#about-the-team) -# Installation + -From [pip](https://pypi.org/project/pytorch-ignite/): -``` {.sourceCode .bash} -pip install pytorch-ignite -``` +# Why Ignite? -From [conda](https://anaconda.org/pytorch/ignite): +Ignite is a **library** that provides three high-level features: -``` {.sourceCode .bash} -conda install ignite -c pytorch -``` +- 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 -From source: +## Simplified training and validation loop -``` {.sourceCode .bash} -pip install git+https://github.com/pytorch/ignite -``` +No more coding `for/while` loops on epochs and iterations. Users instantiate engines and run them. -## Nightly releases +
+ +Example + -From pip: +```python +from ignite.engine import Engine, Events, create_supervised_evaluator +from ignite.metrics import Accuracy -``` {.sourceCode .bash} -pip install --pre pytorch-ignite -``` -From conda (this suggests to install [pytorch nightly -release](https://anaconda.org/pytorch-nightly/pytorch) instead of stable -version as dependency): +# Setup training engine: +def train_step(engine, batch): + # Users can do whatever they need on a single iteration + # E.g. forward/backward pass for any number of models, optimizers etc + # ... -``` {.sourceCode .bash} -conda install ignite -c pytorch-nightly +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) ``` -# Why Ignite? +
-Ignite\'s high level of abstraction assumes less about the type of -network (or networks) that you are training, and we require the user to -define the closure to be run in the training and validation loop. This -level of abstraction allows for a great deal more of flexibility, such -as co-training multiple models (i.e. GANs) and computing/tracking -multiple losses and metrics in your training loop. ## Power of Events & Handlers -The cool thing with handlers is that they offer unparalleled flexibility (compared to say, callbacks). Handlers can be -any function: e.g. lambda, simple function, class method etc. The first argument can be optionally `engine`, but not necessary. -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. +The cool thing with handlers is that they offer unparalleled flexibility (compared to say, 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 @@ -136,7 +150,7 @@ def on_training_ended(data): 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("OK")) +trainer.add_event_handler(Events.COMPLETED, lambda engine: print(engine.state.times)) @trainer.on(Events.ITERATION_COMPLETED) def log_something(engine): @@ -229,7 +243,13 @@ def function_before_backprop(engine): Precision, Recall, Accuracy, Confusion Matrix, IoU etc, ~20 [regression metrics](https://pytorch.org/ignite/contrib/metrics.html#regression-metrics). - Users can also [compose their own metrics](https://pytorch.org/ignite/metrics.html#metric-arithmetics) with ease from -existing ones using arithmetic operations or torch methods: +existing ones using arithmetic operations or torch methods. + +
+ +Example + + ```python precision = Precision(average=False) recall = Recall(average=False) @@ -238,6 +258,62 @@ F1_mean = F1_per_class.mean() # torch mean method F1_mean.attach(engine, "F1") ``` +
+ + + + + +# Installation + +From [pip](https://pypi.org/project/pytorch-ignite/): + +```bash +pip install pytorch-ignite +``` + +From [conda](https://anaconda.org/pytorch/ignite): + +```bash +conda install ignite -c pytorch +``` + +From source: + +```bash +pip install git+https://github.com/pytorch/ignite +``` + +## Nightly releases + +From pip: + +```bash +pip install --pre pytorch-ignite +``` + +From conda (this suggests to install [pytorch nightly release](https://anaconda.org/pytorch-nightly/pytorch) instead of stable +version as dependency): + +```bash +conda install ignite -c pytorch-nightly +``` + + + + + +# Getting Started + +Few pointers to get you started: + +- [Quick Start Guide: Essentials of getting a project up and running](https://pytorch.org/ignite/quickstart.html) +- [Concepts of the library: Engine, Events & Handlers, State, Metrics](https://pytorch.org/ignite/concepts.html) +- Full-featured template examples for common tasks (coming soon ...) + + + + # Documentation @@ -254,35 +330,12 @@ F1_mean.attach(engine, "F1") - [2018](https://drive.google.com/open?id=1_2vzBJ0KeCjGv1srojMHiJRvceSVbVR5) -# Structure + -- **ignite**: Core of the library, contains an engine for training and - evaluating, all of the classic machine learning metrics and a - variety of handlers to ease the pain of training and validation of - neural networks! -- **ignite.contrib**: The Contrib directory contains additional - modules that can require extra dependencies. Modules vary from TBPTT engine, - various optimisation parameter schedulers, logging handlers and a - metrics module containing many regression metrics - ([ignite.contrib.metrics.regression](https://github.com/pytorch/ignite/tree/master/ignite/contrib/metrics/regression))! - -The code in **ignite.contrib** is not as fully maintained as the core -part of the library. # Examples -We provide several examples ported from -[pytorch/examples](https://github.com/pytorch/examples) using `ignite` to display how it helps to write compact and -full-featured training loops in a few lines of code: - -## MNIST Example - -Basic neural network training on MNIST dataset with/without `ignite.contrib` module: - -- [MNIST with ignite.contrib TQDM/Tensorboard/Visdom - loggers](https://github.com/pytorch/ignite/tree/master/examples/contrib/mnist) -- [MNIST with native TQDM/Tensorboard/Visdom - logging](https://github.com/pytorch/ignite/tree/master/examples/mnist) +Complete list of examples can be found [here](https://pytorch.org/ignite/examples.html). ## Tutorials @@ -306,39 +359,24 @@ Basic neural network training on MNIST dataset with/without `ignite.contrib` mod torch.cuda.amp vs nvidia/apex](https://github.com/pytorch/ignite/blob/master/examples/notebooks/Cifar100_bench_amp.ipynb) - [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/pytorch/ignite/blob/master/examples/notebooks/MNIST_on_TPU.ipynb) [MNIST training on a single TPU](https://github.com/pytorch/ignite/blob/master/examples/notebooks/MNIST_on_TPU.ipynb) - - -## Distributed CIFAR10 Example - -Training a small variant of ResNet on CIFAR10 in various configurations: -1\) single gpu, 2) single node multiple gpus, 3) multiple nodes and -multilple gpus. - -- [CIFAR10](https://github.com/pytorch/ignite/tree/master/examples/contrib/cifar10) - -## Other Examples - -- [DCGAN](https://github.com/pytorch/ignite/tree/master/examples/gan) -- [Reinforcement - Learning](https://github.com/pytorch/ignite/tree/master/examples/reinforcement_learning) -- [Fast Neural - Style](https://github.com/pytorch/ignite/tree/master/examples/fast_neural_style) +- [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1E9zJrptnLJ_PKhmaP5Vhb6DTVRvyrKHx) [CIFAR10 Training on multiple TPUs](https://github.com/pytorch/ignite/tree/master/examples/contrib/cifar10) ## Reproducible Training Examples -Inspired by -[torchvision/references](https://github.com/pytorch/vision/tree/master/references), +Inspired by [torchvision/references](https://github.com/pytorch/vision/tree/master/references), we provide several reproducible baselines for vision tasks: -- [ImageNet](examples/references/classification/imagenet) -- [Pascal VOC2012](examples/references/segmentation/pascal_voc2012) +- [ImageNet](examples/references/classification/imagenet) - logs on Ignite Trains server coming soon ... +- [Pascal VOC2012](examples/references/segmentation/pascal_voc2012) - logs on Ignite Trains server coming soon ... Features: -- Distributed training with mixed precision by - [nvidia/apex](https://github.com/NVIDIA/apex/) -- Experiments tracking with [MLflow](https://mlflow.org/), - [Polyaxon](https://polyaxon.com/) or [TRAINS](https://github.com/allegroai/trains/) +- Distributed training with mixed precision by [nvidia/apex](https://github.com/NVIDIA/apex/) +- Experiments tracking with [MLflow](https://mlflow.org/), [Polyaxon](https://polyaxon.com/) or [TRAINS](https://github.com/allegroai/trains/) + + + + # Communication @@ -350,8 +388,7 @@ Features: ## User feedback -We have created a form for [\"user -feedback\"](https://github.com/pytorch/ignite/issues/new/choose). We +We have created a form for ["user feedback"](https://github.com/pytorch/ignite/issues/new/choose). We appreciate any type of feedback and this is how we would like to see our community: @@ -363,14 +400,19 @@ community: Thank you ! + + + # Contributing -Please see the [contribution -guidelines](https://github.com/pytorch/ignite/blob/master/CONTRIBUTING.md) -for more information. +Please see the [contribution guidelines](https://github.com/pytorch/ignite/blob/master/CONTRIBUTING.md) for more information. As always, PRs are welcome :) + + + + # Projects using Ignite ## Research papers @@ -387,48 +429,40 @@ As always, PRs are welcome :) ## Blog articles, tutorials, books -- [State-of-the-Art Conversational AI with Transfer - Learning](https://github.com/huggingface/transfer-learning-conv-ai) -- [Tutorial on Transfer Learning in NLP held at NAACL - 2019](https://github.com/huggingface/naacl_transfer_learning_tutorial) -- [Deep-Reinforcement-Learning-Hands-On-Second-Edition, published by - Packt](https://github.com/PacktPublishing/Deep-Reinforcement-Learning-Hands-On-Second-Edition) +- [State-of-the-Art Conversational AI with Transfer Learning](https://github.com/huggingface/transfer-learning-conv-ai) +- [Tutorial on Transfer Learning in NLP held at NAACL 2019](https://github.com/huggingface/naacl_transfer_learning_tutorial) +- [Deep-Reinforcement-Learning-Hands-On-Second-Edition, published by Packt](https://github.com/PacktPublishing/Deep-Reinforcement-Learning-Hands-On-Second-Edition) - [Once Upon a Repository: How to Write Readable, Maintainable Code with PyTorch](https://towardsdatascience.com/once-upon-a-repository-how-to-write-readable-maintainable-code-with-pytorch-951f03f6a829) - +- [The Hero Rises: Build Your Own SSD](https://allegro.ai/blog/the-hero-rises-build-your-own-ssd/) +- [Using Optuna to Optimize PyTorch Ignite Hyperparameters](https://medium.com/optuna/using-optuna-to-optimize-pytorch-ignite-hyperparameters-b680f55ac746) ## Toolkits -- [Project MONAI - - AI Toolkit for Healthcare Imaging - ](https://github.com/Project-MONAI/MONAI) +- [Project MONAI - AI Toolkit for Healthcare Imaging](https://github.com/Project-MONAI/MONAI) - [DeepSeismic - Deep Learning for Seismic Imaging and Interpretation](https://github.com/microsoft/seismic-deeplearning) - [Nussl - a flexible, object oriented Python audio source separation library](https://github.com/nussl/nussl) ## Others -- [Implementation of \"Attention is All You Need\" - paper](https://github.com/akurniawan/pytorch-transformer) -- [Implementation of DropBlock: A regularization method for - convolutional networks in - PyTorch](https://github.com/miguelvr/dropblock) -- [Kaggle Kuzushiji Recognition: 2nd place - solution](https://github.com/lopuhin/kaggle-kuzushiji-2019) -- [Unsupervised Data Augmentation experiments in - PyTorch](https://github.com/vfdev-5/UDA-pytorch) -- [Hyperparameters tuning with - Optuna](https://github.com/pfnet/optuna/blob/master/examples/pytorch_ignite_simple.py) +- [Implementation of "Attention is All You Need" paper](https://github.com/akurniawan/pytorch-transformer) +- [Implementation of DropBlock: A regularization method for convolutional networks in PyTorch](https://github.com/miguelvr/dropblock) +- [Kaggle Kuzushiji Recognition: 2nd place solution](https://github.com/lopuhin/kaggle-kuzushiji-2019) +- [Unsupervised Data Augmentation experiments in PyTorch](https://github.com/vfdev-5/UDA-pytorch) +- [Hyperparameters tuning with Optuna](https://github.com/pfnet/optuna/blob/master/examples/pytorch_ignite_simple.py) - [Logging with ChainerUI](https://chainerui.readthedocs.io/en/latest/reference/module.html#external-library-support) -See other projects at [\"Used -by\"](https://github.com/pytorch/ignite/network/dependents?package_id=UGFja2FnZS02NzI5ODEwNA%3D%3D) +See other projects at ["Used by"](https://github.com/pytorch/ignite/network/dependents?package_id=UGFja2FnZS02NzI5ODEwNA%3D%3D) If your project implements a paper, represents other use-cases not -covered in our official tutorials, Kaggle competition\'s code or just +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 in this list, so please send a PR with brief description of the project. + + + # About the team Project is currently maintained by a team of volunteers. diff --git a/assets/tldr/pytorch-ignite-teaser.gif b/assets/tldr/pytorch-ignite-teaser.gif new file mode 100644 index 0000000000000000000000000000000000000000..ace78ba7e9776b199587749de2a9a25b75fbaaa6 GIT binary patch literal 410520 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

= zdEef|?mih>XB~pwL7Av{jmknAOyokI8UiFR^E~?Zgw6mNOnVAaWm(y3KP{Cm8A z40WZYiWp!>1M;k`I9MITU&4^y5(ncM4tQ+J5-Ivf6$=^HcdnC=>LxiiNPzW$TZA=i z{&|8imOHXiQ46zoNgPo_a4-;hn_Io@t4{D!*YN+2iC0d>tI=}4n{$?-*=$AEQC)}zDA#ztr zOMXOW!@=!L`~Jx*ohAw^NJGLt`ox^g+Heu)`*Ei-;7ZOD1qzV)P0PhtJm$QFjebh5 zIJ83CdH@j9q#j@yI{Mr|7_&Omm&12xw6y$oiFsx(PSrE3btAzrfGeI~;dk#d;vabp z1EavvyNC;N>)o^PN5Q$OGL@u3wNZTN5do)W2IsJ_HM0wq(wuf+CxA{Eo$~%@s!}QO zFBe_HE5;aWoI0h)>FFKi3GVzHAeo?J7xGaMFV0Uwln~Cc1<01vh_M-swq6kT|BhYF zwPB}8>a(o-YyRUc5koc>pBBRHj0k-!5;0(rjR`JeAX)qo=a!5>dd2S{13fF%rwIlf zcPYfLnaZDOQP;mtd9tQP#^9&Io^#)6bR31dvMI3AEJz*2W)WuhFEG&H;RTT7$MpA^ zXc0iWjmB}WJtLF^{`SoqAVsoTCWVnCXgAQSCg;e~L^`8%jRMBb@dUnO|CTLpQMZPJ98BzMG%tM< ze(f1=Xau23NjHs2^sZ}Z^BB&mSa+ImoCvPbxe{&aS#t#}gC~cC<9F#Ptb8f|5JOsB z&cqcCHoPLoeg$21rKTP5jzLNSup1VVl9R2###;4|Nh3uniq04{^g;TH@%u8a99YOW zD?Z%zjNj6?e*Ghmw_L4|(;%fK@LAaPT{ZrM%*c=G8@!#?cQdj>T2w>`#t**aGS<}U zGV%^_F9$gH_dC^((0n!pBR7=^a5L#5Du1^_=Wc3kH>RSq1Z^2puO|pdA;jT#g1Su! zw&DhBoHVw3OfZfAeQ>RP+*sV(tk`m8sQ7!(C-JUKX~;K~fWvU=bQ-j5f?5mttuG}d zImj>f@QBPCFriPU2Sxl{G_z44YqpzM&%2>#e)kp}ZiyQy<+gh5*nM?~C}C2ekI)<4ghlR_-@%9-s@^%OHXlLQ1{!va$O}UZ%v>id`JJ$H(59n+0AoH_u|&iIbb^^etC_b8NVl{o z*xX8Sl^=7!+|X}SatKJ*4p`(2_~ETMKQ5jx6EHtI{&6UUl0;Rs#6nPn$K62`pc7%Q zV(E5(ytwaov1iZqtE;%2&Fk%)aOIMTmHQfL8W$#P^}fHal8>pj{!X>n+E3GTJNPmL zUbo@JvvEW$$fpdW?-$f#bDl}Xa28vDeM4p%4@V2szJRk$6s8F)kuN)~ zPdn!dsC^wMsQCFbcz>znfrr0EoyNhEvBmf^H}?mQJ=uakI5*V=IW}KR2BhPJrxdD- zIZnA9-QKAlyDQCCzMVa%_A`&@C>&M3Dt%ottH>hy)J(4PB-Qvk>DLN{KEjQC2WBI0 zZ>&$PtsMTSS6IudRngj${d9Vkzobj!rtR;h8(-hiyNo_uY0+L)aPpXazj_%Sk!uEd zb|Nh8?ayy!Peb{Is*cS(w4oqbkSXq+_~^ktcYdwfYF(B*{UGt?s=R&tZhJ!StdmSR zZRh?$Uip)ISx3Jshr4oW?v$#TtF?Bob}E=Wa=KmJr7Gqx^SnY#U;a{VWX1gL?1`RE z>+g;A5pLFz?dUG0Oa%jHq4(V1g`*9X3BtY2E=|X)8=u~$hkvaI8E*T%6#bADI7hql zuiQU^mCr)~z+6I#y|}+XIQG-FyYN#`F6J%bbDP$RrnO7U(69cB?KrtHx8vi@U4MGc zMFzeB8&CB;-VP7w>QfkDXS5*UUJIpdoOww%f)mbIYB!2$zT?A`-TV3_F1c^|u<&s} zWPi~7AMPJA(Y*doj#pac_5}3z{*~@GI^Jv_F@7nxJ+dg*tjG9_e;)SYhxM+F!>3B2 zLck1`Ww~<8k^mZ9ATO%+Naj^((L*7=vCFo<^?M96UiJLBIPFthm&eJUrPFyWr={$V zCM19OLAY9Vr16iXdV|Hk?=OB&Uq;)Cqdea6;U2bKh-ltqPp|G?Rz8Hk)0(ON9q}TH zbX5DSMNzZug&-YYB+o0wHL3Erh^g&YS^qi8v%MCowlK#l1RLR=bo{RP0-jt| zxh;0KL$;)H?smNCLM7zUblZ!@T1-gMY|eS%mBQ$4%|k{R$I%KC)bsl+p=7BQSL)%M5~mj5ZAFqMJAu7Sn9^l;WKA7 zNo&u74$DM!QA)R;@qCDr6@9y9JjGWMXche?p+ss-Cs3w;?Zsa^u<`S`4O`|8;*o+mrhPJX%JhA?UGIDA?B?fXxz<1fda?dIIK`FKga>%>>j;^q3+ zpM`u53`D59?!%?lldOg#@qe3}W754(rdD^$oIE%G;IZN7qFwu&U!TQF3%t5`#cihX z(e)$qKQnPhyB5DUYUm@s?Ngt?u!16jnndhiJc38gb)5bV1m!%Y4+KMaWh_gzZ$^Cg zb!c#E^-ihyuC#=^BYgJKt566)O@`~LmyM1}RF1%RM{RaGhuafgcPv4MK#`Sb=LYQbnB>pjq9zr${HaLzI~W1eiRlR9lC8O!mky*IzA_1I@GFL8g-Pn z&m%)juYHr4ay)30*7t%Ub`m&bPlA~tF#!0fc!op?eUOvwk-e*$oeaIjs)Hq)=S3csE#H*)2^Vl~eq!oz&8k$(E(b1TSVFulwNjXY`i*ggO_kX&vM{Rqdo~5r`l2>Z5BFM))o1*`8M^-BRa8tTW$9IzE(>Zg&i^ zR}cSKAz7$;=_W~i-L27PW%A423#+SzN&OVR0*|JDNeXvk1~y*b8~Vb#?d<(#wdhg6 zdf$B1*Y_{|8U{w6dR$|d`zcU?^-Q^t;A&I7EK}rr@mkmWR8;ZR&ge68MBy_FLDvb! zm7gy5{q8G!B2nO2&>H?P<>FXyT$h~w+Iwe(NwK!cqHfdo5qo{oDtT|NN4r;8ld}1} zdLbT% zc{~jcJcjLq4l%iv`7DBQqChxR%b~YM7kR^b>fbNl(!k?RFKs@H243q{QX6RYu`SQL z`t0i9$_|Z?0&||;=00e+8LI?GoANwwrQ_zr*71o}XwLFjmH4K<9;Kucs>R7N75N{r z1qvD~{ePQotTO7O+a^X-Mgo>Sk6(T}sr&C@i+=c-aaWV`Uq#clPc`yNJLw0eDO#=> zA4P3s+p;f!t@rP!znVVg|9AP|kHEPsV%BQ zcC&wBS*z!d8RArF{|udU)-$BS4b5B;mp63Wqm!I(ugoR?rm7vu?#244y#MGj+DDMj zvat0faTG)J#-u6p2C?WwMA4~>DctbCKsb_Xan6;w#yithy+F$m0ceHpw z(FvPf1Curhp?RJ>gML7pqtR5yckF{jlA zt(5G1tQCOb7*O8bEy5`?%(0&3$BR+)*D)bBFOq93e9wQ@r{cII#S7%{_6)am45d0u zIh+&IWUb8ZKB$E)gWe`YaJlBlKVz2>Fjb5`D*jVi)Ve3no_>wwa$Ij^FrVUQctZY< zX%7}cLqs^~UA3W6Vo@~kZTwJT$eA|a8~_;ng7UhGTLTLup1Z+F0N0X&#%nho;TW(Y zVm#>ZSC3_lp_Ht30z{BZ^F2$}KiA+8uTKWEwkc%X+*7*2G?ZHIh?}jvHJCtSnQDgj zq@PorHnf2R5)=w1#KCuYhEKC?`p9Aco_iEbdXrzUYT( z$d7g)t^}UuWkU{E<=rB0QB(;zq3P`Fz(Y`7>`%0Gd3M_>ytT0Oq}XMdD;M>|&(gZo z^cW9ebO30;9y^6$7;a}Kb=F~d+z|CZs9zoiLV(e{!GI)zOm_hI|FYU0oM=HdUh8b+ z4i1&6U@lPs5>JQe8HG@e7aUr&uN@C|K)wLdDfmh=q&rU1doBp#E!qT6W^k+Pr5Rmj z0L`%pl@Ma8&C%@lZ-HkmzFcCY8b|$@ebIb2_8W>U*>DB(sq^KA&mgt)%1K}#<{Y34 zN}C@RZo)7g{dsWQA&;5|Mu(kT`xFBabY>?;LKyZBZaN0=0cVD+V1fYqz39WA(QA7E zY*}zVAW*LdDLGnExp^isbeL)4|3V5SRu)h)_csU>wXs4?|Cp zj-b(*$Xg^hUnZC(XohFPBdSC(L;wRIb4e`S4H%GS0hj(AiI98(^6sovx(%|JhTM~a z(Fo`gBC_FyYx7T}Krl#{3uH-0R%$}srJ`68X`v$|w-cF7J4>|z(7E)KtDjP604fUrxh6m=G?D2b)P1IR z9+8C`f~HK7>0(huPOKLJTL6`h33D~#bB&8rz$4;;qs)C-D3yrFVD+|`wT}f5)LBF# z2?QY^su&1Utk1ieJ2KcfXNMRit(;jw;6~;hmR7kKmZPkNcp4@Q;s;b1*%`qI#aTx) z2IAyTS6*yR5)G9Q92ieRWn@AvOu4cNK6&^s%iVm2CKq2YTR0Y3f=TBh_=pHmY)EO@ z7?3l}#ez_f4LHMh5i~k7jSY~%AZ-Y#S;iJ%B`yO(K_1Bmz`#14VD~?zRSKf*GPCjl z)XcrC`$Fg}e$W{k>ZxEjOSCk^0 zw1_vaG`;}0Q04M;WCM(uaP{5TXfhmN!lG#p3X)j#DzayV6oW-YupmoTG2oL=J|5MM zhq-$qJ7$sPBy`890DTrILw78~qKjsc9n#2BEL!fNpU&9HXNv;vYJO@oWGN6<$`G`~ zi>Y}at!I&)-SMBoxHNBpnrDNsD75l#lspJ<$D{XP_gjfYE8~bJGOCu2g7jo0Wuoe^ zcVp?O+F3+xCKSU!CDEV_L=M=Z~~^fj$R4u!W(F)s!Ws_01UX_j%T8pP?UZb zR22<{9Rt_SqC!>?xXhS*0eF3IRXsD>cdKsM3(?(+S`I@rFc5Zf&`dhF02j=fh#qi6 zm-;>&bU=5ofl5f|{Z7K_B%~y|-+d~#hhUSsbgU0AyFC?`nZ0{z7j;V96PGVQ% z%4Rf`5Yd16VXeEUaxA)`8d;}_?!dsBuT{jVgr$dM*g5c|cpk9~(*Mi4CIApdqD2J5 ztA22UAKtVhw6rr5Y=Uc2>dJ}<^w^fDQo#SgtPeoCzqc5YlUU*Y5jx1P830V7-5B!gT<^^i%6C zR_w3_esqe~qrz(Mg3hExJOBVYGWu(8P%}PEe-)W^&y^MK@-2wjQ9u4iy6pQ_tp)(I zq#?VBMV44JjRAbP3BCZZOhnX!T~{|ji8Z!W&Zk0gc%W99iy9mg zR)>MQeotPZ+b7K4uQ0Q_2aoqpTT~ta43Gj%?wVRMI~X_w*1m8 zi7;e8vYFoA!HDqr>B@qiHOQ`3*fIcv>>$A4Oer`XFu*rjX>k2Kep$#pV_uf^3#Mz5 z%LFi>tL#St$7nZ)tNkXwMYIw@0(f+heoc-8+L8`!`3cR-WZd!U128vzta(^+uQ7=R z?6&5wleqV4N8ms%7OfEse7yi`*^LA;Q_+zi4gBL1r(4T^_7!VzNflO1$sjH1+E=>( z$71_^Hgv;_t6!jsg@aC?YNb`aVe4$oJ4nVK+6>xxuGLoFiVB7+UPwMYd-0&K%jHum ze4{HGbK7JVZbvxvF|lm5zG*UC&3FXO1b zmW*>^?v9&$Z+7|DQY1TS2jn%qlhu_r>l zjUlW4L^Qp+4a2v05$f`Zvx0jl8w{)kVB|89mK=k}MIDr6HR+>|01HGN3DiHCAJ0Gy zxn4xSCqmBra^+l} z2{}ZWY9Pz;@DDe*^3x%@TNk%vkn~yZXm=3r-^mijWUoVaL;ca*MT^L#TYaF>P+u{C zg#t&@;bkOv_)}U(PuWEH)3h*nD;=uAL=MQHoBX+g?UD3dfmXu9lZ{=y>>UEY;!s92 zfSqz1zu{$Z^_<-WsazdSE@QTMe58R@fTo@$U*hz(%FA+$H5+i7L5rG&M`5YIR^SnA zez)lGXCJ#_uy5Xp462A>TGY|NG`+OGW>>@K{;sQQ2Q-`BeDx=kPG$o!eR!>r50}eI z8HLIG=pq6ri%`UZqOZ}4idmU4I*4=M6+ZilM+syg?BLFd)6qd1nXdFOw$|WPo)#$S z1T!r4IY5k7Vb%-K2H)18-n?*RRWAon)&A#?D#cwPbcbjVGmc7zD!;0X#UMpjMY5TT z4H__OQ)E>%=wBD|J~_dCu_h0T?ntEDV4vo%_W`(a37`TXF7a})9s0A%mnh&8q7DPP z!9d+KV~yeYi{ZyX_@QgHpVINb7gI-YLNGx3?C*@I#ltVl4dIA6GbqZT(Yc>68vp~Z z17@9nKdQ}i0!=)^dT+!N2dN|wtBQ7vgbehWf(c!g(DreV4Qk{79Q}L}>isl;_0BJI zeWNFRVgKc;m$?HGv_K#BdcUdf0Eo?Ryzv#wE}z^h+wP0Me1h!;7VVx1*35KuF?mU} zrNVbxQ={MhgR~#*A%dM}7JWZKtofCcho1zpY=rs<0=Z zHhYNyi*@|W4Pij-G1o$j1h}j(8bO6Ca>SqcchWy-v&Wx*;aYd7qRitCtmdA#UgtQIvnfM*6Gu|+v{G5tk7CFJVFsM--;(MWs}ob zF1zb3c+9x?JC(XjaVJ{GrwreZX9oL6`q7@ zWO!s_j@ax7uxuja^CVIYK;3%G($PUgEW@?G&>M4Ea4({R@kS#S7;*&J>@ME%19Hh| z3wm2q`e+Fes8*kp*2zo&Fb%k=>rax6x3!dA`d|j z7+FAYVJj1DUyHqWh1Cg=rUej{!N5C$DFSOUha03 z_KIu<2VhQAlt~9n0Cfwic2^g0$BNzT$@*zIewHN&LDn?> z#Z_WQS+^Uv-+YE}?A&Z!=y060vo)A{U@HX3IN1kcSw*-PSBrhmutYYr>Mj8aHxJfh zE^@fmAEWLeZ zI^;-Mp4`Cty@X-s(Hl&_%wuj|?ShAoe4K&9c_TY9fMjTAZ+8Fz#LS$fq{J|$A2Gmt zQY8lMDw{8+@>{tS*y}fcsqhnH-SpuJfuu`18qpgv+ zvj_ZLL7sgUAz|5`9YjvB!Bvrf#7pH8eA<94G><2QWs776Smg1gtz#Yd9CnQIU#nfN zP0O}IbW`(nG#UY33jo;ca1v=;Q?8^9jx``c|WwE7PfZ|HpzT|T1s z?yqkSh+URMvG8zSsxOwCvqJ%hZh+TiV1Uds;W;-V4HVUcd}|I)fs$n|g+5Xj%8?pNVzy`#D z@yu8?+B9so4Om?u#~rm>Gai&-U?NO%45v;U=tMC2x3xQxyTPI}A44!$WKtmrfO7~B zd;7#d5|Hhmc?< zSYX*0agLq9y^f^{++)3m76TR>3^|2kMVNZ@1dZ>NPF-^6v{-iH2;MCaenpb}F-#J= zPH*9T#RaI*^m&4b@haEL_}#2eLf8m#LQYr!FS|(phk;8%NdTN79-up3cR`mS0TABv zCuqX$xGOOY_aM?A@*1@c#gN$*40MqonWuz1uTdusBiS>Yg`I=#p~$R;qfh}l`Km(l zQ6)x_Or9VegOevENIKUCmzIqw#fBtAF^LTEI*qc^l;o?xC&<~wmE_$@;3*4^2gr0b z)}GjjW4GebB4j`!nZo=0{4?q0tfJt4;Or(`UwXkdUSt@=_r_UB<`(#dddqzoIG)VM zs|Pz?Lk6jn;>DLqfdzHbrYAsYCYtY10Q278dxRkfV*&I&og%6jOaSXJ*(5|5V1NJ; zetryWDeIwYdr!b*eXr`+FA_yAg0_5KQ6HbW6;~>Jc3I53N~30WC$st?XSC_9k(?(L zL~1`@hjFw`MrOKGDgY8>slFGuU?ATtL~A3rCE2RRPn?Hh+!I}+|kkwB_x0_Xi~3v-q#$Jz36 z9%A0F+0U7R$b7;{@fV#YeEETyY1g~QppRge^7J|(HynH%*H>vPMzK9{JGy)J^e}|s z4e6{D)zJQJe6x{4ot&KjZzWt4XzwhX+Ln~?eo5|Zi4MeDiUXj>zdy$3!~xf@i%URN zwIx+i=b0sN?#G74%Fy?!LQ+&7t8i_z0$m_Nln_@!`#D<5J^_&>1NX_l<7sbHuZKU{ zbW!;(Z83eG?Ec87=6AxvL*4I{_OCZ5R6DzmWp-XpE(Wn?_2WKn!7YW8b$Z-;A} zNw>sH4M{(!rX@_W%}!{Y82#P%cWa;%R8uJ#H%sqtYS6_x;jnoaoP6>_Ph0 zwpMJEoQFTILP}_|NS8UOXFYL&^#$u%z@xdS9tl=lRAr+xSGd2YOAX!A05^ zpOnya(HnY>=ZHHvLn(T`?5!JB2`T9>knIXqjsD+T?BI>qx|cg&+TUrvo_EEb>RKff zo}KONh^VbG=-BCqlzY1u`0Y!!-K1|*O_9J<@JWMzyKF9>?XHG@ueqrC#JQT|-lgN@ zNr9SI#^Dw7l&8D7H_kBZ-ry+4R>6sm!bhJwB5kR{&OW&LMFQw&q|X`Y=B5vvdk?E4 z;zTgNz#I-g?*BYP@gKVVVOZh&lV*#rD}i41iiqEl1#hUmsXA}3*BG|fJlReC`OdN8 z(zB71U%&fYyY(}?RGEGPqk5VVlclqI^QD#UpBLu3Y_*zSa{3WM{g2Xs-)A}iJ34f; z{YzTijlO~SdCjbv-q#XMk?|cb(jLRO2#r@WYsyq@{Z3aM*MqDvUixUG4F_S)gMa<> zbYGt3kK+1Ne^R3l^A>r!^*C3X0av^234Y|Gm3NP4`gFy0^fvYKEwb}xD1BRgXZx<6 z@wt&PsSQl*K8830#r1u&`udx3kJ;jyjvW~>|$C`t6)- zKTU03MqwZDgr^(aL$|w23Isd6q zp;yM8Ib1<&#)0M|hPg)dA@}Pqj=U_?-awm7)<0;9XgkAmu7#WHSYbk&L0|i78{2i0 zTJa(K)7tR#|8aC4{%pN}A3ljBVkUyv#NKM}YNGbut5oc*c2#LZV^eBVd(YZxbcCv1 zwM(lSilXX^mhO7;d;Wow*ExBebMEuL-=FK^vJvF-ZONe8%Q3g8!Cg>5n5&Sg!I6jT zsS?>xH=vc%dnI3e#81FXXHQClb3cmv0pAz+Cms-?Fa+I0?H*1_Q z!}|&1h8YzJkD@7aJI4i;Y8a~GmJhd?53IB`V-k%TY2K_tUNT87UM*nxoi2=LLTSjn z=_eYoQ#5PxkJaViow75d@=}6?K7i1jLgZ4FGOQ#%w|EtOVaZ!CGNPr~-BN4x;g2bq z{;GSeQAg|4S$xjtuOlt#67Mz#hr{*%`zrC_C(joDkh;cD51n?Si5Yxzgb@Nz2$)8z zM5D?Iu11K(D#W1DP$C6lOokYz0Ah1IrlgE1ht3m%9%+wQ{{Z#=0R;XPVwByv-NI+s zf6oF)6oH%ns!Gr=;xz6cnzF0?izYf`mr$v`Ml}(;WGxKf4+#>5G=I}y&Jm6GUK>#2 zVy286GdT01 zKWqfK8zH7Ys1^p|S?erQ1v!-#UXk;LW&T=iTtKYlc&y1YMwghob-s-^3W#6wPQ{90%eKgjQ|Az)YD~UUIdZY zOjlaV)2A~07r`KgWbnU559%kF!Ati2m2!U3iKalEe?S~MAcjSWE31&6Imk6KQAZ7J z8V!AhAz=D*N9KqtDG7*8qJ0NZ?3l=!NjW$uDh8@lLNN2qW%SDw>CdgE&vQzF&N|YG z?{S;=CssaS14EV^ESStmqIDqXJjhW04B|{6zUikk$6Eq>@fw>%diGi~v5c;O%%kkY z<o2bHsC)xTvYH43AS#yb=X zkVJRVnKk+kond97@sBhI5{NnkES5qXNnw+_1%50mSXc&eQl)x>WSMzDc-}}fxeRFM zLvY23OcQ93utjD|hDgW)l`4p~1M=VxZQwl7i6rU(FKOR{{PLp%1JFPb=*$|# zX_a6^N~CZ(TO%1LfLjeb-NHQNQ5=I~w8iY^8({(zcre{CsHy5X6wk93GBY?xH~!#@ z6|AvYS939~%xLlA%qk*wcu2$S@I~{ZZXDfkHd^vQ%%AM7lVRg^$TQ@in&+%Q&mcA4 z${Pw8q)>hdECJ$)W_sI;Es()!I5s*1*$Jj6y4l|#&l=-nU)?uj&rIJZf)Yi@oSdRX z(5h|r)#&BVt3=C*Qj4+~6KLMQe#Vvk`;KrbPe00`5{v$(U(M&F!`eK?uGqgN`j;g* z9H+?)#P6(i*-u=5l$rr<%HVQXmJZL%wn^D{Nsu{dGPfvYTH&P1CMZ-v>OqrDy+jA{ z8&M0Jm0MTQfi4L=4(ql$qD#-#Sj}=0kubt)>(|XzX7~Rz-StM}RbCFOwwP@)4aIsI zf0=pz_G0Z7$6@zcs7&tz&R$0_R1d-0L}NxMoMKOKU@seqI?$pB#|s5KG?ed)xap;fhfy?&eyuilwW6#Roua*GHTG$Y@zU&G0fX)M+XM@*6G zHibk2Bg~w)+yvA|KEXF|{viGp-ucoNpQjE4JuJi}B!YG}9DF%@-N43sL^y^Jo$u@r z@+Lck!Son{9C1_XD#ffiI+9B3YFAs`HRYiS;3kQ^q2@0ici-DOgxo1lwRML(wzN@w z>?;|*+~$D!w|hxr{6og9KID3)Ft0Oq+DK=}*!jwvPOW{n>*oH*TzAHAWwQ1K1dWT1 z`_YacpGSio8;QUw(Mc6O0wgklZJgLMs0dkN1cDlzs(&!+&uZ51)kOKK3bCR@>N-Bf zMyO#3*m>fE!F>Q;&gnQ;GMxz(?~lJ-26jxLd5c=1>wovTLy)@w@-lkjS5;!mJlQN7 z3_JFlX(Bo_5)2!mn(TBh;}e{YiEkCvK|h?FR{ac*2|JBMPKy#y5z(GK)lGRPok&o~ zVH7104pt$HRnR*OlmGs>%e9GJ-FAuJ!QP$KK z)5p0wn;hlUavPf0hHm`PS0su6DG*Z*ma_aj=G1kn4$H|HMEPW{_-YsEg0yMxP?nSj z{rZ<%`{&BhguN-A?PVPOFC6|#m5AIv(UDLX_EX#}#iYQBw?wK;0 z`b9@eNRY^`q+@S0t*&C~FrnQ8#WvGaJ0-*p=HX(*!Il!k@&uX-5{NFlrMNj>EV_ou z00cu-Dj+^csxboWpdV|MT#W!P75{J004L=ua!>U~6F`F^z)20DO8%_dO|)|uKo!KD zO@9%JZj;U|f~N*Cf1wRYD1%i|`6k3T3G$>@(&Plxq%|?4BB(5?l)0e%1NXW%t&rS0 zm(D}Py^-VBkk1mz=~c!Nd|Nl~M2^`Vq7buAY=Kkt+3iDth{?mP;n}!Z9p{P%@Bf~G zZMp9BPOrR>7IS0YOsIeP3nMo4(UTuJr(GZ>*Y@!E(WJWEgt`>Sl72R!HJB6Fb1UL9 zMw7HV$5^Bb(&T`S1WSUggGJ5qE~I8%145AJsF9z)2=0=a=Jpi&K~7kn5YGi=VLfrjC!k`+XltK3*5^57Fr#BISnE_dhm{IR>sW0kx5W;2BJJlZii@O$|1gXBoPZHfIS zfl__rsI{%Q2;SN7DcPeCnt`s77iDwI-9asylNSw7!h(eqe;a)YP+DyN@!sQUQN%Qr zc>C_zxLJUdn3Ve1#furlNh?ZW@$nh_^)rH(QIk{bn7#gi`Oo~qI}^{JHNObKSNwa& zagtTB_22X=uIVS6ili|_+p8irgY8o@gl0!S&ZYhCPp;wm--mBFhIgPTRA6da9qcg% z2ZgiA2ksqjf)e4v+O6;h0y;3Xg8XPdQ}r+vKXdR>|J+BtR1w5|%?^~?be25NSgGpQ zT@V}yCTxvPS~r-rUms2rHbzT3_xMhxu?DQn*_Uhmgd|c5sl}*(kx|D7IJ*G zxfG=1x@-C64l>T6m_Y}wNyWOCG>oen0z~keqq+~XG#r2hs)6fj) zKV3RtT*RzG^H!SrwAezOahY};>r(D(Q_lLP&C~x+m?Zfq~D=RCej+K)e zqH%>gw;%Rh%|J-eR;;bJeD1pcZliqm$9ZU}`mJ9O&Tq>;bJY*Ec;2RlFE58uA^PI1 zZ+!XW5$7W+voiSi5B(0C^N$6=I|EP$rn|rRM+FVv0~<(28@PHgh~6x6&?wICctc8|UM^W#H4C_6qWeBP)rC&TRA zuTlMA&7$MB@)WyK&8*Ra8x%buncL4fQP=|E|7~5kDVM)w)s<%;;_qGW(9+p;OXT6Ju2IqK$uKaA0B zfODZturGGuUB@y}MSL+TJBGU260c?aE!BILr|*W(5HWhN-EO0I?0zp-XQzIj$*+WK ziw=$Z|1s72hbx+YAAFg3@nx=0b>3NQ63lbArJCN4hSs)J_bmL=$6*)6G~kDm+{XF) z)i+yx;0Xug)PIImxaWnB24Cb}bV8r>#%OV%{@}wue+-H>fAYL)C+nfY%P4yZ&s!-$ z-M&*+rDtkiOGTCF9@1xAZ@97=e?w(6!1=e`O{I&@`%!5D%jvMKl8d4MUG4~HSn3WA zi%XFW+EhebxDr!q+`6&tyni(EOxi4~&3((vQ*DXT+n>MfR zd(4*kGCP&(LG_MMvNp*7L4uU$#A$+krBG(`9gUB(Z<7}KAo98o~%1|%JfNY-{6ek`&V_~pRaMBqfIsUuAzA*b;LC;gg0kX z;6Z%;bd4L5V*B8x1PZENCl~BG`syM&{QN_LkaXLTO=ymvVIVu&zCpj$_Qa{_VHv}1 zzltmW!a}~^EB!l@!`7akR^BF38f_T=UAw1K++=|eW~wWTYn~O zZEk=1=4t`kWL)QGv)_SvR5FWI=3?n$uI?Yf$?~iNUJ(KaQX0D!K;%OL0FS|?fXkfy zk>IE@N&bD%C_V{+#6JI1N3YL+43f*PDy0Rm-uz_CL;wpB4$0JroN_>>;OJ2nhx+5< zA4V=}(QtP$Dvr@(C;7b17oO3r>?~Md;(Bxg-E~x4^5DDo;I9uEUCP|Ai%mF$-Ov@d zmx9gx{ra{%Q?#5Vz<6u@$-3vP=)AMtS)SD^l?3+)ub`k*<3AuKn;$RS0T8Qw6M;HA zYzBc;;Nc7L9@{Vl@xc-xQx-5L()q|WN(}e%*mCvRPwLdfAR3(xM;g`WUN)@|?@P`O zi2efphftj7xZx%WAX9nywz0D~gXLN5dIhcrO1d@^IZ;czB|Ru7O0maf1-uYv)dh

Ua^?%z=wy)b{cHj<^Ua7u1=Hi()W4~8U1t1q- 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%0ASBnsH6|T0mz0} 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 literal 0 HcmV?d00001 diff --git a/assets/tldr/teaser.py b/assets/tldr/teaser.py new file mode 100644 index 000000000000..15ec1cc77de6 --- /dev/null +++ b/assets/tldr/teaser.py @@ -0,0 +1,224 @@ +import os +from pathlib import Path + +import torch +import torch.nn as nn +import torch.optim as optim +from torch.optim.lr_scheduler import StepLR +from torchvision import datasets, models +from torchvision.transforms import Compose, Normalize, Pad, RandomCrop, RandomHorizontalFlip, ToTensor + +import ignite.distributed as idist +from ignite.contrib.engines import common +from ignite.contrib.handlers import ProgressBar +from ignite.engine import Engine, Events, create_supervised_evaluator +from ignite.metrics import Accuracy + +in_colab = "COLAB_TPU_ADDR" in os.environ +with_torch_launch = "WORLD_SIZE" in os.environ + +train_transform = Compose( + [ + Pad(4), + RandomCrop(32, fill=128), + RandomHorizontalFlip(), + ToTensor(), + Normalize((0.485, 0.456, 0.406), (0.229, 0.23, 0.225)), + ] +) + +test_transform = Compose([ToTensor(), Normalize((0.485, 0.456, 0.406), (0.229, 0.23, 0.225)),]) + + +def get_train_test_datasets(path): + train_ds = datasets.CIFAR10(root=path, train=True, download=True, transform=train_transform) + test_ds = datasets.CIFAR10(root=path, train=False, download=False, transform=test_transform) + + return train_ds, test_ds + + +def get_model(name): + if name in models.__dict__: + fn = models.__dict__[name] + else: + raise RuntimeError("Unknown model name {}".format(name)) + + return fn(num_classes=10) + + +def get_dataflow(config): + + # - Get train/test datasets + if idist.get_rank() > 0: + # Ensure that only rank 0 download the dataset + idist.barrier() + + train_dataset, test_dataset = get_train_test_datasets(config.get("data_path", ".")) + + if idist.get_rank() == 0: + # Ensure that only rank 0 download the dataset + idist.barrier() + + # Setup data loader also adapted to distributed config: nccl, gloo, xla-tpu + train_loader = idist.auto_dataloader( + train_dataset, + batch_size=config.get("batch_size", 512), + num_workers=config.get("num_workers", 8), + shuffle=True, + drop_last=True, + ) + config["num_iters_per_epoch"] = len(train_loader) + + test_loader = idist.auto_dataloader( + test_dataset, + batch_size=2 * config.get("batch_size", 512), + num_workers=config.get("num_workers", 8), + shuffle=False, + pin_memory="cuda" in idist.device().type, + ) + return train_loader, test_loader + + +def initialize(config): + model = get_model(config["model"]) + # Adapt model for distributed settings if configured + model = idist.auto_model(model) + + optimizer = optim.SGD( + model.parameters(), + lr=config.get("learning_rate", 0.1), + momentum=config.get("momentum", 0.9), + weight_decay=config.get("weight_decay", 1e-5), + nesterov=True, + ) + optimizer = idist.auto_optim(optimizer) + criterion = nn.CrossEntropyLoss().to(idist.device()) + + le = config["num_iters_per_epoch"] + lr_scheduler = StepLR(optimizer, step_size=le, gamma=0.9) + + return model, optimizer, criterion, lr_scheduler + + +# slide 1 #################################################################### + + +def create_trainer(model, optimizer, criterion, lr_scheduler, config): + + # Define any training logic for iteration update + def train_step(engine, batch): + x, y = batch[0].to(idist.device()), batch[1].to(idist.device()) + + model.train() + y_pred = model(x) + loss = criterion(y_pred, y) + + optimizer.zero_grad() + loss.backward() + optimizer.step() + lr_scheduler.step() + + return loss.item() + + # Define trainer engine + trainer = Engine(train_step) + + if idist.get_rank() == 0: + # Add any custom handlers + @trainer.on(Events.ITERATION_COMPLETED(every=200)) + def save_checkpoint(): + fp = Path(config.get("output_path", "output")) / "checkpoint.pt" + torch.save(model.state_dict(), fp) + + # Add progress bar showing batch loss value + ProgressBar().attach(trainer, output_transform=lambda x: {"batch loss": x}) + + return trainer + + +# slide 2 #################################################################### + + +def training(local_rank, config): + + # Setup dataflow and + train_loader, val_loader = get_dataflow(config) + model, optimizer, criterion, lr_scheduler = initialize(config) + + # Setup model trainer and evaluator + trainer = create_trainer(model, optimizer, criterion, lr_scheduler, config) + evaluator = create_supervised_evaluator(model, metrics={"accuracy": Accuracy()}, device=idist.device()) + + # Run model evaluation every 3 epochs and show results + @trainer.on(Events.EPOCH_COMPLETED(every=3)) + def evaluate_model(): + state = evaluator.run(val_loader) + if idist.get_rank() == 0: + print(state.metrics) + + # Setup tensorboard experiment tracking + if idist.get_rank() == 0: + tb_logger = common.setup_tb_logging( + config.get("output_path", "output"), trainer, optimizer, evaluators={"validation": evaluator}, + ) + + trainer.run(train_loader, max_epochs=config.get("max_epochs", 3)) + + if idist.get_rank() == 0: + tb_logger.close() + + +# slide 3 #################################################################### + +# Simply run everything on your infrastructure + + +# --- Single computation device --- +# $ python main.py +# +if __name__ == "__main__" and not (in_colab or with_torch_launch): + + backend = None # or "nccl", "gloo", "xla-tpu" ... + nproc_per_node = None # or N to spawn N processes + config = { + "model": "resnet18", + "dataset": "cifar10", + } + + with idist.Parallel(backend=backend, nproc_per_node=nproc_per_node) as parallel: + parallel.run(training, config) + + +# --- Multiple GPUs --- +# $ python -m torch.distributed.launch --nproc_per_node=2 --use_env main.py +# +if __name__ == "__main__" and with_torch_launch: + + backend = "nccl" # or "nccl", "gloo", "xla-tpu" ... + nproc_per_node = None # or N to spawn N processes + config = { + "model": "resnet18", + "dataset": "cifar10", + } + + with idist.Parallel(backend=backend, nproc_per_node=nproc_per_node) as parallel: + parallel.run(training, config) + +# --- Multiple TPUs --- +# In Colab +# +if in_colab: + + backend = "xla-tpu" # or "nccl", "gloo", "xla-tpu" ... + nproc_per_node = 8 # or N to spawn N processes + config = { + "model": "resnet18", + "dataset": "cifar10", + } + + with idist.Parallel(backend=backend, nproc_per_node=nproc_per_node) as parallel: + parallel.run(training, config) + + +# Full featured CIFAR10 example: +# https://github.com/pytorch/ignite/tree/master/examples/contrib/cifar10 diff --git a/docs/source/_templates/layout.html b/docs/source/_templates/layout.html index 20d6c28599f6..a9b2e703eb08 100644 --- a/docs/source/_templates/layout.html +++ b/docs/source/_templates/layout.html @@ -90,11 +90,11 @@