ONE - On-device Neural Engine
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
onert::odc::Quantizer Class Reference

#include <Quantizer.h>

Collaboration diagram for onert::odc::Quantizer:

Public Member Functions

 Quantizer ()=default
 
 ~Quantizer ()=default
 
int quantize (const char *in, const char *out, QuantizeType qtype) override
 
void setMinMaxRecordsThreshold (uint32_t value) override
 Set the number of minmax records enough for quantization.
 
bool readyForQuantize () override
 Checking the number of minmax records enough for quantization (comparison with threshold)
 
bool deleteMinMaxFile () override
 Delete minmax file.
 
- Public Member Functions inherited from onert::odc::IQuantizer
virtual ~IQuantizer ()=default
 

Detailed Description

Definition at line 25 of file Quantizer.h.

Constructor & Destructor Documentation

◆ Quantizer()

onert::odc::Quantizer::Quantizer ( )
default

◆ ~Quantizer()

onert::odc::Quantizer::~Quantizer ( )
default

Member Function Documentation

◆ deleteMinMaxFile()

bool onert::odc::Quantizer::deleteMinMaxFile ( )
overridevirtual

Delete minmax file.

Returns
True if there were no errors, False otherwise

Implements onert::odc::IQuantizer.

Definition at line 172 of file Quantizer.cc.

173{
174 int result = 0;
175
176 std::string minmax_path = getMinMaxFilePath();
177 result = std::remove(minmax_path.c_str());
178
179 if (!result)
180 {
181 return true;
182 }
183 else
184 return false;
185}
result
Definition infer.py:103

◆ quantize()

int onert::odc::Quantizer::quantize ( const char *  in,
const char *  out,
QuantizeType  qtype 
)
overridevirtual

Implements onert::odc::IQuantizer.

Definition at line 85 of file Quantizer.cc.

86{
87 if (not in || not out)
88 return 1;
89
90 bool full_quantize = false;
91 if (qtype == QuantizeType::ODC_QTYPE_U8_ASYM || qtype == QuantizeType::ODC_QTYPE_I16_SYM)
92 full_quantize = true;
93
94 // Load model from the file
95 luci::ImporterEx importerex;
96 auto module = importerex.importVerifyModule(std::string(in));
97 if (module.get() == nullptr)
98 return 1;
99
100 // Additional phase for full quantization
101 if (full_quantize)
102 {
103 luci::CircleQuantizer quantizer;
104 auto options = quantizer.options();
105 fillQuantizeOptionParam(options, qtype);
106
107 // Fake quantization
109 for (size_t idx = 0; idx < module->size(); ++idx)
110 {
111 auto graph = module->graph(idx);
112
113 // quantize the graph
114 quantizer.quantize(graph);
115 }
116
117 // Record minmax by minmax-embedder
118 auto minmax_path = getMinMaxFilePath();
119 Embedder().embed(module.get(), minmax_path, {1.f, 99.f});
120 }
121
122 luci::CircleQuantizer quantizer;
123 auto options = quantizer.options();
124 fillQuantizeOptionParam(options, qtype);
125
126 if (full_quantize)
128 else
130
131 for (size_t idx = 0; idx < module->size(); ++idx)
132 {
133 auto graph = module->graph(idx);
134
135 // quantize the graph
136 quantizer.quantize(graph);
137
138 // Skip validate
139 // TODO Validate if needed
140#if 0
141 if (!luci::validate(graph))
142 {
143 std::cerr << "ERROR: Quantized graph is invalid" << std::endl;
144 return 1;
145 }
146#endif
147 }
148
149 // Export to output Circle file
150 luci::CircleExporter exporter;
151 luci::CircleFileExpContract contract(module.get(), std::string(out));
152
153 if (!exporter.invoke(&contract))
154 return 1;
155
156 return 0;
157}
bool invoke(Contract *) const
void quantize(loco::Graph *) const
bool validate(luci::PartitionTable &partition)

References onert::odc::Embedder::embed(), luci::CircleExporter::invoke(), luci::CircleQuantizer::options(), luci::CircleQuantizer::quantize(), luci::CircleQuantizer::Options::QuantizeDequantizeWeights, luci::CircleQuantizer::Options::QuantizeWeights, luci::CircleQuantizer::Options::QuantizeWithMinMax, and luci::validate().

◆ readyForQuantize()

bool onert::odc::Quantizer::readyForQuantize ( )
overridevirtual

Checking the number of minmax records enough for quantization (comparison with threshold)

Returns
True if ready, False otherwise

Implements onert::odc::IQuantizer.

Definition at line 159 of file Quantizer.cc.

160{
161 std::string minmax_path = getMinMaxFilePath();
162
163 MinMaxReader mmr{minmax_path};
164
165 uint32_t numRuns = mmr.readNumRuns();
166 if (_minmax_threshold != 0 && numRuns >= _minmax_threshold)
167 return true;
168 else
169 return false;
170}

References onert::odc::MinMaxReader::readNumRuns().

◆ setMinMaxRecordsThreshold()

void onert::odc::Quantizer::setMinMaxRecordsThreshold ( uint32_t  value)
inlineoverridevirtual

Set the number of minmax records enough for quantization.

Implements onert::odc::IQuantizer.

Definition at line 36 of file Quantizer.h.

36{ _minmax_threshold = value; };

The documentation for this class was generated from the following files: