Source code for lightning.pytorch.callbacks.device_stats_monitor
# Copyright The Lightning AI team.## Licensed under the Apache License, Version 2.0 (the "License");# you may not use this file except in compliance with the License.# You may obtain a copy of the License at## http://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing, software# distributed under the License is distributed on an "AS IS" BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions and# limitations under the License."""Device Stats Monitor====================Monitors and logs device stats during training."""fromtypingimportAny,Dict,Optionalfromtyping_extensionsimportoverrideimportlightning.pytorchasplfromlightning.pytorch.accelerators.cpuimport_PSUTIL_AVAILABLEfromlightning.pytorch.callbacks.callbackimportCallbackfromlightning.pytorch.utilities.exceptionsimportMisconfigurationExceptionfromlightning.pytorch.utilities.typesimportSTEP_OUTPUT
[docs]classDeviceStatsMonitor(Callback):r"""Automatically monitors and logs device stats during training, validation and testing stage. ``DeviceStatsMonitor`` is a special callback as it requires a ``logger`` to passed as argument to the ``Trainer``. Args: cpu_stats: if ``None``, it will log CPU stats only if the accelerator is CPU. If ``True``, it will log CPU stats regardless of the accelerator. If ``False``, it will not log CPU stats regardless of the accelerator. Raises: MisconfigurationException: If ``Trainer`` has no logger. ModuleNotFoundError: If ``psutil`` is not installed and CPU stats are monitored. Example:: from lightning import Trainer from lightning.pytorch.callbacks import DeviceStatsMonitor device_stats = DeviceStatsMonitor() trainer = Trainer(callbacks=[device_stats]) """def__init__(self,cpu_stats:Optional[bool]=None)->None:self._cpu_stats=cpu_stats
[docs]@overridedefsetup(self,trainer:"pl.Trainer",pl_module:"pl.LightningModule",stage:str,)->None:ifstage!="fit":returnifnottrainer.loggers:raiseMisconfigurationException("Cannot use `DeviceStatsMonitor` callback with `Trainer(logger=False)`.")# warn in setup to warn oncedevice=trainer.strategy.root_deviceifself._cpu_statsisNoneanddevice.type=="cpu"andnot_PSUTIL_AVAILABLE:raiseModuleNotFoundError(f"`DeviceStatsMonitor` cannot log CPU stats as `psutil` is not installed. {str(_PSUTIL_AVAILABLE)} ")
def_get_and_log_device_stats(self,trainer:"pl.Trainer",key:str)->None:ifnottrainer._logger_connector.should_update_logs:returndevice=trainer.strategy.root_deviceifself._cpu_statsisFalseanddevice.type=="cpu":# cpu stats are disabledreturndevice_stats=trainer.accelerator.get_device_stats(device)ifself._cpu_statsanddevice.type!="cpu":# Don't query CPU stats twice if CPU is acceleratorfromlightning.pytorch.accelerators.cpuimportget_cpu_statsdevice_stats.update(get_cpu_stats())forloggerintrainer.loggers:separator=logger.group_separatorprefixed_device_stats=_prefix_metric_keys(device_stats,f"{self.__class__.__qualname__}.{key}",separator)logger.log_metrics(prefixed_device_stats,step=trainer.fit_loop.epoch_loop._batches_that_stepped)
To analyze traffic and optimize your experience, we serve cookies on this
site. By clicking or navigating, you agree to allow our usage of cookies.
Read PyTorch Lightning's
Privacy Policy.
You are viewing an outdated version of PyTorch Lightning Docs