(self, stats_config)
Use pynvml python binding to collect metrics
        :param stats_config:
        :return:
Use pynvml python binding to collect metrics
        :param stats_config:
        :return:
Use pynvml python binding to collect metrics : param stats_config : : return :
def collect_via_pynvml(self, stats_config):
        """
        Use pynvml python binding to collect metrics
        :param stats_config:
        :return:
        """
        try:
            NVML_TEMPERATURE_GPU = 0
            pynvml.nvmlInit()
            device_count = pynvml.nvmlDeviceGetCount()

            for device_index in xrange(device_count):
                handle = pynvml.nvmlDeviceGetHandleByIndex(device_index)
                memoryInfo = pynvml.nvmlDeviceGetMemoryInfo(handle)
                utilizationRates = pynvml.nvmlDeviceGetUtilizationRates(handle)

                metrics = {
                    'memory.total': memoryInfo.total / 1024 / 1024,
                    'memory.used': memoryInfo.total / 1024 / 1024,
                    'memory.free': memoryInfo.free / 1024 / 1024,
                    'utilization.gpu': utilizationRates.gpu,
                    'utilization.memory': utilizationRates.memory,
                    'temperature.gpu':
                        pynvml.nvmlDeviceGetTemperature(handle,
                                                        NVML_TEMPERATURE_GPU)
                }

                for stat_name in stats_config[1:]:
                    metric = metrics.get(stat_name)
                    if metric:
                        metric_name = 'gpu_{index}.{stat_name}'.format(
                            index=str(device_index),
                            stat_name=stat_name
                        )
                        self.publish(metric_name, metric)
        finally:
            pynvml.nvmlShutdown()
def collect_via_pynvml ( self , stats_config ) : try : NVML_TEMPERATURE_GPU = 0 pynvml . nvmlInit ( ) device_count = pynvml . nvmlDeviceGetCount ( ) for device_index in xrange ( device_count ) : handle = pynvml . nvmlDeviceGetHandleByIndex ( device_index ) memoryInfo = pynvml . nvmlDeviceGetMemoryInfo ( handle ) utilizationRates = pynvml . nvmlDeviceGetUtilizationRates ( handle ) metrics = { 'memory.total' : memoryInfo . total / 1024 / 1024 , 'memory.used' : memoryInfo . total / 1024 / 1024 , 'memory.free' : memoryInfo . free / 1024 / 1024 , 'utilization.gpu' : utilizationRates . gpu , 'utilization.memory' : utilizationRates . memory , 'temperature.gpu' : pynvml . nvmlDeviceGetTemperature ( handle , NVML_TEMPERATURE_GPU ) } for stat_name in stats_config [ 1 : ] : metric = metrics . get ( stat_name ) if metric : metric_name = 'gpu_{index}.{stat_name}' . format ( index = str ( device_index ) , stat_name = stat_name ) self . publish ( metric_name , metric ) finally : pynvml . nvmlShutdown ( )