class_docstr: Hook executed at the start of training and after every training iteration is done.
  Logs Gpu nvidia-smi stats to logger streams: at the start of training and
  after 50 training iterations.
class_docstr_tok: ["Hook","executed","at","the","start","of","training","and","after","every","training","iteration","is","done",".","Logs","Gpu","nvidia-smi","stats","to","logger","streams",":","at","the","start","of","training","and","after","50","training","iterations","."]
docstr: Print the nvidia-smi stats again to get more accurate nvidia-smi
  useful for monitoring memory usage.
docstr_tok: ["Print","the","nvidia-smi","stats","again","to","get","more","accurate","nvidia-smi","useful","for","monitoring","memory","usage","."]
code: def on_step(self, task: "tasks.ClassyTask") -> None:
      """
      Print the nvidia-smi stats again to get more accurate nvidia-smi
      useful for monitoring memory usage.
      """
      if (
          is_primary()
          and (task.device.type == "cuda")
          and task.local_iteration_num == 50
      ):
          log_gpu_stats()
  
imports: import atexit
  import datetime
  import json
  import logging
  import time
  from typing import List, Optional
  import torch
  from classy_vision import meters, tasks
  from classy_vision.generic.distributed_util import get_rank, is_primary
  from classy_vision.hooks.classy_hook import ClassyHook
  from fairscale.nn.data_parallel import FullyShardedDataParallel
  from iopath.common.file_io import g_pathmgr
  from vissl.models.model_helpers import model_output_has_nan
  from vissl.utils.checkpoint import CheckpointWriter, is_checkpoint_phase
  from vissl.utils.env import get_machine_local_and_dist_rank
  from vissl.utils.io import save_file
  from vissl.utils.logger import log_gpu_stats
  from vissl.utils.perf_stats import PerfStats
label_desc: Use image node_id 2 for calling the LogGpuStatsHook obj's underlying member method code with example usage: obj.on_step(task) without return types