Prediction with FHE
This document explains how to perform encryption, execution, and decryption of Fully Homomorphic Encryption (FHE) using one function call of the Concrete ML API, or multiple function calls separately.
The APIs are different for the following:
Built-in models
Using one function
All Concrete ML built-in models have a single predict method that performs the encryption, FHE execution, and decryption with only one function call.
The following example shows how to create a synthetic data-set and how to use it to train a LogisticRegression model from Concrete ML.
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from concrete.ml.sklearn import LogisticRegression
import numpy
# Create a synthetic data-set for a classification problem
x, y = make_classification(n_samples=100, class_sep=2, n_features=3, n_informative=3, n_redundant=0, random_state=42)
# Split the data-set into a train and test set
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)
# Instantiate and train the model
model = LogisticRegression()
model.fit(x_train,y_train)
# Simulate the predictions in the clear (optional)
y_pred_clear = model.predict(x_test)
# Compile the model on a representative set
fhe_circuit = model.compile(x_train)Concrete ML models follow the same API as scikit-learn models, transparently performing the steps related to encryption for convenience.
Regarding this LogisticRegression model, as with scikit-learn, it is possible to predict the logits as well as the class probabilities by respectively using the decision_function or predict_proba methods instead.
Using separate functions
Alternatively, you can execute key generation, quantization, encryption, FHE execution and decryption separately.
Custom models
For custom models, the API to execute inference in FHE or simulation is as follows:
Last updated
Was this helpful?