Source code for mlprodict.cli.optimize
"""
Command line about model optimisation.
:githublink:`%|py|5`
"""
import os
import onnx
[docs]def onnx_stats(name, optim=False):
"""
Computes statistics on an ONNX model.
:param name: filename
:param optim: computes statistics before an after optimisation was done
.. cmdref::
:title: Computes statistics on an ONNX graph
:cmd: -m mlprodict onnx_stats --help
:lid: l-cmd-onnx_stats
The command computes statistics on an ONNX model.
:githublink:`%|py|22`
"""
from ..onnxrt.optim import onnx_statistics
if not os.path.exists(name):
raise FileNotFoundError( # pragma: no cover
"Unable to find file '{}'.".format(name))
with open(name, 'rb') as f:
model = onnx.load(f)
return onnx_statistics(model, optim=optim)
[docs]def onnx_optim(name, outfile=None, recursive=True, options=None, verbose=0, fLOG=None):
"""
Optimises an ONNX model.
:param name: filename
:param outfile: output filename
:param recursive: processes the main graph and the subgraphs
:param options: options, kind of optimize to do
:param verbose: display statistics before and after the optimisation
:param fLOG: logging function
.. cmdref::
:title: Optimises an ONNX graph
:cmd: -m mlprodict onnx_optim --help
:lid: l-cmd-onnx_optim
The command optimises an ONNX model.
:githublink:`%|py|49`
"""
from ..onnxrt.optim import onnx_statistics, onnx_optimisations
if not os.path.exists(name):
raise FileNotFoundError( # pragma: no cover
"Unable to find file '{}'.".format(name))
if outfile == "":
outfile = None # pragma: no cover
if options == "":
options = None # pragma: no cover
if verbose >= 1 and fLOG is not None:
fLOG("[onnx_optim] read file '{}'.".format(name))
with open(name, 'rb') as f:
model = onnx.load(f)
if verbose >= 1 and fLOG is not None:
stats = onnx_statistics(model, optim=False)
for k, v in sorted(stats.items()):
fLOG(' before.{}={}'.format(k, v))
new_model = onnx_optimisations(model, recursive=recursive)
if verbose >= 1 and fLOG is not None:
stats = onnx_statistics(model, optim=False)
for k, v in sorted(stats.items()):
fLOG(' after.{}={}'.format(k, v))
if outfile is not None:
fLOG("[onnx_optim] write '{}'.".format(outfile))
with open(outfile, 'wb') as f:
onnx.save(new_model, f)
return new_model