| @@ -416,6 +416,44 @@ class _SummaryParser(_Parser): | |||
| return event_str | |||
| @staticmethod | |||
| def _parse_summary_value(value, plugin): | |||
| """ | |||
| Parse summary value and create corresponding container according to plugin. | |||
| Args: | |||
| value (Summary.Value): Value message in summary file. | |||
| plugin (str): Plugin value. | |||
| Returns: | |||
| Union[Summary.Value, HistogramContainer, TensorContainer, ImageContainer], original summary value | |||
| or an instance of HistogramContainer or TensorContainer or ImageContainer. | |||
| """ | |||
| tensor_event_value = getattr(value, plugin) | |||
| if plugin == PluginNameEnum.HISTOGRAM.value: | |||
| tensor_event_value = HistogramContainer(tensor_event_value) | |||
| # Drop steps if original_buckets_count exceeds HistogramContainer.MAX_ORIGINAL_BUCKETS_COUNT | |||
| # to avoid time-consuming re-sample process. | |||
| if tensor_event_value.histogram.original_buckets_count > Histogram.MAX_ORIGINAL_BUCKETS_COUNT: | |||
| logger.info('original_buckets_count exceeds ' | |||
| 'HistogramContainer.MAX_ORIGINAL_BUCKETS_COUNT') | |||
| return None | |||
| elif plugin == PluginNameEnum.TENSOR.value: | |||
| tensor_event_value = TensorContainer(tensor_event_value) | |||
| tensor_count = 1 | |||
| for d in tensor_event_value.dims: | |||
| tensor_count *= d | |||
| if tensor_count > MAX_TENSOR_COUNT: | |||
| logger.warning('tag: %s/tensor, dims: %s, tensor count: %d exceeds %d and drop it.', | |||
| value.tag, tensor_event_value.dims, tensor_count, MAX_TENSOR_COUNT) | |||
| return None | |||
| elif plugin == PluginNameEnum.IMAGE.value: | |||
| tensor_event_value = ImageContainer(tensor_event_value) | |||
| return tensor_event_value | |||
| @staticmethod | |||
| def _event_parse(event_str, latest_file_name): | |||
| """ | |||
| @@ -424,7 +462,7 @@ class _SummaryParser(_Parser): | |||
| This method is static to avoid sending unnecessary objects to other processes. | |||
| Args: | |||
| event (str): Message event string in summary proto, data read from file handler. | |||
| event_str (str): Message event string in summary proto, data read from file handler. | |||
| latest_file_name (str): Latest file name. | |||
| """ | |||
| @@ -445,30 +483,10 @@ class _SummaryParser(_Parser): | |||
| if not value.HasField(plugin): | |||
| continue | |||
| plugin_name_enum = plugins[plugin] | |||
| tensor_event_value = getattr(value, plugin) | |||
| logger.debug("Processing plugin value: %s.", plugin_name_enum) | |||
| if plugin == PluginNameEnum.HISTOGRAM.value: | |||
| tensor_event_value = HistogramContainer(tensor_event_value) | |||
| # Drop steps if original_buckets_count exceeds HistogramContainer.MAX_ORIGINAL_BUCKETS_COUNT | |||
| # to avoid time-consuming re-sample process. | |||
| if tensor_event_value.histogram.original_buckets_count > Histogram.MAX_ORIGINAL_BUCKETS_COUNT: | |||
| logger.info('original_buckets_count exceeds ' | |||
| 'HistogramContainer.MAX_ORIGINAL_BUCKETS_COUNT') | |||
| continue | |||
| elif plugin == PluginNameEnum.TENSOR.value: | |||
| tensor_event_value = TensorContainer(tensor_event_value) | |||
| tensor_count = 1 | |||
| for d in tensor_event_value.dims: | |||
| tensor_count *= d | |||
| if tensor_count > MAX_TENSOR_COUNT: | |||
| logger.warning('tag: %s/tensor, tensor count: %d exceeds %d and drop it.', | |||
| value.tag, tensor_count, MAX_TENSOR_COUNT) | |||
| continue | |||
| elif plugin == PluginNameEnum.IMAGE.value: | |||
| tensor_event_value = ImageContainer(tensor_event_value) | |||
| tensor_event_value = _SummaryParser._parse_summary_value(value, plugin) | |||
| if tensor_event_value is None: | |||
| continue | |||
| tensor_event = TensorEvent(wall_time=event.wall_time, | |||
| step=event.step, | |||