Using ONNX
Simple example
import numpy
import onnx
from concrete.ml.torch.compile import compile_onnx_model
from concrete.fhe.compilation import Configuration
n_bits = 6
input_output_feature = 5
input_shape = (input_output_feature,)
num_inputs = 1
n_examples = 5000
# Create random input
input_set = numpy.random.uniform(-100, 100, size=(n_examples, *input_shape))
onnx_model = onnx.load(f"tests/data/tf_onnx/fc_{input_output_feature}.onnx")
onnx.checker.check_model(onnx_model)
# Compile
quantized_module = compile_onnx_model(
onnx_model, input_set, n_bits=2
)
# Create test data from the same distribution and quantize using
# learned quantization parameters during compilation
x_test = tuple(numpy.random.uniform(-100, 100, size=(1, *input_shape)) for _ in range(num_inputs))
y_clear = quantized_module.forward(*x_test, fhe="disable")
y_fhe = quantized_module.forward(*x_test, fhe="execute")
print("Execution in clear: ", y_clear)
print("Execution in FHE: ", y_fhe)
print("Equality: ", numpy.sum(y_clear == y_fhe), "over", numpy.size(y_fhe), "values")Quantization Aware Training
Supported operators
Last updated
Was this helpful?