Skip to content

Commit

Permalink
Make tqdm progress bar configurable through TQDM_REFRESH_RATE env…
Browse files Browse the repository at this point in the history
… variable (#650)
  • Loading branch information
nkaenzig authored Sep 30, 2024
1 parent ba045bd commit c66d8eb
Show file tree
Hide file tree
Showing 24 changed files with 83 additions and 5 deletions.
3 changes: 3 additions & 0 deletions configs/vision/pathology/offline/classification/bach.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ trainer:
max_steps: &MAX_STEPS ${oc.env:MAX_STEPS, 12500}
callbacks:
- class_path: eva.callbacks.ConfigurationLogger
- class_path: lightning.pytorch.callbacks.TQDMProgressBar
init_args:
refresh_rate: ${oc.env:TQDM_REFRESH_RATE, 1}
- class_path: lightning.pytorch.callbacks.LearningRateMonitor
init_args:
logging_interval: epoch
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ trainer:
default_root_dir: &OUTPUT_ROOT ${oc.env:OUTPUT_ROOT, logs/${oc.env:MODEL_NAME, dino_vits16}/offline/camelyon16}
max_epochs: &MAX_EPOCHS ${oc.env:MAX_EPOCHS, 100}
callbacks:
- class_path: eva.callbacks.ConfigurationLogger
- class_path: lightning.pytorch.callbacks.TQDMProgressBar
init_args:
refresh_rate: ${oc.env:TQDM_REFRESH_RATE, 1}
- class_path: lightning.pytorch.callbacks.LearningRateMonitor
init_args:
logging_interval: epoch
Expand Down
3 changes: 3 additions & 0 deletions configs/vision/pathology/offline/classification/crc.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ trainer:
max_steps: &MAX_STEPS ${oc.env:MAX_STEPS, 12500}
callbacks:
- class_path: eva.callbacks.ConfigurationLogger
- class_path: lightning.pytorch.callbacks.TQDMProgressBar
init_args:
refresh_rate: ${oc.env:TQDM_REFRESH_RATE, 1}
- class_path: lightning.pytorch.callbacks.LearningRateMonitor
init_args:
logging_interval: epoch
Expand Down
3 changes: 3 additions & 0 deletions configs/vision/pathology/offline/classification/mhist.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ trainer:
max_steps: &MAX_STEPS ${oc.env:MAX_STEPS, 12500}
callbacks:
- class_path: eva.callbacks.ConfigurationLogger
- class_path: lightning.pytorch.callbacks.TQDMProgressBar
init_args:
refresh_rate: ${oc.env:TQDM_REFRESH_RATE, 1}
- class_path: lightning.pytorch.callbacks.LearningRateMonitor
init_args:
logging_interval: epoch
Expand Down
4 changes: 4 additions & 0 deletions configs/vision/pathology/offline/classification/panda.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ trainer:
default_root_dir: &OUTPUT_ROOT ${oc.env:OUTPUT_ROOT, logs/${oc.env:MODEL_NAME, dino_vits16}/offline/panda}
max_epochs: &MAX_EPOCHS ${oc.env:MAX_EPOCHS, 49}
callbacks:
- class_path: eva.callbacks.ConfigurationLogger
- class_path: lightning.pytorch.callbacks.TQDMProgressBar
init_args:
refresh_rate: ${oc.env:TQDM_REFRESH_RATE, 1}
- class_path: lightning.pytorch.callbacks.LearningRateMonitor
init_args:
logging_interval: epoch
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ trainer:
max_steps: &MAX_STEPS ${oc.env:MAX_STEPS, 12500}
callbacks:
- class_path: eva.callbacks.ConfigurationLogger
- class_path: lightning.pytorch.callbacks.TQDMProgressBar
init_args:
refresh_rate: ${oc.env:TQDM_REFRESH_RATE, 1}
- class_path: lightning.pytorch.callbacks.LearningRateMonitor
init_args:
logging_interval: epoch
Expand Down
3 changes: 3 additions & 0 deletions configs/vision/pathology/offline/segmentation/bcss.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ trainer:
log_every_n_steps: 6
callbacks:
- class_path: eva.callbacks.ConfigurationLogger
- class_path: lightning.pytorch.callbacks.TQDMProgressBar
init_args:
refresh_rate: ${oc.env:TQDM_REFRESH_RATE, 1}
- class_path: eva.vision.callbacks.SemanticSegmentationLogger
init_args:
log_every_n_epochs: 1
Expand Down
3 changes: 3 additions & 0 deletions configs/vision/pathology/offline/segmentation/consep.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ trainer:
log_every_n_steps: 6
callbacks:
- class_path: eva.callbacks.ConfigurationLogger
- class_path: lightning.pytorch.callbacks.TQDMProgressBar
init_args:
refresh_rate: ${oc.env:TQDM_REFRESH_RATE, 1}
- class_path: eva.vision.callbacks.SemanticSegmentationLogger
init_args:
log_every_n_epochs: 1
Expand Down
3 changes: 3 additions & 0 deletions configs/vision/pathology/offline/segmentation/monusac.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ trainer:
log_every_n_steps: 6
callbacks:
- class_path: eva.callbacks.ConfigurationLogger
- class_path: lightning.pytorch.callbacks.TQDMProgressBar
init_args:
refresh_rate: ${oc.env:TQDM_REFRESH_RATE, 1}
- class_path: lightning.pytorch.callbacks.LearningRateMonitor
init_args:
logging_interval: epoch
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ trainer:
max_steps: &MAX_STEPS ${oc.env:MAX_STEPS, 20000}
callbacks:
- class_path: eva.callbacks.ConfigurationLogger
- class_path: lightning.pytorch.callbacks.TQDMProgressBar
init_args:
refresh_rate: ${oc.env:TQDM_REFRESH_RATE, 1}
- class_path: eva.vision.callbacks.SemanticSegmentationLogger
init_args:
log_every_n_epochs: 1
Expand Down
3 changes: 3 additions & 0 deletions configs/vision/pathology/online/classification/bach.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ trainer:
max_steps: &MAX_STEPS ${oc.env:MAX_STEPS, 12500}
callbacks:
- class_path: eva.callbacks.ConfigurationLogger
- class_path: lightning.pytorch.callbacks.TQDMProgressBar
init_args:
refresh_rate: ${oc.env:TQDM_REFRESH_RATE, 1}
- class_path: lightning.pytorch.callbacks.LearningRateMonitor
init_args:
logging_interval: epoch
Expand Down
3 changes: 3 additions & 0 deletions configs/vision/pathology/online/classification/crc.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ trainer:
max_steps: &MAX_STEPS ${oc.env:MAX_STEPS, 12500}
callbacks:
- class_path: eva.callbacks.ConfigurationLogger
- class_path: lightning.pytorch.callbacks.TQDMProgressBar
init_args:
refresh_rate: ${oc.env:TQDM_REFRESH_RATE, 1}
- class_path: lightning.pytorch.callbacks.LearningRateMonitor
init_args:
logging_interval: epoch
Expand Down
3 changes: 3 additions & 0 deletions configs/vision/pathology/online/classification/mhist.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ trainer:
max_steps: &MAX_STEPS ${oc.env:MAX_STEPS, 12500}
callbacks:
- class_path: eva.callbacks.ConfigurationLogger
- class_path: lightning.pytorch.callbacks.TQDMProgressBar
init_args:
refresh_rate: ${oc.env:TQDM_REFRESH_RATE, 1}
- class_path: lightning.pytorch.callbacks.LearningRateMonitor
init_args:
logging_interval: epoch
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ trainer:
max_steps: &MAX_STEPS ${oc.env:MAX_STEPS, 12500}
callbacks:
- class_path: eva.callbacks.ConfigurationLogger
- class_path: lightning.pytorch.callbacks.TQDMProgressBar
init_args:
refresh_rate: ${oc.env:TQDM_REFRESH_RATE, 1}
- class_path: lightning.pytorch.callbacks.LearningRateMonitor
init_args:
logging_interval: epoch
Expand Down
3 changes: 3 additions & 0 deletions configs/vision/pathology/online/segmentation/bcss.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ trainer:
log_every_n_steps: 6
callbacks:
- class_path: eva.callbacks.ConfigurationLogger
- class_path: lightning.pytorch.callbacks.TQDMProgressBar
init_args:
refresh_rate: ${oc.env:TQDM_REFRESH_RATE, 1}
- class_path: eva.vision.callbacks.SemanticSegmentationLogger
init_args:
log_every_n_epochs: 1
Expand Down
3 changes: 3 additions & 0 deletions configs/vision/pathology/online/segmentation/consep.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ trainer:
log_every_n_steps: 6
callbacks:
- class_path: eva.callbacks.ConfigurationLogger
- class_path: lightning.pytorch.callbacks.TQDMProgressBar
init_args:
refresh_rate: ${oc.env:TQDM_REFRESH_RATE, 1}
- class_path: eva.vision.callbacks.SemanticSegmentationLogger
init_args:
log_every_n_epochs: 1
Expand Down
3 changes: 3 additions & 0 deletions configs/vision/pathology/online/segmentation/monusac.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ trainer:
log_every_n_steps: 4
callbacks:
- class_path: eva.callbacks.ConfigurationLogger
- class_path: lightning.pytorch.callbacks.TQDMProgressBar
init_args:
refresh_rate: ${oc.env:TQDM_REFRESH_RATE, 1}
- class_path: eva.vision.callbacks.SemanticSegmentationLogger
init_args:
log_every_n_epochs: 1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ trainer:
max_steps: &MAX_STEPS ${oc.env:MAX_STEPS, 20000}
callbacks:
- class_path: eva.callbacks.ConfigurationLogger
- class_path: lightning.pytorch.callbacks.TQDMProgressBar
init_args:
refresh_rate: ${oc.env:TQDM_REFRESH_RATE, 1}
- class_path: eva.vision.callbacks.SemanticSegmentationLogger
init_args:
log_every_n_epochs: 1
Expand Down
3 changes: 3 additions & 0 deletions configs/vision/radiology/offline/segmentation/lits.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ trainer:
max_steps: &MAX_STEPS ${oc.env:MAX_STEPS, 500000}
callbacks:
- class_path: eva.callbacks.ConfigurationLogger
- class_path: lightning.pytorch.callbacks.TQDMProgressBar
init_args:
refresh_rate: ${oc.env:TQDM_REFRESH_RATE, 1}
- class_path: eva.vision.callbacks.SemanticSegmentationLogger
init_args:
log_every_n_steps: 1000
Expand Down
3 changes: 3 additions & 0 deletions configs/vision/radiology/online/segmentation/lits.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ trainer:
log_every_n_steps: 6
callbacks:
- class_path: eva.callbacks.ConfigurationLogger
- class_path: lightning.pytorch.callbacks.TQDMProgressBar
init_args:
refresh_rate: ${oc.env:TQDM_REFRESH_RATE, 1}
- class_path: eva.vision.callbacks.SemanticSegmentationLogger
init_args:
log_every_n_epochs: 1
Expand Down
3 changes: 2 additions & 1 deletion docs/user-guide/getting-started/how_to_use.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,5 @@ To customize runs, without the need of creating custom config-files, you can ove
| `LR_VALUE` | `float` | Learning rate for training the decoder |
| `MONITOR_METRIC` | `str` | The metric to monitor for early stopping and final model checkpoint loading |
| `MONITOR_METRIC_MODE` | `str` | "min" or "max", depending on the `MONITOR_METRIC` used |
| `REPO_OR_DIR` | `str` | GitHub repo with format containing model implementation, e.g. "facebookresearch/dino:main" |
| `REPO_OR_DIR` | `str` | GitHub repo with format containing model implementation, e.g. "facebookresearch/dino:main" |
| `TQDM_REFRESH_RATE` | `str` | Determines at which rate (in number of batches) the progress bars get updated. Set it to 0 to disable the progress bar. |
15 changes: 15 additions & 0 deletions src/eva/core/utils/progress_bar.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
"""Progress bar utility functions."""

import os

from tqdm import tqdm as _tqdm


def tqdm(*args, **kwargs) -> _tqdm:
"""Wrapper function for `tqdm.tqdm`."""
refresh_rate = os.environ.get("TQDM_REFRESH_RATE")
refresh_rate = int(refresh_rate) if refresh_rate is not None else None
disable = bool(int(os.environ.get("TQDM_DISABLE", 0))) or (refresh_rate == 0)
kwargs.setdefault("disable", disable)
kwargs.setdefault("miniters", refresh_rate)
return _tqdm(*args, **kwargs)
4 changes: 2 additions & 2 deletions src/eva/vision/data/datasets/segmentation/monusac.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@
import numpy as np
import numpy.typing as npt
import torch
import tqdm
from skimage import draw
from torchvision import tv_tensors
from torchvision.datasets import utils
from typing_extensions import override

from eva.core.utils.progress_bar import tqdm
from eva.vision.data.datasets import _validators, structs
from eva.vision.data.datasets.segmentation import base
from eva.vision.utils import io
Expand Down Expand Up @@ -161,7 +161,7 @@ def _export_semantic_label_masks(self) -> None:
for index, filename in enumerate(self._image_files)
]
to_export = filter(lambda x: not os.path.isfile(x[1]), mask_files)
for sample_index, filename in tqdm.tqdm(
for sample_index, filename in tqdm(
list(to_export),
desc=">> Exporting semantic masks",
leave=False,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@
import numpy as np
import numpy.typing as npt
import torch
import tqdm
from torchvision import tv_tensors
from torchvision.datasets import utils
from typing_extensions import override

from eva.core.utils.progress_bar import tqdm
from eva.vision.data.datasets import _validators, structs
from eva.vision.data.datasets.segmentation import base
from eva.vision.utils import io
Expand Down Expand Up @@ -224,7 +224,7 @@ def _export_semantic_label_masks(self) -> None:
]
to_export = filter(lambda x: not os.path.isfile(x[1]), semantic_labels)

for sample_index, filename in tqdm.tqdm(
for sample_index, filename in tqdm(
list(to_export),
desc=">> Exporting optimized semantic masks",
leave=False,
Expand Down

0 comments on commit c66d8eb

Please sign in to comment.