From: Jongsoo Park Date: Mon, 1 Apr 2019 04:25:17 +0000 (-0700) Subject: handle a rare case of histogram min is inf/nan (#18239) X-Git-Tag: accepted/tizen/6.5/unified/20211028.231830~517 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=505d50ea907973ce471d3c2f0b7406b08f570ee5;p=platform%2Fupstream%2Fpytorch.git handle a rare case of histogram min is inf/nan (#18239) Summary: Pull Request resolved: https://github.com/pytorch/pytorch/pull/18239 When min is inf or nan, we get UBSAN errors Reviewed By: csummersea Differential Revision: D14537668 fbshipit-source-id: e70ffb5ecd2b10793356070c69fdabf8f25b203e --- diff --git a/caffe2/quantization/server/activation_distribution_observer.cc b/caffe2/quantization/server/activation_distribution_observer.cc index 900f730..37f7180 100644 --- a/caffe2/quantization/server/activation_distribution_observer.cc +++ b/caffe2/quantization/server/activation_distribution_observer.cc @@ -342,6 +342,10 @@ void HistogramNetObserver::DumpAndReset_( << " has an empty range: min " << hist->Min() << " and max " << hist->Max(); } + if (hist->GetHistogram()->empty()) { + LOG(WARNING) << "Histogram of " + << info->min_max_info.tensor_infos[i].name << " is empty"; + } ostringstream ost; ost << op_index << " " << info->min_max_info.type << " " << i << " " @@ -352,15 +356,11 @@ void HistogramNetObserver::DumpAndReset_( ost << " " << c; } - f << ost.str() << endl; if (print_total_min_max) { LOG(INFO) << this << " " << ost.str(); } - if (hist->GetHistogram()->empty()) { - LOG(WARNING) << "Histogram of " - << info->min_max_info.tensor_infos[i].name << " is empty"; - } + f << ost.str() << endl; if (!print_total_min_max) { info->histograms[i] = DynamicHistogram(hist->GetHistogram()->size()); @@ -575,7 +575,8 @@ RegisterQuantizationParamsWithHistogramNetObserver:: qparams = qfactory->ChooseQuantizationParams(hist, is_weight); } else { qparams.scale = 0.1f; - qparams.zero_point = -min / qparams.scale; + qparams.zero_point = + (isinf(min) || isnan(min)) ? 0 : (-min / qparams.scale); qparams.precision = 8; } diff --git a/caffe2/quantization/server/activation_distribution_observer.h b/caffe2/quantization/server/activation_distribution_observer.h index 6162e62..72ecab3 100644 --- a/caffe2/quantization/server/activation_distribution_observer.h +++ b/caffe2/quantization/server/activation_distribution_observer.h @@ -100,6 +100,13 @@ class HistogramObserver final : public ObserverBase { class HistogramNetObserver final : public NetObserver { public: + /** + * @params mul_nets true if we expect multiple nets with the same name so + * we include extra information in the file name to + * distinghuish them + * @params dump_freq if not -1 we dump histogram every dump_freq invocation + * of the net + */ explicit HistogramNetObserver( NetBase* subject, const std::string& out_file_name,