From f3902390e4c0f594d8d94151772c74891d984e14 Mon Sep 17 00:00:00 2001 From: Sergey Kolesnikov Date: Sun, 13 Feb 2022 12:09:14 +0300 Subject: [PATCH] Docs improvements (#1403) * quickstart + core * + * + * + * docs --- CHANGELOG.md | 38 +++++++++++++++++++ README.md | 25 +++++------- catalyst/__version__.py | 2 +- catalyst/callbacks/backward.py | 2 +- catalyst/callbacks/criterion.py | 2 +- catalyst/callbacks/metrics/accuracy.py | 4 +- catalyst/callbacks/metrics/auc.py | 2 +- catalyst/callbacks/metrics/classification.py | 4 +- catalyst/callbacks/metrics/cmc_score.py | 2 +- .../callbacks/metrics/confusion_matrix.py | 2 +- catalyst/callbacks/metrics/r2_squared.py | 2 +- catalyst/callbacks/metrics/recsys.py | 8 ++-- catalyst/callbacks/metrics/scikit_learn.py | 4 +- catalyst/callbacks/metrics/segmentation.py | 6 +-- catalyst/callbacks/mixup.py | 1 + catalyst/callbacks/optimizer.py | 2 +- catalyst/callbacks/scheduler.py | 2 +- catalyst/core/runner.py | 4 +- catalyst/data/dataset.py | 5 ++- catalyst/data/loader.py | 7 +--- catalyst/metrics/_accuracy.py | 4 +- catalyst/metrics/_additive.py | 2 +- catalyst/metrics/_auc.py | 2 +- catalyst/metrics/_classification.py | 6 +-- catalyst/metrics/_cmc_score.py | 2 +- catalyst/metrics/_confusion_matrix.py | 2 +- catalyst/metrics/_hitrate.py | 2 +- catalyst/metrics/_map.py | 2 +- catalyst/metrics/_mrr.py | 2 +- catalyst/metrics/_ndcg.py | 2 +- catalyst/metrics/_segmentation.py | 6 +-- catalyst/runners/runner.py | 18 +++------ catalyst/runners/supervised.py | 6 +-- docs/api/core.rst | 7 +++- docs/api/engines.rst | 2 - docs/api/loggers.rst | 1 + docs/api/runners.rst | 6 --- docs/api/utils.rst | 23 +++-------- docs/core/callback.rst | 2 +- docs/core/engine.rst | 19 ++++------ docs/core/logger.rst | 6 +-- docs/core/metric.rst | 2 +- docs/core/runner.rst | 5 ++- docs/getting_started/quickstart.rst | 33 +++++++++------- docs/index.rst | 24 +++++------- docs/tutorials/ddp.rst | 3 +- examples/README.md | 32 +--------------- examples/catalyst_rl/README.md | 2 +- examples/engines/README.md | 17 ++++----- examples/engines/run.sh | 24 ------------ examples/reinforcement_learning/README.md | 2 +- examples/self_supervised/Dockerfile | 4 +- examples/self_supervised/README.md | 6 +-- examples/self_supervised/run.sh | 4 +- examples/self_supervised/src/runner.py | 2 +- pyproject.toml | 2 +- tests/catalyst/callbacks/test_profiler.py | 1 + 57 files changed, 180 insertions(+), 229 deletions(-) delete mode 100644 examples/engines/run.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index 44a218075d..1979a83da8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,44 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/). - +## [22.02] - 2022-02-13 + +### Tl;dr +- Catalyst architecture simplification. +- [#1395](https://github.com/catalyst-team/catalyst/issues/1395), [#1396](https://github.com/catalyst-team/catalyst/issues/1396), [#1397](https://github.com/catalyst-team/catalyst/issues/1397), [#1398](https://github.com/catalyst-team/catalyst/issues/1398), [#1399](https://github.com/catalyst-team/catalyst/issues/1399), [#1400](https://github.com/catalyst-team/catalyst/issues/1400), [#1401](https://github.com/catalyst-team/catalyst/issues/1401), [#1402](https://github.com/catalyst-team/catalyst/issues/1402), [#1403](https://github.com/catalyst-team/catalyst/issues/1403). + +### Added + +- Additional tests for different hardware accelerators setups. Please check out the `tests/pipelines` folder for more information. +- `BackwardCallback` and `BackwardCallbackOrder` as an abstraction on top of `loss.backward`. Now you could easily log model gradients or transform them before `OptimizerCallback`. +- `CheckpointCallbackOrder` for `ICheckpointCallback`. + +### Changed + +- Minimal python version moved to `3.7`, minimal pytorch version moved to `1.4.0`. +- Engines rewritten on top of Accelerate. First, we found these two abstractions very close to each other. Second, Accelerate provides additional user-friendly API and more stable API for "Nvidia APEX" and "Facebook Fairscale" - it does not support them. +- SelfSupervisedRunner moved to the `examples` folder from the Catalyst API. The only Runners API, that will be supported in the future: `IRunner`, `Runner`, `ISupervisedRunner`, `SupervisedRunner` due to their consistency. If you are interested in any other Runner API - feel free to write your own `CustomRunner` and use `SelfSupervisedRunner` as an example. +- `Runner.{global/stage}_{batch/loader/epoch}_metrics` renamed to `Runner.{batch/loader/epoch}_metrics` +- `CheckpointCallback` rewritten from scratch. +- Catalyst registry moved to full-imports-paths only. +- Logger API changed to receive `IRunner` for all `log_*` methods. +- Metric API: `topk_args` renamed to `topk` +- Contrib API: init imports from `catalyst.contrib` - removed, use `from catalyst.contrib.{smth} import {smth}`. Could be change to full-imports-only in future versions for stability. +- All quickstarts, minimal examples, notebooks and pipelines moved to new version. +- Codestyle moved to `89` right margin. Honestly speaking, it's much easier to maintain Catalyst with `89` right margin on MBP'16. + +### Removed + +- `ITrial` removed. +- Stages support removed. While we embrace stages in deep learning experiments, current hardware accelerators are not prepared well for such setups. Additionally, ~95% of dl pipelines are single-stage. Multi-stage runner support is under review. For multi-stage support, please define a `CustomRunner` with rewritten API. +- Config/Hydra API support removed. Config API is under review. For now, you could write your own Config API with [hydra-slayer](https://github.com/catalyst-team/hydra-slayer) if needed. +- `catalyst-dl` scripts removed. Without Config API we don't need them anymore. +- `Nvidia Apex`, `Fairscale`, `Albumentations`, `Nifti`, `Hydra` requiremets removed. +- `OnnxCallback`, `PruningCallback`, `QuantizationCallback`, `TracingCallback` removed from callbacks API. Theese callbacks are under review now. + +If you have any questions on the Catalyst 22 edition updates, please join Catalyst slack for discussion. + + ## [21.12] - 2021-12-28 ### Added diff --git a/README.md b/README.md index dda4053cab..40867321c6 100644 --- a/README.md +++ b/README.md @@ -75,12 +75,9 @@ from catalyst.contrib.datasets import MNIST model = nn.Sequential(nn.Flatten(), nn.Linear(28 * 28, 10)) criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.02) - -train_data = MNIST(os.getcwd(), train=True) -valid_data = MNIST(os.getcwd(), train=False) loaders = { - "train": DataLoader(train_data, batch_size=32), - "valid": DataLoader(valid_data, batch_size=32), + "train": DataLoader(MNIST(os.getcwd(), train=True), batch_size=32), + "valid": DataLoader(MNIST(os.getcwd(), train=False), batch_size=32), } runner = dl.SupervisedRunner( @@ -110,21 +107,18 @@ metrics = runner.evaluate_loader( loader=loaders["valid"], callbacks=[dl.AccuracyCallback(input_key="logits", target_key="targets", topk=(1, 3, 5))], ) -assert "accuracy01" in metrics.keys() # model inference for prediction in runner.predict_loader(loader=loaders["valid"]): assert prediction["logits"].detach().cpu().numpy().shape[-1] == 10 -features_batch = next(iter(loaders["valid"]))[0] -# model tracing -utils.trace_model(model=runner.model.cpu(), batch=features_batch) -# model quantization -utils.quantize_model(model=runner.model) -# model pruning -utils.prune_model(model=runner.model, pruning_fn="l1_unstructured", amount=0.8) -# onnx export -utils.onnx_export(model=runner.model.cpu(), batch=features_batch, file="./logs/mnist.onnx", verbose=True) +# model post-processing +model = runner.model.cpu() +batch = next(iter(loaders["valid"]))[0] +utils.trace_model(model=model, batch=batch) +utils.quantize_model(model=model) +utils.prune_model(model=model, pruning_fn="l1_unstructured", amount=0.8) +utils.onnx_export(model=model, batch=batch, file="./logs/mnist.onnx", verbose=True) ``` ### Step-by-step Guide @@ -188,6 +182,7 @@ Tested on Ubuntu 16.04/18.04/20.04, macOS 10.15, Windows 10, and Windows Subsyst ### Documentation - [master](https://catalyst-team.github.io/catalyst/) +- [22.02](https://catalyst-team.github.io/catalyst/v22.02/index.html) -
2021 edition diff --git a/catalyst/__version__.py b/catalyst/__version__.py index a2ef115ff4..7a5a356258 100644 --- a/catalyst/__version__.py +++ b/catalyst/__version__.py @@ -1 +1 @@ -__version__ = "22.02rc0" +__version__ = "22.02" diff --git a/catalyst/callbacks/backward.py b/catalyst/callbacks/backward.py index 37498c399f..2bcdd20a8a 100644 --- a/catalyst/callbacks/backward.py +++ b/catalyst/callbacks/backward.py @@ -20,7 +20,7 @@ class BackwardCallback(IBackwardCallback): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( diff --git a/catalyst/callbacks/criterion.py b/catalyst/callbacks/criterion.py index 71968002a3..be40715891 100644 --- a/catalyst/callbacks/criterion.py +++ b/catalyst/callbacks/criterion.py @@ -17,7 +17,7 @@ class CriterionCallback(FunctionalMetricCallback, ICriterionCallback): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( diff --git a/catalyst/callbacks/metrics/accuracy.py b/catalyst/callbacks/metrics/accuracy.py index aeb00dfb09..ae728f3156 100644 --- a/catalyst/callbacks/metrics/accuracy.py +++ b/catalyst/callbacks/metrics/accuracy.py @@ -88,7 +88,7 @@ class AccuracyCallback(BatchMetricCallback): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( @@ -180,7 +180,7 @@ class MultilabelAccuracyCallback(BatchMetricCallback): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( diff --git a/catalyst/callbacks/metrics/auc.py b/catalyst/callbacks/metrics/auc.py index 797963ebe0..e74bc751c2 100644 --- a/catalyst/callbacks/metrics/auc.py +++ b/catalyst/callbacks/metrics/auc.py @@ -76,7 +76,7 @@ class AUCCallback(LoaderMetricCallback): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( diff --git a/catalyst/callbacks/metrics/classification.py b/catalyst/callbacks/metrics/classification.py index 9032f580bd..000ce2b0fa 100644 --- a/catalyst/callbacks/metrics/classification.py +++ b/catalyst/callbacks/metrics/classification.py @@ -80,7 +80,7 @@ class PrecisionRecallF1SupportCallback(BatchMetricCallback): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( @@ -187,7 +187,7 @@ class MultilabelPrecisionRecallF1SupportCallback(BatchMetricCallback): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( diff --git a/catalyst/callbacks/metrics/cmc_score.py b/catalyst/callbacks/metrics/cmc_score.py index 391b30c799..96295f748b 100644 --- a/catalyst/callbacks/metrics/cmc_score.py +++ b/catalyst/callbacks/metrics/cmc_score.py @@ -145,7 +145,7 @@ def handle_batch(self, batch) -> None: .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( diff --git a/catalyst/callbacks/metrics/confusion_matrix.py b/catalyst/callbacks/metrics/confusion_matrix.py index f25be35ef8..3000f59cb7 100644 --- a/catalyst/callbacks/metrics/confusion_matrix.py +++ b/catalyst/callbacks/metrics/confusion_matrix.py @@ -89,7 +89,7 @@ class ConfusionMatrixCallback(Callback): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( diff --git a/catalyst/callbacks/metrics/r2_squared.py b/catalyst/callbacks/metrics/r2_squared.py index 3266f4de8d..08bf0c8cd0 100644 --- a/catalyst/callbacks/metrics/r2_squared.py +++ b/catalyst/callbacks/metrics/r2_squared.py @@ -54,7 +54,7 @@ class R2SquaredCallback(LoaderMetricCallback): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( diff --git a/catalyst/callbacks/metrics/recsys.py b/catalyst/callbacks/metrics/recsys.py index ae8962648e..8825cc75f6 100644 --- a/catalyst/callbacks/metrics/recsys.py +++ b/catalyst/callbacks/metrics/recsys.py @@ -96,7 +96,7 @@ class HitrateCallback(BatchMetricCallback): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( @@ -207,7 +207,7 @@ class MAPCallback(BatchMetricCallback): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( @@ -318,7 +318,7 @@ class MRRCallback(BatchMetricCallback): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( @@ -429,7 +429,7 @@ class NDCGCallback(BatchMetricCallback): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( diff --git a/catalyst/callbacks/metrics/scikit_learn.py b/catalyst/callbacks/metrics/scikit_learn.py index 41661e5419..ae01f3e5c1 100644 --- a/catalyst/callbacks/metrics/scikit_learn.py +++ b/catalyst/callbacks/metrics/scikit_learn.py @@ -104,7 +104,7 @@ class SklearnBatchCallback(FunctionalBatchMetricCallback): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( @@ -233,7 +233,7 @@ class SklearnLoaderCallback(LoaderMetricCallback): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( diff --git a/catalyst/callbacks/metrics/segmentation.py b/catalyst/callbacks/metrics/segmentation.py index 0d075722ba..64bdd95f30 100644 --- a/catalyst/callbacks/metrics/segmentation.py +++ b/catalyst/callbacks/metrics/segmentation.py @@ -90,7 +90,7 @@ def handle_batch(self, batch): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( @@ -208,7 +208,7 @@ def handle_batch(self, batch): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( @@ -328,7 +328,7 @@ def handle_batch(self, batch): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( diff --git a/catalyst/callbacks/mixup.py b/catalyst/callbacks/mixup.py index 35d5ba1277..94e084bac4 100644 --- a/catalyst/callbacks/mixup.py +++ b/catalyst/callbacks/mixup.py @@ -107,6 +107,7 @@ def handle_batch(self, batch): input_key="clf_logits", target_key="clf_targets_one_hot" ), + "backward": dl.BackwardCallback(metric_key="loss"), "optimizer": dl.OptimizerCallback(metric_key="loss"), "classification": dl.ControlFlowCallback( dl.PrecisionRecallF1SupportCallback( diff --git a/catalyst/callbacks/optimizer.py b/catalyst/callbacks/optimizer.py index f22b76393a..8928a46740 100644 --- a/catalyst/callbacks/optimizer.py +++ b/catalyst/callbacks/optimizer.py @@ -26,7 +26,7 @@ class OptimizerCallback(IOptimizerCallback): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( diff --git a/catalyst/callbacks/scheduler.py b/catalyst/callbacks/scheduler.py index 3bf390a7f2..09c5d5c3d3 100644 --- a/catalyst/callbacks/scheduler.py +++ b/catalyst/callbacks/scheduler.py @@ -32,7 +32,7 @@ class SchedulerCallback(ISchedulerCallback): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( diff --git a/catalyst/core/runner.py b/catalyst/core/runner.py index 9c5deb5c45..5cf34b4cba 100644 --- a/catalyst/core/runner.py +++ b/catalyst/core/runner.py @@ -62,7 +62,7 @@ class IRunner(ICallback, ILogger, ABC): .. note:: Please follow the `minimal examples`_ sections for use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ @@ -270,7 +270,7 @@ def on_experiment_start(self, runner: "IRunner"): # self.engine = self.get_engine() self.engine.setup(local_rank=self._local_rank, world_size=self._world_size) - if self.engine.is_local_main_process: + if self.engine.is_main_process: self.loggers = self.get_loggers() self.log_hparams(hparams=self.hparams) with self.engine.local_main_process_first(): diff --git a/catalyst/data/dataset.py b/catalyst/data/dataset.py index 12bd07d856..3c903eeb96 100644 --- a/catalyst/data/dataset.py +++ b/catalyst/data/dataset.py @@ -45,7 +45,7 @@ class SelfSupervisedDatasetWrapper(Dataset): Args: dataset: original dataset for augmentation transforms: transforms which will be applied to original batch to get both - left and right output batch. + left and right output batch. transform_left: transform only for left batch transform_right: transform only for right batch transform_original: transforms which will be applied to save original in batch @@ -78,6 +78,9 @@ class SelfSupervisedDatasetWrapper(Dataset): transforms=transforms ) + for transformed_sample, aug_1, aug_2 in cifar_contrastive: + pass + .. _`A Simple Framework for Contrastive Learning of Visual Representations`: https://arxiv.org/abs/2002.05709 """ diff --git a/catalyst/data/loader.py b/catalyst/data/loader.py index 4984531456..ad44c49d06 100644 --- a/catalyst/data/loader.py +++ b/catalyst/data/loader.py @@ -26,16 +26,13 @@ def __getattr__(self, key): Gets attribute by ``key``. Firstly, looks at the ``origin`` for the appropriate ``key``. If none founds - looks at the wrappers attributes. - If could not found anything - raises ``NotImplementedError``. + If could not found anything - returns ``None``. Args: key: attribute key Returns: attribute value - - Raises: - NotImplementedError: if could not find attribute in ``origin`` or ``wrapper`` """ some_default_value = "_no_attr_found_" value = self.origin.__dict__.get(key, some_default_value) @@ -46,7 +43,7 @@ def __getattr__(self, key): # value = getattr(self, key, None) if value != some_default_value: return value - raise NotImplementedError() + return None def __len__(self) -> int: """Returns length of the wrapper loader. diff --git a/catalyst/metrics/_accuracy.py b/catalyst/metrics/_accuracy.py index 260b3d261d..c5ae8173a7 100644 --- a/catalyst/metrics/_accuracy.py +++ b/catalyst/metrics/_accuracy.py @@ -130,7 +130,7 @@ class AccuracyMetric(TopKMetric): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( @@ -253,7 +253,7 @@ class MultilabelAccuracyMetric(AdditiveMetric, ICallbackBatchMetric): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( diff --git a/catalyst/metrics/_additive.py b/catalyst/metrics/_additive.py index 5fbad37177..4523e92b0a 100644 --- a/catalyst/metrics/_additive.py +++ b/catalyst/metrics/_additive.py @@ -130,7 +130,7 @@ def on_loader_end(self, runner): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__(self, compute_on_call: bool = True, mode: str = "numpy"): diff --git a/catalyst/metrics/_auc.py b/catalyst/metrics/_auc.py index e59e9fe956..f21eb54e5b 100644 --- a/catalyst/metrics/_auc.py +++ b/catalyst/metrics/_auc.py @@ -131,7 +131,7 @@ class AUCMetric(ICallbackLoaderMetric): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( diff --git a/catalyst/metrics/_classification.py b/catalyst/metrics/_classification.py index e97e2ca6f8..3d5fb90d96 100644 --- a/catalyst/metrics/_classification.py +++ b/catalyst/metrics/_classification.py @@ -85,7 +85,7 @@ class BinaryStatisticsMetric(ICallbackBatchMetric): ) .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ @@ -250,7 +250,7 @@ class MulticlassStatisticsMetric(ICallbackBatchMetric): ) .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ @@ -421,7 +421,7 @@ class MultilabelStatisticsMetric(ICallbackBatchMetric): ) .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ diff --git a/catalyst/metrics/_cmc_score.py b/catalyst/metrics/_cmc_score.py index 72e3bfbe44..6cd39a4f8c 100644 --- a/catalyst/metrics/_cmc_score.py +++ b/catalyst/metrics/_cmc_score.py @@ -165,7 +165,7 @@ def handle_batch(self, batch) -> None: .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( diff --git a/catalyst/metrics/_confusion_matrix.py b/catalyst/metrics/_confusion_matrix.py index 3ec1e34c09..24cedc9aa1 100644 --- a/catalyst/metrics/_confusion_matrix.py +++ b/catalyst/metrics/_confusion_matrix.py @@ -83,7 +83,7 @@ class ConfusionMatrixMetric(IMetric): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( diff --git a/catalyst/metrics/_hitrate.py b/catalyst/metrics/_hitrate.py index d183737b31..70ec31cf86 100644 --- a/catalyst/metrics/_hitrate.py +++ b/catalyst/metrics/_hitrate.py @@ -128,7 +128,7 @@ class HitrateMetric(TopKMetric): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( diff --git a/catalyst/metrics/_map.py b/catalyst/metrics/_map.py index b06a8cbef6..daf97cd17b 100644 --- a/catalyst/metrics/_map.py +++ b/catalyst/metrics/_map.py @@ -140,7 +140,7 @@ class MAPMetric(TopKMetric): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( diff --git a/catalyst/metrics/_mrr.py b/catalyst/metrics/_mrr.py index 1c2e079891..2f7ae17879 100644 --- a/catalyst/metrics/_mrr.py +++ b/catalyst/metrics/_mrr.py @@ -126,7 +126,7 @@ class MRRMetric(TopKMetric): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( diff --git a/catalyst/metrics/_ndcg.py b/catalyst/metrics/_ndcg.py index 630f1ef9d6..2bff873232 100644 --- a/catalyst/metrics/_ndcg.py +++ b/catalyst/metrics/_ndcg.py @@ -132,7 +132,7 @@ class NDCGMetric(TopKMetric): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( diff --git a/catalyst/metrics/_segmentation.py b/catalyst/metrics/_segmentation.py index 701496f245..2cc5077ac9 100644 --- a/catalyst/metrics/_segmentation.py +++ b/catalyst/metrics/_segmentation.py @@ -343,7 +343,7 @@ def handle_batch(self, batch): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( @@ -482,7 +482,7 @@ def handle_batch(self, batch): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( @@ -625,7 +625,7 @@ def handle_batch(self, batch): .. note:: Please follow the `minimal examples`_ sections for more use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( diff --git a/catalyst/runners/runner.py b/catalyst/runners/runner.py index 743f8cb7c2..2464a308a5 100644 --- a/catalyst/runners/runner.py +++ b/catalyst/runners/runner.py @@ -59,7 +59,7 @@ class Runner(IRunner): .. note:: Please follow the `minimal examples`_ sections for use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 Examples: @@ -70,21 +70,13 @@ class Runner(IRunner): from torch.nn import functional as F from torch.utils.data import DataLoader from catalyst import dl, metrics - from catalyst.data import ToTensor from catalyst.contrib.datasets import MNIST model = nn.Sequential(nn.Flatten(), nn.Linear(28 * 28, 10)) optimizer = optim.Adam(model.parameters(), lr=0.02) - loaders = { - "train": DataLoader( - MNIST(os.getcwd(), train=True, download=True, transform=ToTensor()), - batch_size=32 - ), - "valid": DataLoader( - MNIST(os.getcwd(), train=False), - batch_size=32 - ), + "train": DataLoader(MNIST(os.getcwd(), train=True), batch_size=32), + "valid": DataLoader(MNIST(os.getcwd(), train=False), batch_size=32), } class CustomRunner(dl.Runner): @@ -348,7 +340,7 @@ def train( .. note:: Please follow the `minimal examples`_ sections for use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ # experiment setup @@ -432,7 +424,7 @@ def predict_loader( .. note:: Please follow the `minimal examples`_ sections for use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ self.engine = engine or get_available_engine(cpu=cpu, fp16=fp16) diff --git a/catalyst/runners/supervised.py b/catalyst/runners/supervised.py index 8bbda0da3d..e02917fec6 100644 --- a/catalyst/runners/supervised.py +++ b/catalyst/runners/supervised.py @@ -33,8 +33,6 @@ class ISupervisedRunner(Runner): Abstraction, please check out implementations for more details: - :py:mod:`catalyst.runners.runner.SupervisedRunner` - - :py:mod:`catalyst.runners.config.SupervisedConfigRunner` - - :py:mod:`catalyst.runners.hydra.SupervisedHydraRunner` .. note:: ISupervisedRunner contains only the logic with batch handling. @@ -55,7 +53,7 @@ class ISupervisedRunner(Runner): .. note:: Please follow the `minimal examples`_ sections for use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ @@ -186,7 +184,7 @@ class SupervisedRunner(ISupervisedRunner, Runner): .. note:: Please follow the `minimal examples`_ sections for use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ def __init__( diff --git a/docs/api/core.rst b/docs/api/core.rst index 396d1a6af7..d8ffe9550b 100644 --- a/docs/api/core.rst +++ b/docs/api/core.rst @@ -15,12 +15,17 @@ Core Runner ---------------------- + +IRunner +~~~~~~~~~~~~~~~~~~~~~~ .. autoclass:: catalyst.core.runner.IRunner :members: seed, hparams, num_epochs, get_engine, get_loggers, get_loaders, get_model, get_criterion, get_optimizer, get_scheduler, get_callbacks, log_metrics, log_image, log_hparams, handle_batch, run :exclude-members: __init__, on_experiment_start, on_stage_start, on_epoch_start, on_loader_start, on_batch_start, on_batch_end, on_loader_end, on_epoch_end, on_stage_end, on_experiment_end :undoc-members: :show-inheritance: +IRunnerError +~~~~~~~~~~~~~~~~~~~~~~ .. autoclass:: catalyst.core.runner.IRunnerError :members: :undoc-members: @@ -68,7 +73,7 @@ CallbackWrapper :undoc-members: :show-inheritance: -Logger +ILogger ---------------------- .. autoclass:: catalyst.core.logger.ILogger :members: diff --git a/docs/api/engines.rst b/docs/api/engines.rst index 3284e90cc3..eb1a280662 100644 --- a/docs/api/engines.rst +++ b/docs/api/engines.rst @@ -11,8 +11,6 @@ You could check engines overview under `examples/engines`_ section. .. _`examples/engines`: https://github.com/catalyst-team/catalyst/tree/master/examples/engines -Torch ----------------------- CPUEngine ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/api/loggers.rst b/docs/api/loggers.rst index e3e8662cda..5ef3d67ce5 100644 --- a/docs/api/loggers.rst +++ b/docs/api/loggers.rst @@ -7,6 +7,7 @@ Loggers .. contents:: :local: + CometLogger -------------------------------- .. autoclass:: catalyst.loggers.comet.CometLogger diff --git a/docs/api/runners.rst b/docs/api/runners.rst index 16a8060fe1..1eed2245d0 100644 --- a/docs/api/runners.rst +++ b/docs/api/runners.rst @@ -8,9 +8,6 @@ Runners :local: -Runner Interfaces ----------------------- - ISupervisedRunner ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. autoclass:: catalyst.runners.supervised.ISupervisedRunner @@ -20,9 +17,6 @@ ISupervisedRunner :show-inheritance: -Python API ----------------------- - Runner ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. autoclass:: catalyst.runners.runner.Runner diff --git a/docs/api/utils.rst b/docs/api/utils.rst index a54a7d8eee..d1b0e2c85a 100644 --- a/docs/api/utils.rst +++ b/docs/api/utils.rst @@ -8,12 +8,6 @@ Utils :local: -Main ----------------------- -.. automodule:: catalyst.utils - :members: - :show-inheritance: - Config ~~~~~~~~~~~~~~~~~~~~~~ .. automodule:: catalyst.utils.config @@ -71,36 +65,29 @@ Tracing :show-inheritance: -Contrib ----------------------- -.. automodule:: catalyst.contrib.utils - :members: - :show-inheritance: - - -Image +Image (contrib) ~~~~~~~~~~~~~~~~~~~~~~ .. automodule:: catalyst.contrib.utils.image :members: :undoc-members: :show-inheritance: -Report +Report (contrib) ~~~~~~~~~~~~~~~~~~~~~~ .. automodule:: catalyst.contrib.utils.report :members: :undoc-members: :show-inheritance: -Thresholds +Thresholds (contrib) ~~~~~~~~~~~~~~~~~~~~~~ .. automodule:: catalyst.contrib.utils.thresholds :members: :undoc-members: :show-inheritance: -Visualization -~~~~~~~~~~~~~~~~~~~~~~ +Visualization (contrib) +~~~~~~~~~~~~~~~~~~~~~~~ .. automodule:: catalyst.contrib.utils.visualization :members: :undoc-members: diff --git a/docs/core/callback.rst b/docs/core/callback.rst index c589ab4e61..1b659a53af 100644 --- a/docs/core/callback.rst +++ b/docs/core/callback.rst @@ -12,7 +12,7 @@ For example, it's much more convenient to define the required metrics: The Callback API is very straightforward and repeats main for-loops in our train-loop abstraction: -.. image:: https://raw.githubusercontent.com/Scitator/catalyst21-post-pics/main/code_callback21.png +.. image:: https://raw.githubusercontent.com/Scitator/catalyst22-post-pics/main/callback.png :alt: Runner You could find a large variety of supported callbacks under the `Callback API section`_. diff --git a/docs/core/engine.rst b/docs/core/engine.rst index 59f39d8ff9..c7dba42184 100644 --- a/docs/core/engine.rst +++ b/docs/core/engine.rst @@ -5,7 +5,7 @@ Engine It defines the logic of hardware communication and different deep learning techniques usage like distributed or half-precision training: -.. image:: https://raw.githubusercontent.com/Scitator/catalyst21-post-pics/main/code_engine21.png +.. image:: https://raw.githubusercontent.com/Scitator/catalyst22-post-pics/main/engine.png :alt: Engine @@ -13,18 +13,15 @@ Thanks to the ``Engine`` design, it’s straightforward to adapt your pipeline for different hardware accelerators. For example, you could easily support: -- `PyTorch distribute setup`_. -- `Nvidia-Apex setup`_. +- `PyTorch distributed setup`_. - `AMP distributed setup`_. - -Moreover, we are working on other hardware accelerators support like DeepSpeed, Horovod, or TPU. -You could watch the progress of engine development under the `Engine API section`_. - +- `DeepSpeed distributed setup`_. +- `TPU distributed setup`_. If you haven't found the answer for your question, feel free to `join our slack`_ for the discussion. -.. _`PyTorch distribute setup`: https://catalyst-team.github.io/catalyst/api/engines.html#distributeddataparallelampengine -.. _`Nvidia-Apex setup`: https://catalyst-team.github.io/catalyst/api/engines.html#distributeddataparallelapexengine -.. _`AMP distributed setup`: https://catalyst-team.github.io/catalyst/api/engines.html#distributeddataparallelampengine -.. _`Engine API section`: https://catalyst-team.github.io/catalyst/api/engines.html +.. _`PyTorch distributed setup`: https://catalyst-team.github.io/catalyst/api/engines.html +.. _`AMP distributed setup`: https://catalyst-team.github.io/catalyst/api/engines.html +.. _`DeepSpeed distributed setup`: https://catalyst-team.github.io/catalyst/api/engines.html +.. _`TPU distributed setup`: https://catalyst-team.github.io/catalyst/api/engines.html .. _`join our slack`: https://join.slack.com/t/catalyst-team-core/shared_invite/zt-d9miirnn-z86oKDzFMKlMG4fgFdZafw diff --git a/docs/core/logger.rst b/docs/core/logger.rst index e09dd6e96d..cd798f2efc 100644 --- a/docs/core/logger.rst +++ b/docs/core/logger.rst @@ -3,14 +3,12 @@ Logger Speaking about the logging, Catalyst united the monitoring system API support into one abstraction: -.. image:: https://raw.githubusercontent.com/Scitator/catalyst21-post-pics/main/code_logger21.png +.. image:: https://raw.githubusercontent.com/Scitator/catalyst22-post-pics/main/logger.png :alt: Runner With such a simple API, -we already provide integrations for `Tensorboard`_ and `MLFlow`_ monitoring systems. -More advanced loggers for Neptune and Wandb with artifacts and hyperparameters storing -are in development thanks to joint collaborations between our teams! +we already provide integrations for `Tensorboard`_, `MLFlow`_, Comet, Neptune and Wandb monitoring systems. All currently supported loggers you could find under the `Logger API section`_. diff --git a/docs/core/metric.rst b/docs/core/metric.rst index 246787ac0b..a794ca2ab5 100644 --- a/docs/core/metric.rst +++ b/docs/core/metric.rst @@ -4,7 +4,7 @@ Metric Catalyst API also involves ``Metric`` abstraction for convenient metric computation during an experiment run. Its API is quite simple: -.. image:: https://raw.githubusercontent.com/Scitator/catalyst21-post-pics/main/code_metric21.png +.. image:: https://raw.githubusercontent.com/Scitator/catalyst22-post-pics/main/metric.png :alt: Runner diff --git a/docs/core/runner.rst b/docs/core/runner.rst index d69c24cfda..86dc211503 100644 --- a/docs/core/runner.rst +++ b/docs/core/runner.rst @@ -5,7 +5,7 @@ Runner the data you are using, the model you are training, the batch handling logic, and everything about the selected metrics and monitoring systems: -.. image:: https://raw.githubusercontent.com/Scitator/catalyst21-post-pics/main/code_runner21.png +.. image:: https://raw.githubusercontent.com/Scitator/catalyst22-post-pics/main/runner.png :alt: Runner @@ -22,6 +22,8 @@ For example, you could: - Mix these approaches: `CV — MNIST GAN`_, `CV — MNIST VAE`_ examples. Finally, the ``Runner`` architecture does not depend on PyTorch in any case, providing directions for adoption for Tensorflow2 or JAX support.  +If you are interested in this, please check out the `Animus`_ project. + Supported Runners are listed under the `Runner API section`_. @@ -32,4 +34,5 @@ If you haven't found the answer for your question, feel free to `join our slack` .. _`CV — MNIST GAN`: https://github.com/catalyst-team/catalyst#minimal-examples .. _`CV — MNIST VAE`: https://github.com/catalyst-team/catalyst#minimal-examples .. _`Runner API section`: https://catalyst-team.github.io/catalyst/api/runners.html +.. _`Animus`: https://github.com/Scitator/animus .. _`join our slack`: https://join.slack.com/t/catalyst-team-core/shared_invite/zt-d9miirnn-z86oKDzFMKlMG4fgFdZafw diff --git a/docs/getting_started/quickstart.rst b/docs/getting_started/quickstart.rst index 2072e0343d..8341060e3b 100644 --- a/docs/getting_started/quickstart.rst +++ b/docs/getting_started/quickstart.rst @@ -1,6 +1,6 @@ Quickstart 101 ============================================================================== -**In this quickstart, we’ll show you how to organize your PyTorch code with Catalyst.** +**In this quickstart, we'll show you how to organize your PyTorch code with Catalyst.** Catalyst goals ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -56,7 +56,7 @@ Let's define **how** we would like to handle the data (in pure PyTorch): def predict_batch(self, batch): # model inference step - return self.model(batch[0].to(self.device)) + return self.model(batch[0].to(self.engine.device)) def handle_batch(self, batch): # model train/valid step @@ -73,6 +73,7 @@ Let's **train** and **evaluate** your model (`supported metrics`_) with a few li .. code-block:: python runner = CustomRunner() + # model training runner.train( model=model, @@ -82,13 +83,13 @@ Let's **train** and **evaluate** your model (`supported metrics`_) with a few li logdir="./logs", num_epochs=5, verbose=True, - load_best_on_end=True, callbacks=[ - dl.AccuracyCallback(input_key="logits", target_key="targets", topk_args=(1, 3)), + dl.AccuracyCallback(input_key="logits", target_key="targets", topk=(1, 3)), dl.PrecisionRecallF1SupportCallback( input_key="logits", target_key="targets", num_classes=10 ), dl.CriterionCallback(input_key="logits", target_key="targets", metric_key="loss"), + dl.BackwardCallback(metric_key="loss"), dl.OptimizerCallback(metric_key="loss"), dl.CheckpointCallback( "./logs", loader_key="valid", metric_key="loss", minimize=True, topk=3 @@ -96,9 +97,16 @@ Let's **train** and **evaluate** your model (`supported metrics`_) with a few li ] ) + # model evaluation + metrics = runner.evaluate_loader( + loader=loaders["valid"], + callbacks=[dl.AccuracyCallback(input_key="logits", target_key="targets", topk=(1, 3, 5))], + ) + Step 6 - Make predictions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -You could easily use your custom logic for model inference on batch or loader thanks to ``runner.predict_batch`` method. +You could easily use your custom logic for model inference on batch +or loader thanks to ``runner.predict_batch`` and ``runner.predict_loader`` methods. .. code-block:: python @@ -115,16 +123,13 @@ Finally, you could use a large number of model post-processing utils for product .. code-block:: python - features_batch = next(iter(loaders["valid"]))[0] - # model stochastic weight averaging - model.load_state_dict(utils.get_averaged_weights_by_path_mask(path_mask="./logs/*.pth")) + model = runner.model.cpu() + batch = next(iter(loaders["valid"]))[0] # model tracing - utils.trace_model(model=runner.model.cpu(), batch=features_batch) + utils.trace_model(model=model, batch=batch) # model quantization - utils.quantize_model(model=runner.model) + utils.quantize_model(model=model) # model pruning - utils.prune_model(model=runner.model, pruning_fn="l1_unstructured", amount=0.8) + utils.prune_model(model=model, pruning_fn="l1_unstructured", amount=0.8) # onnx export - utils.onnx_export( - model=runner.model.cpu(), batch=features_batch, file="./logs/mnist.onnx", verbose=True - ) + utils.onnx_export(model=model, batch=batch, file="./logs/mnist.onnx", verbose=True) diff --git a/docs/index.rst b/docs/index.rst index 670c6b0ef3..47f3199226 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -39,12 +39,9 @@ Getting started model = nn.Sequential(nn.Flatten(), nn.Linear(28 * 28, 10)) criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.02) - - train_data = MNIST(os.getcwd(), train=True) - valid_data = MNIST(os.getcwd(), train=False) loaders = { - "train": DataLoader(train_data, batch_size=32), - "valid": DataLoader(valid_data, batch_size=32), + "train": DataLoader(MNIST(os.getcwd(), train=True), batch_size=32), + "valid": DataLoader(MNIST(os.getcwd(), train=False), batch_size=32), } runner = dl.SupervisedRunner( @@ -74,21 +71,18 @@ Getting started loader=loaders["valid"], callbacks=[dl.AccuracyCallback(input_key="logits", target_key="targets", topk=(1, 3, 5))], ) - assert "accuracy01" in metrics.keys() # model inference for prediction in runner.predict_loader(loader=loaders["valid"]): assert prediction["logits"].detach().cpu().numpy().shape[-1] == 10 - features_batch = next(iter(loaders["valid"]))[0] - # model tracing - utils.trace_model(model=runner.model.cpu(), batch=features_batch) - # model quantization - utils.quantize_model(model=runner.model) - # model pruning - utils.prune_model(model=runner.model, pruning_fn="l1_unstructured", amount=0.8) - # onnx export - utils.onnx_export(model=runner.model.cpu(), batch=features_batch, file="./logs/mnist.onnx", verbose=True) + # model post-processing + model = runner.model.cpu() + batch = next(iter(loaders["valid"]))[0] + utils.trace_model(model=model, batch=batch) + utils.quantize_model(model=model) + utils.prune_model(model=model, pruning_fn="l1_unstructured", amount=0.8) + utils.onnx_export(model=model, batch=batch, file="./logs/mnist.onnx", verbose=True) Step by step guide diff --git a/docs/tutorials/ddp.rst b/docs/tutorials/ddp.rst index 7b98bba5f4..f8d91a4040 100644 --- a/docs/tutorials/ddp.rst +++ b/docs/tutorials/ddp.rst @@ -435,10 +435,11 @@ As an extra point, you could also specify the whole experiment within ``Runner`` "criterion": dl.CriterionCallback( metric_key="loss", input_key="logits", target_key="targets" ), + "backward": dl.BackwardCallback(metric_key="loss"), "optimizer": dl.OptimizerCallback(metric_key="loss"), "scheduler": dl.SchedulerCallback(loader_key="valid", metric_key="loss"), "accuracy": dl.AccuracyCallback( - input_key="logits", target_key="targets", topk_args=(1, 3, 5) + input_key="logits", target_key="targets", topk=(1, 3, 5) ), "checkpoint": dl.CheckpointCallback( self._logdir, diff --git a/examples/README.md b/examples/README.md index 66e0c8f5a5..ec26e8ea38 100644 --- a/examples/README.md +++ b/examples/README.md @@ -1,39 +1,9 @@ # Catalyst examples -## Python API - -Catalyst Python API examples can be found in the -[minimal examples](https://github.com/catalyst-team/catalyst#minimal-examples) -and [notebook section](https://github.com/catalyst-team/catalyst#notebooks). - ### Notebooks - Introduction tutorial "[Customizing what happens in `train`](./notebooks/customizing_what_happens_in_train.ipynb)" [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/catalyst-team/catalyst/blob/master/examples/notebooks/customizing_what_happens_in_train.ipynb) - Demo with [customization examples](./notebooks/customization_tutorial.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/catalyst-team/catalyst/blob/master/examples/notebooks/customization_tutorial.ipynb) - [Reinforcement Learning examples with Catalyst](./notebooks/reinforcement_learning.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/catalyst-team/catalyst/blob/master/examples/notebooks/reinforcement_learning.ipynb) -### Scripts - -- [Reinforcement Learning with Catalyst](./reinforcement_learning) - ----- - -## Config API - -Full description of configs with comments: -- [Eng](configs/config-description-eng.yml) -- [Rus](configs/config-description-rus.yml) - -1. [MNIST with stage](mnist_stages) - - Config API run example - - Hydra API run example - - AutoML Tune example -1. [classification pipeline](https://github.com/catalyst-team/classification) - - classification model training and inference - - different augmentations and stages usage - - metrics visualization with tensorboard -1. [segmentation pipeline](https://github.com/catalyst-team/segmentation) - - binary and semantic segmentation with U-Net - - model training and inference - - different augmentations and stages usage - - metrics visualization with tensorboard \ No newline at end of file +Please follow the subfolders for more examples. diff --git a/examples/catalyst_rl/README.md b/examples/catalyst_rl/README.md index 13ecf9a39a..4b8d832480 100644 --- a/examples/catalyst_rl/README.md +++ b/examples/catalyst_rl/README.md @@ -3,7 +3,7 @@ ## Requirements ```bash sudo apt install redis-server -pip install catalyst==22.02rc0 gym==0.18.0 redis==3.5.3 +pip install catalyst==22.02 gym==0.18.0 redis==3.5.3 ``` ## Run diff --git a/examples/engines/README.md b/examples/engines/README.md index c6536da0eb..b30172dcd8 100644 --- a/examples/engines/README.md +++ b/examples/engines/README.md @@ -6,8 +6,6 @@ PS. multi-node included as well! > Note: for the Albert training please install requirements with ``pip install datasets transformers``. -## Core - ### PyTorch ```bash pip install catalyst @@ -110,11 +108,11 @@ CUDA_VISIBLE_DEVICES="0,1" python train_albert.py --engine=ddp-amp \

- \ No newline at end of file + \ No newline at end of file diff --git a/examples/engines/run.sh b/examples/engines/run.sh deleted file mode 100644 index 5f06b3f738..0000000000 --- a/examples/engines/run.sh +++ /dev/null @@ -1,24 +0,0 @@ -# Torch -# CUDA_VISIBLE_DEVICES="0" python train.py --engine=de -# CUDA_VISIBLE_DEVICES="0,1" python train.py --engine=dp -# CUDA_VISIBLE_DEVICES="0,1" python train.py --engine=ddp -# CUDA_VISIBLE_DEVICES="0,1" python train.py --engine=ddp --sync-bn - -# AMP -# CUDA_VISIBLE_DEVICES="0,1" python train.py --engine=amp-dp -# CUDA_VISIBLE_DEVICES="0,1" python train.py --engine=amp-ddp -# CUDA_VISIBLE_DEVICES="0,1" python train.py --engine=amp-ddp --sync-bn - -# APEX -# CUDA_VISIBLE_DEVICES="0,1" python train.py --engine=apex-dp -# CUDA_VISIBLE_DEVICES="0,1" python train.py --engine=apex-ddp -CUDA_VISIBLE_DEVICES="0,1" python train.py --engine=apex-ddp --sync-bn - -# FairScale -# CUDA_VISIBLE_DEVICES="0,1" python train.py --engine=fs-pp -# CUDA_VISIBLE_DEVICES="0,1" python train.py --engine=fs-ddp -# CUDA_VISIBLE_DEVICES="0,1" python train.py --engine=fs-ddp --sync-bn -# CUDA_VISIBLE_DEVICES="0,1" python train.py --engine=fs-ddp-amp -CUDA_VISIBLE_DEVICES="0,1" python train.py --engine=fs-ddp-amp --sync-bn -# CUDA_VISIBLE_DEVICES="0,1" python train.py --engine=fs-fddp -# CUDA_VISIBLE_DEVICES="0,1" python train.py --engine=fs-fddp --sync-bn diff --git a/examples/reinforcement_learning/README.md b/examples/reinforcement_learning/README.md index 63d577cf13..8dfd0536fd 100644 --- a/examples/reinforcement_learning/README.md +++ b/examples/reinforcement_learning/README.md @@ -1,6 +1,6 @@ # Requirements ```bash -pip install catalyst==22.02rc0 gym==0.18.0 +pip install catalyst==22.02 gym==0.18.0 ``` # Run diff --git a/examples/self_supervised/Dockerfile b/examples/self_supervised/Dockerfile index ebb98a2bd7..1671b9408d 100644 --- a/examples/self_supervised/Dockerfile +++ b/examples/self_supervised/Dockerfile @@ -1,6 +1,6 @@ FROM python:3.8 -RUN pip install catalyst[cv]==22.02rc0 -RUN pip install catalyst[ml]==22.02rc0 +RUN pip install catalyst[cv]==22.02 +RUN pip install catalyst[ml]==22.02 COPY . . \ No newline at end of file diff --git a/examples/self_supervised/README.md b/examples/self_supervised/README.md index f994754421..e2d0b5c11f 100644 --- a/examples/self_supervised/README.md +++ b/examples/self_supervised/README.md @@ -1,10 +1,10 @@ # Self-Supervised Learning Examples ## Requriments -To run examples you need catalyst[cv]==22.02rc0 and catalyst[ml]==22.02rc0 +To run examples you need catalyst[cv]==22.02 and catalyst[ml]==22.02 ``` -pip install catalyst[cv]==22.02rc0 -pip install catalyst[ml]==22.02rc0 +pip install catalyst[cv]==22.02 +pip install catalyst[ml]==22.02 ``` ## Description diff --git a/examples/self_supervised/run.sh b/examples/self_supervised/run.sh index 4a02a2e6f7..24fd64ec32 100644 --- a/examples/self_supervised/run.sh +++ b/examples/self_supervised/run.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash -# pip install catalyst[cv]==21.11 -# pip install catalyst[ml]==21.11 +# pip install catalyst[cv]==22.02 +# pip install catalyst[ml]==22.02 export NUM_EPOCHS=20 export BATCH_SIZE=256 diff --git a/examples/self_supervised/src/runner.py b/examples/self_supervised/src/runner.py index 93a70ea446..92674de08f 100644 --- a/examples/self_supervised/src/runner.py +++ b/examples/self_supervised/src/runner.py @@ -144,7 +144,7 @@ def forward(self, x): .. note:: Please follow the `minimal examples`_ sections for use cases. - .. _`minimal examples`: http://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 + .. _`minimal examples`: https://github.com/catalyst-team/catalyst#minimal-examples # noqa: E501, W505 """ diff --git a/pyproject.toml b/pyproject.toml index ae475f51e1..323e982625 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,4 +2,4 @@ style = "https://raw.githubusercontent.com/catalyst-team/codestyle/v21.09.2/styles/nitpick-style-catalyst.toml" [tool.black] -line-length = 99 +line-length = 89 diff --git a/tests/catalyst/callbacks/test_profiler.py b/tests/catalyst/callbacks/test_profiler.py index 1f61b2d0d6..05e73b0368 100644 --- a/tests/catalyst/callbacks/test_profiler.py +++ b/tests/catalyst/callbacks/test_profiler.py @@ -84,6 +84,7 @@ def get_callbacks(self): "criterion": dl.CriterionCallback( metric_key="loss", input_key="logits", target_key="targets" ), + "backward": dl.BackwardCallback(metric_key="loss"), "optimizer": dl.OptimizerCallback(metric_key="loss"), "profiler": ProfilerCallback( loader_key="train",