File size: 1,711 Bytes
2dcbc14
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import onnx
import pandas as pd
from concrete.ml.deployment import FHEModelDev, FHEModelClient
from concrete.ml.onnx.convert import get_equivalent_numpy_forward
import json
import os
import shutil
from pathlib import Path


script_dir = Path(__file__).parent

print("Compiling the model...")

# Load the onnx model
model_onnx = onnx.load(Path.joinpath(script_dir, "sentiment_fhe_model/server_model.onnx"))

# Load the data from the csv file to be used for compilation
data = pd.read_csv(
    Path.joinpath(script_dir, "sentiment_fhe_model/samples_for_compilation.csv"), index_col=0
).values

# Convert the onnx model to a numpy model
_tensor_tree_predict = get_equivalent_numpy_forward(model_onnx)

model = FHEModelClient(
    Path.joinpath(script_dir, "sentiment_fhe_model/deployment"), ".fhe_keys"
).model

# Assign the numpy model and compile the model
model._tensor_tree_predict = _tensor_tree_predict

# Compile the model
model.compile(data)

# Load the serialized_processing.json file
with open(
    Path.joinpath(script_dir, "sentiment_fhe_model/deployment/serialized_processing.json"), "r"
) as f:
    serialized_processing = json.load(f)

# Delete the deployment folder if it exist
if Path.joinpath(script_dir, "sentiment_fhe_model/deployment").exists():
    shutil.rmtree(Path.joinpath(script_dir, "sentiment_fhe_model/deployment"))

fhe_api = FHEModelDev(
    model=model, path_dir=Path.joinpath(script_dir, "sentiment_fhe_model/deployment")
)
fhe_api.save()

# Write the serialized_processing.json file to the deployment folder
with open(
    Path.joinpath(script_dir, "sentiment_fhe_model/deployment/serialized_processing.json"), "w"
) as f:
    json.dump(serialized_processing, f)

print("Done!")