class_docstr: 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])
class_docstr_tok: ["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","]",")"]
code: def on_validation_batch_end(
      self,
      trainer: "pl.Trainer",
      pl_module: "pl.LightningModule",
      outputs: STEP_OUTPUT,
      batch: Any,
      batch_idx: int,
      dataloader_idx: int = 0,
  ) -> None:
      self._get_and_log_device_stats(trainer, "on_validation_batch_end")
  
file_path: pytorch-lightning/src/lightning/pytorch/callbacks/device_stats_monitor.py
imports: from typing import Any, Dict, Optional
  from typing_extensions import override
  import lightning.pytorch
  from lightning.pytorch.accelerators.cpu import _PSUTIL_AVAILABLE
  from lightning.pytorch.callbacks.callback import Callback
  from lightning.pytorch.utilities.exceptions import MisconfigurationException
  from lightning.pytorch.utilities.types import STEP_OUTPUT
label_desc: Use image node_id 7 for calling the DeviceStatsMonitor obj's underlying member method code with example usage: obj.on_validation_batch_end(trainer, pl_module, outputs, batch, batch_idx, dataloader_idx) without return types