class_docstr: Summarize the average GPU utilization within an epoch.
  
  It will start a process to obtain GPU utilization through NVML every second
  within the epoch (the trigger_epoch time was not included),
  and write average utilization to monitors.
  
  This callback creates a process, therefore it's not safe to be used with MPI.
class_docstr_tok: ["Summarize","the","average","GPU","utilization","within","an","epoch",".","It","will","start","a","process","to","obtain","GPU","utilization","through","NVML","every","second","within","the","epoch","(","the","trigger_epoch","time","was","not","included",")",",","and","write","average","utilization","to","monitors",".","This","callback","creates","a","process",",","therefore","it","'s","not","safe","to","be","used","with","MPI","."]
code: def _before_train(self):
      assert (
          gpu_available_in_session()
      ), "[GPUUtilizationTracker] needs GPU!"
  
imports: import multiprocessing
  import numpy
  import os
  import time
  import tensorflow
  from six.moves import map, queue
  import psutil
  from ..tfutils.common import gpu_available_in_session
  from ..utils import logger
  from ..utils.timer import Timer
  from ..utils.concurrency import ensure_proc_terminate, start_proc_mask_signal
  from ..utils.gpu import get_num_gpu
  from ..utils.nvml import NVMLContext
  from .base import Callback
label_desc: Use image node_id 4 for calling the GPUUtilizationTracker obj's underlying member method code with example usage: obj._before_train() without return types