ezkl
ezkl copied to clipboard
Splitting proof error
I attempted to split a proof following the example notebooks provided, using the code snippet below:
input_path = "network_complete.onnx"
output_path = "network_split_0.onnx"
input_names = ["input"]
output_names = ["/Add_output_0"]
# first model
onnx.utils.extract_model(input_path, output_path, input_names, output_names, check_model=False)
input_path = "network_complete.onnx"
output_path = "network_split_1.onnx"
input_names = ["/Add_output_0"]
output_names = ["output"]
# second model
onnx.utils.extract_model(input_path, output_path, input_names, output_names,check_model=False)
# iterate over each submodel gen-settings, compile circuit and setup zkSNARK
import sys
def setup(i):
# file names
model_path = os.path.join('network_split_'+str(i)+'.onnx')
settings_path = os.path.join('settings_split_'+str(i)+'.json')
data_path = os.path.join('input_'+str(i)+'.json')
compiled_model_path = os.path.join('network_split_'+str(i)+'.compiled')
pk_path = os.path.join('test_split_'+str(i)+'.pk')
vk_path = os.path.join('test_split_'+str(i)+'.vk')
witness_path = os.path.join('witness_split_'+str(i)+'.json')
if i > 0:
prev_witness_path = os.path.join('witness_split_'+str(i-1)+'.json')
witness = json.load(open(prev_witness_path, 'r'))
data = dict(input_data = witness['outputs'])
# Serialize data into file:
json.dump(data, open(data_path, 'w' ))
else:
data_path = os.path.join('input_0.json')
# generate settings for the current model
res = ezkl.gen_settings(model_path, settings_path, py_run_args=run_args)
res = ezkl.calibrate_settings(data_path, model_path, settings_path, "resources", scales=[run_args.input_scale], max_logrows=run_args.logrows)
assert res == True
# load settings and print them to the console
settings = json.load(open(settings_path, 'r'))
settings['run_args']['logrows'] = run_args.logrows
json.dump(settings, open(settings_path, 'w' ))
print("=== compile circuit === i:",i)
res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)
print("=== setup === i:",i)
res = ezkl.setup(
compiled_model_path,
vk_path,
pk_path,
)
assert res == True
assert os.path.isfile(vk_path)
assert os.path.isfile(pk_path)
res = ezkl.gen_witness(data_path, compiled_model_path, witness_path, vk_path)
run_args.input_scale = settings["model_output_scales"][0]
for i in range(2):
setup(i)
However, I encountered the following error in witness generation (In the second iteration of the loop):
Traceback (most recent call last):
File "splitproof.py", line 1830, in <module>
setup(i)
File "splitproof.py", line 1800, in setup
res = ezkl.gen_settings(model_path, settings_path, py_run_args=run_args)
RuntimeError: Failed to generate settings: Translating node #0 "/Add_output_0" Source ToTypedTranslator
I have attached input_0.json
and the ONNX files for reference. My EZKL version is 10.2.9.
Any assistance in resolving this issue would be greatly appreciated. Thank you!