def on_epoch_start(self, runner: "IRunner") -> None:
        """
        Set loaders for current epoch.
        If validation is not required then the first loader
        from loaders used in current epoch will be used
        as validation loader.
        Metrics from the latest epoch with true
        validation loader will be used
        in the epochs where this loader is missing.

        Args:
            runner: current runner

        Raises:
            ValueError: if there are no loaders in epoch
        """
        epoch_step = runner.epoch_step
        # loaders to use in current epoch
        epoch_loaders = OrderedDict()
        for name, loader in self.loaders.items():
            period = self.loader_periods.get(name, 1)
            # ignore loaders where period - 0
            if period > 0 and epoch_step % period == 0:
                epoch_loaders[name] = loader
        if len(epoch_loaders) == 0:
            raise ValueError(f"There is no loaders in epoch {epoch_step}!")
        # first_loader = next(iter(epoch_loaders.keys()))
        # runner.valid_loader = (
        #     self.valid_loader if self.valid_loader in epoch_loaders else first_loader
        # )
        runner.loaders = epoch_loaders

        Set loaders for current epoch.
        If validation is not required then the first loader
        from loaders used in current epoch will be used
        as validation loader.
        Metrics from the latest epoch with true
        validation loader will be used
        in the epochs where this loader is missing.

        Args:
            runner: current runner

        Raises:
            ValueError: if there are no loaders in epoch
        
catalyst/callbacks/periodic_loader.py