diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 58d9fd2b..7e7cf75e 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -565,7 +565,7 @@ jobs: - name: Build python ezkl run: source .env/bin/activate; maturin develop --features python-bindings --release - name: Run pytest - run: source .env/bin/activate; pytest -v + run: source .env/bin/activate; pytest -vv accuracy-measurement-tests: runs-on: ubuntu-latest-32-cores diff --git a/README.md b/README.md index f51827f5..4e725748 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,12 @@ Install the python bindings by calling. ```bash pip install ezkl ``` +Or for the GPU: + +```bash +pip install ezkl-gpu +``` + Google Colab Example to learn how you can train a neural net and deploy an inference verifier onchain for use in other smart contracts. [![Notebook](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/zkonduit/ezkl/blob/main/examples/notebooks/ezkl_demo.ipynb) diff --git a/examples/notebooks/data_attest.ipynb b/examples/notebooks/data_attest.ipynb index b204054e..e1f8a976 100644 --- a/examples/notebooks/data_attest.ipynb +++ b/examples/notebooks/data_attest.ipynb @@ -395,7 +395,7 @@ "with open(cal_path, \"w\") as f:\n", " json.dump(cal_data, f)\n", "\n", - "res = await ezkl.calibrate_settings(cal_path, model_path, settings_path, \"resources\")" + "res = ezkl.calibrate_settings(cal_path, model_path, settings_path, \"resources\")" ] }, { @@ -691,4 +691,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file diff --git a/examples/notebooks/data_attest_hashed.ipynb b/examples/notebooks/data_attest_hashed.ipynb index 8e693c47..2f9fe2ac 100644 --- a/examples/notebooks/data_attest_hashed.ipynb +++ b/examples/notebooks/data_attest_hashed.ipynb @@ -249,7 +249,7 @@ "with open(cal_path, \"w\") as f:\n", " json.dump(cal_data, f)\n", "\n", - "res = await ezkl.calibrate_settings(cal_path, model_path, settings_path, \"resources\")" + "res = ezkl.calibrate_settings(cal_path, model_path, settings_path, \"resources\")" ] }, { @@ -656,4 +656,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file diff --git a/examples/notebooks/decision_tree.ipynb b/examples/notebooks/decision_tree.ipynb index 501769d7..f4a1407e 100644 --- a/examples/notebooks/decision_tree.ipynb +++ b/examples/notebooks/decision_tree.ipynb @@ -1,287 +1,287 @@ { - "cells": [ - { - "attachments": { - "image-2.png": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAokAAARDCAYAAAAEdLvJAAABYmlDQ1BJQ0MgUHJvZmlsZQAAKJF1kDFLw1AUhU9stSAVHRwEHQKKUy01rdi1LSKCQxoVqlvyWlMlTR9JRNTFQRengi5uUhd/gS4OjoKDguAgIoKDP0DsoiXeNGpbxft43I/DvYfDBTrCKudGEEDJdCxlOi3mFpfE0Au60ENPQEBlNk/J8iyN4Lu3V+2O5qhuxzyvq5px+bw3PJi1N6Nscmv173xbdecLNqP+QT/BuOUAQoxYXne4x9vE/RaFIj7wWPf5xGPN5/PGzLySIb4h7mNFNU/8RBzRWnS9hUvGGvvK4KUPF8yFOeoD9IeQRgEmshAxhRzimEAM41D+2Uk0djIog2MDFlagowiHtlOkcBjkJmKGHBmiiBBL5Cch7t369w2bWrkKJN+AQKWpaYfA2S7FvG9qI0dA7w5wes1VS/25rFAL2stxyedwGuh8dN3XUSC0D9Qrrvtedd36Mfk/ABfmJ+uTZFvl1hD0AAAAVmVYSWZNTQAqAAAACAABh2kABAAAAAEAAAAaAAAAAAADkoYABwAAABIAAABEoAIABAAAAAEAAAKJoAMABAAAAAEAAARDAAAAAEFTQ0lJAAAAU2NyZWVuc2hvdIWiHYkAAAHXaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjEwOTE8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NjQ5PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6VXNlckNvbW1lbnQ+U2NyZWVuc2hvdDwvZXhpZjpVc2VyQ29tbWVudD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CvSCr3YAAEAASURBVHgB7N0HnJxVvf/x3yabZNOzm03vvYeQgksCgtwAERCu8kfEgqKgIIkXEBWuoOhFAa/8QSkq/lVQrBcvoFIEpBMCCSQB0sum97LZJJtNNtn88z34rJOdLdPnKZ/zeg0z+8xTznmfUX6cWlBWVnbUSAgggAACCCCAAAIIxAi0iPnMRwQQQAABBBBAAAEEnABBIj8EBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggEAhBAgggAAC/hI4ePCgVVdXW21trbVs2TLnmTty5Ih7buvWra2oqCjnz+eBCCDgDwGCRH/UA7lAAAEErKamxnbv3u0kWrRokZcA0auGQ4cOuUB1z549VlxcbAoYSQggEC0BgsRo1TelRQABnwqo9VABmYKxLl26+CaXFRUVplfnzp2tTZs2vskXGUEAgewLMCYx+8Y8AQEEEGhWYO/evVZYWOirAFGZVsDaqlUrq6ysbLYMnIAAAuESIEgMV31SGgQQCKDA4cOHTS2JJSUlvsy9upvVFa4XCQEEoiNAkBiduqakCCDgUwEFiWqt83NS/pRPEgIIREeAIDE6dU1JEUDAxwIFBQU+zp2Z3/Pnazwyh0BABQgSA1pxZBsBBKIjMH78eDdeMTolpqQIIOAHAYJEP9QCeUAAAQSaEPjwhz+clQktah288MILm3gyXyGAQJQFCBKjXPuUHQEEAiFwxx132I4dOzKeVwWJZ599dsbvyw0RQCAcAi379u17SziKQikQQACBYApoQogWr27fvn2DBbj55pvtrbfeso4dO9qsWbNs+PDh9qlPfcqGDh1qixcvdrOO9feAAQPc8fPOO8/tlLJs2TJ3v9tvv92ee+4597m0tNS+/OUv2+zZs+3rX/+69erVyyZMmGArV65scpmbqqoqt4aj3yfYNAjIQQQQSEmAlsSU2LgIAQQQyJ1Ap06d3MQRbdE3atQoe/bZZ+0b3/iG27Zv8uTJLiMKME844QS79dZb7T//8z9t0qRJNnbsWPdd7OLc2slF91P67//+b7f0zi233GIbNmxwx/gHAggg4AkQJHoSvCOAAAIBENiyZYsL6LSv87vvvmtDhgypy/XLL7/sWhXVKvnqq6/ayJEj677jAwIIIJCsAEFismKcjwACCORRIHatQn2OXZrmyJEjdTnTZ+3gonT06FFTC6KS9+7+4B8IIIBAEwIEiU3g8BUCCCAQJIGysjKXXQWOJ510khtnqAO7d++2wYMHu+80ntFLCh6V2JPZE+EdAQRiBd7/z8zYI3xGAAEEEAikwM6dO+273/2um7SiCS3z5s1z5fjb3/5mX/3qV23z5s22du3aurIpSHzhhRfcOMYf//jHtn79+rrv+IAAAggUHPsvz/f/UxILBBBAAIG8CFRXV9vevXutW7duKT//i1/8ogsKFyxYYJrgUn+fZR3TS+MV6yd1QWuMY1NJS/Bockzbtm2bOo3vEEAgRAK0JIaoMikKAggEV8Dr+k21BAcPHnR7KyvYayjg0xjF2DGLsc9p6PzY7/U53fzVvx9/I4CA/wUIEv1fR+QQAQRCLqAJJvVb/pIt8kMPPZTsJUmdr/x5E2GSupCTEUAgsAJMXAls1ZFxBBAIi4CCL00e2bVrly+LpIkvWkSbhbR9WT1kCoGsCRAkZo2WGyOAAAKJC2g3FS1pU1FRkfhFOThT+VErovJHQgCBaAnQ3Ryt+qa0CCDgUwG1JBYXF7vlarZt2+bWM/Qmm+Q6y974RW8Mo/LVunXrXGeD5yGAQJ4FaEnMcwXweAQQQMATUHdu9+7d3bZ56XbteusievdO9l3P79y5s/Xo0YMAMVk8zkcgJAK0JIakIikGAgiER6CoqMitdZhOiRQkaoxjIjOX03kO1yKAQHgFaEkMb91SMgQQiLBAp06dWLYmwvVP0RHIhABBYiYUuQcCCCCAAAIIIBAyAYLEkFUoxUEAAQQkoMW1tYczCQEEEEhVgCAxVTmuQwABBHwsoNnS7JLi4woiawgEQIAgMQCVRBYRQAABBBBAAIFcCxAk5lqc5yGAAAIIIIAAAgEQIEgMQCWRRQQQQAABBBBAINcCBIm5Fud5CCCAAAIIIIBAAAQIEgNQSWQRAQQQQAABBBDItQBBYq7FeR4CCCCQA4EDBw6wBE4OnHkEAmEWIEgMc+1SNgQQiKxA27ZtWQInsrVPwRHIjABBYmYcuQsCCCCAAAIIIBAqAYLEUFUnhUEAAQQQQAABBDIjQJCYGUfuggACCCCAAAIIhEqAIDFU1UlhEEAAAQQQQACBzAgQJGbGkbsggAACCCCAAAKhEiBIDFV1UhgEEEAAAQQQQCAzAgSJmXHkLggggAACCCCAQKgECBJDVZ0UBgEEEHhfoLa2lsW0+TEggEBaAgSJafFxMQIIIOBPgRYtWrCYtj+rhlwhEBgBgsTAVBUZRQABBBBAAAEEcidAkJg7a56EAAIIIIAAAggERoAgMTBVRUYRQAABBBBAAIHcCRAk5s6aJyGAAAIIIIAAAoERIEgMTFWRUQQQQAABBBBAIHcCBIm5s+ZJCCCAgC8EevfubUVFRRnNS5cuXay4uDiteypP/fv3T+sejV1cUFBgrVq1auxrjiOAQAMCBIkNoHAIAQQQCLPAiSeeaB07dky4iH369LGhQ4c2ef6AAQNs0KBBTZ7T3JetW7e2Dh06NHda0t8rQJw+fbpddtllSZU76QdxAQIhEygMWXkoDgIIIIBAAgKDBw+2c88912pqauyZZ56x7du3W7t27WzGjBmmVsGKigp74oknXNCmY1p3sUePHvbaa6+59zPOOMPatm1ry5Ytc8f0SF13ySWXuPs899xztnbt2kZz0r59ezv77LPdubt27bK///3vrqWvV69etnjxYps8ebINHz7cXa/g8a233rJ3333XxowZY5MmTbLDhw/bCy+8YJs3b7bS0lJTILtw4UJ3/qmnnmpz5sxxZdOBU045xdavX2+dO3d23/MPBBBITIAgMTEnzkIAAQRCJaCA7qGHHjIFZWpl+/3vf++CrQULFtjq1atNgZaCNAVmCrg6depkr7/+ujNQ0PjXv/7VBZLnnHOO9ezZ0x3v2rWr/eEPf3AB27Rp05oMEseNG2crVqxw99dn3V+BqNcNPm/ePNNLXcQf/ehH3bnKs8793e9+54LLCy64wH7zm9+YgswPfvCDtmfPHuvevbvbaUbBr5ICQ+XvlVdesbFjx7pj/AMBBBITIEhMzImzEEAAgVAJqLXu6NGjtmnTJheItWzZ0tatW+cCKgVi6j5WN239pGBu3759LjDTd3/729/cKWplXLNmjbvnxo0bXRBX/9rYv3fu3GllZWXufAWL1dXV1q1bt9hT3GcFf3PnznXfDxkyxLVsqjVRSS2IapHcv3+/Pfnkk3bVVVe5QPFXv/qV+17/mDp1al1LZ91BPiCAQEICjElMiImTEEAAgXAJaG9nL+mzWvHUxXvyySeb/lbr3JEjR7xT6t51Xuy1dV8c++Cdr+BTr6aSAsOnn37adVF/+tOfdgFf/fO9MY7l5eXuq8LCQquqqrKDBw+6l7rJ1e2spBbDAwcOuLypG1xJ4y779evnXh/4wAdca6XGY6r7moQAAs0LECQ2b8QZCCCAQOgENCZRSV24CvzUPdu3b1+bPXu2LVq0qC7g0jkKxNq0aaOProtZ12j8opKCyoZaAN2XTfxDz9czX331Vfc8tUTGJgV6U6ZMsZdffrnusMYfqsVx6dKl7qWuaN1Dk13UZf7b3/7WNBZSYy3VMqrv1EWuwFIvBbcKJJsLYOseyAcEIi5Ad3PEfwAUHwEEoimg1rSLL77YTT55/vnnHcJ7771nGmNYWVnpgjEFZEqa9KGWOHXdKoh88cUX7cILL3TBo87dsWOHaVmdZNKhQ4fs/PPPd93DCvY0FjJ2ZrNaNfW3xh0qaWykJsls2bLFPvnJT7rAdtWqVS7wUwvms88+a3v37nUvjaFUIKj86zovjRw50gWXCh5JCCDQvEDBsTEhTfcJNH8PzkAAAQQQ8JmAWtb+8Y9/NNlqpu5br7vWy75aFTUW0es69o7rXcdjW+Eauj72fI1fbGiyiAI9TY5R8loDY69r7nNTeWzuWr5HAIHEBWhJTNyKMxFAAIFQCdQPEFW4xsYb6rvYAFF/N3S9jntJrYWaxFI/qcXPS6m06jWVR+++vCOAQPoCBInpG3IHBBBAAIEGBNTd29RaiQ1cwiEEEPCRABNXfFQZZAUBBBBAAAEEEPCLAEGiX2qCfCCAAAIIIIAAAj4SIEj0UWWQFQQQQAABBBBAwC8CBIl+qQnygQACCGRQQJM7GtoxJYOP4FYIIBByAYLEkFcwxUMAgWgKaJmY+rORoylBqRFAIFUBgsRU5bgOAQQQQAABBBAIsQBBYogrl6IhgAACCCCAAAKpChAkpirHdQgggAACCCCAQIgFCBJDXLkUDQEEEEAAAQQQSFWAIDFVOa5DAAEEEEAAAQRCLECQGOLKpWgIIIAAAggggECqAgSJqcpxHQIIIIAAAgggEGIBgsQQVy5FQwCB6AocOHCAxbSjW/2UHIGMCBAkZoSRmyCAAAL+Emjbti2LafurSsgNAoETIEgMXJWRYQQQQAABBBBAIPsCBInZN+YJCCCAAAIIIIBA4AQIEgNXZWQYAQQQQAABBBDIvgBBYvaNeQICCCCAAAIIIBA4AYLEwFUZGUYAAQQQQAABBLIvQJCYfWOegAACCORMYMiQIe5ZBw8edEvgeH/nLAM8CAEEQiNAkBiaqqQgCCCAwPsCkydPtjZt2tjEiRMhQQABBFIWIEhMmY4LEUAAAf8JrFq1yoqLi10rot71NwkBBBBIRYAgMRU1rkEAAQR8LLB69WqXu/Lych/nkqwhgIDfBQr9nkHyhwACCARJoKqqyg4fPpzXLM+fP9/27NljXrCYz8wUFhZau3bt8pkFno0AAikKECSmCMdlCCCAQKyAgsOKPRXWolWhtWzTylq2zu//va7cvM5q2xTEZjHnn2sPHbaqqoPOpUvnLgSLOa8BHohAegL5/X+x9PLO1QgggIAvBBQg7q3ab+26d7Gi4o6+yJOfMlFdsc/27trnskSrop9qhrwg0LQAYxKb9uFbBBBAoFmBPZV7rE1xBwLERqSKunSwNiUdraKiopEzOIwAAn4UIEj0Y62QJwQQCIzAgQMHrKBly2MBYofA5DkfGS3q0t5aHOuCV6srCQEEgiFAkBiMeiKXCCDgU4Gamho3BtGn2fNVtloWtTJ5kRBAIBgCBInBqCdyiQACPhbQZBVS8wItW7Vq/iTOQAAB3wgQJPqmKsgIAgiEWaCwZaEVH5vhm2rq37uvde1SnOrlXIcAAggkLcB//iZNxgUIIIBA4gIKDmd+9gobNWS4VVUfsHZFbe3eX//c3l22uMmb9OzW3UYeu+bFOa+686ZPO91WrFllr8x9vcnr+BIBBBDIlABBYqYkuQ8CCCDQgMBnL7zEjcP78reutyNHjtjQAYPt5lnX28xbvm57972/LEwDl1m3klL7wITJdUFiQ+dwDAEEEMimQMu+ffveks0HcG8EEEAgzAIHDx602pYF1rpDUVwxWx3bbeTqz1xu373nB1bzz11Ydu3ZbRs2b3K7slTu22uTxk2w66+YaedPn2Ejhgyz+YvesdLirvaVz33J+vbqbZPGTrAX5rxiJ44Zbx3bd7CPn/vvdvF5H7Pa2tpjLYvvb783YfQ4+4/PXWnnnXGWu9Zrpfzc//mkjRo6wq74xKV24Fgr5tqN6+PymMsDNccW1m5x+KgVFcVb5TIfPAsBBBITYExiYk6chQACCCQtoHGEG7dutoOHDrlrCwoKrEWLFvb2ooXuuA4O7jfQvnffnTbrlm+4wK/sxMm2dcc2+8WffmNLV62wb931/brn9unRy27+v9+3//zhf9knL/g/1rpVa+vcsZNddiwY/MEDP7brvneTde9aah88aaq7pn3bdtajtJtdd+s37aU3Xqu7Dx8QQACBRATobk5EiXMQQACBFATatGlTFyDq8s989GLXctihXXt76sXn7JGnHre/Pf93GzNspHWbUGoTx5xgG7ZsavRJb77zth09etR27t5lG7dsttKSEuvdvZf16t7Tyk6c4q7rcKy1Ua2OL7852/39+ttvum7uRm/KFwgggEAjAgSJjcBwGAEEEEhXYNPWLdavVx9reWyxbY1H/PX//sG9Lr/4UttdWWHqjr7969+y2W/PtXWbNriJKceiwEYfe/ifXdY6wfuse+w+tmf07mPd2EovvP6Kbd+1033WP44cqa37zAcEEEAgGQG6m5PR4lwEEEAgCYGKY9v1qcv44+f8e91V6jKeOHa8vbt08bGWwFIrKGhhf/zb/9qc+XNdd7MXI1YfOmidjrUKNpdWrl1t1Qer7Z2li47dY57pmW1at27uMr5HAAEEmhWgJbFZIk5AAAEEUhf4+R8esi9/+gt2zy132L79+63LsbUSf/U/v7VtO7cfCxALbM2GdfZ/b/qe7a/abzuOdSN7adXacjtce8R+cMN37Ou3f9s7HPeuVsNHn3nCvvfVm44Fi8cm0Ryb0HLnL+6LO48DCCCAQLICBWVlZY33bSR7N85HAAEEIiZQWVlpNa0KrH2PphfKbntsRq/GC+44FtRpXGFsKvrn2MX6x3VOy2MTXY4cC/wSSXrGgerqRE7NyzlV2/dYy+oj1rlz57w8n4cigEByArQkJufF2QgggEBKAgreGgvg1ALYWEo0QNT1jd2/sXtzHAEEEGhKgDGJTenwHQIIIIAAAgggEFEBgsSIVjzFRgABBBBAAAEEmhIgSGxKh+8QQAABBBBAAIGICjAmMaIVT7ERQCBzAjVV1Va1vSJzNwzpnWr2Vx9bM5LleUJavRQrhAIEiSGsVIqEAAK5Fag9WGOHjxw/Yzm3OQjG02qPLShu7QgSg1Fb5BIBM4JEfgUIIIBAmgLaUaU1C1g3q3jon3tYN3siJyCAgC8EGJPoi2ogEwgggAACCCCAgL8ECBL9VR/kBgEEEEAAAQQQ8IUAQaIvqoFMIIAAAggggAAC/hIgSPRXfZAbBBBAIKcCJ510UqPP69ixo40cObLR7/kCAQTCLUCQGO76pXQIIJBHgaFDh9rMmTMTzsGAAQPsYx/7mDv/jDPOsPPPPz/ha1M5sX379lZSUuIuVV7Hjh1b9+rSpYvt3bvXxowZk8qtuQYBBEIgwOzmEFQiRUAAAX8KbNiwwZ544omEM9e5c2cbPny4O3/BggXWqlWrhK9N5cRJkybZ22+/7S49cmx5msOHD7vPkydPtqqqKquoqLD169db//79bd26dak8gmsQQCDAAgSJAa48so4AAv4WGDhwoE2fPt3uvfdeO+uss6xr166mLtyioiL729/+ZqtXr7bi4mK76KKL3HH97SUFcO3atbPHH3/c1MJ47rnnmoLIJUuW2F//+lerra21c845x7X8KZh77LHHbOvWraYA74Mf/KC1aNHC5s6day+99JJ3y+Pe9X23bt3s5ZdfdsfLy8vdu/KmLmgvLwsXLrSzzz6bIPE4Pf5AIBoCdDdHo54pJQII5EFALYEKCpUUfPXs2dMeffRR10L3gQ98wB3/t3/7NysoKLCHH37Y1P3rJZ2vIFFJXdArVqywn/zkJy7Q7Nu3r40fP95GjBhh99xzjwscL7jgAnfu6aefbnPmzLFf/OIXdvDgQXdv90W9fwwaNMjWrFlT76jZ1KlT3fXeF7qHAspst2p6z+MdAQT8I0CQ6J+6ICcIIBBygc2bN9v27dtt7dq11qlTJ1fa0tJSW758uWsFXLx4cZyAFunW+ECdoxZDBX+6vkePHq5l8bOf/ayddtppLnjUxbNnz3YtiV/4whesQ4cOcffzDqgrXMFmbGrbtq3rWtazvKQAUYuF19TUeId4RwCBiAjQ3RyRiqaYCCCQf4GjR+O37lPgp+5kBWhq3auftEvJvn37rF+/frZx40Y777zzXDfyrl27bOfOnfbAAw+4ILJXr16uxU+TTdTi2KdPH7v44ovduXv27Kl/W9fKqFZCtXTqGiW1IirIjE2jR492LZWxx/iMAALREKAlMRr1TCkRQMCnAi+88IJrBfza177mAsWGsqkxiNOmTbMbb7zRtR5u27bNNLFlx44ddv3119sXv/hF152tcYoKJq+66io3XvGdd96xhgJE7xnz5s2zKVOmuD/Vta0JKrGtiPpCS+AsXbrUu4R3BBCIkEBBWVlZ/H/aRgiAoiKAAALpCFRWVtqBAwesTZs26dzGdelqhnFTSV3P9fc/1lhBXacA0UvqHlY3cSJdxDNmzLCnn37au/S4d3WJa1mc+q2Lx52UxB/Ku5w0AYeEAAL+FyBI9H8dkUMEEPCxgIJELRejiSakpgWqq6tdaylBYtNOfIuAXwTobvZLTZAPBBAIpIBa8hoaaxjIwmQ503JilnSWkbk9AhkUIEjMICa3QgCB6AlowomCn0S6dqOn868Sa6FudYl7y/r86xs+IYCAXwUIEv1aM+QLAQQCI6AlajQukECx4SqTi4JELRxOQgCB4AiwBE5w6oqcIoCATwW81jEtZ6NgSItja+JI1JNaDtXKqncFiJ5T1F0oPwJBESBIDEpNkU8EEPC1gAIgvTSJxdsDOZ8ZHjx4cN3WevnMR2FhIcFhPiuAZyOQhgBBYhp4XIoAAgjUF/BLa5mCRC24Hbs0Tv288jcCCCDQlAD9IU3p8B0CCCAQUAGtccis64BWHtlGwCcCBIk+qQiygQACCCCAAAII+EmAINFPtUFeEEAAgQwJaBKNJtCQEEAAgVQFCBJTleM6BBBAwMcCWpaH7mYfVxBZQyAAAgSJAagksogAAggggAACCORagCAx1+I8DwEEEEAAAQQQCIAAQWIAKoksIoAAAggggAACuRYgSMy1OM9DAAEEEEAAAQQCIECQGIBKIosIIIAAAggggECuBQgScy3O8xBAAAEEEEAAgQAIECQGoJLIIgIIIIAAAgggkGsBgsRci/M8BBBAAAEEEEAgAAIEiQGoJLKIAAIIIIAAAgjkWoAgMdfiPA8BBBDIosCQIUPc3b1t+by/s/hIbo0AAiEVIEgMacVSLAQQiK7A5MmTTdvyTZw4MboIlBwBBNIWIEhMm5AbIIAAAv4RWLVqlRUXF1tBQYF7198kBBBAIBUBgsRU1LgGAQQQ8LHA6tWrXe7Ky8t9nEuyhgACfhco9HsGyR8CCCAQRYGDBw/avn37rLa21tq0aZMUwfz5823Pnj3mBYvJXKzntmzZ0tq1a2dFRUXJXMq5CCAQMgGCxJBVKMVBAIHgC+zYscMOHz7sCnL06NGUCrRkyZKUrtNzjxw5YocOHbLCwkIrLS1N6T5chAACwRcgSAx+HVICBBAIkYACRAVpasnLR4pttTxw4IBt377dunXrlo+s8EwEEMizAGMS81wBPB4BBBDwBPbu3Ws1NTXWtm1b71Be35UPtSwqXyQEEIieAEFi9OqcEiOAgE8F1HKn8YB+Supyrqqq8lOWyAsCCORIgCAxR9A8BgEEEGhOQK2Isd29zZ2fi++VH+WLhAAC0RMgSIxenVNiBBDwqUCqk1R8WhyyhQACARcgSAx4BZJ9BBCInkBJSYnvuqWjVwuUGIHwCzC7Ofx1TAkRQCAkAtOmTbNLL73UNHaxc+fO9uyzz9rvf/97S6UFslevXjZq1Ch7/vnnQ6JDMRBAINMCBImZFuV+CCCAQBYE+vXrZ5dffrndfPPNtmHDBrdEzre//W33+eWXX076iVrWZurUqQSJSctxAQLRESBIjE5dU1IEEAiwwGmnnWZPPPGECwpVDM04vu+++6x3796uVH369LGZM2e6/ZorKyvt7rvvtk2bNrlgctasWW6tQ+3n/MADD7jdWL70pS9Zly5d7LbbbrMbb7wxwDJkHQEEsiXQsm/fvrdk6+bcFwEEEEAgcQEFd5pNrGCufrrgggtszpw5tmXLlrqvtPWeWhWVJk6caG+88Yb98pe/dOMVTznlFHvzzTdt+vTp7u877rjDli1bZsOGDbMFCxa467p27WpqjWwuaau+Tp06NXca3yOAQMgEmLgSsgqlOAggEE4BrZ+onVgaS6+88or7asaMGTZhwgQbO3as+3vt2rVWVlZmF110kQsWn3766cZuwXEEEEDgOAGCxOM4+AMBBBDwp0B5ebkNGjTouMxp676ePXu6Y9dcc42dddZZblKLzt23b587vnjxYrvhhhtc9/RVV11lV1555XH34A8EEECgMQGCxMZkOI4AAgj4SOC1114zdTl7+yirZfHqq6+2KVOmuFyOGzfOHnroIXvppZdci6MXJKobunv37m4845133lnXwqgu5I4dO/qohGQFAQT8JsDEFb/VCPlBAAEEGhBYuXKlPfjgg3brrbe6iSfFxcU2b948e+qpp9zZjz76qN1+++22c+dOW7NmTd0d9Pe1117r9l9WUPjwww+771asWOGCybvuust9X3cBHxBAAIF/ChQcG6tyFA0EEEAAgfwLaBKKArmGJq7E5k6tiRUVFXHb5bVq1cqd1tA2euqabmgP5ubGOuqGmlBzbJJjbBb4jAACERCgJTEClUwREUAgGALNBYdeKbZv3+59PO69oeDQO6GhAFHfNTUZxruWdwQQiKYAYxKjWe+UGgEEfCiglkCNFfRTUn68Fko/5Yu8IIBA9gUIErNvzBMQQACBhATatm3ru5a9w4cPuwW5EyoAJyGAQKgECBJDVZ0UBgEEgiyg8YhqtdPezH5IyofywyxoP9QGeUAg9wKMScy9OU9EAAEEGhUoLS21HTt21E0yOXr0qBUW5u7/qtVy6I2N1HOVHxICCERTIHf/zxNNX0qNAAIIJC2gwExjAbXWYW1trduqL9mbDB482FavXp3sZe78Fi1aWIcOHVJ6bkoP5CIEEPClAEGiL6uFTCGAQNQFtIezXqkmBYm7du1yQWaq9+A6BBCItgBjEqNd/5QeAQRCKtCpUydTVzUJAQQQSFWAIDFVOa5DAAEEEEAAAQRCLECQGOLKpWgIIBBdAe3I4k1Aia4CJUcAgXQECBLT0eNaBBBAwKcCXbp0obvZp3VDthAIigBBYlBqinwigAACCCCAAAI5FCBIzCE2j0IAAQQQQAABBIIiQJAYlJoinwgggAACCCCAQA4FCBJziM2jEEAAAQQQQACBoAgQJAalpsgnAggggAACCCCQQwGCxBxi8ygEEEAAAQQQQCAoAgSJQakp8okAAggggAACCORQgCAxh9g8CgEEEEAAAQQQCIoAQWJQaop8IoAAAggggAACORQgSMwhNo9CAAEEsi0wZMgQ9whvWz7v72w/l/sjgED4BAgSw1enlAgBBCIuMHnyZNO2fBMnToy4BMVHAIF0BAgS09HjWgQQQMBnAqtWrbLi4mIrKChw7/qbhAACCKQiQJCYihrXIIAAAj4WWL16tctdeXm5j3NJ1hBAwO8ChX7PIPlDAAEEgiRQVVVlhw8fzmuW58+fb3v27DEvWMxnZgoLC61du3b5zALPRgCBFAUIElOE4zIEEEAgVkDBoTdZpEWLFqZXPtOSJUvy+Xj37NraWtNLLhojSbCY9yohAwgkJUCQmBQXJyOAAALxAgoQKysrrXXr1u4Vf0a0jxw6dMj5SIFAMdq/BUofLIH8/qdusKzILQIIINCggFrK1K2qIJEULyCXVq1a2e7du+O/5AgCCPhWgCDRt1VDxhBAIAgCBw4ccDOJCRCbri0FieqCV6srCQEEgiFAkBiMeiKXCCDgU4GamhoXJPo0e77KloJEeZEQQCAYAgSJwagncokAAj4WyPckFR/THJc1nI7j4A8EfC9AkOj7KiKDCCCAAAIIIIBA7gUIEnNvzhMRQCAiAmo5+8Mf/hCR0lJMBBAImwBBYthqlPIggAACCCCAAAIZEGCdxAwgcgsEEEAgWYGJEyfaJZdcYm3btrU333zTfv3rX7tb9O/f36688korKipyu6b86Ec/cotRT5s2zT72sY+5pXa0UPbPfvYzO3r0aLKP5XwEEEAgYQGCxISpOBEBBBDIjEDnzp3t8ssvt5tuusmtHXj99dfb6aefbi+++KJdfPHF9vjjj9sbb7xhJ598sg0YMMAFiVdccYXNnDnT9u3b54LF0tJS2759e2YyxF0QQACBBgQIEhtA4RACCCCQTYERI0ZY7969berUqe4xHTt2tEmTJrkgUfstf/zjH7fi4mKbN2+e7dixw51TXl5uV199tc2ePdueeuop0/qMJAQQQCCbAoxJzKYu90YAAQQaENDC0rt27ap7Pffcc/bkk0+6M//85z/b/fffb2ptvO222+zUU091x//rv/7LnnnmGRs5cqTde++91qdPnwbuzCEEEEAgcwK0JGbOkjshgAACCQksX77cqqurbcGCBW4HkvHjx1ubNm3ctTNmzLC5c+faH//4R9u5c6eNGTPGdT2fd955rht6/vz51qFDBxs0aJBt3LgxoedxEgIIIJCKAEFiKmpcgwACCCQooODv5z//ed3ZCxcudC2BjzzyiP3gBz9w3ca1tbXus07SmEO1Gmq8oSa1/PjHP7ZDhw65lsW77rrLTWZRgKmuaBICCCCQTYGCsrIypsdlU5h7I4BAqAUqKytdq6BmI6eSFAjWH19YUFDgZjfXP96yZUvTS0FjENPBgwdNe1yrK52EAAL+F6Al0f91RA4RQCDEAvUDQRVVS9s0dPzIkSOmFwkBBBDIhQATV3KhzDMQQAABBBBAAIGACRAkBqzCyC4CCCCAAAIIIJALAYLEXCjzDAQQQAABBBBAIGACjEkMWIWRXQQQ8J/A4cOH3eQVv+VME2D8lOSkiSskBBAIhgBBYjDqiVwigIDPBfy2j7ICRL/lyedVSPYQQKCeAEFiPRD+RAABBJIV0LI03mLYyV4bpfODunRPlOqIsiIQK8CYxFgNPiOAAAIIIIAAAgg4AYJEfggIIIAAAggggAACcQIEiXEkHEAAAQQQQAABBBAgSOQ3gAACCPhM4KSTTmo0Rx07drSRI0c2+j1fIIAAApkSYOJKpiS5DwIIINCIQM+ePW3w4ME2b968Zvddbt++vZWUlLg7DR061O3h7N12w4YNVlFRYWPGjLGlS5d6h3lHAAEEsiJAS2JWWLkpAggg8C+B8847z84++2wbPXr0vw428mnSpEn29ttvu2+1T7PWFtRrwoQJdcHj+vXrrX///o3cgcMIIIBAZgQIEjPjyF0QQACBBgW6dOliffr0sdmzZ9u4ceMaPMc72KJFC+vWrZtt27bNHSovL3cthmvWrDF9t3r1and84cKFLmj0ruMdAQQQyIYAQWI2VLknAggg8E8BBYbqJp4/f77rclZ3cmNp0KBBpoCwfpo6darNmTOn7vDBgwdd0NiqVau6Y3xAAAEEMi1AkJhpUe6HAAIIxAicfvrprmt44sSJLrBrqstZwWTfvn1jrjZr27atu3758uV1x9WqqAW8a2pq6o7xAQEEEMi0AEFipkW5HwIIIPBPAXUdFxYWujGGlZWV7uj48eMb9VELoV6awewltSKqqzo2KdBcsmRJ7CE+I4AAAhkXIEjMOCk3RAABBN4XUFfzrl277PHHH3eB3kMPPWT9+vWzzp07N0qkGdBTpkxx37dr1y6uFVFfaAkcZjc3SsgXCCCQIYGCsrKyoxm6F7dBAAEEIiegFsIDBw5kdO/mGTNm2NNPP92gZadOnWzs2LFxrYsNnuyzg9q7WXtcNxUk+yzLZAeBSAsQJEa6+ik8AgikK6Agsaqq6rj1DNO9Z1ivr66udmMsCRLDWsOUK2wCdDeHrUYpDwII5FRAM4yPHqVDJhF0OTEjOxEpzkHAHwIEif6oB3KBAAIBFdDsYwU/zDRuugK1IHhtba1pnCUJAQSCIUCQGIx6IpcIIOBjAS2Yrd1RCBQbriS5KEgsLi5u+ASOIoCALwXYu9mX1UKmEEAgSAJe65j2VVYwVFBQ4NZEDFIZspFXtRyqlVXvChA9p2w8i3sigEDmBQgSM2/KHRFAIIICCoD00iQWBYr5ToMHD67bxi+fedE6kQSH+awBno1A6gIEianbcSUCCCAQJ+CXgEhBotZoVCseCQEEEEhFgDGJqahxDQIIIOBzAa2nyKxrn1cS2UPA5wIEiT6vILKHAAIIIIAAAgjkQ4AgMR/qPBMBBBDIsoAm0WgCDQkBBBBIVYAgMVU5rkMAAQR8LKBleehu9nEFkTUEAiBAkBiASiKLCCCAAAIIIIBArgUIEnMtzvMQQAABBBBAAIEACBAkBqCSyCICCCCAAAIIIJBrAYLEXIvzPAQQQAABBBBAIAACBIkBqCSyiAACCCCAAAII5FqAIDHX4jwPAQQQQAABBBAIgABBYgAqiSwigAACCCCAAAK5FiBIzLU4z0MAAQQQQAABBAIgQJAYgEoiiwgggAACCCCAQK4FCBJzLc7zEEAAgSwKDBkyxN3d25bP+zuLj+TWCCAQUgGCxJBWLMVCAIHoCkyePNm0Ld/EiROji0DJEUAgbQGCxLQJuQECCCDgH4FVq1ZZcXGxFRQUuHf9TUIAAQRSESBITEWNaxBAAAEfC6xevdrlrry83Me5JGsIIOB3gUK/Z5D8IYAAAlEUOHjwoO3bt89qa2utTZs2SRHMnz/f9uzZY16wmMzFem7Lli2tXbt2VlRUlMylnIsAAiETIEgMWYVSHAQQCL7Ajh077PDhw64gR48eTalAS5YsSek6PffIkSN26NAhKywstNLS0pTuw0UIIBB8AYLE4NchJUAAgRAJKEBUkKaWvHyk2FbLAwcO2Pbt261bt275yArPRACBPAswJjHPFcDjEUAAAU9g7969VlNTY23btvUO5fVd+VDLovJFQgCB6AkQJEavzikxAgj4VEAtdxoP6KekLueqqio/ZYm8IIBAjgQIEnMEzWMQQACB5gTUihjb3dvc+bn4XvlRvkgIIBA9AYLE6NU5JUYAAZ8KpDpJxafFIVsIIBBwAYLEgFcg2UcAgegJlJSU+K5bOnq1QIkRCL8As5vDX8eUEAEEQiIwbdo0u/TSS01jFzt37mzPPvus/f73v7dUWiB79eplo0aNsueffz4kOhQDAQQyLUCQmGlR7ocAAghkQaBfv352+eWX280332wbNmxwS+R8+9vfdp9ffvnlpJ+oZW2mTp1KkJi0HBcgEB0BgsTo1DUlRQCBAAucdtpp9sQTT7igUMXQjOP77rvPevfu7UrVp08fmzlzptuvubKy0u6++27btGmTCyZnzZrl1jrUfs4PPPCA243lS1/6knXp0sVuu+02u/HGGwMsQ9YRQCBbAi379u17S7Zuzn0RQAABBBIXUHCn2cQK5uqnCy64wObMmWNbtmyp+0pb76lVUWnixIn2xhtv2C9/+Us3XvGUU06xN99806ZPn+7+vuOOO2zZsmU2bNgwW7Bggbuua9euptbI5pK26uvUqVNzp/E9AgiETICJKyGrUIqDAALhFND6idqJpbH0yiuvuK9mzJhhEyZMsLFjx7q/165da2VlZXbRRRe5YPHpp59u7BYcRwABBI4TIEg8joM/EEAAAX8KlJeX26BBg47LnLbu69mzpzt2zTXX2FlnneUmtejcffv2ueOLFy+2G264wXVPX3XVVXbllVcedw/+QAABBBoTIEhsTIbjCCCAgI8EXnvtNVOXs7ePsloWr776apsyZYrL5bhx4+yhhx6yl156ybU4ekGiuqG7d+/uxjPeeeeddS2M6kLu2LGjj0pIVhBAwG8CTFzxW42QHwQQQKABgZUrV9qDDz5ot956q5t4UlxcbPPmzbOnnnrKnf3oo4/a7bffbjt37rQ1a9bU3UF/X3vttW7/ZQWFDz/8sPtuxYoVLpi866673Pd1F/ABAQQQ+KdAwbGxKkfRQAABBBDIv4AmoSiQa2jiSmzu1JpYUVERt11eq1at3GkNbaOnrumG9mBubqyjbqgJNccmOcZmgc8IIBABAVoSI1DJFBEBBIIh0Fxw6JVi+/bt3sfj3hsKDr0TGgoQ9V1Tk2G8a3lHAIFoCjAmMZr1TqkRQMCHAmoJ1FhBPyXlx2uh9FO+yAsCCGRfgCAx+8Y8AQEEEGhSQC2I6s7Vgth+a9k7fPiwW7BbO760aMG/MpqsSL5EIGQCdDeHrEIpDgIIBEdA4wQVGOq1a9cut3yNWu20N3Pbtm3zXhDlQ/nRQtranWXo0KG2ceNG99q/f3/e80cGEEAguwJMXMmuL3dHAAEE4gRKSkpsyJAh1qFDB7fziQKv2DGDO3bsMLXgKR09etQKC3P33/N6rjc2Us8tLS2ty78CVwW0avVUkLh69Wo3m7ruBD4ggECoBAgSQ1WdFAYBBPws4LUaqtvWa5Grra1tMMsaC6i1DvW9turLVdJzlT8FsI09V0GkVxblyyuLAloSAgiER4AgMTx1SUkQQMCHAlpiRuP59KqurjbthqKWwrAk7f88ePBg1z2+fv1608trBQ1LGSkHAlEVIEiMas1TbgQQyKpAUVFRXXC4detWFzxpvcGwJq3vqEC4V69erqzr1q1zQXFYy0u5EIiCAEFiFGqZMiKAQM4ENMnD64r1WtZixxvmLCN5epDGLXotp5s3b7ZNmza5hb/zlB0eiwACaQgQJKaBx6UIIICAJ6DgsH///m6ih1rRFCA2tbi1d11Y3zXpRcGiTDRzWyZ79uwJa3EpFwKhFCBIDGW1UigEEMiVgJaxGThwoHXv3t3tmRy7b3Ku8uD35wwYMMAZaSymfFg+x+81Rv4QeF+AIJFfAgIIIJCCgGb4asKGXloKRi9m9zYN6XkpUJRXYzO7m74L3yKAQK4ECBJzJc1zEEAgNALdunVzC0vv3bvXVq5cyQSNJGpWy+poUe7OnTs7u23btiVxNacigEAuBXK3QmsuS8WzEEAAgSwJDB8+3Hr06GHLli0zApzkkbUO46JFi0yB9ogRI6y4uNhZJn8nrkAAgWwL0JKYbWHujwACoRBo3769jRw50hTkLFmyxHd7LAcRWV32o0ePNo3rlKkWDychgIB/BNit3T91QU4QQMCnAuoaPfHEE90WdO+99x4BYobqSWM41aqoFln5qlWRhAAC/hEgSPRPXZATBBDwoYAWiR4/frybaKEJF6TMC6xdu9ZWrFjhnLWUEAkBBPwhQJDoj3ogFwgg4EMBdYeqi1nBoRaFJmVPYMuWLW4iy6hRo9ze0dl7EndGAIFEBQgSE5XiPAQQiJyA1vfTGEQtjE3KvsDGjRvdGooDj607SUIAgfwLECTmvw7IAQII+FSgb9++BIg5rhsF5HInIYBA/gUIEvNfB+QAAQR8JDBkyBA3gaKoqMhatmzpcqZjpOwLyLlFixZuUXLNeNZEFuyz784TEGhMgCVwGpPhOAIIRFbgzDPPdDNuFah06NDBnn322cha5Lrgstci5dXV1W4tRexzXQM8D4F/CdCS+C8LPiGAAAJOQFvGaS9mBYj6TMqdgLw1o1yLbWOfO3eehEBDAgSJDalwDAEEIi2watWquvLHfq47yIesCcR6x37O2gO5MQIINCrAtnyN0vBFVAWqqqrs8OHDUS1+XLk1u1dj89q2betecSdk+IC6Gffv32+1tbWmfX7zlWbPnm1aAqeysjJfWXAzq7HPD3+uf/f5KSVPRaBpAcYkNu3DtxESUHBYUVHhAgMNnteLZHUBswKmwsJCKy0tzRrLjh073PO0E4eSnhfl5P3HCva5/xXk0j73peOJCCQmQJCYmBNnhVxAAaIGy6vVpnXr1iEvberFk5OCZwWKmQyiFRQqQFTroVosSfEC2Meb5OpItuxzlX+eg0CqAjSVpCrHdaESUAsiAWLzVarZvkeOHHEBdfNnJ36GAvSamhoCxCbIsG8CJ8tfZcs+y9nm9gikLUCQmDYhNwi6gFoJ1J1HC2JiNaku4AMHDiR2coJnqQ5atWqV4NnRPQ37/NV9NuzzVxqejEBiAgSJiTlxVogFNPYok12nIaZyRdNkErX6ZTKpDvI5SSWTZcnmvbDPpm7T986GfdNP5FsE8i9AkJj/OiAHPhAgSMxvJXgTVfKbi2g+Hfto1julRiARAYLERJQ4B4E0BQYOHGglJSVp3qXxy3VvWuIa98nkNwMGDLCuXbtm8pbcK0EB7BOE4jQEMiRAkJghSG4TTgG1MD766KP2q1/9yh588EH7+c9/bh/5yEeSLuw555xjo0aNSvq65i7QvrY//elP7Zvf/Kbde++9NnPmzLr9hpu7NijfX3rppXb//ffHZXfw4MH22GOPuZ1R4r6MOTBhwgQbPXp03ZF073fWWWfZ2LFj6+4X5g/pWmEf5l8HZYuCAEFiFGqZMqYloEV1L7vsMvvc5z5nt9xyi1100UWmlkE/pM9//vMugP3qV79qV155pQuYpkyZ4oesZSwPGq/Yu3dvGzp06HH3vOCCC477u7E/FCAOGzas7ut071d3owh8SNcK+wj8SChiqAWivVJtqKuWwmVDYOPGjfbee+9Z//79bc2aNTZx4kS75JJL3NItb775pv361792jy0qKrL/+I//MLV2rV+//rjZwF6Ln07U/rRXXXWVffe733XXffSjH7UPfehDbhHpF1980f70pz+54409p7i42LZv3+7O0dI03//+991MbR1Qq+Kzzz5ry5Ytc9//8Ic/tJtuusntR6zvtm3bZmrpefvtt23lypV2/vnnu+f+6Ec/qrvGXeiDf8hWLXjKp5J8FTR6f+uYguPPfOYzrttdx++55x6bNGmSTZ8+3a2/KOv/9//+n0615u7Xr18/++QnP2l33HGHO//UU0+1Xr161dWHOxiRfzRnJQbsI/JjoJiRE6AlMXJVToHTEVCLlLoalyxZYp07d7bLL7/cbrvtNps1a5b16NHDTj/9dHd7BSubN292rXu//OUvXbDiPVeBnZfUna37KE2ePNlOOukku/766+3aa6+1MWPGuBawpp7zyCOPuNbNL3/5y3byySe7YMhbnqZjx47HLSvTpUsX9xytB6l7qxtdAerIkSOtT58+9pWvfMUFQQoW/Zbeeust12Ws4FDplFNOMW2bp8DYS+p6/853vuPMtSi3PF577TV77rnn7K9//WtdgKjzm7ufjDp16uTd2gWe7du3r/s7Sh+as5IF9lH6RVDWKAkQJEaptilrSgKaEKKxiL/4xS9cQHjnnXe61rsRI0a4btCpU6faueeeawrK1HKlpCDs73//u2nm6KZNm2zhwoXNPvuEE05wAc2hQ4fcnr3f/va3bcWKFdbUc55//nnXYrl27Vr78Ic/7PKpVs7mklpEFcQqyNqwYYO988477hK1jnrBZHP3yOX3CvpeffVVU4uekloH1Uoam/7yl7+4YEV1oYBbLYeNpUTu19i1UTueiBX2UftVUN6oCBAkRqWmKWfKAhqTeMUVV7hWQwVjamVS0uLPu3btqnupxerJJ59032nhXY3n8lJsi5cCR2/JHe9eOk/H9C/k+qmx52gBcG1ht3v3bnviiSfsW9/6liloPPPMM90tYp+jA94z9Tn2ObpPEJZBka+CQ81w1eLb6i73kozUna4uaHl4Xeze9w29N3U/nR/rFfu5oXuF/VhTVtiHvfYpX5QFCBKjXPuUPSkBBVK/+c1v7LOf/awb97d8+XKrrq62BQsWuK5Pbe3nLUOjIEVdokrqLh43blzdsxRY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" + "cells": [ + { + "attachments": { + "image-2.png": { + "image/png": "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wmVDYOPGjfbee+9Z//79bc2aNTZx4kS75JJL3NItb775pv361792jy0qKrL/+I//MLV2rV+//rjZwF6Ln07U/rRXXXWVffe733XXffSjH7UPfehDbhHpF1980f70pz+54409p7i42LZv3+7O0dI03//+991MbR1Qq+Kzzz5ry5Ytc9//8Ic/tJtuusntR6zvtm3bZmrpefvtt23lypV2/vnnu+f+6Ec/qrvGXeiDf8hWLXjKp5J8FTR6f+uYguPPfOYzrttdx++55x6bNGmSTZ8+3a2/KOv/9//+n0615u7Xr18/++QnP2l33HGHO//UU0+1Xr161dWHOxiRfzRnJQbsI/JjoJiRE6AlMXJVToHTEVCLlLoalyxZYp07d7bLL7/cbrvtNps1a5b16NHDTj/9dHd7BSubN292rXu//OUvXbDiPVeBnZfUna37KE2ePNlOOukku/766+3aa6+1MWPGuBawpp7zyCOPuNbNL3/5y3byySe7YMhbnqZjx47HLSvTpUsX9xytB6l7qxtdAerIkSOtT58+9pWvfMUFQQoW/Zbeeust12Ws4FDplFNOMW2bp8DYS+p6/853vuPMtSi3PF577TV77rnn7K9//WtdgKjzm7ufjDp16uTd2gWe7du3r/s7Sh+as5IF9lH6RVDWKAkQJEaptilrSgKaEKKxiL/4xS9cQHjnnXe61rsRI0a4btCpU6faueeeawrK1HKlpCDs73//u2nm6KZNm2zhwoXNPvuEE05wAc2hQ4fcnr3f/va3bcWKFdbUc55//nnXYrl27Vr78Ic/7PKpVs7mklpEFcQqyNqwYYO988477hK1jnrBZHP3yOX3CvpeffVVU4uekloH1Uoam/7yl7+4YEV1oYBbLYeNpUTu19i1UTueiBX2UftVUN6oCBAkRqWmKWfKAhqTeMUVV7hWQwVjamVS0uLPu3btqnupxerJJ59032nhXY3n8lJsi5cCR2/JHe9eOk/H9C/k+qmx52gBcG1ht3v3bnviiSfsW9/6liloPPPMM90tYp+jA94z9Tn2ObpPEJZBka+CQ81w1eLb6i73kozUna4uaHl4Xeze9w29N3U/nR/rFfu5oXuF/VhTVtiHvfYpX5QFCBKjXPuUPSkBBVK/+c1v7LOf/awb97d8+XKrrq62BQsWuK5Pbe3nLUOjIEVdokrqLh43blzdsxRY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" + }, + "image.png": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAUAAAAEbCAYAAACr2V2eAAABYmlDQ1BJQ0MgUHJvZmlsZQAAKJF1kDFLw1AUhU9stSAVHRwEHQKKUy01rdi1LSKCQxoVqlvyWlMlTR9JRNTFQRengi5uUhd/gS4OjoKDguAgIoKDP0DsoiXeNGpbxft43I/DvYfDBTrCKudGEEDJdCxlOi3mFpfE0Au60ENPQEBlNk/J8iyN4Lu3V+2O5qhuxzyvq5px+bw3PJi1N6Nscmv173xbdecLNqP+QT/BuOUAQoxYXne4x9vE/RaFIj7wWPf5xGPN5/PGzLySIb4h7mNFNU/8RBzRWnS9hUvGGvvK4KUPF8yFOeoD9IeQRgEmshAxhRzimEAM41D+2Uk0djIog2MDFlagowiHtlOkcBjkJmKGHBmiiBBL5Cch7t369w2bWrkKJN+AQKWpaYfA2S7FvG9qI0dA7w5wes1VS/25rFAL2stxyedwGuh8dN3XUSC0D9Qrrvtedd36Mfk/ABfmJ+uTZFvl1hD0AAAAVmVYSWZNTQAqAAAACAABh2kABAAAAAEAAAAaAAAAAAADkoYABwAAABIAAABEoAIABAAAAAEAAAFAoAMABAAAAAEAAAEbAAAAAEFTQ0lJAAAAU2NyZWVuc2hvdP5iyG4AAAHWaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI4MzwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4zMjA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpVc2VyQ29tbWVudD5TY3JlZW5zaG90PC9leGlmOlVzZXJDb21tZW50PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4Kk67BXQAAJDZJREFUeAHtnQuwVVUZxxfKS+QlIKJg8pSXKJQ8VbxqqKBjJmlaUxra5KTWZPhoSoXR1DR10lIZHUsrRZMJy8hSlLhAoJiIFSqKegUUBHkICEgZ/2X7uO/hnHP3Pufsc/ZZ67dmzr377L3W2uv7ffv+73rvZqNGjfrYECAAAQh4SGAvD23GZAhAAAKWAALIgwABCHhLAAH01vUYDgEIIIA8AxCAgLcEEEBvXY/hEIAAAsgzAAEIeEsAAfTW9RgOAQgggDwDEICAtwQQQG9dj+EQgAACyDMAAQh4SwAB9Nb1GA4BCCCAPAMQgIC3BBBAb12P4RCAAALIMwABCHhLAAH01vUYDgEIIIA8AxCAgLcEEEBvXY/hEIAAAsgzAAEIeEsAAfTW9RgOAQgggDwDEICAtwQQQG9dj+EQgAACyDMAAQh4SwAB9Nb1GA4BCCCAPAMQgIC3BBBAb12P4RCAAALIMwABCHhLAAH01vUYDgEIIIA8AxCAgLcEEEBvXY/hEIAAAsgzAAEIeEsAAfTW9RgOAQgggDwDEICAtwQQQG9dj+EQgAACyDMAAQh4SwAB9Nb1GA4BCCCAPAMQgIC3BBBAb12P4RCAAALIMwABCHhLAAH01vUYDgEIIIA8AxCAgLcEEEBvXY/hEIAAAsgzAAEIeEsAAfTW9RgOAQgggDwDEICAtwQQQG9dj+EQgAACyDMAAQh4SwAB9Nb1GA4BCCCAPAMQgIC3BBBAb12P4RCAAALIMwABCHhLAAH01vUYDgEIIIA8AxCAgLcEEEBvXY/hEIAAAsgzAAEIeEsAAfTW9RgOAQgggDwDEICAtwQQQG9dj+EQgAACyDMAAQh4SwAB9Nb1GA4BCCCAPAMQgIC3BBBAb12P4RCAAALIMwABCHhLoLm3lmN4LAIffvih0ee///2vadmyZay05Yr88ccfm+bNm5t99923XFmSj+cEEEDPH4CmzJfgvf/++1b4FHevvarXaPjPf/5jduzYYTZt2mQ6duxo2rRp01TxuQ6BggQQwIJ4/L64a9cus379etOiRQvTpUuX1MDYtm2b2bJliy0PIpgat9RkQRDAmnRbZQq9detWe6NOnTpV5oYR7xKI3saNG6kFRmRGtNwEqteeyV0ezqaIgGpabdu2TVGJPi2KRFD9gYFIf3qFIwhEJ4AARmflVUz1/emT5gEHNc3VTCdAoFgCCGCx5EhXdQJ777131ctAAWqbAAJY2/6rWul79+5t9ttvv6rdnxtDoBwEEMByUPQwjxEjRhiJYBLh+OOPR1yTAEueexBgFHgPJJyIQmD69OlRohUVZ8yYMWbFihVmw4YNRaUnEQSiEti7R48eU6JGJp4/BLTqQnPt2rdvn9Pos88+26gPbs2aNWbKlCl2OsqkSZOMaoZvv/22naw8cuRIU1dXZ8aPH2/OOOMM06dPH7NkyRI7uHL++eebDz74wE6y1g2mTp1q/v73v5uJEyeaYcOGmUGDBtlJzw0NDTnvr5OaFK3QunVr+5sfEIhLgCZwXGLEtwQ0DSVYEtehQwe7TO4HP/iBWbhwoTnppJNsnFatWhnV5u677z4zefJkK6inn366vabpNRrFDYLyaNasmXnkkUeMRG/atGlm3rx5wWV+QyARAghgIlj9y3Tx4sXWaNXwVNMLwosvvmjWrVtnVKOcM2eOGThwYHCJ3xCoOgEEsOoucKMAwXw8/VZNLghavxsEXQtPXQmvKw6nCeLzGwJJE0AAkybsef5DhgzJTKYeNWqUef311y0RbbAQjCJ369bNbm4QoFLfXrt27YKv/IZAYgQYBU4MLRmLgATv+9//vlF/oJbW3XbbbRbM008/bS6//HI7aLJy5Uo7aBIQq6+vN+eee6557LHHjI4JEEiKQLPd/5U/Tipz8q1dAloG984775ju3bsXbcTYsWPN7lkG5sEHH7QCGIzahjPcZ5997ABK+JyOgyax+g7zhc2bN9u+RQ2gECBQDAGawMVQI00kAh999JHZuXOnjZtL/HRBm6zmChK+QuKnNEG/Y670nINAFAI0gaNQ8jCOBij00W4rxW6IoHl9SQYJoJrWBAgUS4AaYLHkPEinuX7BxqNpM1f9iRLAYsU5bfZQnuoQQACrw70m7hqIi3aFTlMIdoTWtvgECJRCgCZwKfQcT6sNR/fff3+7XG3t2rXWWjWLgxUglTZfcwrVr6iaH+8EqTR9N++HALrp17JZJcHT+0DCb4UrNvODDjrIiun27duLykKTqNXnF2yJX1QmJIJAiAACGILBYX4Cmq6iTylBGxysXr3aaN4fAQJpIEAfYBq84EkZNK0lrYMqnrgAM7MIIIBZQPgKAQj4QwAB9MfXVbdU/YnM26u6GyhAiAACGILBYbIEtLwu34qQZO9M7hDITQABzM2FsxCAgAcEEEAPnIyJEIBAbgIIYG4unIUABDwggAB64GRMhAAEchNAAHNz4SwEIOABAQTQAyenxUQtZSt1NUlabKEcbhBAAN3wY01Yoc0M8m2AWhMGUEjnCCCAzrkUgyAAgagEEMCopIgHAQg4RwABdM6lGAQBCEQlgABGJUU8CEDAOQIIoHMuxSAIQCAqAQQwKiniQQACzhFAAJ1zKQZBAAJRCSCAUUkRr2QCzZo1s+8aLjkjMoBAmQgggGUCSTZNE9CW+NoTkACBtBBAANPiCcoBAQhUnAACWHHk3BACEEgLAQQwLZ6gHBCAQMUJIIAVR84NIQCBtBBAANPiCcoBAQhUnEDzit+RG0KgAIHmzZubXbt2FYjxyaUWLVo0iqPRZW23paA89PrNrVu3NorDFwhkE0AAs4nwvSoEBg8ebA444ACzc+dO0759ezNnzhyzbdu2nGXRfMJRo0ZlrnXu3Nls3rzZPP3002b06NF201W9frNdu3Y2n+3bt2ficgCBMAGawGEaHFeNwKpVq6yAzZs3z06WlqipJjd27NhMmSSS3bp1M5pPWF9fn/kowtKlS61w9ujRw+Yzf/58895775n+/ftn0nMAgWwCCGA2Eb5XhcDGjRvtfYcPH25atmxpVq5caZvCag4fddRRRsI2aNAgK2rhAqrWqObvunXrTMeOHc2GDRsyl5WnzhEgkI8AApiPDOcrTkBi1qtXLzNz5kxby1MBFixYYHr27GnOPPNM8/jjj2f6+YLCqSm8aNEi+3WvvfbKpNMJCaPeQ0KAQD4CCGA+MpyvOAE1bZ9//vlGy+Vat25tRUz9eJ06dWpUpq5du9rm8po1a+z5TZs22X6/IJL6AHWOAIF8BBDAfGQ4X3ECW7ZsMfoEQTW6CRMmmLlz55r777/f1NXVmQ4dOgSXzciRIzO1P52U2Ol6mzZtbJwBAwbYpnQmAQcQyCLAKHAWEL5Wj0Dfvn1Nv379zIwZM2whVCNcvHixaWhosN+feOKJTBO4S5cudqrL6tWrMwVWk1di+aUvfcmOJmtgJagdZiJxAIEQgWa7+1A+Dn3nEAKJEdAAx/Lly00w4JHrRqr1SchKCcpD8wQ1FYYAgUIEaAIXosO1ihMoVfxUYOWB+FXcdTV5QwSwJt1GoSEAgXIQQADLQZE8IACBmiSAANak2yg0BCBQDgIIYDkokgcEIFCTBBDAmnRbbRaalyLVpt9cLjUC6LJ3U2YbL0VKmUMojkEAeQggAAFvCSCA3roewyEAAQSQZwACEPCWAALoresxHAIQQAB5BiAAAW8JIIDeuh7DIQABBJBnAAIQ8JYAAuit6ytvuLan32effSp/Y+4IgTwEEMA8YDhdfgJ6b++HH35Y/ozJEQJFEkAAiwRHMghAoPYJIIC170MsgAAEiiSAABYJjmQQgEDtE0AAa9+HWAABCBRJAAEsEhzJIACB2ieAANa+D1NvQZ8+fWwZ9ba2Vq1aGX0PzqW+8BTQaQIIoNPuTYdx77//vhk3bpyRAHbu3NkW6vXXX09H4SiF1wQQQK/dXxnjN2zYYPRp27at6d69e2Vuyl0gEIEAAhgBElFKJxDU+N577z0THJeeKzlAoDQCzUtLTuqoBLQCQh+9tLtly5ZRkzkTb/PmzUbvBNm6davRsY9BrwRo3ry52XfffX00P5U2I4AJu0WCpz4wLQPTH4BC8DvhW6cu+1deeSV1ZapkgfQs6LNx40bTsWNHhLCS8PPcCwHMA6Ycp3ft2mXWrVtnO//ZBKAcRN3I46OPPjIffPCBNYbaYHV9Sh9ggvzV3FNtr3Xr1gnehaxrjUCLFi2MPps2baq1ojtXXgQwQZdKAH3s70sQqTNZSwA1LUjPCKF6BBDAhNirr0e1Pz3oBAjkIqBBITWHCdUjgABWjz139pyAaoCE6hLAA9Xl7/zdDznkkMzqj2xjhwwZEquLoFOnTka7SodD3DzCaXMdd+nSpdEyPU3eHjlypNG9s6/lSs+52iLAKHCV/PWrX/3KzovT2liFHTt22ObQBRdcUHKJvvKVr5jTTjvN5hlkdsstt5ilS5cGXyv2+8QTTzSvvvqq+dvf/rbHPb/5zW+aqVOnmvXr1+9xLXziqKOOMl//+tftPMoOHTqYJ5980jz00EO2iyFqHuH8Ch0feuihVgCDydpXXXWV0fSdFStWmH79+jW6VigfrtUGAQSwSn4677zz7J3PPvtsK3wzZswoa0mmT59uZs6cWdY8q5HZwQcfbPRPQUK0cuVK06ZNG3PNNdfY47lz55a9SAsWLDD6BEH3v/LKK63YahVL+FoQh9+1SwABTJnvjj76aHPYYYfZmoZqHXfddZf54he/aI477jg7mfr3v/+9Cf7wP/vZz5pzzjnHvmjo2WefNQ888EBBa9SEu/jii83atWuNmo6vvfaaufvuu+1I5Gc+8xlz4YUX2ik7mp7xs5/9zE7Y1cqFb3/726Z///52Bce0adPMm2++aVTOgQMH2rW9Svvb3/7Wlnno0KF2escNN9yQWfGh6zfddJNR7a2+vt785je/2aOc+Ww59thjzZ/+9CcreEq0bds284tf/MIcdNBBe+QxfPhw87Wvfc3uOCPb7rjjDrN9+3ajGuQZZ5xhV2EsW7bMyAYNUCmuyquBqj/+8Y+2Zjl69GjTu3dva8+Pf/xjy0NlV5r9998/c60Ql2z/7VFQTqSGAH2AqXHFJwVRk/jwww831157rRU/CYP+SL/3ve+ZH/3oR+bMM880BxxwgBUT1YwkNJdccok9V1dXl7FGeUycODHz0VxE9Z9J+B5//HFz0UUXWUEdNWqUTfPlL3/ZPPbYY+bSSy81f/3rX4367hS++tWvGtV8FP/ee+81kydPtudVTuV1/fXXm8suu8yK5D/+8Q/7e9WqVVZ0bMTdP1T+q6++2oqvRHPMmDHBJftbwpjPll69elmhDidoaGgwCxcuDJ+yx9piS01qCblG4SVmCmomq9b43e9+14q//hGoZjds2DBrz+WXX24OPPBA2yWhaUuqZSr88Ic/tM1u2SdBDV8rxCXsP5sRP1JLgBpgCl3zwgsvZGpPY8eOtUumxo8fb0sqsZCIqCakWlAgJu3atTOf+9znzJw5c2w89Slu2bIlY50EQWH16tVGAqKg+wwaNMjMnj3b9nGdddZZZr/99jOLFy+2K1gU5/TTT7fCeOqpp+qr6dGjhx0M0LH6FHfu3Gn78LSy4cUXX9RpW0PUUq8gPPPMM7Ympu+61+DBgxs1JVW7zGeLRFvLCKOEP/zhD7b2LOE78sgjzdtvv22TvfHGG1bA1Xz985//bEVNgxv6TJo0yTz//PO2VhpniWIhLmH/RSk3capHgBpg9djnvXP4D15TJdRk1XpifVQL06CCmm3BOf1+6qmnzKxZszJ5quP+L3/5S+YjoVIIzzvTUj3NRVNQH+Sdd95pa5aqVR5zzDH2vIQzfP9bb701I2aBqCqi8sknILpPEHSs5mM4FLJF4qVaYDiohtatW7fwKcvjpz/9qenbt6/deiu87li1adVqBwwYYH7+85/bZrv+OahGqJqdBmpkV/YIc6MbZH0pxCXsv6xkfE0ZAQQwZQ7JLo5qYwpB57yaYRIaiaD6t5YsWWKvaYF9MKKcnUeU7yeffLLt83v44YeNPqqlKajGJnHT/Z977jnTtWtXW4OKkmcQR/2FgdCqPy4sTopTyJb58+ebL3zhC7b/TXElUmqOq78vHNQ/p3s8+OCDtqwSKHESL9XWVFu95557zD//+U8rqKrJjhgxwo5O33zzzbaW3b59+3CWBY/LwaXgDbhYEQKN/xVX5JbcJA4BDXio5nL77bfbZBoYUZNStYxHH33UDi4E22ypsz4I6is85ZRTgq82vWpy+YJqRKopqb9PGzcE99N0nSuuuMIcf/zx9ryakHFrOBq9Ve1M/ZDLly+35Q+XQ/fMZ4tqaCrDddddZwdXgia6yhEO77zzjlFtUQMfskWbUCio5qtug9tuu82m1z8N/VORWKrfccKECVZUNU1Hm7ZGDeXgEvVexEuOQLPdneCf7NGU3D28zFk1EP1Rqm+uHEE1H32Cpmw4TwmWRLDUIFGQSOXKS7VLNZ/Dzd4491PeaurmKn84n0K2qJanmm64GR9Oq2OVX/2f2c3xfPwUX2Uq1q5SuKicYhLuL822h+/JEqAGmCzfsuWuWle+mlcuwSrmxhKNfHnpj7WUoLybEj/ln+/+uqaaYlNBNbxcIR+/fPFz5ZHrXClcihXdXOXgXHEE6AMsjluTqTR4oVpPodpKk5kQwWkC+qegGiChegQQwATZa7PLKLWeBItA1ikloH+MqpWyIWp1HYQAJshfD7dqgZqzR4BAQEDip+lA9P0FRKr3mz7ABNlrvpumjWieXlgE1SFP8I+A+vzU7NVvjUxT+6v+M4AAJuwD9QVq6ZU69/XRw6+5abUaJN4ajdUfsqbV6HeSQaPoup8GQIL3aCR5vyTzFiv9U0T4kqQcL28EMB6vomNreoc+tRw0B09L59599137bt9yTfFpiomajJpALcHVvEACBMpFgD7AcpF0PJ/u3bsbbcygffKCvfIqZbJ2p9EqFK3dPeKII+xcv0rdm/u4TQABdNu/ZbFOm4Rq6ZhESLW/agTVArXsT32p2m1FfWgECJRKYO/dD/aUUjMhvZsE1FcpsVG/n9bQhgdyqmWxBpTUl6atrDSJudb7BavFkft+QoA+QJ6EnAS0iak+Ws5X6SZvzgKFTmpLL71OUhs2qB8ye3OFUFQOIVCQAE3ggnj8vKgNV9Xs1aBD2sQv8Ij6BbULtprC2oGZAIFiCCCAxVBzOI12StbuM9okVNtUpTloMrFEUFOLNEDDsrI0eyudZUMA0+mXqpRKm4lqtFfbRcXZGqoqhQ3d9N///rfdQVu7QDPHLgSGwyYJIIBNIvIjgub3aUNQ1fzUv1ZrQfMDte+gRFDzFQkQiEKAQZAolByOo5FeiZ+ak3qpUS0HvQNEm0/o3Sg6ZnCklr1ZmbIjgJXhnMq7aDNPTSxWje9f//pXKssYt1Br1qyxIqjpO5q2E7wYKW4+xPeDAE1gP/y8h5ValqeBA62xdUX8AiPVf6mmvKbxBK/3DK7xGwJhAghgmIYnxxI/TSTWfDq9R8PFoPeCqEmv120igi56uDw2IYDl4VgzuWiqiJq9Er+33nqrZspdTEG1+46Wz2kZnz4ECGQTQACziTj+XX1java++eabjlv6iXkSQb2wvU+fPkYTvAkQCBNAAMM0HD/W0jEJQlpXdySFX83hl156ya4YYROFpCjXZr4IYG36LXape/bsabeRevnll+3mBlEzaNOmjd2GKmr8tMbTJgrLli2zU36K3ZFbm5kS3CLAe4Hd8mdOazp37myGDBmSea+wdqnWH/Ps2bNzxtdJxRk3bpzdbUXvNenUqZOZNWtW3ldz5s0oZRe0xllzH7W7TdSgdwcfe+yx9oXrWmmiqTZqVhNqnwA1wNr3YUELJF79+/c3qvlpiVt9fb399OrVywqimsXdunWzeUgYjj766Mzx0qVLzYIFC8z8+fOdeYG31jdrFDzOoIjWGoubOGh6jXgS3CCAALrhx7xWqMajeXHayFQ7qKjmN2HCBFsD0msZNRJ8wgkn2F1VdF7bXylor73gWEvLVAtSM9KFIBHs169f5J2ltbpEk6q1VPDkk082ixYtcgEDNuwmgAA6/BjotYsa+Vy+fHnGSk2B2bhxo1m4cKE9pwGCp556ykyaNMk27bIHSDRtZvz48TZO0i9AyhQy4QP9I2hoaLAjw3Fuddxxx5l58+Y5P30oDpNaj4sA1roHC5S/d+/edsRX63yDIMHTYEA4qAm8Y8cO+wpPNZnDQTUeTSjW3oAuBQm9arbq24waVItmaV1UWrURDwGsDT/FLqVeJana26pVqxqlXb9+vRW74KRWSWgbrLvvvts2eceOHRtcMmPGjLFzBtV/6GLQKpg4q0TEUoNDBHcI8E4Qd3zZyJKBAwfa2opqfOFQV1dnp7UEwqi+Pc2R00uHgnNqIqpmdMopp9i4Q4cONfrovJrPrgS9T0S1ZDFSn2dT4ZxzzrGMeA9JU6Rq5zrTYGrHV5FLGmwTr1HL7KAajEY1CZ8Q0IYJGtyIMi0Gdu49NdTn3fOpndYSjOBmm4f4NSaiNdEHHnigHR1vfGXPb7Dbk0mtn0EAa92DOcqv/j9N1iU0TUADRBrgETOCfwQQQMd8rtdEqqZSi9vaV8sVGhiKMxpcrXJy3/ITQADLz7SqOao/S4MVhOgENLDDJgnRebkUEwF0yZu7bWnbtq0d1XTMrETN0Siwlsex2UGimFOZOQKYSrcUXyhNa9GWV4R4BDQNRmuhCX4RQAAd87cEMMqcNsfMLtkcMRM7gl8EEEDH/K0/Yi1rI8QjIGYIYDxmLsRGAF3w4v9t0ERd9WMhgPGdSg0wPjMXUiCALnjx/zZoJBPxK86h2hpMu18T/CKAADrgb+1qoqD1vOGdXxwwrWIm0G9aMdSpuhECmCp3FF8YvfUsHI488sjwV47zENA/jzA7fQ/+oeRJwmmHCCCADjhTOz7rj1bb3GvTUomfzhGaJhCw06YIet+H2LEqpGlursRAAB3xpDb41MamWgkiMcze2dkRMxMxQ6zETZ8VK1bALhHK6cwUAUynX2KXSjWZzZs323T6IyZEJyB2rJ2OzsulmOwHWKI39bKctAw8aCME7WqSBgHUgIym5WhunZaZJR304qJgo1LthB03qNmrUeCVK1fGTWoHnyppa+wCkiAvAQQwL5rCFyR8WkSveXfBp3AKv65KALUrjfok9Z4RNcuTWmur3Vx0P73wXEJUjACW4p1K2lpKOUm7JwFedb8nkybPSPzUZNK8O3WcEwoT0Os0161bZwcXyr3eVnlrDp/efpf9QqfCpUrmapK2JlNiv3OlD7AI/6vmp+YS4hcNnpqXqpmVu59Nu7io6du1a9dUiJ9oJGVrNNLEiksAAYxJTLU/NeUQv3jgVFsWu3KGtC5fS8LWcnIjr08JIICfsoh0pAGPpPqyIhWgRiO1atXK1gLLOWCkvjftf5i2kIStabPRlfIggEV4EgEsAhpJIJBCAghgCp1y8MEHx16NUCjN4YcfnhmpHjx4sLVYfVU9e/bMaX2hazkTpPBkx44djVZ3FApR4mSnLyZNdh58Tw8BBDA9vsiUpK6uzgwYMCDzPcpBoTTjx483+sPVnLzzzjvPZqf1ryNGjLDHGj2dOHFi5jbha5mTNXbQr18/8/nPf75gqaPEyc6gmDTZefA9PQQQwPT4IrGS/OQnP7HTUMI3eO6558wjjzxiT0kATzrppMzl8LXMSQ4g4CAB5gGW0alqOl5wwQVGLyU/4ogj7IYE99xzj33v7MiRI22tThsWvPXWW+aXv/ylUdNUNS/VzLQe9b777susKunRo4e55pprjFZ3LFq0yPzud7+zJR02bJg566yz7Psr3njjDaP8gz0A86W56qqrzK233trIUi36VxP40UcfNZdddplRx/2UKVPMvffea9cUB9fU3/mNb3zD9O3b175s6f777zcNDQ12GtD5559vunTpYqegPPDAA+a1115rdI+0fNGLz+UXjc5qtci0adPMu+++a4unVSqXXnqp6d69u7VL1zS6nM/utNhEOcpDgBpgeTjaXLQSQX1sL730kpk8ebJ58sknzbe+9S17TQKja7fccosVP/0xqjl6++23myuvvNKuKpGwBeGwww4zN954o72mZtfw4cPtJQnTTTfdZPPXSovgvC7mS6NF/tmThDUhOViidvPNN1sRlQBqKVj4mgRaKy2uuOIK8+tf/9pcdNFFthyjR482mvQrkZYIH3LIIfZ8Gn/on46EXj6ZN2+eOfXUUzPFHDJkiHnooYfstdWrV9t/LrqYz+5MQg6cIIAAltmNEoslS5bYXJ999lm7QiFYmiVhDNarqp/t5ZdftuKi5WLPPPOMGTRoUKY0+kNVzU7TRubOnZvpE3ziiSfstlfjxo0zQ4cONZ07d24yTSZCEQcTJkywgnjiiSeaQw891Kg2pZquhFK1yNNOO81Ob5k9e3YRuVcmycKFC+2NTjjhBPtPYuDAgZkbL1u2zNbYAx/079/fXstndyYhB04QQADL7EbVysJB31UzVNCSrSCoiRX+ruMgXnZcXVN8faZOnWoFUC8/z25yZuen+KUGlV/L2LRjij533XWXFeZXXnnFXHvttfYVnGoin3vuuaXeKrH0qoVrkEivC1X3Q3hFSnheYsBZBclnd2KFJOOqEEAAy4xdu7H07t3b5qqRXNX4cm23rj4/1USC91Coj/DVV1/NlEYjtEGzVdeWL1+e6W+bMWOGUe1Sf6SquQQhV5rgWqHfQR5qpmeH+vp6Ww4NjLzwwgt2txnZo/5L9f+pmX/nnXc2qr1m51Ht7+L88MMPmwULFlhmYQFUrVvdEQriHPxTyWd3tW3h/uUlUHoVobzlqfncVq1aZTTtRIvzJSiqMeUKairPnDnTXH311XY9q/4o77jjjkxUDaSotqc8tL3V/Pnz7TUNQNxwww12WZnyCId8acJxch0Hzb/rrrvO9kmG40yfPt1ccskl5phjjrGDNWrqqqak2uCFF15oB0a0GiMYUQ6nTcvxrFmzjAaC1GcpfuGgfywXX3yx7Q/VypJgsCif3eG0HNc+AbbDiunDYNNRDSxkB9X+vvOd79g/No3s5qr5ZafRdw06aFF/dlANUP2H2deUt/oHg5pbOF2+NOE4+Y61YYFqlbmCyqjmYvZ1DaSoaRklSKDFqBxNc90vTn7BPcNN3nCZ8/krn93htLmO45QtV3rOVYYANcAiOOf7I5IgBWIQVfx0+2yBC4qk/HJdK5R3vjRBnoV+Z4tbOG6ucuh6YG84biWPc/0TyHX/fD4L4uZjms/uIB2/a5sAfYAx/aeaRL4/Jg0WXH/99TFz9CO6aqwS2KAmVg6rVTvTllhpC0nYmjYbXSkPAhjTkxq0kACGO9JjZuFldI1al3sLsXzN1moDTsLWatvk6v0RwCI8q3W1wa7QRST3LokGH1T7K7cAKj8NEq1du3aPvslqQU7K1mrZ4/p96QMswsPB1BXtDK2aoJp15WzaFVGk1CXJfk+GpswkwUiTstX1IBFMyztBkrI1dU52oEAIYJFOlAjqo5pgvj7BIrN2JpkET6PEaqomGSQ4GqxQf2DUQZFyl6dStpa73L7nhwCW+AQEtcESsyF5iQQ0IKLaIAECcQjQBxiHFnEhAAGnCCCATrkTYyAAgTgEEMA4tIgLAQg4RQABdMqdGAMBCMQhgADGoUVcCEDAKQIIoFPuxBgIQCAOAQQwDi3iQgACThFAAJ1yJ8ZAAAJxCCCAcWgRFwIQcIoAAuiUOzEGAhCIQwABjEOLuBCAgFMEEECn3IkxEIBAHAIIYBxaxIUABJwigAA65U6MgQAE4hBAAOPQIi4EIOAUAQTQKXdiDAQgEIcAAhiHFnEhAAGnCCCATrkTYyAAgTgEEMA4tIgLAQg4RQABdMqdGAMBCMQhgADGoUVcCEDAKQIIoFPuxBgIQCAOAQQwDi3iQgACThFAAJ1yJ8ZAAAJxCCCAcWgRFwIQcIoAAuiUOzEGAhCIQwABjEOLuBCAgFMEEECn3IkxEIBAHAIIYBxaxIUABJwigAA65U6MgQAE4hBAAOPQIi4EIOAUAQTQKXdiDAQgEIcAAhiHFnEhAAGnCCCATrkTYyAAgTgEEMA4tIgLAQg4RQABdMqdGAMBCMQhgADGoUVcCEDAKQIIoFPuxBgIQCAOAQQwDi3iQgACThFAAJ1yJ8ZAAAJxCCCAcWgRFwIQcIoAAuiUOzEGAhCIQwABjEOLuBCAgFMEEECn3IkxEIBAHAIIYBxaxIUABJwigAA65U6MgQAE4hBAAOPQIi4EIOAUAQTQKXdiDAQgEIcAAhiHFnEhAAGnCCCATrkTYyAAgTgE/gcCHHjHKxBaJwAAAABJRU5ErkJggg==" + } + }, + "cell_type": "markdown", + "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", + "metadata": {}, + "source": [ + "## Decision Tree\n", + "\n", + "\n", + "Sklearn based models are slightly finicky to get into a suitable onnx format. By default most tree based models will export into something that looks like this: \n", + "\n", + "\n", + "![image.png](attachment:image.png)\n", + "\n", + "\n", + "Processing such nodes can be difficult and error prone. It would be much better if the operations of the tree were represented as a proper graph, possibly ... like this: \n", + "\n", + "\n", + "![image-2.png](attachment:image-2.png)\n", + "\n", + "\n", + "This notebook showcases how to do that using the `hummingbird-ml` python package ! " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "95613ee9", + "metadata": {}, + "outputs": [], + "source": [ + "# check if notebook is in colab\n", + "try:\n", + " # install ezkl\n", + " import google.colab\n", + " import subprocess\n", + " import sys\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"hummingbird-ml\"])\n", + "\n", + "# rely on local installation of ezkl if the notebook is not in colab\n", + "except:\n", + " pass\n", + "\n", + "\n", + "# here we create and (potentially train a model)\n", + "\n", + "# make sure you have the dependencies required here already installed\n", + "import json\n", + "import numpy as np\n", + "from sklearn.datasets import load_iris\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.tree import DecisionTreeClassifier as De\n", + "from hummingbird.ml import convert\n", + "import torch\n", + "import ezkl\n", + "import os\n", + "\n", + "\n", + "\n", + "iris = load_iris()\n", + "X, y = iris.data, iris.target\n", + "X = X.astype(np.float32)\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y)\n", + "clr = De()\n", + "clr.fit(X_train, y_train)\n", + "\n", + "circuit = convert(clr, \"torch\", X_test[:1]).model\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b37637c4", + "metadata": {}, + "outputs": [], + "source": [ + "model_path = os.path.join('network.onnx')\n", + "compiled_model_path = os.path.join('network.compiled')\n", + "pk_path = os.path.join('test.pk')\n", + "vk_path = os.path.join('test.vk')\n", + "settings_path = os.path.join('settings.json')\n", + "srs_path = os.path.join('kzg.srs')\n", + "witness_path = os.path.join('witness.json')\n", + "data_path = os.path.join('input.json')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "82db373a", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "\n", + "# export to onnx format\n", + "# !!!!!!!!!!!!!!!!! This will flash a warning but it is fine !!!!!!!!!!!!!!!!!!!!!\n", + "\n", + "# Input to the model\n", + "shape = X_train.shape[1:]\n", + "x = torch.rand(1, *shape, requires_grad=True)\n", + "torch_out = circuit(x)\n", + "# Export the model\n", + "torch.onnx.export(circuit, # model being run\n", + " # model input (or a tuple for multiple inputs)\n", + " x,\n", + " # where to save the model (can be a file or file-like object)\n", + " \"network.onnx\",\n", + " export_params=True, # store the trained parameter weights inside the model file\n", + " opset_version=10, # the ONNX version to export the model to\n", + " do_constant_folding=True, # whether to execute constant folding for optimization\n", + " input_names=['input'], # the model's input names\n", + " output_names=['output'], # the model's output names\n", + " dynamic_axes={'input': {0: 'batch_size'}, # variable length axes\n", + " 'output': {0: 'batch_size'}})\n", + "\n", + "d = ((x).detach().numpy()).reshape([-1]).tolist()\n", + "\n", + "data = dict(input_shapes=[shape],\n", + " input_data=[d],\n", + " output_data=[((o).detach().numpy()).reshape([-1]).tolist() for o in torch_out])\n", + "\n", + "# Serialize data into file:\n", + "json.dump(data, open(\"input.json\", 'w'))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d5e374a2", + "metadata": {}, + "outputs": [], + "source": [ + "!RUST_LOG=trace\n", + "# TODO: Dictionary outputs\n", + "res = ezkl.gen_settings(model_path, settings_path)\n", + "assert res == True\n", + "\n", + "res = ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3aa4f090", + "metadata": {}, + "outputs": [], + "source": [ + "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8b74dcee", + "metadata": {}, + "outputs": [], + "source": [ + "# srs path\n", + "res = ezkl.get_srs(srs_path, settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "18c8b7c7", + "metadata": {}, + "outputs": [], + "source": [ + "# now generate the witness file \n", + "\n", + "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", + "assert os.path.isfile(witness_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b1c561a8", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# HERE WE SETUP THE CIRCUIT PARAMS\n", + "# WE GOT KEYS\n", + "# WE GOT CIRCUIT PARAMETERS\n", + "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", + "\n", + "\n", + "\n", + "res = ezkl.setup(\n", + " compiled_model_path,\n", + " vk_path,\n", + " pk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "assert os.path.isfile(vk_path)\n", + "assert os.path.isfile(pk_path)\n", + "assert os.path.isfile(settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c384cbc8", + "metadata": {}, + "outputs": [], + "source": [ + "# GENERATE A PROOF\n", + "\n", + "\n", + "proof_path = os.path.join('test.pf')\n", + "\n", + "res = ezkl.prove(\n", + " witness_path,\n", + " compiled_model_path,\n", + " pk_path,\n", + " proof_path,\n", + " srs_path,\n", + " \"single\",\n", + " )\n", + "\n", + "print(res)\n", + "assert os.path.isfile(proof_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "76f00d41", + "metadata": {}, + "outputs": [], + "source": [ + "# VERIFY IT\n", + "\n", + "res = ezkl.verify(\n", + " proof_path,\n", + " settings_path,\n", + " vk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "print(\"verified\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.15" + } }, - "image.png": { - "image/png": "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" - } - }, - "cell_type": "markdown", - "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", - "metadata": {}, - "source": [ - "## Decision Tree\n", - "\n", - "\n", - "Sklearn based models are slightly finicky to get into a suitable onnx format. By default most tree based models will export into something that looks like this: \n", - "\n", - "\n", - "![image.png](attachment:image.png)\n", - "\n", - "\n", - "Processing such nodes can be difficult and error prone. It would be much better if the operations of the tree were represented as a proper graph, possibly ... like this: \n", - "\n", - "\n", - "![image-2.png](attachment:image-2.png)\n", - "\n", - "\n", - "This notebook showcases how to do that using the `hummingbird-ml` python package ! " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "95613ee9", - "metadata": {}, - "outputs": [], - "source": [ - "# check if notebook is in colab\n", - "try:\n", - " # install ezkl\n", - " import google.colab\n", - " import subprocess\n", - " import sys\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"hummingbird-ml\"])\n", - "\n", - "# rely on local installation of ezkl if the notebook is not in colab\n", - "except:\n", - " pass\n", - "\n", - "\n", - "# here we create and (potentially train a model)\n", - "\n", - "# make sure you have the dependencies required here already installed\n", - "import json\n", - "import numpy as np\n", - "from sklearn.datasets import load_iris\n", - "from sklearn.model_selection import train_test_split\n", - "from sklearn.tree import DecisionTreeClassifier as De\n", - "from hummingbird.ml import convert\n", - "import torch\n", - "import ezkl\n", - "import os\n", - "\n", - "\n", - "\n", - "iris = load_iris()\n", - "X, y = iris.data, iris.target\n", - "X = X.astype(np.float32)\n", - "X_train, X_test, y_train, y_test = train_test_split(X, y)\n", - "clr = De()\n", - "clr.fit(X_train, y_train)\n", - "\n", - "circuit = convert(clr, \"torch\", X_test[:1]).model\n", - "\n", - "\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b37637c4", - "metadata": {}, - "outputs": [], - "source": [ - "model_path = os.path.join('network.onnx')\n", - "compiled_model_path = os.path.join('network.compiled')\n", - "pk_path = os.path.join('test.pk')\n", - "vk_path = os.path.join('test.vk')\n", - "settings_path = os.path.join('settings.json')\n", - "srs_path = os.path.join('kzg.srs')\n", - "witness_path = os.path.join('witness.json')\n", - "data_path = os.path.join('input.json')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "82db373a", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "\n", - "# export to onnx format\n", - "# !!!!!!!!!!!!!!!!! This will flash a warning but it is fine !!!!!!!!!!!!!!!!!!!!!\n", - "\n", - "# Input to the model\n", - "shape = X_train.shape[1:]\n", - "x = torch.rand(1, *shape, requires_grad=True)\n", - "torch_out = circuit(x)\n", - "# Export the model\n", - "torch.onnx.export(circuit, # model being run\n", - " # model input (or a tuple for multiple inputs)\n", - " x,\n", - " # where to save the model (can be a file or file-like object)\n", - " \"network.onnx\",\n", - " export_params=True, # store the trained parameter weights inside the model file\n", - " opset_version=10, # the ONNX version to export the model to\n", - " do_constant_folding=True, # whether to execute constant folding for optimization\n", - " input_names=['input'], # the model's input names\n", - " output_names=['output'], # the model's output names\n", - " dynamic_axes={'input': {0: 'batch_size'}, # variable length axes\n", - " 'output': {0: 'batch_size'}})\n", - "\n", - "d = ((x).detach().numpy()).reshape([-1]).tolist()\n", - "\n", - "data = dict(input_shapes=[shape],\n", - " input_data=[d],\n", - " output_data=[((o).detach().numpy()).reshape([-1]).tolist() for o in torch_out])\n", - "\n", - "# Serialize data into file:\n", - "json.dump(data, open(\"input.json\", 'w'))\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d5e374a2", - "metadata": {}, - "outputs": [], - "source": [ - "!RUST_LOG=trace\n", - "# TODO: Dictionary outputs\n", - "res = ezkl.gen_settings(model_path, settings_path)\n", - "assert res == True\n", - "\n", - "res = await ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3aa4f090", - "metadata": {}, - "outputs": [], - "source": [ - "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8b74dcee", - "metadata": {}, - "outputs": [], - "source": [ - "# srs path\n", - "res = ezkl.get_srs(srs_path, settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "18c8b7c7", - "metadata": {}, - "outputs": [], - "source": [ - "# now generate the witness file \n", - "\n", - "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", - "assert os.path.isfile(witness_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b1c561a8", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "# HERE WE SETUP THE CIRCUIT PARAMS\n", - "# WE GOT KEYS\n", - "# WE GOT CIRCUIT PARAMETERS\n", - "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", - "\n", - "\n", - "\n", - "res = ezkl.setup(\n", - " compiled_model_path,\n", - " vk_path,\n", - " pk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "assert os.path.isfile(vk_path)\n", - "assert os.path.isfile(pk_path)\n", - "assert os.path.isfile(settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c384cbc8", - "metadata": {}, - "outputs": [], - "source": [ - "# GENERATE A PROOF\n", - "\n", - "\n", - "proof_path = os.path.join('test.pf')\n", - "\n", - "res = ezkl.prove(\n", - " witness_path,\n", - " compiled_model_path,\n", - " pk_path,\n", - " proof_path,\n", - " srs_path,\n", - " \"single\",\n", - " )\n", - "\n", - "print(res)\n", - "assert os.path.isfile(proof_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "76f00d41", - "metadata": {}, - "outputs": [], - "source": [ - "# VERIFY IT\n", - "\n", - "res = ezkl.verify(\n", - " proof_path,\n", - " settings_path,\n", - " vk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "print(\"verified\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.15" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/notebooks/encrypted_vis.ipynb b/examples/notebooks/encrypted_vis.ipynb index 7d7c16ee..b8e51f42 100644 --- a/examples/notebooks/encrypted_vis.ipynb +++ b/examples/notebooks/encrypted_vis.ipynb @@ -283,7 +283,7 @@ "with open(cal_path, \"w\") as f:\n", " json.dump(cal_data, f)\n", "\n", - "res = await ezkl.calibrate_settings(cal_path, model_path, settings_path, \"resources\")" + "res = ezkl.calibrate_settings(cal_path, model_path, settings_path, \"resources\")" ] }, { @@ -534,4 +534,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file diff --git a/examples/notebooks/ezkl_demo.ipynb b/examples/notebooks/ezkl_demo.ipynb index c5eea319..f0e30f9d 100644 --- a/examples/notebooks/ezkl_demo.ipynb +++ b/examples/notebooks/ezkl_demo.ipynb @@ -42,7 +42,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "id": "gvQ5HL1bTDWF" }, @@ -431,7 +431,7 @@ "res = ezkl.gen_settings(model_path, settings_path)\n", "assert res == True\n", "\n", - "res = await ezkl.calibrate_settings(cal_data_path, model_path, settings_path, \"resources\") # Optimize for resources" + "res = ezkl.calibrate_settings(cal_data_path, model_path, settings_path, \"resources\") # Optimize for resources" ] }, { diff --git a/examples/notebooks/gcn.ipynb b/examples/notebooks/gcn.ipynb index b9c1e1fa..5c9a1436 100644 --- a/examples/notebooks/gcn.ipynb +++ b/examples/notebooks/gcn.ipynb @@ -458,7 +458,7 @@ "res = ezkl.gen_settings(model_path, settings_path, py_run_args=run_args)\n", "assert res == True\n", "\n", - "res = await ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", + "res = ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", "assert res == True" ] }, @@ -619,4 +619,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/examples/notebooks/generalized_inverse.ipynb b/examples/notebooks/generalized_inverse.ipynb index fd6dd61f..e724c20f 100644 --- a/examples/notebooks/generalized_inverse.ipynb +++ b/examples/notebooks/generalized_inverse.ipynb @@ -176,7 +176,7 @@ "\n", "assert res == True\n", "\n", - "res = await ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", + "res = ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", "assert res == True" ] }, @@ -321,4 +321,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/examples/notebooks/gradient_boosted_trees.ipynb b/examples/notebooks/gradient_boosted_trees.ipynb index 0ce0d7b2..cd078d59 100644 --- a/examples/notebooks/gradient_boosted_trees.ipynb +++ b/examples/notebooks/gradient_boosted_trees.ipynb @@ -1,317 +1,317 @@ { - "cells": [ - { - "attachments": { - "image-2.png": { - "image/png": "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wmVDYOPGjfbee+9Z//79bc2aNTZx4kS75JJL3NItb775pv361792jy0qKrL/+I//MLV2rV+//rjZwF6Ln07U/rRXXXWVffe733XXffSjH7UPfehDbhHpF1980f70pz+54409p7i42LZv3+7O0dI03//+991MbR1Qq+Kzzz5ry5Ytc9//8Ic/tJtuusntR6zvtm3bZmrpefvtt23lypV2/vnnu+f+6Ec/qrvGXeiDf8hWLXjKp5J8FTR6f+uYguPPfOYzrttdx++55x6bNGmSTZ8+3a2/KOv/9//+n0615u7Xr18/++QnP2l33HGHO//UU0+1Xr161dWHOxiRfzRnJQbsI/JjoJiRE6AlMXJVToHTEVCLlLoalyxZYp07d7bLL7/cbrvtNps1a5b16NHDTj/9dHd7BSubN292rXu//OUvXbDiPVeBnZfUna37KE2ePNlOOukku/766+3aa6+1MWPGuBawpp7zyCOPuNbNL3/5y3byySe7YMhbnqZjx47HLSvTpUsX9xytB6l7qxtdAerIkSOtT58+9pWvfMUFQQoW/Zbeeust12Ws4FDplFNOMW2bp8DYS+p6/853vuPMtSi3PF577TV77rnn7K9//WtdgKjzm7ufjDp16uTd2gWe7du3r/s7Sh+as5IF9lH6RVDWKAkQJEaptilrSgKaEKKxiL/4xS9cQHjnnXe61rsRI0a4btCpU6faueeeawrK1HKlpCDs73//u2nm6KZNm2zhwoXNPvuEE05wAc2hQ4fcnr3f/va3bcWKFdbUc55//nnXYrl27Vr78Ic/7PKpVs7mklpEFcQqyNqwYYO988477hK1jnrBZHP3yOX3CvpeffVVU4uekloH1Uoam/7yl7+4YEV1oYBbLYeNpUTu19i1UTueiBX2UftVUN6oCBAkRqWmKWfKAhqTeMUVV7hWQwVjamVS0uLPu3btqnupxerJJ59032nhXY3n8lJsi5cCR2/JHe9eOk/H9C/k+qmx52gBcG1ht3v3bnviiSfsW9/6liloPPPMM90tYp+jA94z9Tn2ObpPEJZBka+CQ81w1eLb6i73kozUna4uaHl4Xeze9w29N3U/nR/rFfu5oXuF/VhTVtiHvfYpX5QFCBKjXPuUPSkBBVK/+c1v7LOf/awb97d8+XKrrq62BQsWuK5Pbe3nLUOjIEVdokrqLh43blzdsxRY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" + "cells": [ + { + "attachments": { + "image-2.png": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAokAAARDCAYAAAAEdLvJAAABYmlDQ1BJQ0MgUHJvZmlsZQAAKJF1kDFLw1AUhU9stSAVHRwEHQKKUy01rdi1LSKCQxoVqlvyWlMlTR9JRNTFQRengi5uUhd/gS4OjoKDguAgIoKDP0DsoiXeNGpbxft43I/DvYfDBTrCKudGEEDJdCxlOi3mFpfE0Au60ENPQEBlNk/J8iyN4Lu3V+2O5qhuxzyvq5px+bw3PJi1N6Nscmv173xbdecLNqP+QT/BuOUAQoxYXne4x9vE/RaFIj7wWPf5xGPN5/PGzLySIb4h7mNFNU/8RBzRWnS9hUvGGvvK4KUPF8yFOeoD9IeQRgEmshAxhRzimEAM41D+2Uk0djIog2MDFlagowiHtlOkcBjkJmKGHBmiiBBL5Cch7t369w2bWrkKJN+AQKWpaYfA2S7FvG9qI0dA7w5wes1VS/25rFAL2stxyedwGuh8dN3XUSC0D9Qrrvtedd36Mfk/ABfmJ+uTZFvl1hD0AAAAVmVYSWZNTQAqAAAACAABh2kABAAAAAEAAAAaAAAAAAADkoYABwAAABIAAABEoAIABAAAAAEAAAKJoAMABAAAAAEAAARDAAAAAEFTQ0lJAAAAU2NyZWVuc2hvdIWiHYkAAAHXaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjEwOTE8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NjQ5PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6VXNlckNvbW1lbnQ+U2NyZWVuc2hvdDwvZXhpZjpVc2VyQ29tbWVudD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CvSCr3YAAEAASURBVHgB7N0HnJxVvf/x3yabZNOzm03vvYeQgksCgtwAERCu8kfEgqKgIIkXEBWuoOhFAa/8QSkq/lVQrBcvoFIEpBMCCSQB0sum97LZJJtNNtn88z34rJOdLdPnKZ/zeg0z+8xTznmfUX6cWlBWVnbUSAgggAACCCCAAAIIxAi0iPnMRwQQQAABBBBAAAEEnABBIj8EBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggABBIr8BBBBAAAEEEEAAgTgBgsQ4Eg4ggAACCCCAAAIIECTyG0AAAQQQQAABBBCIEyBIjCPhAAIIIIAAAggggEAhBAgggAAC/hI4ePCgVVdXW21trbVs2TLnmTty5Ih7buvWra2oqCjnz+eBCCDgDwGCRH/UA7lAAAEErKamxnbv3u0kWrRokZcA0auGQ4cOuUB1z549VlxcbAoYSQggEC0BgsRo1TelRQABnwqo9VABmYKxLl26+CaXFRUVplfnzp2tTZs2vskXGUEAgewLMCYx+8Y8AQEEEGhWYO/evVZYWOirAFGZVsDaqlUrq6ysbLYMnIAAAuESIEgMV31SGgQQCKDA4cOHTS2JJSUlvsy9upvVFa4XCQEEoiNAkBiduqakCCDgUwEFiWqt83NS/pRPEgIIREeAIDE6dU1JEUDAxwIFBQU+zp2Z3/Pnazwyh0BABQgSA1pxZBsBBKIjMH78eDdeMTolpqQIIOAHAYJEP9QCeUAAAQSaEPjwhz+clQktah288MILm3gyXyGAQJQFCBKjXPuUHQEEAiFwxx132I4dOzKeVwWJZ599dsbvyw0RQCAcAi379u17SziKQikQQACBYApoQogWr27fvn2DBbj55pvtrbfeso4dO9qsWbNs+PDh9qlPfcqGDh1qixcvdrOO9feAAQPc8fPOO8/tlLJs2TJ3v9tvv92ee+4597m0tNS+/OUv2+zZs+3rX/+69erVyyZMmGArV65scpmbqqoqt4aj3yfYNAjIQQQQSEmAlsSU2LgIAQQQyJ1Ap06d3MQRbdE3atQoe/bZZ+0b3/iG27Zv8uTJLiMKME844QS79dZb7T//8z9t0qRJNnbsWPdd7OLc2slF91P67//+b7f0zi233GIbNmxwx/gHAggg4AkQJHoSvCOAAAIBENiyZYsL6LSv87vvvmtDhgypy/XLL7/sWhXVKvnqq6/ayJEj677jAwIIIJCsAEFismKcjwACCORRIHatQn2OXZrmyJEjdTnTZ+3gonT06FFTC6KS9+7+4B8IIIBAEwIEiU3g8BUCCCAQJIGysjKXXQWOJ510khtnqAO7d++2wYMHu+80ntFLCh6V2JPZE+EdAQRiBd7/z8zYI3xGAAEEEAikwM6dO+273/2um7SiCS3z5s1z5fjb3/5mX/3qV23z5s22du3aurIpSHzhhRfcOMYf//jHtn79+rrv+IAAAggUHPsvz/f/UxILBBBAAIG8CFRXV9vevXutW7duKT//i1/8ogsKFyxYYJrgUn+fZR3TS+MV6yd1QWuMY1NJS/Bockzbtm2bOo3vEEAgRAK0JIaoMikKAggEV8Dr+k21BAcPHnR7KyvYayjg0xjF2DGLsc9p6PzY7/U53fzVvx9/I4CA/wUIEv1fR+QQAQRCLqAJJvVb/pIt8kMPPZTsJUmdr/x5E2GSupCTEUAgsAJMXAls1ZFxBBAIi4CCL00e2bVrly+LpIkvWkSbhbR9WT1kCoGsCRAkZo2WGyOAAAKJC2g3FS1pU1FRkfhFOThT+VErovJHQgCBaAnQ3Ryt+qa0CCDgUwG1JBYXF7vlarZt2+bWM/Qmm+Q6y974RW8Mo/LVunXrXGeD5yGAQJ4FaEnMcwXweAQQQMATUHdu9+7d3bZ56XbteusievdO9l3P79y5s/Xo0YMAMVk8zkcgJAK0JIakIikGAgiER6CoqMitdZhOiRQkaoxjIjOX03kO1yKAQHgFaEkMb91SMgQQiLBAp06dWLYmwvVP0RHIhABBYiYUuQcCCCCAAAIIIBAyAYLEkFUoxUEAAQQkoMW1tYczCQEEEEhVgCAxVTmuQwABBHwsoNnS7JLi4woiawgEQIAgMQCVRBYRQAABBBBAAIFcCxAk5lqc5yGAAAIIIIAAAgEQIEgMQCWRRQQQQAABBBBAINcCBIm5Fud5CCCAAAIIIIBAAAQIEgNQSWQRAQQQQAABBBDItQBBYq7FeR4CCCCQA4EDBw6wBE4OnHkEAmEWIEgMc+1SNgQQiKxA27ZtWQInsrVPwRHIjABBYmYcuQsCCCCAAAIIIBAqAYLEUFUnhUEAAQQQQAABBDIjQJCYGUfuggACCCCAAAIIhEqAIDFU1UlhEEAAAQQQQACBzAgQJGbGkbsggAACCCCAAAKhEiBIDFV1UhgEEEAAAQQQQCAzAgSJmXHkLggggAACCCCAQKgECBJDVZ0UBgEEEHhfoLa2lsW0+TEggEBaAgSJafFxMQIIIOBPgRYtWrCYtj+rhlwhEBgBgsTAVBUZRQABBBBAAAEEcidAkJg7a56EAAIIIIAAAggERoAgMTBVRUYRQAABBBBAAIHcCRAk5s6aJyGAAAIIIIAAAoERIEgMTFWRUQQQQAABBBBAIHcCBIm5s+ZJCCCAgC8EevfubUVFRRnNS5cuXay4uDiteypP/fv3T+sejV1cUFBgrVq1auxrjiOAQAMCBIkNoHAIAQQQCLPAiSeeaB07dky4iH369LGhQ4c2ef6AAQNs0KBBTZ7T3JetW7e2Dh06NHda0t8rQJw+fbpddtllSZU76QdxAQIhEygMWXkoDgIIIIBAAgKDBw+2c88912pqauyZZ56x7du3W7t27WzGjBmmVsGKigp74oknXNCmY1p3sUePHvbaa6+59zPOOMPatm1ry5Ytc8f0SF13ySWXuPs899xztnbt2kZz0r59ezv77LPdubt27bK///3vrqWvV69etnjxYps8ebINHz7cXa/g8a233rJ3333XxowZY5MmTbLDhw/bCy+8YJs3b7bS0lJTILtw4UJ3/qmnnmpz5sxxZdOBU045xdavX2+dO3d23/MPBBBITIAgMTEnzkIAAQRCJaCA7qGHHjIFZWpl+/3vf++CrQULFtjq1atNgZaCNAVmCrg6depkr7/+ujNQ0PjXv/7VBZLnnHOO9ezZ0x3v2rWr/eEPf3AB27Rp05oMEseNG2crVqxw99dn3V+BqNcNPm/ePNNLXcQf/ehH3bnKs8793e9+54LLCy64wH7zm9+YgswPfvCDtmfPHuvevbvbaUbBr5ICQ+XvlVdesbFjx7pj/AMBBBITIEhMzImzEEAAgVAJqLXu6NGjtmnTJheItWzZ0tatW+cCKgVi6j5WN239pGBu3759LjDTd3/729/cKWplXLNmjbvnxo0bXRBX/9rYv3fu3GllZWXufAWL1dXV1q1bt9hT3GcFf3PnznXfDxkyxLVsqjVRSS2IapHcv3+/Pfnkk3bVVVe5QPFXv/qV+17/mDp1al1LZ91BPiCAQEICjElMiImTEEAAgXAJaG9nL+mzWvHUxXvyySeb/lbr3JEjR7xT6t51Xuy1dV8c++Cdr+BTr6aSAsOnn37adVF/+tOfdgFf/fO9MY7l5eXuq8LCQquqqrKDBw+6l7rJ1e2spBbDAwcOuLypG1xJ4y779evnXh/4wAdca6XGY6r7moQAAs0LECQ2b8QZCCCAQOgENCZRSV24CvzUPdu3b1+bPXu2LVq0qC7g0jkKxNq0aaOProtZ12j8opKCyoZaAN2XTfxDz9czX331Vfc8tUTGJgV6U6ZMsZdffrnusMYfqsVx6dKl7qWuaN1Dk13UZf7b3/7WNBZSYy3VMqrv1EWuwFIvBbcKJJsLYOseyAcEIi5Ad3PEfwAUHwEEoimg1rSLL77YTT55/vnnHcJ7771nGmNYWVnpgjEFZEqa9KGWOHXdKoh88cUX7cILL3TBo87dsWOHaVmdZNKhQ4fs/PPPd93DCvY0FjJ2ZrNaNfW3xh0qaWykJsls2bLFPvnJT7rAdtWqVS7wUwvms88+a3v37nUvjaFUIKj86zovjRw50gWXCh5JCCDQvEDBsTEhTfcJNH8PzkAAAQQQ8JmAWtb+8Y9/NNlqpu5br7vWy75aFTUW0es69o7rXcdjW+Eauj72fI1fbGiyiAI9TY5R8loDY69r7nNTeWzuWr5HAIHEBWhJTNyKMxFAAIFQCdQPEFW4xsYb6rvYAFF/N3S9jntJrYWaxFI/qcXPS6m06jWVR+++vCOAQPoCBInpG3IHBBBAAIEGBNTd29RaiQ1cwiEEEPCRABNXfFQZZAUBBBBAAAEEEPCLAEGiX2qCfCCAAAIIIIAAAj4SIEj0UWWQFQQQQAABBBBAwC8CBIl+qQnygQACCGRQQJM7GtoxJYOP4FYIIBByAYLEkFcwxUMAgWgKaJmY+rORoylBqRFAIFUBgsRU5bgOAQQQQAABBBAIsQBBYogrl6IhgAACCCCAAAKpChAkpirHdQgggAACCCCAQIgFCBJDXLkUDQEEEEAAAQQQSFWAIDFVOa5DAAEEEEAAAQRCLECQGOLKpWgIIIAAAggggECqAgSJqcpxHQIIIIAAAgggEGIBgsQQVy5FQwCB6AocOHCAxbSjW/2UHIGMCBAkZoSRmyCAAAL+Emjbti2LafurSsgNAoETIEgMXJWRYQQQQAABBBBAIPsCBInZN+YJCCCAAAIIIIBA4AQIEgNXZWQYAQQQQAABBBDIvgBBYvaNeQICCCCAAAIIIBA4AYLEwFUZGUYAAQQQQAABBLIvQJCYfWOegAACCORMYMiQIe5ZBw8edEvgeH/nLAM8CAEEQiNAkBiaqqQgCCCAwPsCkydPtjZt2tjEiRMhQQABBFIWIEhMmY4LEUAAAf8JrFq1yoqLi10rot71NwkBBBBIRYAgMRU1rkEAAQR8LLB69WqXu/Lych/nkqwhgIDfBQr9nkHyhwACCARJoKqqyg4fPpzXLM+fP9/27NljXrCYz8wUFhZau3bt8pkFno0AAikKECSmCMdlCCCAQKyAgsOKPRXWolWhtWzTylq2zu//va7cvM5q2xTEZjHnn2sPHbaqqoPOpUvnLgSLOa8BHohAegL5/X+x9PLO1QgggIAvBBQg7q3ab+26d7Gi4o6+yJOfMlFdsc/27trnskSrop9qhrwg0LQAYxKb9uFbBBBAoFmBPZV7rE1xBwLERqSKunSwNiUdraKiopEzOIwAAn4UIEj0Y62QJwQQCIzAgQMHrKBly2MBYofA5DkfGS3q0t5aHOuCV6srCQEEgiFAkBiMeiKXCCDgU4Gamho3BtGn2fNVtloWtTJ5kRBAIBgCBInBqCdyiQACPhbQZBVS8wItW7Vq/iTOQAAB3wgQJPqmKsgIAgiEWaCwZaEVH5vhm2rq37uvde1SnOrlXIcAAggkLcB//iZNxgUIIIBA4gIKDmd+9gobNWS4VVUfsHZFbe3eX//c3l22uMmb9OzW3UYeu+bFOa+686ZPO91WrFllr8x9vcnr+BIBBBDIlABBYqYkuQ8CCCDQgMBnL7zEjcP78reutyNHjtjQAYPt5lnX28xbvm57972/LEwDl1m3klL7wITJdUFiQ+dwDAEEEMimQMu+ffveks0HcG8EEEAgzAIHDx602pYF1rpDUVwxWx3bbeTqz1xu373nB1bzz11Ydu3ZbRs2b3K7slTu22uTxk2w66+YaedPn2Ejhgyz+YvesdLirvaVz33J+vbqbZPGTrAX5rxiJ44Zbx3bd7CPn/vvdvF5H7Pa2tpjLYvvb783YfQ4+4/PXWnnnXGWu9Zrpfzc//mkjRo6wq74xKV24Fgr5tqN6+PymMsDNccW1m5x+KgVFcVb5TIfPAsBBBITYExiYk6chQACCCQtoHGEG7dutoOHDrlrCwoKrEWLFvb2ooXuuA4O7jfQvnffnTbrlm+4wK/sxMm2dcc2+8WffmNLV62wb931/brn9unRy27+v9+3//zhf9knL/g/1rpVa+vcsZNddiwY/MEDP7brvneTde9aah88aaq7pn3bdtajtJtdd+s37aU3Xqu7Dx8QQACBRATobk5EiXMQQACBFATatGlTFyDq8s989GLXctihXXt76sXn7JGnHre/Pf93GzNspHWbUGoTx5xgG7ZsavRJb77zth09etR27t5lG7dsttKSEuvdvZf16t7Tyk6c4q7rcKy1Ua2OL7852/39+ttvum7uRm/KFwgggEAjAgSJjcBwGAEEEEhXYNPWLdavVx9reWyxbY1H/PX//sG9Lr/4UttdWWHqjr7969+y2W/PtXWbNriJKceiwEYfe/ifXdY6wfuse+w+tmf07mPd2EovvP6Kbd+1033WP44cqa37zAcEEEAgGQG6m5PR4lwEEEAgCYGKY9v1qcv44+f8e91V6jKeOHa8vbt08bGWwFIrKGhhf/zb/9qc+XNdd7MXI1YfOmidjrUKNpdWrl1t1Qer7Z2li47dY57pmW1at27uMr5HAAEEmhWgJbFZIk5AAAEEUhf4+R8esi9/+gt2zy132L79+63LsbUSf/U/v7VtO7cfCxALbM2GdfZ/b/qe7a/abzuOdSN7adXacjtce8R+cMN37Ou3f9s7HPeuVsNHn3nCvvfVm44Fi8cm0Ryb0HLnL+6LO48DCCCAQLICBWVlZY33bSR7N85HAAEEIiZQWVlpNa0KrH2PphfKbntsRq/GC+44FtRpXGFsKvrn2MX6x3VOy2MTXY4cC/wSSXrGgerqRE7NyzlV2/dYy+oj1rlz57w8n4cigEByArQkJufF2QgggEBKAgreGgvg1ALYWEo0QNT1jd2/sXtzHAEEEGhKgDGJTenwHQIIIIAAAgggEFEBgsSIVjzFRgABBBBAAAEEmhIgSGxKh+8QQAABBBBAAIGICjAmMaIVT7ERQCBzAjVV1Va1vSJzNwzpnWr2Vx9bM5LleUJavRQrhAIEiSGsVIqEAAK5Fag9WGOHjxw/Yzm3OQjG02qPLShu7QgSg1Fb5BIBM4JEfgUIIIBAmgLaUaU1C1g3q3jon3tYN3siJyCAgC8EGJPoi2ogEwgggAACCCCAgL8ECBL9VR/kBgEEEEAAAQQQ8IUAQaIvqoFMIIAAAggggAAC/hIgSPRXfZAbBBBAIKcCJ510UqPP69ixo40cObLR7/kCAQTCLUCQGO76pXQIIJBHgaFDh9rMmTMTzsGAAQPsYx/7mDv/jDPOsPPPPz/ha1M5sX379lZSUuIuVV7Hjh1b9+rSpYvt3bvXxowZk8qtuQYBBEIgwOzmEFQiRUAAAX8KbNiwwZ544omEM9e5c2cbPny4O3/BggXWqlWrhK9N5cRJkybZ22+/7S49cmx5msOHD7vPkydPtqqqKquoqLD169db//79bd26dak8gmsQQCDAAgSJAa48so4AAv4WGDhwoE2fPt3uvfdeO+uss6xr166mLtyioiL729/+ZqtXr7bi4mK76KKL3HH97SUFcO3atbPHH3/c1MJ47rnnmoLIJUuW2F//+lerra21c845x7X8KZh77LHHbOvWraYA74Mf/KC1aNHC5s6day+99JJ3y+Pe9X23bt3s5ZdfdsfLy8vdu/KmLmgvLwsXLrSzzz6bIPE4Pf5AIBoCdDdHo54pJQII5EFALYEKCpUUfPXs2dMeffRR10L3gQ98wB3/t3/7NysoKLCHH37Y1P3rJZ2vIFFJXdArVqywn/zkJy7Q7Nu3r40fP95GjBhh99xzjwscL7jgAnfu6aefbnPmzLFf/OIXdvDgQXdv90W9fwwaNMjWrFlT76jZ1KlT3fXeF7qHAspst2p6z+MdAQT8I0CQ6J+6ICcIIBBygc2bN9v27dtt7dq11qlTJ1fa0tJSW758uWsFXLx4cZyAFunW+ECdoxZDBX+6vkePHq5l8bOf/ayddtppLnjUxbNnz3YtiV/4whesQ4cOcffzDqgrXMFmbGrbtq3rWtazvKQAUYuF19TUeId4RwCBiAjQ3RyRiqaYCCCQf4GjR+O37lPgp+5kBWhq3auftEvJvn37rF+/frZx40Y777zzXDfyrl27bOfOnfbAAw+4ILJXr16uxU+TTdTi2KdPH7v44ovduXv27Kl/W9fKqFZCtXTqGiW1IirIjE2jR492LZWxx/iMAALREKAlMRr1TCkRQMCnAi+88IJrBfza177mAsWGsqkxiNOmTbMbb7zRtR5u27bNNLFlx44ddv3119sXv/hF152tcYoKJq+66io3XvGdd96xhgJE7xnz5s2zKVOmuD/Vta0JKrGtiPpCS+AsXbrUu4R3BBCIkEBBWVlZ/H/aRgiAoiKAAALpCFRWVtqBAwesTZs26dzGdelqhnFTSV3P9fc/1lhBXacA0UvqHlY3cSJdxDNmzLCnn37au/S4d3WJa1mc+q2Lx52UxB/Ku5w0AYeEAAL+FyBI9H8dkUMEEPCxgIJELRejiSakpgWqq6tdaylBYtNOfIuAXwTobvZLTZAPBBAIpIBa8hoaaxjIwmQ503JilnSWkbk9AhkUIEjMICa3QgCB6AlowomCn0S6dqOn868Sa6FudYl7y/r86xs+IYCAXwUIEv1aM+QLAQQCI6AlajQukECx4SqTi4JELRxOQgCB4AiwBE5w6oqcIoCATwW81jEtZ6NgSItja+JI1JNaDtXKqncFiJ5T1F0oPwJBESBIDEpNkU8EEPC1gAIgvTSJxdsDOZ8ZHjx4cN3WevnMR2FhIcFhPiuAZyOQhgBBYhp4XIoAAgjUF/BLa5mCRC24Hbs0Tv288jcCCCDQlAD9IU3p8B0CCCAQUAGtccis64BWHtlGwCcCBIk+qQiygQACCCCAAAII+EmAINFPtUFeEEAAgQwJaBKNJtCQEEAAgVQFCBJTleM6BBBAwMcCWpaH7mYfVxBZQyAAAgSJAagksogAAggggAACCORagCAx1+I8DwEEEEAAAQQQCIAAQWIAKoksIoAAAggggAACuRYgSMy1OM9DAAEEEEAAAQQCIECQGIBKIosIIIAAAggggECuBQgScy3O8xBAAAEEEEAAgQAIECQGoJLIIgIIIIAAAgggkGsBgsRci/M8BBBAAAEEEEAgAAIEiQGoJLKIAAIIIIAAAgjkWoAgMdfiPA8BBBDIosCQIUPc3b1t+by/s/hIbo0AAiEVIEgMacVSLAQQiK7A5MmTTdvyTZw4MboIlBwBBNIWIEhMm5AbIIAAAv4RWLVqlRUXF1tBQYF7198kBBBAIBUBgsRU1LgGAQQQ8LHA6tWrXe7Ky8t9nEuyhgACfhco9HsGyR8CCCAQRYGDBw/avn37rLa21tq0aZMUwfz5823Pnj3mBYvJXKzntmzZ0tq1a2dFRUXJXMq5CCAQMgGCxJBVKMVBAIHgC+zYscMOHz7sCnL06NGUCrRkyZKUrtNzjxw5YocOHbLCwkIrLS1N6T5chAACwRcgSAx+HVICBBAIkYACRAVpasnLR4pttTxw4IBt377dunXrlo+s8EwEEMizAGMS81wBPB4BBBDwBPbu3Ws1NTXWtm1b71Be35UPtSwqXyQEEIieAEFi9OqcEiOAgE8F1HKn8YB+Supyrqqq8lOWyAsCCORIgCAxR9A8BgEEEGhOQK2Isd29zZ2fi++VH+WLhAAC0RMgSIxenVNiBBDwqUCqk1R8WhyyhQACARcgSAx4BZJ9BBCInkBJSYnvuqWjVwuUGIHwCzC7Ofx1TAkRQCAkAtOmTbNLL73UNHaxc+fO9uyzz9rvf/97S6UFslevXjZq1Ch7/vnnQ6JDMRBAINMCBImZFuV+CCCAQBYE+vXrZ5dffrndfPPNtmHDBrdEzre//W33+eWXX076iVrWZurUqQSJSctxAQLRESBIjE5dU1IEEAiwwGmnnWZPPPGECwpVDM04vu+++6x3796uVH369LGZM2e6/ZorKyvt7rvvtk2bNrlgctasWW6tQ+3n/MADD7jdWL70pS9Zly5d7LbbbrMbb7wxwDJkHQEEsiXQsm/fvrdk6+bcFwEEEEAgcQEFd5pNrGCufrrgggtszpw5tmXLlrqvtPWeWhWVJk6caG+88Yb98pe/dOMVTznlFHvzzTdt+vTp7u877rjDli1bZsOGDbMFCxa467p27WpqjWwuaau+Tp06NXca3yOAQMgEmLgSsgqlOAggEE4BrZ+onVgaS6+88or7asaMGTZhwgQbO3as+3vt2rVWVlZmF110kQsWn3766cZuwXEEEEDgOAGCxOM4+AMBBBDwp0B5ebkNGjTouMxp676ePXu6Y9dcc42dddZZblKLzt23b587vnjxYrvhhhtc9/RVV11lV1555XH34A8EEECgMQGCxMZkOI4AAgj4SOC1114zdTl7+yirZfHqq6+2KVOmuFyOGzfOHnroIXvppZdci6MXJKobunv37m4845133lnXwqgu5I4dO/qohGQFAQT8JsDEFb/VCPlBAAEEGhBYuXKlPfjgg3brrbe6iSfFxcU2b948e+qpp9zZjz76qN1+++22c+dOW7NmTd0d9Pe1117r9l9WUPjwww+771asWOGCybvuust9X3cBHxBAAIF/ChQcG6tyFA0EEEAAgfwLaBKKArmGJq7E5k6tiRUVFXHb5bVq1cqd1tA2euqabmgP5ubGOuqGmlBzbJJjbBb4jAACERCgJTEClUwREUAgGALNBYdeKbZv3+59PO69oeDQO6GhAFHfNTUZxruWdwQQiKYAYxKjWe+UGgEEfCiglkCNFfRTUn68Fko/5Yu8IIBA9gUIErNvzBMQQACBhATatm3ru5a9w4cPuwW5EyoAJyGAQKgECBJDVZ0UBgEEgiyg8YhqtdPezH5IyofywyxoP9QGeUAg9wKMScy9OU9EAAEEGhUoLS21HTt21E0yOXr0qBUW5u7/qtVy6I2N1HOVHxICCERTIHf/zxNNX0qNAAIIJC2gwExjAbXWYW1trduqL9mbDB482FavXp3sZe78Fi1aWIcOHVJ6bkoP5CIEEPClAEGiL6uFTCGAQNQFtIezXqkmBYm7du1yQWaq9+A6BBCItgBjEqNd/5QeAQRCKtCpUydTVzUJAQQQSFWAIDFVOa5DAAEEEEAAAQRCLECQGOLKpWgIIBBdAe3I4k1Aia4CJUcAgXQECBLT0eNaBBBAwKcCXbp0obvZp3VDthAIigBBYlBqinwigAACCCCAAAI5FCBIzCE2j0IAAQQQQAABBIIiQJAYlJoinwgggAACCCCAQA4FCBJziM2jEEAAAQQQQACBoAgQJAalpsgnAggggAACCCCQQwGCxBxi8ygEEEAAAQQQQCAoAgSJQakp8okAAggggAACCORQgCAxh9g8CgEEEEAAAQQQCIoAQWJQaop8IoAAAggggAACORQgSMwhNo9CAAEEsi0wZMgQ9whvWz7v72w/l/sjgED4BAgSw1enlAgBBCIuMHnyZNO2fBMnToy4BMVHAIF0BAgS09HjWgQQQMBnAqtWrbLi4mIrKChw7/qbhAACCKQiQJCYihrXIIAAAj4WWL16tctdeXm5j3NJ1hBAwO8ChX7PIPlDAAEEgiRQVVVlhw8fzmuW58+fb3v27DEvWMxnZgoLC61du3b5zALPRgCBFAUIElOE4zIEEEAgVkDBoTdZpEWLFqZXPtOSJUvy+Xj37NraWtNLLhojSbCY9yohAwgkJUCQmBQXJyOAAALxAgoQKysrrXXr1u4Vf0a0jxw6dMj5SIFAMdq/BUofLIH8/qdusKzILQIIINCggFrK1K2qIJEULyCXVq1a2e7du+O/5AgCCPhWgCDRt1VDxhBAIAgCBw4ccDOJCRCbri0FieqCV6srCQEEgiFAkBiMeiKXCCDgU4GamhoXJPo0e77KloJEeZEQQCAYAgSJwagncokAAj4WyPckFR/THJc1nI7j4A8EfC9AkOj7KiKDCCCAAAIIIIBA7gUIEnNvzhMRQCAiAmo5+8Mf/hCR0lJMBBAImwBBYthqlPIggAACCCCAAAIZEGCdxAwgcgsEEEAgWYGJEyfaJZdcYm3btrU333zTfv3rX7tb9O/f36688korKipyu6b86Ec/cotRT5s2zT72sY+5pXa0UPbPfvYzO3r0aLKP5XwEEEAgYQGCxISpOBEBBBDIjEDnzp3t8ssvt5tuusmtHXj99dfb6aefbi+++KJdfPHF9vjjj9sbb7xhJ598sg0YMMAFiVdccYXNnDnT9u3b54LF0tJS2759e2YyxF0QQACBBgQIEhtA4RACCCCQTYERI0ZY7969berUqe4xHTt2tEmTJrkgUfstf/zjH7fi4mKbN2+e7dixw51TXl5uV199tc2ePdueeuop0/qMJAQQQCCbAoxJzKYu90YAAQQaENDC0rt27ap7Pffcc/bkk0+6M//85z/b/fffb2ptvO222+zUU091x//rv/7LnnnmGRs5cqTde++91qdPnwbuzCEEEEAgcwK0JGbOkjshgAACCQksX77cqqurbcGCBW4HkvHjx1ubNm3ctTNmzLC5c+faH//4R9u5c6eNGTPGdT2fd955rht6/vz51qFDBxs0aJBt3LgxoedxEgIIIJCKAEFiKmpcgwACCCQooODv5z//ed3ZCxcudC2BjzzyiP3gBz9w3ca1tbXus07SmEO1Gmq8oSa1/PjHP7ZDhw65lsW77rrLTWZRgKmuaBICCCCQTYGCsrIypsdlU5h7I4BAqAUqKytdq6BmI6eSFAjWH19YUFDgZjfXP96yZUvTS0FjENPBgwdNe1yrK52EAAL+F6Al0f91RA4RQCDEAvUDQRVVS9s0dPzIkSOmFwkBBBDIhQATV3KhzDMQQAABBBBAAIGACRAkBqzCyC4CCCCAAAIIIJALAYLEXCjzDAQQQAABBBBAIGACjEkMWIWRXQQQ8J/A4cOH3eQVv+VME2D8lOSkiSskBBAIhgBBYjDqiVwigIDPBfy2j7ICRL/lyedVSPYQQKCeAEFiPRD+RAABBJIV0LI03mLYyV4bpfODunRPlOqIsiIQK8CYxFgNPiOAAAIIIIAAAgg4AYJEfggIIIAAAggggAACcQIEiXEkHEAAAQQQQAABBBAgSOQ3gAACCPhM4KSTTmo0Rx07drSRI0c2+j1fIIAAApkSYOJKpiS5DwIIINCIQM+ePW3w4ME2b968Zvddbt++vZWUlLg7DR061O3h7N12w4YNVlFRYWPGjLGlS5d6h3lHAAEEsiJAS2JWWLkpAggg8C+B8847z84++2wbPXr0vw428mnSpEn29ttvu2+1T7PWFtRrwoQJdcHj+vXrrX///o3cgcMIIIBAZgQIEjPjyF0QQACBBgW6dOliffr0sdmzZ9u4ceMaPMc72KJFC+vWrZtt27bNHSovL3cthmvWrDF9t3r1and84cKFLmj0ruMdAQQQyIYAQWI2VLknAggg8E8BBYbqJp4/f77rclZ3cmNp0KBBpoCwfpo6darNmTOn7vDBgwdd0NiqVau6Y3xAAAEEMi1AkJhpUe6HAAIIxAicfvrprmt44sSJLrBrqstZwWTfvn1jrjZr27atu3758uV1x9WqqAW8a2pq6o7xAQEEEMi0AEFipkW5HwIIIPBPAXUdFxYWujGGlZWV7uj48eMb9VELoV6awewltSKqqzo2KdBcsmRJ7CE+I4AAAhkXIEjMOCk3RAABBN4XUFfzrl277PHHH3eB3kMPPWT9+vWzzp07N0qkGdBTpkxx37dr1y6uFVFfaAkcZjc3SsgXCCCQIYGCsrKyoxm6F7dBAAEEIiegFsIDBw5kdO/mGTNm2NNPP92gZadOnWzs2LFxrYsNnuyzg9q7WXtcNxUk+yzLZAeBSAsQJEa6+ik8AgikK6Agsaqq6rj1DNO9Z1ivr66udmMsCRLDWsOUK2wCdDeHrUYpDwII5FRAM4yPHqVDJhF0OTEjOxEpzkHAHwIEif6oB3KBAAIBFdDsYwU/zDRuugK1IHhtba1pnCUJAQSCIUCQGIx6IpcIIOBjAS2Yrd1RCBQbriS5KEgsLi5u+ASOIoCALwXYu9mX1UKmEEAgSAJe65j2VVYwVFBQ4NZEDFIZspFXtRyqlVXvChA9p2w8i3sigEDmBQgSM2/KHRFAIIICCoD00iQWBYr5ToMHD67bxi+fedE6kQSH+awBno1A6gIEianbcSUCCCAQJ+CXgEhBotZoVCseCQEEEEhFgDGJqahxDQIIIOBzAa2nyKxrn1cS2UPA5wIEiT6vILKHAAIIIIAAAgjkQ4AgMR/qPBMBBBDIsoAm0WgCDQkBBBBIVYAgMVU5rkMAAQR8LKBleehu9nEFkTUEAiBAkBiASiKLCCCAAAIIIIBArgUIEnMtzvMQQAABBBBAAIEACBAkBqCSyCICCCCAAAIIIJBrAYLEXIvzPAQQQAABBBBAIAACBIkBqCSyiAACCCCAAAII5FqAIDHX4jwPAQQQQAABBBAIgABBYgAqiSwigAACCCCAAAK5FiBIzLU4z0MAAQQQQAABBAIgQJAYgEoiiwgggAACCCCAQK4FCBJzLc7zEEAAgSwKDBkyxN3d25bP+zuLj+TWCCAQUgGCxJBWLMVCAIHoCkyePNm0Ld/EiROji0DJEUAgbQGCxLQJuQECCCDgH4FVq1ZZcXGxFRQUuHf9TUIAAQRSESBITEWNaxBAAAEfC6xevdrlrry83Me5JGsIIOB3gUK/Z5D8IYAAAlEUOHjwoO3bt89qa2utTZs2SRHMnz/f9uzZY16wmMzFem7Lli2tXbt2VlRUlMylnIsAAiETIEgMWYVSHAQQCL7Ajh077PDhw64gR48eTalAS5YsSek6PffIkSN26NAhKywstNLS0pTuw0UIIBB8AYLE4NchJUAAgRAJKEBUkKaWvHyk2FbLAwcO2Pbt261bt275yArPRACBPAswJjHPFcDjEUAAAU9g7969VlNTY23btvUO5fVd+VDLovJFQgCB6AkQJEavzikxAgj4VEAtdxoP6KekLueqqio/ZYm8IIBAjgQIEnMEzWMQQACB5gTUihjb3dvc+bn4XvlRvkgIIBA9AYLE6NU5JUYAAZ8KpDpJxafFIVsIIBBwAYLEgFcg2UcAgegJlJSU+K5bOnq1QIkRCL8As5vDX8eUEAEEQiIwbdo0u/TSS01jFzt37mzPPvus/f73v7dUWiB79eplo0aNsueffz4kOhQDAQQyLUCQmGlR7ocAAghkQaBfv352+eWX280332wbNmxwS+R8+9vfdp9ffvnlpJ+oZW2mTp1KkJi0HBcgEB0BgsTo1DUlRQCBAAucdtpp9sQTT7igUMXQjOP77rvPevfu7UrVp08fmzlzptuvubKy0u6++27btGmTCyZnzZrl1jrUfs4PPPCA243lS1/6knXp0sVuu+02u/HGGwMsQ9YRQCBbAi379u17S7Zuzn0RQAABBBIXUHCn2cQK5uqnCy64wObMmWNbtmyp+0pb76lVUWnixIn2xhtv2C9/+Us3XvGUU06xN99806ZPn+7+vuOOO2zZsmU2bNgwW7Bggbuua9euptbI5pK26uvUqVNzp/E9AgiETICJKyGrUIqDAALhFND6idqJpbH0yiuvuK9mzJhhEyZMsLFjx7q/165da2VlZXbRRRe5YPHpp59u7BYcRwABBI4TIEg8joM/EEAAAX8KlJeX26BBg47LnLbu69mzpzt2zTXX2FlnneUmtejcffv2ueOLFy+2G264wXVPX3XVVXbllVcedw/+QAABBBoTIEhsTIbjCCCAgI8EXnvtNVOXs7ePsloWr776apsyZYrL5bhx4+yhhx6yl156ybU4ekGiuqG7d+/uxjPeeeeddS2M6kLu2LGjj0pIVhBAwG8CTFzxW42QHwQQQKABgZUrV9qDDz5ot956q5t4UlxcbPPmzbOnnnrKnf3oo4/a7bffbjt37rQ1a9bU3UF/X3vttW7/ZQWFDz/8sPtuxYoVLpi866673Pd1F/ABAQQQ+KdAwbGxKkfRQAABBBDIv4AmoSiQa2jiSmzu1JpYUVERt11eq1at3GkNbaOnrumG9mBubqyjbqgJNccmOcZmgc8IIBABAVoSI1DJFBEBBIIh0Fxw6JVi+/bt3sfj3hsKDr0TGgoQ9V1Tk2G8a3lHAIFoCjAmMZr1TqkRQMCHAmoJ1FhBPyXlx2uh9FO+yAsCCGRfgCAx+8Y8AQEEEGhSQC2I6s7Vgth+a9k7fPiwW7BbO760aMG/MpqsSL5EIGQCdDeHrEIpDgIIBEdA4wQVGOq1a9cut3yNWu20N3Pbtm3zXhDlQ/nRQtranWXo0KG2ceNG99q/f3/e80cGEEAguwJMXMmuL3dHAAEE4gRKSkpsyJAh1qFDB7fziQKv2DGDO3bsMLXgKR09etQKC3P33/N6rjc2Us8tLS2ty78CVwW0avVUkLh69Wo3m7ruBD4ggECoBAgSQ1WdFAYBBPws4LUaqtvWa5Grra1tMMsaC6i1DvW9turLVdJzlT8FsI09V0GkVxblyyuLAloSAgiER4AgMTx1SUkQQMCHAlpiRuP59KqurjbthqKWwrAk7f88ePBg1z2+fv1608trBQ1LGSkHAlEVIEiMas1TbgQQyKpAUVFRXXC4detWFzxpvcGwJq3vqEC4V69erqzr1q1zQXFYy0u5EIiCAEFiFGqZMiKAQM4ENMnD64r1WtZixxvmLCN5epDGLXotp5s3b7ZNmza5hb/zlB0eiwACaQgQJKaBx6UIIICAJ6DgsH///m6ih1rRFCA2tbi1d11Y3zXpRcGiTDRzWyZ79uwJa3EpFwKhFCBIDGW1UigEEMiVgJaxGThwoHXv3t3tmRy7b3Ku8uD35wwYMMAZaSymfFg+x+81Rv4QeF+AIJFfAgIIIJCCgGb4asKGXloKRi9m9zYN6XkpUJRXYzO7m74L3yKAQK4ECBJzJc1zEEAgNALdunVzC0vv3bvXVq5cyQSNJGpWy+poUe7OnTs7u23btiVxNacigEAuBXK3QmsuS8WzEEAAgSwJDB8+3Hr06GHLli0zApzkkbUO46JFi0yB9ogRI6y4uNhZJn8nrkAAgWwL0JKYbWHujwACoRBo3769jRw50hTkLFmyxHd7LAcRWV32o0ePNo3rlKkWDychgIB/BNit3T91QU4QQMCnAuoaPfHEE90WdO+99x4BYobqSWM41aqoFln5qlWRhAAC/hEgSPRPXZATBBDwoYAWiR4/frybaKEJF6TMC6xdu9ZWrFjhnLWUEAkBBPwhQJDoj3ogFwgg4EMBdYeqi1nBoRaFJmVPYMuWLW4iy6hRo9ze0dl7EndGAIFEBQgSE5XiPAQQiJyA1vfTGEQtjE3KvsDGjRvdGooDj607SUIAgfwLECTmvw7IAQII+FSgb9++BIg5rhsF5HInIYBA/gUIEvNfB+QAAQR8JDBkyBA3gaKoqMhatmzpcqZjpOwLyLlFixZuUXLNeNZEFuyz784TEGhMgCVwGpPhOAIIRFbgzDPPdDNuFah06NDBnn322cha5Lrgstci5dXV1W4tRexzXQM8D4F/CdCS+C8LPiGAAAJOQFvGaS9mBYj6TMqdgLw1o1yLbWOfO3eehEBDAgSJDalwDAEEIi2watWquvLHfq47yIesCcR6x37O2gO5MQIINCrAtnyN0vBFVAWqqqrs8OHDUS1+XLk1u1dj89q2betecSdk+IC6Gffv32+1tbWmfX7zlWbPnm1aAqeysjJfWXAzq7HPD3+uf/f5KSVPRaBpAcYkNu3DtxESUHBYUVHhAgMNnteLZHUBswKmwsJCKy0tzRrLjh073PO0E4eSnhfl5P3HCva5/xXk0j73peOJCCQmQJCYmBNnhVxAAaIGy6vVpnXr1iEvberFk5OCZwWKmQyiFRQqQFTroVosSfEC2Meb5OpItuxzlX+eg0CqAjSVpCrHdaESUAsiAWLzVarZvkeOHHEBdfNnJ36GAvSamhoCxCbIsG8CJ8tfZcs+y9nm9gikLUCQmDYhNwi6gFoJ1J1HC2JiNaku4AMHDiR2coJnqQ5atWqV4NnRPQ37/NV9NuzzVxqejEBiAgSJiTlxVogFNPYok12nIaZyRdNkErX6ZTKpDvI5SSWTZcnmvbDPpm7T986GfdNP5FsE8i9AkJj/OiAHPhAgSMxvJXgTVfKbi2g+Hfto1julRiARAYLERJQ4B4E0BQYOHGglJSVp3qXxy3VvWuIa98nkNwMGDLCuXbtm8pbcK0EB7BOE4jQEMiRAkJghSG4TTgG1MD766KP2q1/9yh588EH7+c9/bh/5yEeSLuw555xjo0aNSvq65i7QvrY//elP7Zvf/Kbde++9NnPmzLr9hpu7NijfX3rppXb//ffHZXfw4MH22GOPuZ1R4r6MOTBhwgQbPXp03ZF073fWWWfZ2LFj6+4X5g/pWmEf5l8HZYuCAEFiFGqZMqYloEV1L7vsMvvc5z5nt9xyi1100UWmlkE/pM9//vMugP3qV79qV155pQuYpkyZ4oesZSwPGq/Yu3dvGzp06HH3vOCCC477u7E/FCAOGzas7ut071d3owh8SNcK+wj8SChiqAWivVJtqKuWwmVDYOPGjfbee+9Z//79bc2aNTZx4kS75JJL3NItb775pv361792jy0qKrL/+I//MLV2rV+//rjZwF6Ln07U/rRXXXWVffe733XXffSjH7UPfehDbhHpF1980f70pz+54409p7i42LZv3+7O0dI03//+991MbR1Qq+Kzzz5ry5Ytc9//8Ic/tJtuusntR6zvtm3bZmrpefvtt23lypV2/vnnu+f+6Ec/qrvGXeiDf8hWLXjKp5J8FTR6f+uYguPPfOYzrttdx++55x6bNGmSTZ8+3a2/KOv/9//+n0615u7Xr18/++QnP2l33HGHO//UU0+1Xr161dWHOxiRfzRnJQbsI/JjoJiRE6AlMXJVToHTEVCLlLoalyxZYp07d7bLL7/cbrvtNps1a5b16NHDTj/9dHd7BSubN292rXu//OUvXbDiPVeBnZfUna37KE2ePNlOOukku/766+3aa6+1MWPGuBawpp7zyCOPuNbNL3/5y3byySe7YMhbnqZjx47HLSvTpUsX9xytB6l7qxtdAerIkSOtT58+9pWvfMUFQQoW/Zbeeust12Ws4FDplFNOMW2bp8DYS+p6/853vuPMtSi3PF577TV77rnn7K9//WtdgKjzm7ufjDp16uTd2gWe7du3r/s7Sh+as5IF9lH6RVDWKAkQJEaptilrSgKaEKKxiL/4xS9cQHjnnXe61rsRI0a4btCpU6faueeeawrK1HKlpCDs73//u2nm6KZNm2zhwoXNPvuEE05wAc2hQ4fcnr3f/va3bcWKFdbUc55//nnXYrl27Vr78Ic/7PKpVs7mklpEFcQqyNqwYYO988477hK1jnrBZHP3yOX3CvpeffVVU4uekloH1Uoam/7yl7+4YEV1oYBbLYeNpUTu19i1UTueiBX2UftVUN6oCBAkRqWmKWfKAhqTeMUVV7hWQwVjamVS0uLPu3btqnupxerJJ59032nhXY3n8lJsi5cCR2/JHe9eOk/H9C/k+qmx52gBcG1ht3v3bnviiSfsW9/6liloPPPMM90tYp+jA94z9Tn2ObpPEJZBka+CQ81w1eLb6i73kozUna4uaHl4Xeze9w29N3U/nR/rFfu5oXuF/VhTVtiHvfYpX5QFCBKjXPuUPSkBBVK/+c1v7LOf/awb97d8+XKrrq62BQsWuK5Pbe3nLUOjIEVdokrqLh43blzdsxRY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" + }, + "image.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", + "metadata": {}, + "source": [ + "## Gradient Boosted Trees\n", + "\n", + "\n", + "Sklearn based models are slightly finicky to get into a suitable onnx format. By default most tree based models will export into something that looks like this: \n", + "\n", + "\n", + "![image.png](attachment:image.png)\n", + "\n", + "\n", + "Processing such nodes can be difficult and error prone. It would be much better if the operations of the tree were represented as a proper graph, possibly ... like this: \n", + "\n", + "\n", + "![image-2.png](attachment:image-2.png)\n", + "\n", + "\n", + "This notebook showcases how to do that using the `hummingbird-ml` python package ! " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "95613ee9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "num diff: [0]\n" + ] + } + ], + "source": [ + "# check if notebook is in colab\n", + "try:\n", + " # install ezkl\n", + " import google.colab\n", + " import subprocess\n", + " import sys\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"hummingbird-ml\"])\n", + "\n", + "# rely on local installation of ezkl if the notebook is not in colab\n", + "except:\n", + " pass\n", + "\n", + "\n", + "# here we create and (potentially train a model)\n", + "\n", + "# make sure you have the dependencies required here already installed\n", + "import json\n", + "import numpy as np\n", + "from sklearn.datasets import load_iris\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.ensemble import GradientBoostingClassifier as Gbc\n", + "import torch\n", + "import ezkl\n", + "import os\n", + "from torch import nn\n", + "from hummingbird.ml import convert\n", + "\n", + "\n", + "NUM_CLASSES = 3\n", + "\n", + "iris = load_iris()\n", + "X, y = iris.data, iris.target\n", + "X = X.astype(np.float32)\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y)\n", + "clr = Gbc()\n", + "clr.fit(X_train, y_train)\n", + "\n", + "\n", + "\n", + "torch_gbt = convert(clr, \"torch\", X_test[:1])\n", + "# assert predictions from torch are = to sklearn\n", + "diffs = []\n", + "\n", + "for i in range(len(X_test)):\n", + " torch_pred = torch_gbt.predict(torch.tensor(X_test[i].reshape(1, -1)))\n", + " sk_pred = clr.predict(X_test[i].reshape(1, -1))\n", + " diffs.append(torch_pred != sk_pred[0])\n", + "\n", + "print(\"num diff: \", sum(diffs))\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "b37637c4", + "metadata": {}, + "outputs": [], + "source": [ + "model_path = os.path.join('network.onnx')\n", + "compiled_model_path = os.path.join('network.compiled')\n", + "pk_path = os.path.join('test.pk')\n", + "vk_path = os.path.join('test.vk')\n", + "settings_path = os.path.join('settings.json')\n", + "srs_path = os.path.join('kzg.srs')\n", + "witness_path = os.path.join('witness.json')\n", + "data_path = os.path.join('input.json')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "82db373a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "================ Diagnostic Run torch.onnx.export version 2.0.1 ================\n", + "verbose: False, log level: Level.ERROR\n", + "======================= 0 NONE 0 NOTE 0 WARNING 0 ERROR ========================\n", + "\n" + ] + } + ], + "source": [ + "# !!!!!!!!!!!!!!!!! This cell will flash a warning about onnx runtime compat but it is fine !!!!!!!!!!!!!!!!!!!!!\n", + "\n", + "\n", + "\n", + "# Input to the model\n", + "shape = X_train.shape[1:]\n", + "x = torch.rand(1, *shape, requires_grad=False)\n", + "torch_out = torch_gbt.predict(x)\n", + "# Export the model\n", + "torch.onnx.export(torch_gbt.model, # model being run\n", + " # model input (or a tuple for multiple inputs)\n", + " x,\n", + " # where to save the model (can be a file or file-like object)\n", + " \"network.onnx\",\n", + " export_params=True, # store the trained parameter weights inside the model file\n", + " opset_version=18, # the ONNX version to export the model to\n", + " input_names=['input'], # the model's input names\n", + " output_names=['output'], # the model's output names\n", + " dynamic_axes={'input': {0: 'batch_size'}, # variable length axes\n", + " 'output': {0: 'batch_size'}})\n", + "\n", + "d = ((x).detach().numpy()).reshape([-1]).tolist()\n", + "\n", + "data = dict(input_shapes=[shape],\n", + " input_data=[d],\n", + " output_data=[o.reshape([-1]).tolist() for o in torch_out])\n", + "\n", + "# Serialize data into file:\n", + "json.dump(data, open(\"input.json\", 'w'))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "d5e374a2", + "metadata": {}, + "outputs": [], + "source": [ + "run_args = ezkl.PyRunArgs()\n", + "run_args.variables = [(\"batch_size\", 1)]\n", + "\n", + "# TODO: Dictionary outputs\n", + "res = ezkl.gen_settings(model_path, settings_path, py_run_args=run_args)\n", + "assert res == True\n", + "\n", + "res = ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "3aa4f090", + "metadata": {}, + "outputs": [], + "source": [ + "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "8b74dcee", + "metadata": {}, + "outputs": [], + "source": [ + "# srs path\n", + "res = ezkl.get_srs(srs_path, settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "18c8b7c7", + "metadata": {}, + "outputs": [], + "source": [ + "# now generate the witness file \n", + "\n", + "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", + "assert os.path.isfile(witness_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b1c561a8", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# HERE WE SETUP THE CIRCUIT PARAMS\n", + "# WE GOT KEYS\n", + "# WE GOT CIRCUIT PARAMETERS\n", + "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", + "\n", + "\n", + "\n", + "res = ezkl.setup(\n", + " compiled_model_path,\n", + " vk_path,\n", + " pk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "assert os.path.isfile(vk_path)\n", + "assert os.path.isfile(pk_path)\n", + "assert os.path.isfile(settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c384cbc8", + "metadata": {}, + "outputs": [], + "source": [ + "# GENERATE A PROOF\n", + "\n", + "\n", + "proof_path = os.path.join('test.pf')\n", + "\n", + "res = ezkl.prove(\n", + " witness_path,\n", + " compiled_model_path,\n", + " pk_path,\n", + " proof_path,\n", + " srs_path,\n", + " \"single\",\n", + " )\n", + "\n", + "print(res)\n", + "assert os.path.isfile(proof_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "76f00d41", + "metadata": {}, + "outputs": [], + "source": [ + "# VERIFY IT\n", + "\n", + "res = ezkl.verify(\n", + " proof_path,\n", + " settings_path,\n", + " vk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "print(\"verified\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.15" + } }, - "image.png": { - "image/png": "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" - } - }, - "cell_type": "markdown", - "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", - "metadata": {}, - "source": [ - "## Gradient Boosted Trees\n", - "\n", - "\n", - "Sklearn based models are slightly finicky to get into a suitable onnx format. By default most tree based models will export into something that looks like this: \n", - "\n", - "\n", - "![image.png](attachment:image.png)\n", - "\n", - "\n", - "Processing such nodes can be difficult and error prone. It would be much better if the operations of the tree were represented as a proper graph, possibly ... like this: \n", - "\n", - "\n", - "![image-2.png](attachment:image-2.png)\n", - "\n", - "\n", - "This notebook showcases how to do that using the `hummingbird-ml` python package ! " - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "95613ee9", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "num diff: [0]\n" - ] - } - ], - "source": [ - "# check if notebook is in colab\n", - "try:\n", - " # install ezkl\n", - " import google.colab\n", - " import subprocess\n", - " import sys\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"hummingbird-ml\"])\n", - "\n", - "# rely on local installation of ezkl if the notebook is not in colab\n", - "except:\n", - " pass\n", - "\n", - "\n", - "# here we create and (potentially train a model)\n", - "\n", - "# make sure you have the dependencies required here already installed\n", - "import json\n", - "import numpy as np\n", - "from sklearn.datasets import load_iris\n", - "from sklearn.model_selection import train_test_split\n", - "from sklearn.ensemble import GradientBoostingClassifier as Gbc\n", - "import torch\n", - "import ezkl\n", - "import os\n", - "from torch import nn\n", - "from hummingbird.ml import convert\n", - "\n", - "\n", - "NUM_CLASSES = 3\n", - "\n", - "iris = load_iris()\n", - "X, y = iris.data, iris.target\n", - "X = X.astype(np.float32)\n", - "X_train, X_test, y_train, y_test = train_test_split(X, y)\n", - "clr = Gbc()\n", - "clr.fit(X_train, y_train)\n", - "\n", - "\n", - "\n", - "torch_gbt = convert(clr, \"torch\", X_test[:1])\n", - "# assert predictions from torch are = to sklearn\n", - "diffs = []\n", - "\n", - "for i in range(len(X_test)):\n", - " torch_pred = torch_gbt.predict(torch.tensor(X_test[i].reshape(1, -1)))\n", - " sk_pred = clr.predict(X_test[i].reshape(1, -1))\n", - " diffs.append(torch_pred != sk_pred[0])\n", - "\n", - "print(\"num diff: \", sum(diffs))\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "b37637c4", - "metadata": {}, - "outputs": [], - "source": [ - "model_path = os.path.join('network.onnx')\n", - "compiled_model_path = os.path.join('network.compiled')\n", - "pk_path = os.path.join('test.pk')\n", - "vk_path = os.path.join('test.vk')\n", - "settings_path = os.path.join('settings.json')\n", - "srs_path = os.path.join('kzg.srs')\n", - "witness_path = os.path.join('witness.json')\n", - "data_path = os.path.join('input.json')" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "82db373a", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "================ Diagnostic Run torch.onnx.export version 2.0.1 ================\n", - "verbose: False, log level: Level.ERROR\n", - "======================= 0 NONE 0 NOTE 0 WARNING 0 ERROR ========================\n", - "\n" - ] - } - ], - "source": [ - "# !!!!!!!!!!!!!!!!! This cell will flash a warning about onnx runtime compat but it is fine !!!!!!!!!!!!!!!!!!!!!\n", - "\n", - "\n", - "\n", - "# Input to the model\n", - "shape = X_train.shape[1:]\n", - "x = torch.rand(1, *shape, requires_grad=False)\n", - "torch_out = torch_gbt.predict(x)\n", - "# Export the model\n", - "torch.onnx.export(torch_gbt.model, # model being run\n", - " # model input (or a tuple for multiple inputs)\n", - " x,\n", - " # where to save the model (can be a file or file-like object)\n", - " \"network.onnx\",\n", - " export_params=True, # store the trained parameter weights inside the model file\n", - " opset_version=18, # the ONNX version to export the model to\n", - " input_names=['input'], # the model's input names\n", - " output_names=['output'], # the model's output names\n", - " dynamic_axes={'input': {0: 'batch_size'}, # variable length axes\n", - " 'output': {0: 'batch_size'}})\n", - "\n", - "d = ((x).detach().numpy()).reshape([-1]).tolist()\n", - "\n", - "data = dict(input_shapes=[shape],\n", - " input_data=[d],\n", - " output_data=[o.reshape([-1]).tolist() for o in torch_out])\n", - "\n", - "# Serialize data into file:\n", - "json.dump(data, open(\"input.json\", 'w'))\n" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "d5e374a2", - "metadata": {}, - "outputs": [], - "source": [ - "run_args = ezkl.PyRunArgs()\n", - "run_args.variables = [(\"batch_size\", 1)]\n", - "\n", - "# TODO: Dictionary outputs\n", - "res = ezkl.gen_settings(model_path, settings_path, py_run_args=run_args)\n", - "assert res == True\n", - "\n", - "res = await ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "3aa4f090", - "metadata": {}, - "outputs": [], - "source": [ - "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "8b74dcee", - "metadata": {}, - "outputs": [], - "source": [ - "# srs path\n", - "res = ezkl.get_srs(srs_path, settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "18c8b7c7", - "metadata": {}, - "outputs": [], - "source": [ - "# now generate the witness file \n", - "\n", - "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", - "assert os.path.isfile(witness_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b1c561a8", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "# HERE WE SETUP THE CIRCUIT PARAMS\n", - "# WE GOT KEYS\n", - "# WE GOT CIRCUIT PARAMETERS\n", - "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", - "\n", - "\n", - "\n", - "res = ezkl.setup(\n", - " compiled_model_path,\n", - " vk_path,\n", - " pk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "assert os.path.isfile(vk_path)\n", - "assert os.path.isfile(pk_path)\n", - "assert os.path.isfile(settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c384cbc8", - "metadata": {}, - "outputs": [], - "source": [ - "# GENERATE A PROOF\n", - "\n", - "\n", - "proof_path = os.path.join('test.pf')\n", - "\n", - "res = ezkl.prove(\n", - " witness_path,\n", - " compiled_model_path,\n", - " pk_path,\n", - " proof_path,\n", - " srs_path,\n", - " \"single\",\n", - " )\n", - "\n", - "print(res)\n", - "assert os.path.isfile(proof_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "76f00d41", - "metadata": {}, - "outputs": [], - "source": [ - "# VERIFY IT\n", - "\n", - "res = ezkl.verify(\n", - " proof_path,\n", - " settings_path,\n", - " vk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "print(\"verified\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.15" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/notebooks/hashed_vis.ipynb b/examples/notebooks/hashed_vis.ipynb index c718e8ce..95e4c438 100644 --- a/examples/notebooks/hashed_vis.ipynb +++ b/examples/notebooks/hashed_vis.ipynb @@ -239,7 +239,7 @@ "with open(cal_path, \"w\") as f:\n", " json.dump(cal_data, f)\n", "\n", - "res = await ezkl.calibrate_settings(cal_path, model_path, settings_path, \"resources\")" + "res = ezkl.calibrate_settings(cal_path, model_path, settings_path, \"resources\")" ] }, { @@ -508,4 +508,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file diff --git a/examples/notebooks/keras_simple_demo.ipynb b/examples/notebooks/keras_simple_demo.ipynb index f6968b3f..304d19c1 100644 --- a/examples/notebooks/keras_simple_demo.ipynb +++ b/examples/notebooks/keras_simple_demo.ipynb @@ -1,268 +1,268 @@ { - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", - "metadata": {}, - "source": [ - "## EZKL Jupyter Notebook Demo with Keras\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a27b0cd9", - "metadata": {}, - "outputs": [], - "source": [ - "# check if notebook is in colab\n", - "try:\n", - " # install ezkl\n", - " import google.colab\n", - " import subprocess\n", - " import sys\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"tf2onnx\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", - "\n", - "# rely on local installation of ezkl if the notebook is not in colab\n", - "except:\n", - " pass\n", - "\n", - "# make sure you have the dependencies required here already installed\n", - "import ezkl\n", - "import os\n", - "import json\n", - "from keras.models import Sequential\n", - "from keras.layers import Dense, Dropout, Activation, Flatten\n", - "from keras.layers import Convolution2D, MaxPooling2D\n", - "import logging\n", - "\n", - "# uncomment for more descriptive logging \n", - "# FORMAT = '%(levelname)s %(name)s %(asctime)-15s %(filename)s:%(lineno)d %(message)s'\n", - "# logging.basicConfig(format=FORMAT)\n", - "# logging.getLogger().setLevel(logging.DEBUG)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "95613ee9", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "\n", - "# Defines the model\n", - "# we got convs, we got relu, we got linear layers, max pooling layers etc... \n", - "# What else could one want ????\n", - "\n", - "model = Sequential()\n", - "model.add(Convolution2D(2, (3,3), activation='relu', input_shape=(28,28,1)))\n", - "model.add(Convolution2D(2, (3,3), activation='relu'))\n", - "model.add(MaxPooling2D(pool_size=(2,2)))\n", - "model.add(Dropout(0.25))\n", - "model.add(Flatten())\n", - "model.add(Dense(128, activation='relu'))\n", - "model.add(Dropout(0.5))\n", - "model.add(Dense(10, activation='softmax'))\n", - "\n", - "\n", - "# Train the model as you like here (skipped for brevity)\n", - "\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b37637c4", - "metadata": {}, - "outputs": [], - "source": [ - "model_path = os.path.join('network.onnx')\n", - "compiled_model_path = os.path.join('network.compiled')\n", - "pk_path = os.path.join('test.pk')\n", - "vk_path = os.path.join('test.vk')\n", - "settings_path = os.path.join('settings.json')\n", - "srs_path = os.path.join('kzg.srs')\n", - "witness_path = os.path.join('witness.json')\n", - "data_path = os.path.join('input.json')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "82db373a", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "import numpy as np\n", - "import tf2onnx\n", - "import tensorflow as tf\n", - "\n", - "# After training, export to onnx (network.onnx) and create a data file (input.json)\n", - "x = 0.1*np.random.rand(1,*[1, 28, 28])\n", - "\n", - "spec = tf.TensorSpec([1, 28, 28, 1], tf.float32, name='input_0')\n", - "\n", - "\n", - "tf2onnx.convert.from_keras(model, input_signature=[spec], inputs_as_nchw=['input_0'], opset=12, output_path=model_path)\n", - "\n", - "data_array = x.reshape([-1]).tolist()\n", - "\n", - "data = dict(input_data = [data_array])\n", - "\n", - " # Serialize data into file:\n", - "json.dump( data, open(data_path, 'w' ))\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d5e374a2", - "metadata": {}, - "outputs": [], - "source": [ - "!RUST_LOG=trace\n", - "\n", - "# TODO: Dictionary outputs\n", - "res = ezkl.gen_settings(model_path, settings_path)\n", - "assert res == True\n", - "\n", - "\n", - "res = await ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b6e051d5", - "metadata": {}, - "outputs": [], - "source": [ - "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8b74dcee", - "metadata": {}, - "outputs": [], - "source": [ - "# srs path\n", - "res = ezkl.gen_srs(srs_path, 17)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "18c8b7c7", - "metadata": {}, - "outputs": [], - "source": [ - "# now generate the witness file \n", - "witness_path = \"witness.json\"\n", - "\n", - "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", - "assert os.path.isfile(witness_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b1c561a8", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "# HERE WE SETUP THE CIRCUIT PARAMS\n", - "# WE GOT KEYS\n", - "# WE GOT CIRCUIT PARAMETERS\n", - "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", - "\n", - "res = ezkl.setup(\n", - " compiled_model_path,\n", - " vk_path,\n", - " pk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "assert os.path.isfile(vk_path)\n", - "assert os.path.isfile(pk_path)\n", - "assert os.path.isfile(settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c384cbc8", - "metadata": {}, - "outputs": [], - "source": [ - "# GENERATE A PROOF\n", - "\n", - "\n", - "proof_path = os.path.join('test.pf')\n", - "\n", - "res = ezkl.prove(\n", - " witness_path,\n", - " compiled_model_path,\n", - " pk_path,\n", - " proof_path,\n", - " srs_path,\n", - " \"single\",\n", - " )\n", - "\n", - "print(res)\n", - "assert os.path.isfile(proof_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "76f00d41", - "metadata": {}, - "outputs": [], - "source": [ - "# VERIFY IT\n", - "res = ezkl.verify(\n", - " proof_path,\n", - " settings_path,\n", - " vk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "print(\"verified\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", + "metadata": {}, + "source": [ + "## EZKL Jupyter Notebook Demo with Keras\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a27b0cd9", + "metadata": {}, + "outputs": [], + "source": [ + "# check if notebook is in colab\n", + "try:\n", + " # install ezkl\n", + " import google.colab\n", + " import subprocess\n", + " import sys\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"tf2onnx\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", + "\n", + "# rely on local installation of ezkl if the notebook is not in colab\n", + "except:\n", + " pass\n", + "\n", + "# make sure you have the dependencies required here already installed\n", + "import ezkl\n", + "import os\n", + "import json\n", + "from keras.models import Sequential\n", + "from keras.layers import Dense, Dropout, Activation, Flatten\n", + "from keras.layers import Convolution2D, MaxPooling2D\n", + "import logging\n", + "\n", + "# uncomment for more descriptive logging \n", + "# FORMAT = '%(levelname)s %(name)s %(asctime)-15s %(filename)s:%(lineno)d %(message)s'\n", + "# logging.basicConfig(format=FORMAT)\n", + "# logging.getLogger().setLevel(logging.DEBUG)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "95613ee9", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "\n", + "# Defines the model\n", + "# we got convs, we got relu, we got linear layers, max pooling layers etc... \n", + "# What else could one want ????\n", + "\n", + "model = Sequential()\n", + "model.add(Convolution2D(2, (3,3), activation='relu', input_shape=(28,28,1)))\n", + "model.add(Convolution2D(2, (3,3), activation='relu'))\n", + "model.add(MaxPooling2D(pool_size=(2,2)))\n", + "model.add(Dropout(0.25))\n", + "model.add(Flatten())\n", + "model.add(Dense(128, activation='relu'))\n", + "model.add(Dropout(0.5))\n", + "model.add(Dense(10, activation='softmax'))\n", + "\n", + "\n", + "# Train the model as you like here (skipped for brevity)\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b37637c4", + "metadata": {}, + "outputs": [], + "source": [ + "model_path = os.path.join('network.onnx')\n", + "compiled_model_path = os.path.join('network.compiled')\n", + "pk_path = os.path.join('test.pk')\n", + "vk_path = os.path.join('test.vk')\n", + "settings_path = os.path.join('settings.json')\n", + "srs_path = os.path.join('kzg.srs')\n", + "witness_path = os.path.join('witness.json')\n", + "data_path = os.path.join('input.json')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "82db373a", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "import numpy as np\n", + "import tf2onnx\n", + "import tensorflow as tf\n", + "\n", + "# After training, export to onnx (network.onnx) and create a data file (input.json)\n", + "x = 0.1*np.random.rand(1,*[1, 28, 28])\n", + "\n", + "spec = tf.TensorSpec([1, 28, 28, 1], tf.float32, name='input_0')\n", + "\n", + "\n", + "tf2onnx.convert.from_keras(model, input_signature=[spec], inputs_as_nchw=['input_0'], opset=12, output_path=model_path)\n", + "\n", + "data_array = x.reshape([-1]).tolist()\n", + "\n", + "data = dict(input_data = [data_array])\n", + "\n", + " # Serialize data into file:\n", + "json.dump( data, open(data_path, 'w' ))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d5e374a2", + "metadata": {}, + "outputs": [], + "source": [ + "!RUST_LOG=trace\n", + "\n", + "# TODO: Dictionary outputs\n", + "res = ezkl.gen_settings(model_path, settings_path)\n", + "assert res == True\n", + "\n", + "\n", + "res = ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b6e051d5", + "metadata": {}, + "outputs": [], + "source": [ + "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8b74dcee", + "metadata": {}, + "outputs": [], + "source": [ + "# srs path\n", + "res = ezkl.gen_srs(srs_path, 17)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "18c8b7c7", + "metadata": {}, + "outputs": [], + "source": [ + "# now generate the witness file \n", + "witness_path = \"witness.json\"\n", + "\n", + "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", + "assert os.path.isfile(witness_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b1c561a8", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# HERE WE SETUP THE CIRCUIT PARAMS\n", + "# WE GOT KEYS\n", + "# WE GOT CIRCUIT PARAMETERS\n", + "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", + "\n", + "res = ezkl.setup(\n", + " compiled_model_path,\n", + " vk_path,\n", + " pk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "assert os.path.isfile(vk_path)\n", + "assert os.path.isfile(pk_path)\n", + "assert os.path.isfile(settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c384cbc8", + "metadata": {}, + "outputs": [], + "source": [ + "# GENERATE A PROOF\n", + "\n", + "\n", + "proof_path = os.path.join('test.pf')\n", + "\n", + "res = ezkl.prove(\n", + " witness_path,\n", + " compiled_model_path,\n", + " pk_path,\n", + " proof_path,\n", + " srs_path,\n", + " \"single\",\n", + " )\n", + "\n", + "print(res)\n", + "assert os.path.isfile(proof_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "76f00d41", + "metadata": {}, + "outputs": [], + "source": [ + "# VERIFY IT\n", + "res = ezkl.verify(\n", + " proof_path,\n", + " settings_path,\n", + " vk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "print(\"verified\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/notebooks/kmeans.ipynb b/examples/notebooks/kmeans.ipynb index 854f828d..8cd16f45 100644 --- a/examples/notebooks/kmeans.ipynb +++ b/examples/notebooks/kmeans.ipynb @@ -1,275 +1,275 @@ { - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", - "metadata": {}, - "source": [ - "## K-means\n", - "\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "95613ee9", - "metadata": {}, - "outputs": [], - "source": [ - "# check if notebook is in colab\n", - "try:\n", - " # install ezkl\n", - " import google.colab\n", - " import subprocess\n", - " import sys\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"sk2torch\"])\n", - "\n", - "# rely on local installation of ezkl if the notebook is not in colab\n", - "except:\n", - " pass\n", - "\n", - "\n", - "# here we create and (potentially train a model)\n", - "\n", - "# make sure you have the dependencies required here already installed\n", - "import json\n", - "import numpy as np\n", - "from sklearn.cluster import KMeans\n", - "from hummingbird.ml import convert\n", - "import torch\n", - "import ezkl\n", - "import os\n", - "\n", - "\n", - "# Create a dataset of two Gaussians. There will be some overlap\n", - "# between the two classes, which adds some uncertainty to the model.\n", - "xs = np.concatenate(\n", - " [\n", - " np.random.random(size=(256, 2)) + [1, 0],\n", - " np.random.random(size=(256, 2)) + [-1, 0],\n", - " ],\n", - " axis=0,\n", - ")\n", - "\n", - "# Train an SVM on the data and wrap it in PyTorch.\n", - "sk_model = KMeans()\n", - "sk_model.fit(xs)\n", - "model = convert(sk_model, backend=\"pytorch\").model\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b37637c4", - "metadata": {}, - "outputs": [], - "source": [ - "model_path = os.path.join('network.onnx')\n", - "compiled_model_path = os.path.join('network.compiled')\n", - "pk_path = os.path.join('test.pk')\n", - "vk_path = os.path.join('test.vk')\n", - "settings_path = os.path.join('settings.json')\n", - "srs_path = os.path.join('kzg.srs')\n", - "witness_path = os.path.join('witness.json')\n", - "data_path = os.path.join('input.json')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "82db373a", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "\n", - "# export to onnx format\n", - "# !!!!!!!!!!!!!!!!! This will flash a warning but it is fine !!!!!!!!!!!!!!!!!!!!!\n", - "# Create a coordinate grid to compute a vector field on.\n", - "spaced = np.linspace(-2, 2, num=25)\n", - "grid_xs = torch.tensor([[x, y] for x in spaced for y in spaced], requires_grad=True)\n", - "\n", - "# Input to the model\n", - "shape = xs.shape[1:]\n", - "x = grid_xs[0:1]\n", - "torch_out = model(x)\n", - "# Export the model\n", - "torch.onnx.export(model, # model being run\n", - " # model input (or a tuple for multiple inputs)\n", - " x,\n", - " # where to save the model (can be a file or file-like object)\n", - " \"network.onnx\",\n", - " export_params=True, # store the trained parameter weights inside the model file\n", - " opset_version=10, # the ONNX version to export the model to\n", - " do_constant_folding=True, # whether to execute constant folding for optimization\n", - " input_names=['input'], # the model's input names\n", - " output_names=['output'], # the model's output names\n", - " dynamic_axes={'input': {0: 'batch_size'}, # variable length axes\n", - " 'output': {0: 'batch_size'}})\n", - "\n", - "d = ((x).detach().numpy()).reshape([-1]).tolist()\n", - "\n", - "data = dict(input_shapes=[shape],\n", - " input_data=[d],\n", - " output_data=[o.reshape([-1]).tolist() for o in torch_out])\n", - "\n", - "# Serialize data into file:\n", - "json.dump(data, open(\"input.json\", 'w'))\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d5e374a2", - "metadata": {}, - "outputs": [], - "source": [ - "!RUST_LOG=trace\n", - "# TODO: Dictionary outputs\n", - "res = ezkl.gen_settings(model_path, settings_path)\n", - "assert res == True\n", - "\n", - "res = await ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3aa4f090", - "metadata": {}, - "outputs": [], - "source": [ - "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8b74dcee", - "metadata": {}, - "outputs": [], - "source": [ - "# srs path\n", - "res = ezkl.get_srs(srs_path, settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "18c8b7c7", - "metadata": {}, - "outputs": [], - "source": [ - "# now generate the witness file \n", - "\n", - "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", - "assert os.path.isfile(witness_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b1c561a8", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "# HERE WE SETUP THE CIRCUIT PARAMS\n", - "# WE GOT KEYS\n", - "# WE GOT CIRCUIT PARAMETERS\n", - "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", - "\n", - "\n", - "\n", - "res = ezkl.setup(\n", - " compiled_model_path,\n", - " vk_path,\n", - " pk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "assert os.path.isfile(vk_path)\n", - "assert os.path.isfile(pk_path)\n", - "assert os.path.isfile(settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c384cbc8", - "metadata": {}, - "outputs": [], - "source": [ - "# GENERATE A PROOF\n", - "\n", - "\n", - "proof_path = os.path.join('test.pf')\n", - "\n", - "res = ezkl.prove(\n", - " witness_path,\n", - " compiled_model_path,\n", - " pk_path,\n", - " proof_path,\n", - " srs_path,\n", - " \"single\",\n", - " )\n", - "\n", - "print(res)\n", - "assert os.path.isfile(proof_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "76f00d41", - "metadata": {}, - "outputs": [], - "source": [ - "# VERIFY IT\n", - "\n", - "res = ezkl.verify(\n", - " proof_path,\n", - " settings_path,\n", - " vk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "print(\"verified\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", + "metadata": {}, + "source": [ + "## K-means\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "95613ee9", + "metadata": {}, + "outputs": [], + "source": [ + "# check if notebook is in colab\n", + "try:\n", + " # install ezkl\n", + " import google.colab\n", + " import subprocess\n", + " import sys\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"sk2torch\"])\n", + "\n", + "# rely on local installation of ezkl if the notebook is not in colab\n", + "except:\n", + " pass\n", + "\n", + "\n", + "# here we create and (potentially train a model)\n", + "\n", + "# make sure you have the dependencies required here already installed\n", + "import json\n", + "import numpy as np\n", + "from sklearn.cluster import KMeans\n", + "from hummingbird.ml import convert\n", + "import torch\n", + "import ezkl\n", + "import os\n", + "\n", + "\n", + "# Create a dataset of two Gaussians. There will be some overlap\n", + "# between the two classes, which adds some uncertainty to the model.\n", + "xs = np.concatenate(\n", + " [\n", + " np.random.random(size=(256, 2)) + [1, 0],\n", + " np.random.random(size=(256, 2)) + [-1, 0],\n", + " ],\n", + " axis=0,\n", + ")\n", + "\n", + "# Train an SVM on the data and wrap it in PyTorch.\n", + "sk_model = KMeans()\n", + "sk_model.fit(xs)\n", + "model = convert(sk_model, backend=\"pytorch\").model\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b37637c4", + "metadata": {}, + "outputs": [], + "source": [ + "model_path = os.path.join('network.onnx')\n", + "compiled_model_path = os.path.join('network.compiled')\n", + "pk_path = os.path.join('test.pk')\n", + "vk_path = os.path.join('test.vk')\n", + "settings_path = os.path.join('settings.json')\n", + "srs_path = os.path.join('kzg.srs')\n", + "witness_path = os.path.join('witness.json')\n", + "data_path = os.path.join('input.json')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "82db373a", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "\n", + "# export to onnx format\n", + "# !!!!!!!!!!!!!!!!! This will flash a warning but it is fine !!!!!!!!!!!!!!!!!!!!!\n", + "# Create a coordinate grid to compute a vector field on.\n", + "spaced = np.linspace(-2, 2, num=25)\n", + "grid_xs = torch.tensor([[x, y] for x in spaced for y in spaced], requires_grad=True)\n", + "\n", + "# Input to the model\n", + "shape = xs.shape[1:]\n", + "x = grid_xs[0:1]\n", + "torch_out = model(x)\n", + "# Export the model\n", + "torch.onnx.export(model, # model being run\n", + " # model input (or a tuple for multiple inputs)\n", + " x,\n", + " # where to save the model (can be a file or file-like object)\n", + " \"network.onnx\",\n", + " export_params=True, # store the trained parameter weights inside the model file\n", + " opset_version=10, # the ONNX version to export the model to\n", + " do_constant_folding=True, # whether to execute constant folding for optimization\n", + " input_names=['input'], # the model's input names\n", + " output_names=['output'], # the model's output names\n", + " dynamic_axes={'input': {0: 'batch_size'}, # variable length axes\n", + " 'output': {0: 'batch_size'}})\n", + "\n", + "d = ((x).detach().numpy()).reshape([-1]).tolist()\n", + "\n", + "data = dict(input_shapes=[shape],\n", + " input_data=[d],\n", + " output_data=[o.reshape([-1]).tolist() for o in torch_out])\n", + "\n", + "# Serialize data into file:\n", + "json.dump(data, open(\"input.json\", 'w'))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d5e374a2", + "metadata": {}, + "outputs": [], + "source": [ + "!RUST_LOG=trace\n", + "# TODO: Dictionary outputs\n", + "res = ezkl.gen_settings(model_path, settings_path)\n", + "assert res == True\n", + "\n", + "res = ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3aa4f090", + "metadata": {}, + "outputs": [], + "source": [ + "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8b74dcee", + "metadata": {}, + "outputs": [], + "source": [ + "# srs path\n", + "res = ezkl.get_srs(srs_path, settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "18c8b7c7", + "metadata": {}, + "outputs": [], + "source": [ + "# now generate the witness file \n", + "\n", + "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", + "assert os.path.isfile(witness_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b1c561a8", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# HERE WE SETUP THE CIRCUIT PARAMS\n", + "# WE GOT KEYS\n", + "# WE GOT CIRCUIT PARAMETERS\n", + "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", + "\n", + "\n", + "\n", + "res = ezkl.setup(\n", + " compiled_model_path,\n", + " vk_path,\n", + " pk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "assert os.path.isfile(vk_path)\n", + "assert os.path.isfile(pk_path)\n", + "assert os.path.isfile(settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c384cbc8", + "metadata": {}, + "outputs": [], + "source": [ + "# GENERATE A PROOF\n", + "\n", + "\n", + "proof_path = os.path.join('test.pf')\n", + "\n", + "res = ezkl.prove(\n", + " witness_path,\n", + " compiled_model_path,\n", + " pk_path,\n", + " proof_path,\n", + " srs_path,\n", + " \"single\",\n", + " )\n", + "\n", + "print(res)\n", + "assert os.path.isfile(proof_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "76f00d41", + "metadata": {}, + "outputs": [], + "source": [ + "# VERIFY IT\n", + "\n", + "res = ezkl.verify(\n", + " proof_path,\n", + " settings_path,\n", + " vk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "print(\"verified\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/notebooks/kzg_vis.ipynb b/examples/notebooks/kzg_vis.ipynb index 5da65e3a..b5e0832f 100644 --- a/examples/notebooks/kzg_vis.ipynb +++ b/examples/notebooks/kzg_vis.ipynb @@ -233,7 +233,7 @@ "with open(cal_path, \"w\") as f:\n", " json.dump(cal_data, f)\n", "\n", - "res = await ezkl.calibrate_settings(cal_path, model_path, settings_path, \"resources\")" + "res = ezkl.calibrate_settings(cal_path, model_path, settings_path, \"resources\")" ] }, { @@ -512,4 +512,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file diff --git a/examples/notebooks/lightgbm.ipynb b/examples/notebooks/lightgbm.ipynb index d6dc6b77..69acb6c9 100644 --- a/examples/notebooks/lightgbm.ipynb +++ b/examples/notebooks/lightgbm.ipynb @@ -1,333 +1,333 @@ { - "cells": [ - { - "attachments": { - "image-3.png": { - "image/png": "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BOXk5JhLEhMTg7k0qHO190bvr4GdAwEEEEAAATsLEFjs3HqUvYGAv8Dy/vvvyxVXXGH+RfuDDz6Qq666SjSwTJ8+XZ566imzAtNdd90lM2fOpIelgSgvQiFQXFwshYWFkpycHIrbN7inhpbMzEzb70vUoFK8QAABBBBwnQCBxXVN7twKNxdYhgwZImeeeab87W9/M0FFA8upp54qp512muzdu1d69eolf//73wkszv31sEzNjhw5IjokTJerDvWhm4/qYhL6xYEAAggggIBdBQgsdm05yt1EwFdgaXJSozd0srMO0dFx/1Y8mHRvxVZpW5l0LlUgE+3b9pT/u1oDS6dOnRy33Hd72HAPBBBAAAH7CBBY7NNWlLQFgdYElhZuGfGPCSwRb4J2L4C/wJKSkiJnn322mXOyePFi2bRpU0DP7tGjh+imqb4OAosvFd5DAAEEELCbAIHFbi1Gef0KEFj80vCBhQT8BZb77rtP/vnPf5ohijfddNPRn7t162aGkOlQMj10In3nzp1l//79pufkjjvukMcee0y8n9evKoGlvgY/I4AAAgjYVYDAYteWo9xNBHQuSocOHZq8b+c3vD0sujwthzMEfAWWLl26mL2BvHsAaSjR5Yh1jpWu8tWzZ0/55JNPZOfOnaJhZu3atdK1a1dZtmyZeT179mxZuXJlEyACSxMS3kAAAQQQsKEAgcWGjUaRfQvs2rWrxQ34fF9p3Xdra2vNalL6L+oczhDwFVgGDhwouqnpa6+91qCSOln+xBNPNF+64tfcuXPNohELFy40AUXf+8///E/561//2uA67wsCi1eC7wgggAACdhYgsNi59Sh7AwHtYUlKSmrwnt1faA+L/mt7Wlqa3atC+f8t4Cuw6CaP9957r/zpT38yE/KPOeYYKSkpMctxv/3222YDyP79+8sbb7xhlijWz88//3xz/j333CMPPvigT18Ci08W3kQAAQQQsJkAgcVmDUZx/QsQWPzb8Il1BHwFFi2dLrM9btw4ycvLk9TUVHniiSfkyiuvNL2Guprd4cOHZcGCBfKrX/3KzHOJioqSl156Sa6//noz6V73GGp8EFgai/AaAQQQQMCOAgQWO7YaZfYpQGDxycKbFhPIzs42vSi+9mHReSvaS6i9K95De1+0p63+0fg9DS++lubW++i8Lnro6uvxMwIIIICA3QQILHZr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QYHZ0T4+Pl508rsuZdy9e3c5fPiwGaalF+vcEt1AUuea6POGDBkib7zxhnne/v37Ze3atZKUlCTFxcVm4rwO79LXer4+Q4ey6TLJubm5oksyNz4ILI1FeI0AAggg4CYBAoubWpu6IuBwAX+BJSMjQz799FM58cQTZeDAgbJs2TK56qqrZMeOHSYwPPfcc3LDDTeYsNKhQwcTQDSw3HnnnSa4DBo0SE444QR5//335fbbb5fNmzfL8OHD5bHHHpMLL7zQLKPcv39/mT17tnTq1EnOO+88E1h27dplekf69Okj48ePlzlz5sgFF1wgGzduNGFGy9ulSxczjE3LouX785//3KSVCCxNSHgDAQQQQMBFAgQWFzU2VUXA6QL+AsvFF19sekS0R+Vvf/ubXHnllVJdXS179uyRiy66SG655Ra5+eab5X/+539EA8tNN91kgkrjwKJBRYPJvHnzTA+Jej777LPy0ksvmV4c3ezxxRdfFA04GlCOOeYYmTVrltkE0ldg0aCkZdIhZC+//LIJSA8//HCTIWQEFqf/5lI/BBBAAIHmBAgszenwGQII2ErAX2DRHpbPPvtM7r//fnnwwQdNr8jOnTtND4tuyqi71d9xxx0mzOgGjdddd50JLPfcc485/7jjjpOsrCxZv3696Vl56623pHPnzmb41l133SUzZswwq5PpUC99X4eZ6dAynceiPTOLFi0yPSr/+Mc/5Be/+IWsXr3avH766adFy6aBRefM/O53v5NHHnmEwGKr3zoKiwACCCAQagECS6iFuT8CCIRNoLnAokPCxo4da3pCFixYYELJkSNHTDjQXpKf//znZnhWWVnZ0SFh06ZNM3u66LwVnYvyzjvvmKFj2pOiPSOPP/64/OQnPzHLDetQMP1c57lce+21JgT17t3b9Ljotffdd9/R93TomM6nIbCE7VeDByGAAAII2FiAwGLjxqPoCCDQUMBXYGl4RsNXOvFee0W8R2xsrBkq5n2t3xufo+81Pk+XUda9UnTolvdISUmRoqKiBu/5upf3/Oa+MySsOR0+QwABBBBwugCBxektTP0QcJFAsIHFLjQEFru0FOVEAAEEEAiFAIElFKrcEwEEIiJAYIkIOw9FAAEEEEAgpAIElpDycnMEEAinwIEDB8wQLKftdK/DzXTejM6J4UAAAQQQQMBtAgQWt7U49UXAwQLe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wtG8gDofPnzY9GZpbwsHAggggAACrREgsLRGjWsQQCAgAe2JKCsrs1xg0cJruTSweFfXCqhCnpO010DnwrRlSFmgz3LCeTk5OWaxhISEBCdUhzoggAACCERAgMASAXQeiYBbBLQ3Qud6WPGPVe396d69uxmyFEx7FBQUmLkZVus1CqYO4TxXe1h0Hgs9LOFU51kIIICAswQILM5qT2qDgKUEmgssY8eONXNBNm3aFFCZzz//fFmwYIEJQHpBt27d5Nhjj5XPP/88oOsbn2S3wPLTn/5U/vWvf0lFRUXjqjR5rYsBTJ48Wd5///2jn6mVzr9p7eaSQ4cONUsn6ypkixYtEl3AQO950kknyapVq/zel8BytAn4AQEEEECglQIEllbCcRkCCLQs0Fxguffee0V7K2bMmGFupHus6NwQ7bnQYVcaSHRIma7opec999xz5g/wd955x5z/m9/8Rrp27Sp/+MMfTA+O7vauE/x1c0mdX6L30H/V194dLUfjo70Diw4T0yFm+ge6zt3w9ippvXRYlB76s36mf+xrz5PWTV9rCNFeiMLCQvNZ47Lqder13nvvydKlS4/eS3+oqqoy16uF1lnDit7zqaeeMjZ79uwx58+cOVPmzp1rQp+uaqZLROsmk1puXRBBjbQ86qftUP9Q2wsuuEBeeeUVGT16tOzevduU3/veNddcI3PmzDHzlepfpz8TWBqL8BoBBBBAIFgBAkuwYpyPAAIBC/gLLAMHDpQTTzxRevbsKc8884z5g/uWW24xfzQvX75czjjjDPOHroYX/UP8oYcekunTp5vnPvroo6J/cF9//fXm+9///ne5+eabZfv27TJkyBBz7pVXXmn+1X/MmDGmB0b/wG58tGdg0WB0ww03mD1isrKy5B//+Iccf/zxMmLECPPHvbee9913n3z77bcyYMAA+fDDD03AuOSSS+TNN9+Uc889V15++WW58cYb5cknn5SzzjrLBLDvvvtOzj77bPn+++/NexpE9Lj//vtFP1uxYoX84he/kI0bN8qgQYNEe6yWLFkiv/rVryQ3N1dmz55t3td7bN682QSea6+9Vnbu3GneV7+bbrpJXnjhBbnqqqtMMGwcWE499VQTZjRE6nV6//Hjx5vQsnr1ahNitPfm66+/bsxMYGkiwhsIIIAAAsEKEFiCFeN8BBAIWMBfYPntb38rX375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sNi04Sg2AnYTqKioEO9cFi27hpdwHTrkTHtXEhISzP4u4Xouz0EAAQQQQACBtgsQWNpuyB0QQCAIAd2xXsNLfHx8EFe17VSdz6JzZTSwcCCAAAIIIICAvQQILPZqL0qLAAIIIIAAAggggICrBAgsrmpuKosAAggggAACCCCAgL0ECCz2ai9KiwACCCCAAAIIIICAqwQILK5qbiqLAAIIIIAAAggggIC9BAgs9movSosAAggggAACCCCAgKsECCyuam4qiwACCCCAAAIIIICAvQQILPZqL0qLAAIIIIAAAggggICrBAgsrmpuKosAAggggAACCCCAgL0ECCz2ai9KiwACCCCAAAIIIICAqwQILK5qbiqLAAIIIIAAAggggIC9BAgs9movSosAAggggAACCCCAgKsECCyuam4qiwACCCCAAAIIIICAvQQILPZqL0qLAAIIIIAAAggggICrBAgsrmpuKosAAggggAACCCCAgL0ECCz2ai9KiwACCCCAAAIIIICAqwQILK5qbiqLAAIIIIAAAggggIC9BAgs9movSosAAggggAACCCCAgKsECCyuam4qiwACCCCAAAIIIICAvQQILPZqL0qLAAIIIIAAAggggICrBAgsrmpuKosAAggggAACCCCAgL0ECCz2ai9KiwACCCCAAAIIIICAqwQILK5qbiqLAAIIIIAAAggggIC9BAgs9movSosAAggggAACCCCAgKsECCyuam4qiwACCCCAAAIIIICAvQQILPZqL0qLAAIIIIAAAggggICrBP4/LTSuZ2kLvQEAAAAASUVORK5CYII=" + "cells": [ + { + "attachments": { + "image-3.png": { + "image/png": "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BOXk5JhLEhMTg7k0qHO190bvr4GdAwEEEEAAATsLEFjs3HqUvYGAv8Dy/vvvyxVXXGH+RfuDDz6Qq666SjSwTJ8+XZ566imzAtNdd90lM2fOpIelgSgvQiFQXFwshYWFkpycHIrbN7inhpbMzEzb70vUoFK8QAABBBBwnQCBxXVN7twKNxdYhgwZImeeeab87W9/M0FFA8upp54qp512muzdu1d69eolf//73wkszv31sEzNjhw5IjokTJerDvWhm4/qYhL6xYEAAggggIBdBQgsdm05yt1EwFdgaXJSozd0srMO0dFx/1Y8mHRvxVZpW5l0LlUgE+3b9pT/u1oDS6dOnRy33Hd72HAPBBBAAAH7CBBY7NNWlLQFgdYElhZuGfGPCSwRb4J2L4C/wJKSkiJnn322mXOyePFi2bRpU0DP7tGjh+imqb4OAosvFd5DAAEEELCbAIHFbi1Gef0KEFj80vCBhQT8BZb77rtP/vnPf5ohijfddNPRn7t162aGkOlQMj10In3nzp1l//79pufkjjvukMcee0y8n9evKoGlvgY/I4AAAgjYVYDAYteWo9xNBHQuSocOHZq8b+c3vD0sujwthzMEfAWWLl26mL2BvHsAaSjR5Yh1jpWu8tWzZ0/55JNPZOfOnaJhZu3atdK1a1dZtmyZeT179mxZuXJlEyACSxMS3kAAAQQQsKEAgcWGjUaRfQvs2rWrxQ34fF9p3Xdra2vNalL6L+oczhDwFVgGDhwouqnpa6+91qCSOln+xBNPNF+64tfcuXPNohELFy40AUXf+8///E/561//2uA67wsCi1eC7wgggAACdhYgsNi59Sh7AwHtYUlKSmrwnt1faA+L/mt7Wlqa3atC+f8t4Cuw6CaP9957r/zpT38yE/KPOeYYKSkpMctxv/3222YDyP79+8sbb7xhlijWz88//3xz/j333CMPPvigT18Ci08W3kQAAQQQsJkAgcVmDUZx/QsQWPzb8Il1BHwFFi2dLrM9btw4ycvLk9TUVHniiSfkyiuvNL2Guprd4cOHZcGCBfKrX/3KzHOJioqSl156Sa6//noz6V73GGp8EFgai/AaAQQQQMCOAgQWO7YaZfYpQGDxycKbFhPIzs42vSi+9mHReSvaS6i9K95De1+0p63+0fg9DS++lubW++i8Lnro6uvxMwIIIICA3QQILHZr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QYHZ0T4+Pl508rsuZdy9e3c5fPiwGaalF+vcEt1AUuea6POGDBkib7zxhnne/v37Ze3atZKUlCTFxcVm4rwO79LXer4+Q4ey6TLJubm5oksyNz4ILI1FeI0AAggg4CYBAoubWpu6IuBwAX+BJSMjQz799FM58cQTZeDAgbJs2TK56qqrZMeOHSYwPPfcc3LDDTeYsNKhQwcTQDSw3HnnnSa4DBo0SE444QR5//335fbbb5fNmzfL8OHD5bHHHpMLL7zQLKPcv39/mT17tnTq1EnOO+88E1h27dplekf69Okj48ePlzlz5sgFF1wgGzduNGFGy9ulSxczjE3LouX785//3KSVCCxNSHgDAQQQQMBFAgQWFzU2VUXA6QL+AsvFF19sekS0R+Vvf/ubXHnllVJdXS179uyRiy66SG655Ra5+eab5X/+539EA8tNN91kgkrjwKJBRYPJvHnzTA+Jej777LPy0ksvmV4c3ezxxRdfFA04GlCOOeYYmTVrltkE0ldg0aCkZdIhZC+//LIJSA8//HCTIWQEFqf/5lI/BBBAAIHmBAgszenwGQII2ErAX2DRHpbPPvtM7r//fnnwwQdNr8jOnTtND4tuyqi71d9xxx0mzOgGjdddd50JLPfcc485/7jjjpOsrCxZv3696Vl56623pHPnzmb41l133SUzZswwq5PpUC99X4eZ6dAynceiPTOLFi0yPSr/+Mc/5Be/+IWsXr3avH766adFy6aBRefM/O53v5NHHnmEwGKr3zoKiwACCCAQagECS6iFuT8CCIRNoLnAokPCxo4da3pCFixYYELJkSNHTDjQXpKf//znZnhWWVnZ0SFh06ZNM3u66LwVnYvyzjvvmKFj2pOiPSOPP/64/OQnPzHLDetQMP1c57lce+21JgT17t3b9Ljotffdd9/R93TomM6nIbCE7VeDByGAAAII2FiAwGLjxqPoCCDQUMBXYGl4RsNXOvFee0W8R2xsrBkq5n2t3xufo+81Pk+XUda9UnTolvdISUmRoqKiBu/5upf3/Oa+MySsOR0+QwABBBBwugCBxektTP0QcJFAsIHFLjQEFru0FOVEAAEEEAiFAIElFKrcEwEEIiJAYIkIOw9FAAEEEEAgpAIElpDycnMEEAinwIEDB8wQLKftdK/DzXTejM6J4UAAAQQQQMBtAgQWt7U49UXAwQLe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wtG8gDofPnzY9GZpbwsHAggggAACrREgsLRGjWsQQCAgAe2JKCsrs1xg0cJruTSweFfXCqhCnpO010DnwrRlSFmgz3LCeTk5OWaxhISEBCdUhzoggAACCERAgMASAXQeiYBbBLQ3Qud6WPGPVe396d69uxmyFEx7FBQUmLkZVus1CqYO4TxXe1h0Hgs9LOFU51kIIICAswQILM5qT2qDgKUEmgssY8eONXNBNm3aFFCZzz//fFmwYIEJQHpBt27d5Nhjj5XPP/88oOsbn2S3wPLTn/5U/vWvf0lFRUXjqjR5rYsBTJ48Wd5///2jn6mVzr9p7eaSQ4cONUsn6ypkixYtEl3AQO950kknyapVq/zel8BytAn4AQEEEECglQIEllbCcRkCCLQs0Fxguffee0V7K2bMmGFupHus6NwQ7bnQYVcaSHRIma7opec999xz5g/wd955x5z/m9/8Rrp27Sp/+MMfTA+O7vauE/x1c0mdX6L30H/V194dLUfjo70Diw4T0yFm+ge6zt3w9ippvXRYlB76s36mf+xrz5PWTV9rCNFeiMLCQvNZ47Lqder13nvvydKlS4/eS3+oqqoy16uF1lnDit7zqaeeMjZ79uwx58+cOVPmzp1rQp+uaqZLROsmk1puXRBBjbQ86qftUP9Q2wsuuEBeeeUVGT16tOzevduU3/veNddcI3PmzDHzlepfpz8TWBqL8BoBBBBAIFgBAkuwYpyPAAIBC/gLLAMHDpQTTzxRevbsKc8884z5g/uWW24xfzQvX75czjjjDPOHroYX/UP8oYcekunTp5vnPvroo6J/cF9//fXm+9///ne5+eabZfv27TJkyBBz7pVXXmn+1X/MmDGmB0b/wG58tGdg0WB0ww03mD1isrKy5B//+Iccf/zxMmLECPPHvbee9913n3z77bcyYMAA+fDDD03AuOSSS+TNN9+Uc889V15++WW58cYb5cknn5SzzjrLBLDvvvtOzj77bPn+++/NexpE9Lj//vtFP1uxYoX84he/kI0bN8qgQYNEe6yWLFkiv/rVryQ3N1dmz55t3td7bN682QSea6+9Vnbu3GneV7+bbrpJXnjhBbnqqqtMMGwcWE499VQTZjRE6nV6//Hjx5vQsnr1ahNitPfm66+/bsxMYGkiwhsIIIAAAsEKEFiCFeN8BBAIWMBfYPntb38rX375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sNi04Sg2AnYTqKioEO9cFi27hpdwHTrkTHtXEhISzP4u4Xouz0EAAQQQQACBtgsQWNpuyB0QQCAIAd2xXsNLfHx8EFe17VSdz6JzZTSwcCCAAAIIIICAvQQILPZqL0qLAAIIIIAAAggggICrBAgsrmpuKosAAggggAACCCCAgL0ECCz2ai9KiwACCCCAAAIIIICAqwQILK5qbiqLAAIIIIAAAggggIC9BAgs9movSosAAggggAACCCCAgKsECCyuam4qiwACCCCAAAIIIICAvQQILPZqL0qLAAIIIIAAAggggICrBAgsrmpuKosAAggggAACCCCAgL0ECCz2ai9KiwACCCCAAAIIIICAqwQILK5qbiqLAAIIIIAAAggggIC9BAgs9movSosAAggggAACCCCAgKsECCyuam4qiwACCCCAAAIIIICAvQQILPZqL0qLAAIIIIAAAggggICrBAgsrmpuKosAAggggAACCCCAgL0ECCz2ai9KiwACCCCAAAIIIICAqwQILK5qbiqLAAIIIIAAAggggIC9BAgs9movSosAAggggAACCCCAgKsECCyuam4qiwACCCCAAAIIIICAvQQILPZqL0qLAAIIIIAAAggggICrBAgsrmpuKosAAggggAACCCCAgL0ECCz2ai9KiwACCCCAAAIIIICAqwQILK5qbiqLAAIIIIAAAggggIC9BAgs9movSosAAggggAACCCCAgKsECCyuam4qiwACCCCAAAIIIICAvQQILPZqL0qLAAIIIIAAAggggICrBP4/LTSuZ2kLvQEAAAAASUVORK5CYII=" + }, + "image.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", + "metadata": {}, + "source": [ + "## LightBGM models\n", + "\n", + "\n", + "LightBGM based models are slightly finicky to get into a suitable onnx format. By default most tree based models will export into something that looks like this: \n", + "\n", + "\n", + "![image.png](attachment:image.png)\n", + "\n", + "\n", + "Processing such nodes can be difficult and error prone. It would be much better if the operations of the tree were represented as a proper graph, possibly ... like this: \n", + "\n", + "\n", + "![image-3.png](attachment:image-3.png)\n", + "\n", + "\n", + "This notebook showcases how to do that using the `hummingbird` python package ! " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a60b90d6", + "metadata": {}, + "outputs": [], + "source": [ + "!python -m pip install hummingbird_ml" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "95613ee9", + "metadata": {}, + "outputs": [], + "source": [ + "# check if notebook is in colab\n", + "try:\n", + " # install ezkl\n", + " import google.colab\n", + " import subprocess\n", + " import sys\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"hummingbird-ml\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"lightgbm\"])\n", + "\n", + "# rely on local installation of ezkl if the notebook is not in colab\n", + "except:\n", + " pass\n", + "\n", + "\n", + "# here we create and (potentially train a model)\n", + "\n", + "# make sure you have the dependencies required here already installed\n", + "import json\n", + "import numpy as np\n", + "from sklearn.datasets import load_iris\n", + "from sklearn.model_selection import train_test_split\n", + "from lightgbm import LGBMClassifier as Gbc\n", + "import torch\n", + "import ezkl\n", + "import os\n", + "from torch import nn\n", + "from hummingbird.ml import convert\n", + "\n", + "NUM_CLASSES = 3\n", + "\n", + "iris = load_iris()\n", + "X, y = iris.data, iris.target\n", + "X = X.astype(np.float32)\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y)\n", + "clr = Gbc(n_estimators=12)\n", + "clr.fit(X_train, y_train)\n", + "\n", + "# convert to torch\n", + "\n", + "\n", + "torch_gbt = convert(clr, 'torch', X_test[:1])\n", + "\n", + "print(torch_gbt)\n", + "# assert predictions from torch are = to sklearn\n", + "diffs = []\n", + "\n", + "for i in range(len(X_test)):\n", + " torch_pred = torch_gbt.predict(torch.tensor(X_test[i].reshape(1, -1)))\n", + " sk_pred = clr.predict(X_test[i].reshape(1, -1))\n", + " diffs.append(torch_pred != sk_pred[0])\n", + "\n", + "print(\"num diff: \", sum(diffs))\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b37637c4", + "metadata": {}, + "outputs": [], + "source": [ + "model_path = os.path.join('network.onnx')\n", + "compiled_model_path = os.path.join('network.compiled')\n", + "pk_path = os.path.join('test.pk')\n", + "vk_path = os.path.join('test.vk')\n", + "settings_path = os.path.join('settings.json')\n", + "srs_path = os.path.join('kzg.srs')\n", + "witness_path = os.path.join('witness.json')\n", + "data_path = os.path.join('input.json')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "82db373a", + "metadata": {}, + "outputs": [], + "source": [ + "# !!!!!!!!!!!!!!!!! This cell will flash a warning about onnx runtime compat but it is fine !!!!!!!!!!!!!!!!!!!!!\n", + "\n", + "\n", + "# export to onnx format\n", + "\n", + "\n", + "# Input to the model\n", + "shape = X_train.shape[1:]\n", + "x = torch.rand(1, *shape, requires_grad=False)\n", + "torch_out = torch_gbt.predict(x)\n", + "# Export the model\n", + "torch.onnx.export(torch_gbt.model, # model being run\n", + " # model input (or a tuple for multiple inputs)\n", + " x,\n", + " # where to save the model (can be a file or file-like object)\n", + " \"network.onnx\",\n", + " export_params=True, # store the trained parameter weights inside the model file\n", + " opset_version=18, # the ONNX version to export the model to\n", + " input_names=['input'], # the model's input names\n", + " output_names=['output'], # the model's output names\n", + " dynamic_axes={'input': {0: 'batch_size'}, # variable length axes\n", + " 'output': {0: 'batch_size'}})\n", + "\n", + "d = ((x).detach().numpy()).reshape([-1]).tolist()\n", + "\n", + "data = dict(input_shapes=[shape],\n", + " input_data=[d],\n", + " output_data=[(o).reshape([-1]).tolist() for o in torch_out])\n", + "\n", + "# Serialize data into file:\n", + "json.dump(data, open(\"input.json\", 'w'))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d5e374a2", + "metadata": {}, + "outputs": [], + "source": [ + "run_args = ezkl.PyRunArgs()\n", + "run_args.variables = [(\"batch_size\", 1)]\n", + "\n", + "# TODO: Dictionary outputs\n", + "res = ezkl.gen_settings(model_path, settings_path, py_run_args=run_args)\n", + "assert res == True\n", + "\n", + "res = ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3aa4f090", + "metadata": {}, + "outputs": [], + "source": [ + "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8b74dcee", + "metadata": {}, + "outputs": [], + "source": [ + "# srs path\n", + "res = ezkl.get_srs(srs_path, settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "18c8b7c7", + "metadata": {}, + "outputs": [], + "source": [ + "# now generate the witness file \n", + "\n", + "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", + "assert os.path.isfile(witness_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b1c561a8", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# HERE WE SETUP THE CIRCUIT PARAMS\n", + "# WE GOT KEYS\n", + "# WE GOT CIRCUIT PARAMETERS\n", + "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", + "\n", + "\n", + "\n", + "res = ezkl.setup(\n", + " compiled_model_path,\n", + " vk_path,\n", + " pk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "assert os.path.isfile(vk_path)\n", + "assert os.path.isfile(pk_path)\n", + "assert os.path.isfile(settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c384cbc8", + "metadata": {}, + "outputs": [], + "source": [ + "# GENERATE A PROOF\n", + "\n", + "\n", + "proof_path = os.path.join('test.pf')\n", + "\n", + "res = ezkl.prove(\n", + " witness_path,\n", + " compiled_model_path,\n", + " pk_path,\n", + " proof_path,\n", + " srs_path,\n", + " \"single\",\n", + " )\n", + "\n", + "print(res)\n", + "assert os.path.isfile(proof_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "76f00d41", + "metadata": {}, + "outputs": [], + "source": [ + "# VERIFY IT\n", + "\n", + "res = ezkl.verify(\n", + " proof_path,\n", + " settings_path,\n", + " vk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "print(\"verified\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1f50a8d0", + "metadata": {}, + "outputs": [], + "source": [ + "# VERIFY IT\n", + "\n", + "res = ezkl.verify(\n", + " proof_path,\n", + " settings_path,\n", + " vk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "print(\"verified\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.15" + } }, - "image.png": { - "image/png": "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" - } - }, - "cell_type": "markdown", - "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", - "metadata": {}, - "source": [ - "## LightBGM models\n", - "\n", - "\n", - "LightBGM based models are slightly finicky to get into a suitable onnx format. By default most tree based models will export into something that looks like this: \n", - "\n", - "\n", - "![image.png](attachment:image.png)\n", - "\n", - "\n", - "Processing such nodes can be difficult and error prone. It would be much better if the operations of the tree were represented as a proper graph, possibly ... like this: \n", - "\n", - "\n", - "![image-3.png](attachment:image-3.png)\n", - "\n", - "\n", - "This notebook showcases how to do that using the `hummingbird` python package ! " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a60b90d6", - "metadata": {}, - "outputs": [], - "source": [ - "!python -m pip install hummingbird_ml" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "95613ee9", - "metadata": {}, - "outputs": [], - "source": [ - "# check if notebook is in colab\n", - "try:\n", - " # install ezkl\n", - " import google.colab\n", - " import subprocess\n", - " import sys\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"hummingbird-ml\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"lightgbm\"])\n", - "\n", - "# rely on local installation of ezkl if the notebook is not in colab\n", - "except:\n", - " pass\n", - "\n", - "\n", - "# here we create and (potentially train a model)\n", - "\n", - "# make sure you have the dependencies required here already installed\n", - "import json\n", - "import numpy as np\n", - "from sklearn.datasets import load_iris\n", - "from sklearn.model_selection import train_test_split\n", - "from lightgbm import LGBMClassifier as Gbc\n", - "import torch\n", - "import ezkl\n", - "import os\n", - "from torch import nn\n", - "from hummingbird.ml import convert\n", - "\n", - "NUM_CLASSES = 3\n", - "\n", - "iris = load_iris()\n", - "X, y = iris.data, iris.target\n", - "X = X.astype(np.float32)\n", - "X_train, X_test, y_train, y_test = train_test_split(X, y)\n", - "clr = Gbc(n_estimators=12)\n", - "clr.fit(X_train, y_train)\n", - "\n", - "# convert to torch\n", - "\n", - "\n", - "torch_gbt = convert(clr, 'torch', X_test[:1])\n", - "\n", - "print(torch_gbt)\n", - "# assert predictions from torch are = to sklearn\n", - "diffs = []\n", - "\n", - "for i in range(len(X_test)):\n", - " torch_pred = torch_gbt.predict(torch.tensor(X_test[i].reshape(1, -1)))\n", - " sk_pred = clr.predict(X_test[i].reshape(1, -1))\n", - " diffs.append(torch_pred != sk_pred[0])\n", - "\n", - "print(\"num diff: \", sum(diffs))\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b37637c4", - "metadata": {}, - "outputs": [], - "source": [ - "model_path = os.path.join('network.onnx')\n", - "compiled_model_path = os.path.join('network.compiled')\n", - "pk_path = os.path.join('test.pk')\n", - "vk_path = os.path.join('test.vk')\n", - "settings_path = os.path.join('settings.json')\n", - "srs_path = os.path.join('kzg.srs')\n", - "witness_path = os.path.join('witness.json')\n", - "data_path = os.path.join('input.json')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "82db373a", - "metadata": {}, - "outputs": [], - "source": [ - "# !!!!!!!!!!!!!!!!! This cell will flash a warning about onnx runtime compat but it is fine !!!!!!!!!!!!!!!!!!!!!\n", - "\n", - "\n", - "# export to onnx format\n", - "\n", - "\n", - "# Input to the model\n", - "shape = X_train.shape[1:]\n", - "x = torch.rand(1, *shape, requires_grad=False)\n", - "torch_out = torch_gbt.predict(x)\n", - "# Export the model\n", - "torch.onnx.export(torch_gbt.model, # model being run\n", - " # model input (or a tuple for multiple inputs)\n", - " x,\n", - " # where to save the model (can be a file or file-like object)\n", - " \"network.onnx\",\n", - " export_params=True, # store the trained parameter weights inside the model file\n", - " opset_version=18, # the ONNX version to export the model to\n", - " input_names=['input'], # the model's input names\n", - " output_names=['output'], # the model's output names\n", - " dynamic_axes={'input': {0: 'batch_size'}, # variable length axes\n", - " 'output': {0: 'batch_size'}})\n", - "\n", - "d = ((x).detach().numpy()).reshape([-1]).tolist()\n", - "\n", - "data = dict(input_shapes=[shape],\n", - " input_data=[d],\n", - " output_data=[(o).reshape([-1]).tolist() for o in torch_out])\n", - "\n", - "# Serialize data into file:\n", - "json.dump(data, open(\"input.json\", 'w'))\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d5e374a2", - "metadata": {}, - "outputs": [], - "source": [ - "run_args = ezkl.PyRunArgs()\n", - "run_args.variables = [(\"batch_size\", 1)]\n", - "\n", - "# TODO: Dictionary outputs\n", - "res = ezkl.gen_settings(model_path, settings_path, py_run_args=run_args)\n", - "assert res == True\n", - "\n", - "res = await ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3aa4f090", - "metadata": {}, - "outputs": [], - "source": [ - "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8b74dcee", - "metadata": {}, - "outputs": [], - "source": [ - "# srs path\n", - "res = ezkl.get_srs(srs_path, settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "18c8b7c7", - "metadata": {}, - "outputs": [], - "source": [ - "# now generate the witness file \n", - "\n", - "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", - "assert os.path.isfile(witness_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b1c561a8", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "# HERE WE SETUP THE CIRCUIT PARAMS\n", - "# WE GOT KEYS\n", - "# WE GOT CIRCUIT PARAMETERS\n", - "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", - "\n", - "\n", - "\n", - "res = ezkl.setup(\n", - " compiled_model_path,\n", - " vk_path,\n", - " pk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "assert os.path.isfile(vk_path)\n", - "assert os.path.isfile(pk_path)\n", - "assert os.path.isfile(settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c384cbc8", - "metadata": {}, - "outputs": [], - "source": [ - "# GENERATE A PROOF\n", - "\n", - "\n", - "proof_path = os.path.join('test.pf')\n", - "\n", - "res = ezkl.prove(\n", - " witness_path,\n", - " compiled_model_path,\n", - " pk_path,\n", - " proof_path,\n", - " srs_path,\n", - " \"single\",\n", - " )\n", - "\n", - "print(res)\n", - "assert os.path.isfile(proof_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "76f00d41", - "metadata": {}, - "outputs": [], - "source": [ - "# VERIFY IT\n", - "\n", - "res = ezkl.verify(\n", - " proof_path,\n", - " settings_path,\n", - " vk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "print(\"verified\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1f50a8d0", - "metadata": {}, - "outputs": [], - "source": [ - "# VERIFY IT\n", - "\n", - "res = ezkl.verify(\n", - " proof_path,\n", - " settings_path,\n", - " vk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "print(\"verified\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.15" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/notebooks/linear_regression.ipynb b/examples/notebooks/linear_regression.ipynb index 14043e62..f714cfdd 100644 --- a/examples/notebooks/linear_regression.ipynb +++ b/examples/notebooks/linear_regression.ipynb @@ -1,263 +1,263 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", - "metadata": {}, - "source": [ - "## Linear Regression\n", - "\n", - "\n", - "Sklearn based models are slightly finicky to get into a suitable onnx format. \n", - "This notebook showcases how to do so using the `hummingbird-ml` python package ! " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "95613ee9", - "metadata": {}, - "outputs": [], - "source": [ - "# check if notebook is in colab\n", - "try:\n", - " # install ezkl\n", - " import google.colab\n", - " import subprocess\n", - " import sys\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"hummingbird-ml\"])\n", - "\n", - "# rely on local installation of ezkl if the notebook is not in colab\n", - "except:\n", - " pass\n", - "\n", - "import os\n", - "import torch\n", - "import ezkl\n", - "import json\n", - "from hummingbird.ml import convert\n", - "\n", - "\n", - "# here we create and (potentially train a model)\n", - "\n", - "# make sure you have the dependencies required here already installed\n", - "import numpy as np\n", - "from sklearn.linear_model import LinearRegression\n", - "X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])\n", - "# y = 1 * x_0 + 2 * x_1 + 3\n", - "y = np.dot(X, np.array([1, 2])) + 3\n", - "reg = LinearRegression().fit(X, y)\n", - "reg.score(X, y)\n", - "\n", - "circuit = convert(reg, \"torch\", X[:1]).model\n", - "\n", - "\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b37637c4", - "metadata": {}, - "outputs": [], - "source": [ - "model_path = os.path.join('network.onnx')\n", - "compiled_model_path = os.path.join('network.compiled')\n", - "pk_path = os.path.join('test.pk')\n", - "vk_path = os.path.join('test.vk')\n", - "settings_path = os.path.join('settings.json')\n", - "srs_path = os.path.join('kzg.srs')\n", - "witness_path = os.path.join('witness.json')\n", - "data_path = os.path.join('input.json')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "82db373a", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "\n", - "# export to onnx format\n", - "# !!!!!!!!!!!!!!!!! This will flash a warning but it is fine !!!!!!!!!!!!!!!!!!!!!\n", - "\n", - "# Input to the model\n", - "shape = X.shape[1:]\n", - "x = torch.rand(1, *shape, requires_grad=True)\n", - "torch_out = circuit(x)\n", - "# Export the model\n", - "torch.onnx.export(circuit, # model being run\n", - " # model input (or a tuple for multiple inputs)\n", - " x,\n", - " # where to save the model (can be a file or file-like object)\n", - " \"network.onnx\",\n", - " export_params=True, # store the trained parameter weights inside the model file\n", - " opset_version=10, # the ONNX version to export the model to\n", - " do_constant_folding=True, # whether to execute constant folding for optimization\n", - " input_names=['input'], # the model's input names\n", - " output_names=['output'], # the model's output names\n", - " dynamic_axes={'input': {0: 'batch_size'}, # variable length axes\n", - " 'output': {0: 'batch_size'}})\n", - "\n", - "d = ((x).detach().numpy()).reshape([-1]).tolist()\n", - "\n", - "data = dict(input_shapes=[shape],\n", - " input_data=[d],\n", - " output_data=[((o).detach().numpy()).reshape([-1]).tolist() for o in torch_out])\n", - "\n", - "# Serialize data into file:\n", - "json.dump(data, open(\"input.json\", 'w'))\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d5e374a2", - "metadata": {}, - "outputs": [], - "source": [ - "!RUST_LOG=trace\n", - "# TODO: Dictionary outputs\n", - "res = ezkl.gen_settings(model_path, settings_path)\n", - "assert res == True\n", - "\n", - "res = await ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3aa4f090", - "metadata": {}, - "outputs": [], - "source": [ - "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8b74dcee", - "metadata": {}, - "outputs": [], - "source": [ - "# srs path\n", - "res = ezkl.get_srs(srs_path, settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "18c8b7c7", - "metadata": {}, - "outputs": [], - "source": [ - "# now generate the witness file \n", - "\n", - "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", - "assert os.path.isfile(witness_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b1c561a8", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "# HERE WE SETUP THE CIRCUIT PARAMS\n", - "# WE GOT KEYS\n", - "# WE GOT CIRCUIT PARAMETERS\n", - "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", - "\n", - "\n", - "\n", - "res = ezkl.setup(\n", - " compiled_model_path,\n", - " vk_path,\n", - " pk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "assert os.path.isfile(vk_path)\n", - "assert os.path.isfile(pk_path)\n", - "assert os.path.isfile(settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c384cbc8", - "metadata": {}, - "outputs": [], - "source": [ - "# GENERATE A PROOF\n", - "\n", - "\n", - "proof_path = os.path.join('test.pf')\n", - "\n", - "res = ezkl.prove(\n", - " witness_path,\n", - " compiled_model_path,\n", - " pk_path,\n", - " proof_path,\n", - " srs_path,\n", - " \"single\",\n", - " )\n", - "\n", - "print(res)\n", - "assert os.path.isfile(proof_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "76f00d41", - "metadata": {}, - "outputs": [], - "source": [ - "# VERIFY IT\n", - "\n", - "res = ezkl.verify(\n", - " proof_path,\n", - " settings_path,\n", - " vk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "print(\"verified\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.15" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "cells": [ + { + "cell_type": "markdown", + "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", + "metadata": {}, + "source": [ + "## Linear Regression\n", + "\n", + "\n", + "Sklearn based models are slightly finicky to get into a suitable onnx format. \n", + "This notebook showcases how to do so using the `hummingbird-ml` python package ! " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "95613ee9", + "metadata": {}, + "outputs": [], + "source": [ + "# check if notebook is in colab\n", + "try:\n", + " # install ezkl\n", + " import google.colab\n", + " import subprocess\n", + " import sys\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"hummingbird-ml\"])\n", + "\n", + "# rely on local installation of ezkl if the notebook is not in colab\n", + "except:\n", + " pass\n", + "\n", + "import os\n", + "import torch\n", + "import ezkl\n", + "import json\n", + "from hummingbird.ml import convert\n", + "\n", + "\n", + "# here we create and (potentially train a model)\n", + "\n", + "# make sure you have the dependencies required here already installed\n", + "import numpy as np\n", + "from sklearn.linear_model import LinearRegression\n", + "X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])\n", + "# y = 1 * x_0 + 2 * x_1 + 3\n", + "y = np.dot(X, np.array([1, 2])) + 3\n", + "reg = LinearRegression().fit(X, y)\n", + "reg.score(X, y)\n", + "\n", + "circuit = convert(reg, \"torch\", X[:1]).model\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b37637c4", + "metadata": {}, + "outputs": [], + "source": [ + "model_path = os.path.join('network.onnx')\n", + "compiled_model_path = os.path.join('network.compiled')\n", + "pk_path = os.path.join('test.pk')\n", + "vk_path = os.path.join('test.vk')\n", + "settings_path = os.path.join('settings.json')\n", + "srs_path = os.path.join('kzg.srs')\n", + "witness_path = os.path.join('witness.json')\n", + "data_path = os.path.join('input.json')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "82db373a", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "\n", + "# export to onnx format\n", + "# !!!!!!!!!!!!!!!!! This will flash a warning but it is fine !!!!!!!!!!!!!!!!!!!!!\n", + "\n", + "# Input to the model\n", + "shape = X.shape[1:]\n", + "x = torch.rand(1, *shape, requires_grad=True)\n", + "torch_out = circuit(x)\n", + "# Export the model\n", + "torch.onnx.export(circuit, # model being run\n", + " # model input (or a tuple for multiple inputs)\n", + " x,\n", + " # where to save the model (can be a file or file-like object)\n", + " \"network.onnx\",\n", + " export_params=True, # store the trained parameter weights inside the model file\n", + " opset_version=10, # the ONNX version to export the model to\n", + " do_constant_folding=True, # whether to execute constant folding for optimization\n", + " input_names=['input'], # the model's input names\n", + " output_names=['output'], # the model's output names\n", + " dynamic_axes={'input': {0: 'batch_size'}, # variable length axes\n", + " 'output': {0: 'batch_size'}})\n", + "\n", + "d = ((x).detach().numpy()).reshape([-1]).tolist()\n", + "\n", + "data = dict(input_shapes=[shape],\n", + " input_data=[d],\n", + " output_data=[((o).detach().numpy()).reshape([-1]).tolist() for o in torch_out])\n", + "\n", + "# Serialize data into file:\n", + "json.dump(data, open(\"input.json\", 'w'))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d5e374a2", + "metadata": {}, + "outputs": [], + "source": [ + "!RUST_LOG=trace\n", + "# TODO: Dictionary outputs\n", + "res = ezkl.gen_settings(model_path, settings_path)\n", + "assert res == True\n", + "\n", + "res = ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3aa4f090", + "metadata": {}, + "outputs": [], + "source": [ + "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8b74dcee", + "metadata": {}, + "outputs": [], + "source": [ + "# srs path\n", + "res = ezkl.get_srs(srs_path, settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "18c8b7c7", + "metadata": {}, + "outputs": [], + "source": [ + "# now generate the witness file \n", + "\n", + "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", + "assert os.path.isfile(witness_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b1c561a8", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# HERE WE SETUP THE CIRCUIT PARAMS\n", + "# WE GOT KEYS\n", + "# WE GOT CIRCUIT PARAMETERS\n", + "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", + "\n", + "\n", + "\n", + "res = ezkl.setup(\n", + " compiled_model_path,\n", + " vk_path,\n", + " pk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "assert os.path.isfile(vk_path)\n", + "assert os.path.isfile(pk_path)\n", + "assert os.path.isfile(settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c384cbc8", + "metadata": {}, + "outputs": [], + "source": [ + "# GENERATE A PROOF\n", + "\n", + "\n", + "proof_path = os.path.join('test.pf')\n", + "\n", + "res = ezkl.prove(\n", + " witness_path,\n", + " compiled_model_path,\n", + " pk_path,\n", + " proof_path,\n", + " srs_path,\n", + " \"single\",\n", + " )\n", + "\n", + "print(res)\n", + "assert os.path.isfile(proof_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "76f00d41", + "metadata": {}, + "outputs": [], + "source": [ + "# VERIFY IT\n", + "\n", + "res = ezkl.verify(\n", + " proof_path,\n", + " settings_path,\n", + " vk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "print(\"verified\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/notebooks/little_transformer.ipynb b/examples/notebooks/little_transformer.ipynb index 62a289c5..612f9502 100644 --- a/examples/notebooks/little_transformer.ipynb +++ b/examples/notebooks/little_transformer.ipynb @@ -337,7 +337,7 @@ "source": [ "\n", "\n", - "res = await ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", + "res = ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", "assert res == True\n" ] }, @@ -480,4 +480,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/examples/notebooks/lstm.ipynb b/examples/notebooks/lstm.ipynb index 7a534282..223ec4d3 100644 --- a/examples/notebooks/lstm.ipynb +++ b/examples/notebooks/lstm.ipynb @@ -137,7 +137,7 @@ "res = ezkl.gen_settings(model_path, settings_path, py_run_args=run_args)\n", "assert res == True\n", "\n", - "res = await ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", + "res = ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", "assert res == True\n" ] }, @@ -280,4 +280,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/examples/notebooks/mean_postgres.ipynb b/examples/notebooks/mean_postgres.ipynb index 7b6dc5ed..4517b5cb 100644 --- a/examples/notebooks/mean_postgres.ipynb +++ b/examples/notebooks/mean_postgres.ipynb @@ -241,7 +241,7 @@ "\n", "ezkl.gen_settings(onnx_filename, settings_filename)\n", "\n", - "await ezkl.calibrate_settings(\n", + "ezkl.calibrate_settings(\n", " input_filename, onnx_filename, settings_filename, \"resources\")" ] }, @@ -506,4 +506,4 @@ }, "nbformat": 4, "nbformat_minor": 0 -} +} \ No newline at end of file diff --git a/examples/notebooks/mnist_classifier.ipynb b/examples/notebooks/mnist_classifier.ipynb index 64069853..9aa949b3 100644 --- a/examples/notebooks/mnist_classifier.ipynb +++ b/examples/notebooks/mnist_classifier.ipynb @@ -1,409 +1,409 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Simple MNIST Classifier" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# check if notebook is in colab\n", - "try:\n", - " # install ezkl\n", - " import google.colab\n", - " import subprocess\n", - " import sys\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"tensorflow_datasets\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"tf2onnx\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", - "\n", - "# rely on local installation of ezkl if the notebook is not in colab\n", - "except:\n", - " pass\n", - "\n", - "# make sure you have the dependencies required here already installed\n", - "import ezkl\n", - "import os\n", - "import json\n", - "import time\n", - "import random\n", - "import logging\n", - "\n", - "import tensorflow as tf\n", - "from tensorflow.keras.layers import *\n", - "import tensorflow as tf\n", - "import tensorflow_datasets as tfds\n", - "\n", - "# uncomment for more descriptive logging \n", - "FORMAT = '%(levelname)s %(name)s %(asctime)-15s %(filename)s:%(lineno)d %(message)s'\n", - "logging.basicConfig(format=FORMAT)\n", - "logging.getLogger().setLevel(logging.INFO)\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "(ds_train, ds_test), ds_info = tfds.load(\n", - " 'mnist',\n", - " split=['train', 'test'],\n", - " shuffle_files=True,\n", - " as_supervised=True,\n", - " with_info=True,\n", - ")\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def normalize_img(image, label):\n", - " \"\"\"Normalizes images: `uint8` -> `float32`.\"\"\"\n", - " return tf.cast(image, tf.float32) / 255., label\n", - "\n", - "ds_train = ds_train.map(\n", - " normalize_img, num_parallel_calls=tf.data.AUTOTUNE)\n", - "ds_train = ds_train.cache()\n", - "ds_train = ds_train.shuffle(ds_info.splits['train'].num_examples)\n", - "ds_train = ds_train.batch(128)\n", - "ds_train = ds_train.prefetch(tf.data.AUTOTUNE)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ds_test = ds_test.map(\n", - " normalize_img, num_parallel_calls=tf.data.AUTOTUNE)\n", - "ds_test = ds_test.batch(128)\n", - "ds_test = ds_test.cache()\n", - "ds_test = ds_test.prefetch(tf.data.AUTOTUNE)\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "model = tf.keras.models.Sequential([\n", - " tf.keras.layers.Flatten(input_shape=(28, 28)),\n", - " tf.keras.layers.Dense(128, activation='relu'),\n", - " tf.keras.layers.Dense(10)\n", - "])\n", - "model.compile(\n", - " optimizer=tf.keras.optimizers.Adam(0.001),\n", - " loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),\n", - " metrics=[tf.keras.metrics.SparseCategoricalAccuracy()],\n", - ")\n", - "\n", - "model.fit(\n", - " ds_train,\n", - " epochs=6,\n", - " validation_data=ds_test,\n", - ")\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os \n", - "\n", - "model_path = os.path.join('network.onnx')\n", - "compiled_model_path = os.path.join('network.compiled')\n", - "pk_path = os.path.join('key.pk')\n", - "vk_path = os.path.join('key.vk')\n", - "settings_path = os.path.join('settings.json')\n", - "srs_path = os.path.join('kzg.srs')\n", - "witness_path = os.path.join('witness.json')\n", - "data_path = os.path.join('input.json')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(list(ds_train)[0][0].numpy()[0:1].shape)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "import numpy as np\n", - "import tf2onnx\n", - "import tensorflow as tf\n", - "import json\n", - "\n", - "# After training, export to onnx (network.onnx) and create a data file (input.json)\n", - "x = list(ds_train)[0][0].numpy()[0:1]\n", - "\n", - "spec = tf.TensorSpec([1, 28, 28], tf.float32, name='input_0')\n", - "\n", - "\n", - "tf2onnx.convert.from_keras(model, input_signature=[spec], inputs_as_nchw=['input_0'], opset=12, output_path=model_path)\n", - "\n", - "data_array = x.reshape([-1]).tolist()\n", - "\n", - "data = dict(input_data = [data_array])\n", - "\n", - " # Serialize data into file:\n", - "json.dump( data, open(data_path, 'w' ))\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import ezkl\n", - "\n", - "run_args = ezkl.PyRunArgs()\n", - "run_args.input_visibility = \"private\"\n", - "run_args.param_visibility = \"fixed\"\n", - "run_args.output_visibility = \"public\"\n", - "run_args.variables = [(\"batch_size\", 1)]\n", - "\n", - "!RUST_LOG=trace\n", - "# TODO: Dictionary outputs\n", - "res = ezkl.gen_settings(model_path, settings_path, py_run_args=run_args)\n", - "assert res == True\n", - "\n", - "res = await ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\", scales = [0, 7])\n", - "assert res == True\n", - "print(\"verified\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# srs path\n", - "res = ezkl.get_srs(srs_path, settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# now generate the witness file \n", - "witness_path = \"witness.json\"\n", - "\n", - "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", - "assert os.path.isfile(witness_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# uncomment to mock prove\n", - "res = ezkl.mock(witness_path, compiled_model_path)\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "# HERE WE SETUP THE CIRCUIT PARAMS\n", - "# WE GOT KEYS\n", - "# WE GOT CIRCUIT PARAMETERS\n", - "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", - "\n", - "res = ezkl.setup(\n", - " compiled_model_path,\n", - " vk_path,\n", - " pk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "assert os.path.isfile(vk_path)\n", - "assert os.path.isfile(pk_path)\n", - "assert os.path.isfile(settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# GENERATE A PROOF\n", - "\n", - "\n", - "proof_path = os.path.join('test.pf')\n", - "\n", - "res = ezkl.prove(\n", - " witness_path,\n", - " compiled_model_path,\n", - " pk_path,\n", - " proof_path,\n", - " srs_path,\n", - " \"single\",\n", - " )\n", - "\n", - "print(res)\n", - "assert os.path.isfile(proof_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# VERIFY IT\n", - "res = ezkl.verify(\n", - " proof_path,\n", - " settings_path,\n", - " vk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "print(\"verified\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can now create an EVM / `.sol` verifier that can be deployed on chain to verify submitted proofs using a view function." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "abi_path = 'test.abi'\n", - "sol_code_path = 'test.sol'\n", - "\n", - "res = ezkl.create_evm_verifier(\n", - " vk_path,\n", - " srs_path,\n", - " settings_path,\n", - " sol_code_path,\n", - " abi_path,\n", - " )\n", - "assert res == True" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Verify on the evm" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Make sure anvil is running locally first\n", - "# run with $ anvil -p 3030\n", - "# we use the default anvil node here\n", - "import json\n", - "\n", - "address_path = os.path.join(\"address.json\")\n", - "\n", - "res = ezkl.deploy_evm(\n", - " address_path,\n", - " sol_code_path,\n", - " 'http://127.0.0.1:3030'\n", - ")\n", - "\n", - "assert res == True\n", - "\n", - "with open(address_path, 'r') as file:\n", - " addr = file.read().rstrip()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# make sure anvil is running locally\n", - "# $ anvil -p 3030\n", - "\n", - "res = ezkl.verify_evm(\n", - " proof_path,\n", - " addr,\n", - " \"http://127.0.0.1:3030\"\n", - ")\n", - "assert res == True" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.15" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Simple MNIST Classifier" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# check if notebook is in colab\n", + "try:\n", + " # install ezkl\n", + " import google.colab\n", + " import subprocess\n", + " import sys\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"tensorflow_datasets\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"tf2onnx\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", + "\n", + "# rely on local installation of ezkl if the notebook is not in colab\n", + "except:\n", + " pass\n", + "\n", + "# make sure you have the dependencies required here already installed\n", + "import ezkl\n", + "import os\n", + "import json\n", + "import time\n", + "import random\n", + "import logging\n", + "\n", + "import tensorflow as tf\n", + "from tensorflow.keras.layers import *\n", + "import tensorflow as tf\n", + "import tensorflow_datasets as tfds\n", + "\n", + "# uncomment for more descriptive logging \n", + "FORMAT = '%(levelname)s %(name)s %(asctime)-15s %(filename)s:%(lineno)d %(message)s'\n", + "logging.basicConfig(format=FORMAT)\n", + "logging.getLogger().setLevel(logging.INFO)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "(ds_train, ds_test), ds_info = tfds.load(\n", + " 'mnist',\n", + " split=['train', 'test'],\n", + " shuffle_files=True,\n", + " as_supervised=True,\n", + " with_info=True,\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def normalize_img(image, label):\n", + " \"\"\"Normalizes images: `uint8` -> `float32`.\"\"\"\n", + " return tf.cast(image, tf.float32) / 255., label\n", + "\n", + "ds_train = ds_train.map(\n", + " normalize_img, num_parallel_calls=tf.data.AUTOTUNE)\n", + "ds_train = ds_train.cache()\n", + "ds_train = ds_train.shuffle(ds_info.splits['train'].num_examples)\n", + "ds_train = ds_train.batch(128)\n", + "ds_train = ds_train.prefetch(tf.data.AUTOTUNE)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ds_test = ds_test.map(\n", + " normalize_img, num_parallel_calls=tf.data.AUTOTUNE)\n", + "ds_test = ds_test.batch(128)\n", + "ds_test = ds_test.cache()\n", + "ds_test = ds_test.prefetch(tf.data.AUTOTUNE)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "model = tf.keras.models.Sequential([\n", + " tf.keras.layers.Flatten(input_shape=(28, 28)),\n", + " tf.keras.layers.Dense(128, activation='relu'),\n", + " tf.keras.layers.Dense(10)\n", + "])\n", + "model.compile(\n", + " optimizer=tf.keras.optimizers.Adam(0.001),\n", + " loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),\n", + " metrics=[tf.keras.metrics.SparseCategoricalAccuracy()],\n", + ")\n", + "\n", + "model.fit(\n", + " ds_train,\n", + " epochs=6,\n", + " validation_data=ds_test,\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os \n", + "\n", + "model_path = os.path.join('network.onnx')\n", + "compiled_model_path = os.path.join('network.compiled')\n", + "pk_path = os.path.join('key.pk')\n", + "vk_path = os.path.join('key.vk')\n", + "settings_path = os.path.join('settings.json')\n", + "srs_path = os.path.join('kzg.srs')\n", + "witness_path = os.path.join('witness.json')\n", + "data_path = os.path.join('input.json')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(list(ds_train)[0][0].numpy()[0:1].shape)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "import numpy as np\n", + "import tf2onnx\n", + "import tensorflow as tf\n", + "import json\n", + "\n", + "# After training, export to onnx (network.onnx) and create a data file (input.json)\n", + "x = list(ds_train)[0][0].numpy()[0:1]\n", + "\n", + "spec = tf.TensorSpec([1, 28, 28], tf.float32, name='input_0')\n", + "\n", + "\n", + "tf2onnx.convert.from_keras(model, input_signature=[spec], inputs_as_nchw=['input_0'], opset=12, output_path=model_path)\n", + "\n", + "data_array = x.reshape([-1]).tolist()\n", + "\n", + "data = dict(input_data = [data_array])\n", + "\n", + " # Serialize data into file:\n", + "json.dump( data, open(data_path, 'w' ))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import ezkl\n", + "\n", + "run_args = ezkl.PyRunArgs()\n", + "run_args.input_visibility = \"private\"\n", + "run_args.param_visibility = \"fixed\"\n", + "run_args.output_visibility = \"public\"\n", + "run_args.variables = [(\"batch_size\", 1)]\n", + "\n", + "!RUST_LOG=trace\n", + "# TODO: Dictionary outputs\n", + "res = ezkl.gen_settings(model_path, settings_path, py_run_args=run_args)\n", + "assert res == True\n", + "\n", + "res = ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\", scales = [0, 7])\n", + "assert res == True\n", + "print(\"verified\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# srs path\n", + "res = ezkl.get_srs(srs_path, settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# now generate the witness file \n", + "witness_path = \"witness.json\"\n", + "\n", + "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", + "assert os.path.isfile(witness_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# uncomment to mock prove\n", + "res = ezkl.mock(witness_path, compiled_model_path)\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# HERE WE SETUP THE CIRCUIT PARAMS\n", + "# WE GOT KEYS\n", + "# WE GOT CIRCUIT PARAMETERS\n", + "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", + "\n", + "res = ezkl.setup(\n", + " compiled_model_path,\n", + " vk_path,\n", + " pk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "assert os.path.isfile(vk_path)\n", + "assert os.path.isfile(pk_path)\n", + "assert os.path.isfile(settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# GENERATE A PROOF\n", + "\n", + "\n", + "proof_path = os.path.join('test.pf')\n", + "\n", + "res = ezkl.prove(\n", + " witness_path,\n", + " compiled_model_path,\n", + " pk_path,\n", + " proof_path,\n", + " srs_path,\n", + " \"single\",\n", + " )\n", + "\n", + "print(res)\n", + "assert os.path.isfile(proof_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# VERIFY IT\n", + "res = ezkl.verify(\n", + " proof_path,\n", + " settings_path,\n", + " vk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "print(\"verified\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can now create an EVM / `.sol` verifier that can be deployed on chain to verify submitted proofs using a view function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "abi_path = 'test.abi'\n", + "sol_code_path = 'test.sol'\n", + "\n", + "res = ezkl.create_evm_verifier(\n", + " vk_path,\n", + " srs_path,\n", + " settings_path,\n", + " sol_code_path,\n", + " abi_path,\n", + " )\n", + "assert res == True" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Verify on the evm" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Make sure anvil is running locally first\n", + "# run with $ anvil -p 3030\n", + "# we use the default anvil node here\n", + "import json\n", + "\n", + "address_path = os.path.join(\"address.json\")\n", + "\n", + "res = ezkl.deploy_evm(\n", + " address_path,\n", + " sol_code_path,\n", + " 'http://127.0.0.1:3030'\n", + ")\n", + "\n", + "assert res == True\n", + "\n", + "with open(address_path, 'r') as file:\n", + " addr = file.read().rstrip()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# make sure anvil is running locally\n", + "# $ anvil -p 3030\n", + "\n", + "res = ezkl.verify_evm(\n", + " proof_path,\n", + " addr,\n", + " \"http://127.0.0.1:3030\"\n", + ")\n", + "assert res == True" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.15" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/examples/notebooks/mnist_gan.ipynb b/examples/notebooks/mnist_gan.ipynb index edf7318f..21462a99 100644 --- a/examples/notebooks/mnist_gan.ipynb +++ b/examples/notebooks/mnist_gan.ipynb @@ -1,407 +1,407 @@ { - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "Credits to [geohot](https://github.com/geohot/ai-notebooks/blob/master/mnist_gan.ipynb) for most of this code" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# check if notebook is in colab\n", - "try:\n", - " # install ezkl\n", - " import google.colab\n", - " import subprocess\n", - " import sys\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"tf2onnx\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", - "\n", - "# rely on local installation of ezkl if the notebook is not in colab\n", - "except:\n", - " pass\n", - "\n", - "# make sure you have the dependencies required here already installed\n", - "import ezkl\n", - "import os\n", - "import json\n", - "import time\n", - "import random\n", - "import logging\n", - "\n", - "import tensorflow as tf\n", - "from tensorflow.keras.optimizers.legacy import Adam\n", - "from tensorflow.keras.layers import *\n", - "from tensorflow.keras.models import Model\n", - "from tensorflow.keras.datasets import mnist\n", - "\n", - "# uncomment for more descriptive logging \n", - "# FORMAT = '%(levelname)s %(name)s %(asctime)-15s %(filename)s:%(lineno)d %(message)s'\n", - "# logging.basicConfig(format=FORMAT)\n", - "# logging.getLogger().setLevel(logging.INFO)\n", - "\n", - "# Can we build a simple GAN that can produce all 10 mnist digits?" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "(x_train, y_train), (x_test, y_test) = mnist.load_data()\n", - "x_train, x_test = [x/255.0 for x in [x_train, x_test]]\n", - "y_train, y_test = [tf.keras.utils.to_categorical(x) for x in [y_train, y_test]]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": false - }, - "outputs": [], - "source": [ - "opt = Adam()\n", - "ZDIM = 100\n", - "\n", - "# discriminator\n", - "# 0 if it's fake, 1 if it's real\n", - "x = in1 = Input((28,28))\n", - "x = Reshape((28,28,1))(x)\n", - "\n", - "x = Conv2D(64, (5,5), padding='same', strides=(2,2))(x)\n", - "x = BatchNormalization()(x)\n", - "x = ELU()(x)\n", - "\n", - "x = Conv2D(128, (5,5), padding='same', strides=(2,2))(x)\n", - "x = BatchNormalization()(x)\n", - "x = ELU()(x)\n", - "\n", - "x = Flatten()(x)\n", - "x = Dense(128)(x)\n", - "x = BatchNormalization()(x)\n", - "x = ELU()(x)\n", - "x = Dense(1, activation='sigmoid')(x)\n", - "dm = Model(in1, x)\n", - "dm.compile(opt, 'binary_crossentropy')\n", - "dm.summary()\n", - "\n", - "# generator, output digits\n", - "x = in1 = Input((ZDIM,))\n", - "\n", - "x = Dense(7*7*64)(x)\n", - "x = BatchNormalization()(x)\n", - "x = ELU()(x)\n", - "x = Reshape((7,7,64))(x)\n", - "\n", - "x = Conv2DTranspose(128, (5,5), strides=(2,2), padding='same')(x)\n", - "x = BatchNormalization()(x)\n", - "x = ELU()(x)\n", - "\n", - "x = Conv2DTranspose(1, (5,5), strides=(2,2), padding='same')(x)\n", - "x = Activation('sigmoid')(x)\n", - "x = Reshape((28,28))(x)\n", - "\n", - "gm = Model(in1, x)\n", - "gm.compile('adam', 'mse')\n", - "gm.summary()\n", - "\n", - "# GAN\n", - "dm.trainable = False\n", - "x = dm(gm.output)\n", - "tm = Model(gm.input, x)\n", - "tm.compile(opt, 'binary_crossentropy')\n", - "\n", - "dlosses, glosses = [], []" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": false - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "from matplotlib.pyplot import figure, imshow, show\n", - "\n", - "BS = 256\n", - "\n", - "# GAN training loop\n", - "# make larger if you want it to look better\n", - "for i in range(1):\n", - " # train discriminator\n", - " dm.trainable = True\n", - " real_i = x_train[np.random.choice(x_train.shape[0], BS)]\n", - " fake_i = gm.predict_on_batch(np.random.normal(0,1,size=(BS,ZDIM)))\n", - " dloss_r = dm.train_on_batch(real_i, np.ones(BS))\n", - " dloss_f = dm.train_on_batch(fake_i, np.zeros(BS))\n", - " dloss = (dloss_r + dloss_f)/2\n", - "\n", - " # train generator\n", - " dm.trainable = False\n", - " gloss_0 = tm.train_on_batch(np.random.normal(0,1,size=(BS,ZDIM)), np.ones(BS))\n", - " gloss_1 = tm.train_on_batch(np.random.normal(0,1,size=(BS,ZDIM)), np.ones(BS))\n", - " gloss = (gloss_0 + gloss_1)/2\n", - "\n", - " if i%50 == 0:\n", - " print(\"%4d: dloss:%8.4f gloss:%8.4f\" % (i, dloss, gloss))\n", - " dlosses.append(dloss)\n", - " glosses.append(gloss)\n", - " \n", - " if i%250 == 0:\n", - " \n", - " figure(figsize=(16,16))\n", - " imshow(np.concatenate(gm.predict(np.random.normal(size=(10,ZDIM))), axis=1))\n", - " show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from matplotlib.pyplot import plot, legend\n", - "figure(figsize=(8,8))\n", - "plot(dlosses[100:], label=\"Discriminator Loss\")\n", - "plot(glosses[100:], label=\"Generator Loss\")\n", - "legend()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "x = []\n", - "for i in range(10):\n", - " x.append(np.concatenate(gm.predict(np.random.normal(size=(10,ZDIM))), axis=1))\n", - "imshow(np.concatenate(x, axis=0))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os \n", - "\n", - "model_path = os.path.join('gan.onnx')\n", - "compiled_model_path = os.path.join('gan.compiled')\n", - "pk_path = os.path.join('gan.pk')\n", - "vk_path = os.path.join('gan.vk')\n", - "settings_path = os.path.join('gan_settings.json')\n", - "srs_path = os.path.join('gan_kzg.srs')\n", - "witness_path = os.path.join('gan_witness.json')\n", - "data_path = os.path.join('gan_input.json')\n", - "\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we export the _generator_ to onnx" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "import numpy as np\n", - "import tf2onnx\n", - "import tensorflow as tf\n", - "import json\n", - "\n", - "# After training, export to onnx (network.onnx) and create a data file (input.json)\n", - "x = 0.1*np.random.rand(1,*[1, ZDIM])\n", - "\n", - "spec = tf.TensorSpec([1, ZDIM], tf.float32, name='input_0')\n", - "\n", - "\n", - "tf2onnx.convert.from_keras(gm, input_signature=[spec], inputs_as_nchw=['input_0'], opset=12, output_path=model_path)\n", - "\n", - "data_array = x.reshape([-1]).tolist()\n", - "\n", - "data = dict(input_data = [data_array])\n", - "\n", - " # Serialize data into file:\n", - "json.dump( data, open(data_path, 'w' ))\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import ezkl\n", - "\n", - "run_args = ezkl.PyRunArgs()\n", - "run_args.input_visibility = \"private\"\n", - "run_args.param_visibility = \"fixed\"\n", - "run_args.output_visibility = \"public\"\n", - "run_args.variables = [(\"batch_size\", 1)]\n", - "\n", - "!RUST_LOG=trace\n", - "# TODO: Dictionary outputs\n", - "res = ezkl.gen_settings(model_path, settings_path, py_run_args=run_args)\n", - "assert res == True\n", - "\n", - "res = await ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\", scales=[0,6])\n", - "assert res == True\n", - "print(\"verified\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# srs path\n", - "res = ezkl.get_srs(srs_path, settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# now generate the witness file \n", - "witness_path = \"gan_witness.json\"\n", - "\n", - "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", - "assert os.path.isfile(witness_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# uncomment to mock prove\n", - "# res = ezkl.mock(witness_path, compiled_model_path)\n", - "# assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "# HERE WE SETUP THE CIRCUIT PARAMS\n", - "# WE GOT KEYS\n", - "# WE GOT CIRCUIT PARAMETERS\n", - "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", - "\n", - "res = ezkl.setup(\n", - " compiled_model_path,\n", - " vk_path,\n", - " pk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "assert os.path.isfile(vk_path)\n", - "assert os.path.isfile(pk_path)\n", - "assert os.path.isfile(settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# GENERATE A PROOF\n", - "\n", - "\n", - "proof_path = os.path.join('test.pf')\n", - "\n", - "res = ezkl.prove(\n", - " witness_path,\n", - " compiled_model_path,\n", - " pk_path,\n", - " proof_path,\n", - " srs_path,\n", - " \"single\",\n", - " )\n", - "\n", - "print(res)\n", - "assert os.path.isfile(proof_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# VERIFY IT\n", - "res = ezkl.verify(\n", - " proof_path,\n", - " settings_path,\n", - " vk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "print(\"verified\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.15" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "Credits to [geohot](https://github.com/geohot/ai-notebooks/blob/master/mnist_gan.ipynb) for most of this code" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# check if notebook is in colab\n", + "try:\n", + " # install ezkl\n", + " import google.colab\n", + " import subprocess\n", + " import sys\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"tf2onnx\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", + "\n", + "# rely on local installation of ezkl if the notebook is not in colab\n", + "except:\n", + " pass\n", + "\n", + "# make sure you have the dependencies required here already installed\n", + "import ezkl\n", + "import os\n", + "import json\n", + "import time\n", + "import random\n", + "import logging\n", + "\n", + "import tensorflow as tf\n", + "from tensorflow.keras.optimizers.legacy import Adam\n", + "from tensorflow.keras.layers import *\n", + "from tensorflow.keras.models import Model\n", + "from tensorflow.keras.datasets import mnist\n", + "\n", + "# uncomment for more descriptive logging \n", + "# FORMAT = '%(levelname)s %(name)s %(asctime)-15s %(filename)s:%(lineno)d %(message)s'\n", + "# logging.basicConfig(format=FORMAT)\n", + "# logging.getLogger().setLevel(logging.INFO)\n", + "\n", + "# Can we build a simple GAN that can produce all 10 mnist digits?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "(x_train, y_train), (x_test, y_test) = mnist.load_data()\n", + "x_train, x_test = [x/255.0 for x in [x_train, x_test]]\n", + "y_train, y_test = [tf.keras.utils.to_categorical(x) for x in [y_train, y_test]]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "opt = Adam()\n", + "ZDIM = 100\n", + "\n", + "# discriminator\n", + "# 0 if it's fake, 1 if it's real\n", + "x = in1 = Input((28,28))\n", + "x = Reshape((28,28,1))(x)\n", + "\n", + "x = Conv2D(64, (5,5), padding='same', strides=(2,2))(x)\n", + "x = BatchNormalization()(x)\n", + "x = ELU()(x)\n", + "\n", + "x = Conv2D(128, (5,5), padding='same', strides=(2,2))(x)\n", + "x = BatchNormalization()(x)\n", + "x = ELU()(x)\n", + "\n", + "x = Flatten()(x)\n", + "x = Dense(128)(x)\n", + "x = BatchNormalization()(x)\n", + "x = ELU()(x)\n", + "x = Dense(1, activation='sigmoid')(x)\n", + "dm = Model(in1, x)\n", + "dm.compile(opt, 'binary_crossentropy')\n", + "dm.summary()\n", + "\n", + "# generator, output digits\n", + "x = in1 = Input((ZDIM,))\n", + "\n", + "x = Dense(7*7*64)(x)\n", + "x = BatchNormalization()(x)\n", + "x = ELU()(x)\n", + "x = Reshape((7,7,64))(x)\n", + "\n", + "x = Conv2DTranspose(128, (5,5), strides=(2,2), padding='same')(x)\n", + "x = BatchNormalization()(x)\n", + "x = ELU()(x)\n", + "\n", + "x = Conv2DTranspose(1, (5,5), strides=(2,2), padding='same')(x)\n", + "x = Activation('sigmoid')(x)\n", + "x = Reshape((28,28))(x)\n", + "\n", + "gm = Model(in1, x)\n", + "gm.compile('adam', 'mse')\n", + "gm.summary()\n", + "\n", + "# GAN\n", + "dm.trainable = False\n", + "x = dm(gm.output)\n", + "tm = Model(gm.input, x)\n", + "tm.compile(opt, 'binary_crossentropy')\n", + "\n", + "dlosses, glosses = [], []" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "from matplotlib.pyplot import figure, imshow, show\n", + "\n", + "BS = 256\n", + "\n", + "# GAN training loop\n", + "# make larger if you want it to look better\n", + "for i in range(1):\n", + " # train discriminator\n", + " dm.trainable = True\n", + " real_i = x_train[np.random.choice(x_train.shape[0], BS)]\n", + " fake_i = gm.predict_on_batch(np.random.normal(0,1,size=(BS,ZDIM)))\n", + " dloss_r = dm.train_on_batch(real_i, np.ones(BS))\n", + " dloss_f = dm.train_on_batch(fake_i, np.zeros(BS))\n", + " dloss = (dloss_r + dloss_f)/2\n", + "\n", + " # train generator\n", + " dm.trainable = False\n", + " gloss_0 = tm.train_on_batch(np.random.normal(0,1,size=(BS,ZDIM)), np.ones(BS))\n", + " gloss_1 = tm.train_on_batch(np.random.normal(0,1,size=(BS,ZDIM)), np.ones(BS))\n", + " gloss = (gloss_0 + gloss_1)/2\n", + "\n", + " if i%50 == 0:\n", + " print(\"%4d: dloss:%8.4f gloss:%8.4f\" % (i, dloss, gloss))\n", + " dlosses.append(dloss)\n", + " glosses.append(gloss)\n", + " \n", + " if i%250 == 0:\n", + " \n", + " figure(figsize=(16,16))\n", + " imshow(np.concatenate(gm.predict(np.random.normal(size=(10,ZDIM))), axis=1))\n", + " show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from matplotlib.pyplot import plot, legend\n", + "figure(figsize=(8,8))\n", + "plot(dlosses[100:], label=\"Discriminator Loss\")\n", + "plot(glosses[100:], label=\"Generator Loss\")\n", + "legend()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = []\n", + "for i in range(10):\n", + " x.append(np.concatenate(gm.predict(np.random.normal(size=(10,ZDIM))), axis=1))\n", + "imshow(np.concatenate(x, axis=0))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os \n", + "\n", + "model_path = os.path.join('gan.onnx')\n", + "compiled_model_path = os.path.join('gan.compiled')\n", + "pk_path = os.path.join('gan.pk')\n", + "vk_path = os.path.join('gan.vk')\n", + "settings_path = os.path.join('gan_settings.json')\n", + "srs_path = os.path.join('gan_kzg.srs')\n", + "witness_path = os.path.join('gan_witness.json')\n", + "data_path = os.path.join('gan_input.json')\n", + "\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we export the _generator_ to onnx" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "import numpy as np\n", + "import tf2onnx\n", + "import tensorflow as tf\n", + "import json\n", + "\n", + "# After training, export to onnx (network.onnx) and create a data file (input.json)\n", + "x = 0.1*np.random.rand(1,*[1, ZDIM])\n", + "\n", + "spec = tf.TensorSpec([1, ZDIM], tf.float32, name='input_0')\n", + "\n", + "\n", + "tf2onnx.convert.from_keras(gm, input_signature=[spec], inputs_as_nchw=['input_0'], opset=12, output_path=model_path)\n", + "\n", + "data_array = x.reshape([-1]).tolist()\n", + "\n", + "data = dict(input_data = [data_array])\n", + "\n", + " # Serialize data into file:\n", + "json.dump( data, open(data_path, 'w' ))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import ezkl\n", + "\n", + "run_args = ezkl.PyRunArgs()\n", + "run_args.input_visibility = \"private\"\n", + "run_args.param_visibility = \"fixed\"\n", + "run_args.output_visibility = \"public\"\n", + "run_args.variables = [(\"batch_size\", 1)]\n", + "\n", + "!RUST_LOG=trace\n", + "# TODO: Dictionary outputs\n", + "res = ezkl.gen_settings(model_path, settings_path, py_run_args=run_args)\n", + "assert res == True\n", + "\n", + "res = ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\", scales=[0,6])\n", + "assert res == True\n", + "print(\"verified\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# srs path\n", + "res = ezkl.get_srs(srs_path, settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# now generate the witness file \n", + "witness_path = \"gan_witness.json\"\n", + "\n", + "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", + "assert os.path.isfile(witness_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# uncomment to mock prove\n", + "# res = ezkl.mock(witness_path, compiled_model_path)\n", + "# assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# HERE WE SETUP THE CIRCUIT PARAMS\n", + "# WE GOT KEYS\n", + "# WE GOT CIRCUIT PARAMETERS\n", + "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", + "\n", + "res = ezkl.setup(\n", + " compiled_model_path,\n", + " vk_path,\n", + " pk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "assert os.path.isfile(vk_path)\n", + "assert os.path.isfile(pk_path)\n", + "assert os.path.isfile(settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# GENERATE A PROOF\n", + "\n", + "\n", + "proof_path = os.path.join('test.pf')\n", + "\n", + "res = ezkl.prove(\n", + " witness_path,\n", + " compiled_model_path,\n", + " pk_path,\n", + " proof_path,\n", + " srs_path,\n", + " \"single\",\n", + " )\n", + "\n", + "print(res)\n", + "assert os.path.isfile(proof_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# VERIFY IT\n", + "res = ezkl.verify(\n", + " proof_path,\n", + " settings_path,\n", + " vk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "print(\"verified\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.15" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/examples/notebooks/mnist_gan_proof_splitting.ipynb b/examples/notebooks/mnist_gan_proof_splitting.ipynb index ffa1efc6..49e4f5c2 100644 --- a/examples/notebooks/mnist_gan_proof_splitting.ipynb +++ b/examples/notebooks/mnist_gan_proof_splitting.ipynb @@ -315,7 +315,7 @@ " # generate settings for the current model\n", " res = ezkl.gen_settings(model_path, settings_path, py_run_args=run_args)\n", "\n", - " res = await ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\", scales=[run_args.input_scale])\n", + " res = ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\", scales=[run_args.input_scale])\n", "\n", "for i in range(3):\n", " await circuit_gen_settings(i)\n" @@ -548,4 +548,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file diff --git a/examples/notebooks/mnist_vae.ipynb b/examples/notebooks/mnist_vae.ipynb index 48f0390e..97224851 100644 --- a/examples/notebooks/mnist_vae.ipynb +++ b/examples/notebooks/mnist_vae.ipynb @@ -1,575 +1,575 @@ { - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# what is the variational?" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Credits to [geohot](https://github.com/geohot/ai-notebooks/blob/master/mnist_gan.ipynb) for most of this code" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# check if notebook is in colab\n", - "try:\n", - " # install ezkl\n", - " import google.colab\n", - " import subprocess\n", - " import sys\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"tf2onnx\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", - "\n", - "# rely on local installation of ezkl if the notebook is not in colab\n", - "except:\n", - " pass\n", - "\n", - "\n", - "import os\n", - "import time\n", - "import random\n", - "\n", - "import tensorflow as tf\n", - "import tensorflow.keras.backend as K\n", - "from tensorflow.keras.optimizers import Adam\n", - "from tensorflow.keras.layers import *\n", - "from tensorflow.keras.models import Model\n", - "from tensorflow.keras.losses import mse\n", - "from tensorflow.keras.datasets import mnist\n", - "(x_train, y_train), (x_test, y_test) = mnist.load_data()\n", - "x_train, x_test = [x/255.0 for x in [x_train, x_test]]\n", - "y_train, y_test = [tf.keras.utils.to_categorical(x) for x in [y_train, y_test]]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ZDIM = 4\n", - "\n", - "def get_encoder():\n", - " x = in1 = Input((28,28))\n", - " x = Reshape((28,28,1))(x)\n", - "\n", - " x = Conv2D(64, (5,5), padding='same', strides=(2,2))(x)\n", - " x = BatchNormalization()(x)\n", - " x = ELU()(x)\n", - "\n", - " x = Conv2D(128, (5,5), padding='same', strides=(2,2))(x)\n", - " x = BatchNormalization()(x)\n", - " x = ELU()(x)\n", - "\n", - " x = Flatten()(x)\n", - " x = Dense(ZDIM)(x)\n", - " return Model(in1, x)\n", - "\n", - "def get_decoder():\n", - " x = in1 = Input((ZDIM,))\n", - "\n", - " x = Dense(7*7*64)(x)\n", - " x = BatchNormalization()(x)\n", - " x = ELU()(x)\n", - " x = Reshape((7,7,64))(x)\n", - "\n", - " x = Conv2DTranspose(128, (5,5), strides=(2,2), padding='same')(x)\n", - " x = BatchNormalization()(x)\n", - " x = ELU()(x)\n", - "\n", - " x = Conv2DTranspose(1, (5,5), strides=(2,2), padding='same')(x)\n", - " x = Activation('sigmoid')(x)\n", - " x = Reshape((28,28))(x)\n", - " return Model(in1, x)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Regular Autoencoder" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# normal autoencoder without the variational\n", - "enc = get_encoder()\n", - "dec = get_decoder()\n", - "ae = Model(enc.input, dec(enc.output))\n", - "ae.compile('adam', 'mse')\n", - "ae.summary()\n", - "# make the epochs larger for better results\n", - "ae.fit(x_train, x_train, batch_size=128, epochs=1, shuffle=1, validation_data=(x_test, x_test))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# while the autoencoder might work without the variational, the sampling doesn't\n", - "import numpy as np\n", - "from matplotlib.pyplot import figure, imshow\n", - "imshow(np.concatenate(ae.predict(np.array([random.choice(x_test) for i in range(10)])), axis=1))\n", - "figure(figsize=(16,16))\n", - "imshow(np.concatenate(ae.layers[-1].predict(np.random.normal(size=(10, ZDIM))), axis=1))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os \n", - "\n", - "model_path = os.path.join('ae.onnx')\n", - "compiled_model_path = os.path.join('ae.compiled')\n", - "pk_path = os.path.join('ae.pk')\n", - "vk_path = os.path.join('ae.vk')\n", - "settings_path = os.path.join('ae_settings.json')\n", - "srs_path = os.path.join('ae_kzg.srs')\n", - "witness_path = os.path.join('ae_witness.json')\n", - "data_path = os.path.join('ae_input.json')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we export the decoder (which presumably is what we want) -- to onnx" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "import numpy as np\n", - "import tf2onnx\n", - "import tensorflow as tf\n", - "import json\n", - "\n", - "# After training, export to onnx (network.onnx) and create a data file (input.json)\n", - "x = 0.1*np.random.rand(1,*[1, ZDIM])\n", - "\n", - "spec = tf.TensorSpec([1, ZDIM], tf.float32, name='input_0')\n", - "\n", - "\n", - "tf2onnx.convert.from_keras(dec, input_signature=[spec], inputs_as_nchw=['input_0'], opset=12, output_path=model_path)\n", - "\n", - "data_array = x.reshape([-1]).tolist()\n", - "\n", - "data = dict(input_data = [data_array])\n", - "\n", - " # Serialize data into file:\n", - "json.dump( data, open(data_path, 'w' ))\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import ezkl\n", - "\n", - "!RUST_LOG=trace\n", - "res = ezkl.gen_settings(model_path, settings_path)\n", - "assert res == True\n", - "\n", - "res = await ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", - "assert res == True\n", - "print(\"verified\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# srs path\n", - "res = ezkl.get_srs(srs_path, settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# now generate the witness file\n", - "witness_path = \"ae_witness.json\"\n", - "\n", - "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", - "assert os.path.isfile(witness_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "res = ezkl.mock(witness_path, compiled_model_path)\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "# HERE WE SETUP THE CIRCUIT PARAMS\n", - "# WE GOT KEYS\n", - "# WE GOT CIRCUIT PARAMETERS\n", - "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", - "\n", - "res = ezkl.setup(\n", - " compiled_model_path,\n", - " vk_path,\n", - " pk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "assert os.path.isfile(vk_path)\n", - "assert os.path.isfile(pk_path)\n", - "assert os.path.isfile(settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# GENERATE A PROOF\n", - "\n", - "\n", - "proof_path = os.path.join('ae.pf')\n", - "\n", - "res = ezkl.prove(\n", - " witness_path,\n", - " compiled_model_path,\n", - " pk_path,\n", - " proof_path,\n", - " srs_path,\n", - " \"single\",\n", - " )\n", - "\n", - "print(res)\n", - "assert os.path.isfile(proof_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# VERIFY IT\n", - "res = ezkl.verify(\n", - " proof_path,\n", - " settings_path,\n", - " vk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "print(\"verified\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Variational Autoencoder" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "in1 = Input((28,28))\n", - "x = get_encoder()(in1)\n", - "\n", - "# add the variational\n", - "z_mu = Dense(ZDIM)(x)\n", - "z_log_var = Dense(ZDIM)(x)\n", - "z = Lambda(lambda x: x[0] + K.exp(0.5 * x[1]) * K.random_normal(shape=K.shape(x[0])))([z_mu, z_log_var])\n", - "dec = get_decoder()\n", - "out = dec(z)\n", - "\n", - "mse_loss = mse(Reshape((28*28,))(in1), Reshape((28*28,))(out)) * 28 * 28\n", - "kl_loss = 1 + z_log_var - K.square(z_mu) - K.exp(z_log_var)\n", - "kl_loss = -0.5 * K.mean(kl_loss, axis=-1)\n", - "\n", - "vae = Model(in1, out)\n", - "vae.add_loss(K.mean(mse_loss + kl_loss))\n", - "vae.compile('adam')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# z is sampled from z_mu and z_log_var with gaussian noise\n", - "test = Model(in1, [z, z_mu, z_log_var])\n", - "test.predict(x_train[0:1])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "vae.fit(x_train, batch_size=128, epochs=1, shuffle=1, validation_data=(x_test, None))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "imshow(np.concatenate(vae.predict(np.array([random.choice(x_test) for i in range(10)])), axis=1))\n", - "figure(figsize=(16,16))\n", - "imshow(np.concatenate(vae.layers[5].predict(np.random.normal(size=(10, ZDIM))), axis=1))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os \n", - "\n", - "model_path = os.path.join('vae.onnx')\n", - "compiled_model_path = os.path.join('vae.compiled')\n", - "pk_path = os.path.join('vae.pk')\n", - "vk_path = os.path.join('vae.vk')\n", - "settings_path = os.path.join('vae_settings.json')\n", - "srs_path = os.path.join('vae_kzg.srs')\n", - "witness_path = os.path.join('vae_witness.json')\n", - "data_path = os.path.join('vae_input.json')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "import numpy as np\n", - "import tf2onnx\n", - "import tensorflow as tf\n", - "import json\n", - "\n", - "# After training, export to onnx (network.onnx) and create a data file (input.json)\n", - "x = 0.1*np.random.rand(1,*[1, ZDIM])\n", - "\n", - "spec = tf.TensorSpec([1, ZDIM], tf.float32, name='input_0')\n", - "\n", - "\n", - "tf2onnx.convert.from_keras(dec, input_signature=[spec], inputs_as_nchw=['input_0'], opset=12, output_path=model_path)\n", - "\n", - "data_array = x.reshape([-1]).tolist()\n", - "\n", - "data = dict(input_data = [data_array])\n", - "\n", - " # Serialize data into file:\n", - "json.dump( data, open(data_path, 'w' ))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import ezkl\n", - "\n", - "!RUST_LOG=trace\n", - "res = ezkl.gen_settings(model_path, settings_path)\n", - "assert res == True\n", - "\n", - "res = await ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", - "assert res == True\n", - "print(\"verified\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# srs path\n", - "res = ezkl.get_srs(srs_path, settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# now generate the witness file \n", - "witness_path = \"vae_witness.json\"\n", - "\n", - "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", - "assert os.path.isfile(witness_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# uncomment to mock prove\n", - "# res = ezkl.mock(witness_path, compiled_model_path)\n", - "# assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "# HERE WE SETUP THE CIRCUIT PARAMS\n", - "# WE GOT KEYS\n", - "# WE GOT CIRCUIT PARAMETERS\n", - "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", - "\n", - "res = ezkl.setup(\n", - " compiled_model_path,\n", - " vk_path,\n", - " pk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "\n", - "assert res == True\n", - "assert os.path.isfile(vk_path)\n", - "assert os.path.isfile(pk_path)\n", - "assert os.path.isfile(settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# GENERATE A PROOF\n", - "\n", - "\n", - "proof_path = os.path.join('test.pf')\n", - "\n", - "res = ezkl.prove(\n", - " witness_path,\n", - " compiled_model_path,\n", - " pk_path,\n", - " proof_path,\n", - " srs_path,\n", - " \"single\",\n", - " )\n", - "\n", - "print(res)\n", - "assert os.path.isfile(proof_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# VERIFY IT\n", - "res = ezkl.verify(\n", - " proof_path,\n", - " settings_path,\n", - " vk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "print(\"verified\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.15" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# what is the variational?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Credits to [geohot](https://github.com/geohot/ai-notebooks/blob/master/mnist_gan.ipynb) for most of this code" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# check if notebook is in colab\n", + "try:\n", + " # install ezkl\n", + " import google.colab\n", + " import subprocess\n", + " import sys\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"tf2onnx\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", + "\n", + "# rely on local installation of ezkl if the notebook is not in colab\n", + "except:\n", + " pass\n", + "\n", + "\n", + "import os\n", + "import time\n", + "import random\n", + "\n", + "import tensorflow as tf\n", + "import tensorflow.keras.backend as K\n", + "from tensorflow.keras.optimizers import Adam\n", + "from tensorflow.keras.layers import *\n", + "from tensorflow.keras.models import Model\n", + "from tensorflow.keras.losses import mse\n", + "from tensorflow.keras.datasets import mnist\n", + "(x_train, y_train), (x_test, y_test) = mnist.load_data()\n", + "x_train, x_test = [x/255.0 for x in [x_train, x_test]]\n", + "y_train, y_test = [tf.keras.utils.to_categorical(x) for x in [y_train, y_test]]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ZDIM = 4\n", + "\n", + "def get_encoder():\n", + " x = in1 = Input((28,28))\n", + " x = Reshape((28,28,1))(x)\n", + "\n", + " x = Conv2D(64, (5,5), padding='same', strides=(2,2))(x)\n", + " x = BatchNormalization()(x)\n", + " x = ELU()(x)\n", + "\n", + " x = Conv2D(128, (5,5), padding='same', strides=(2,2))(x)\n", + " x = BatchNormalization()(x)\n", + " x = ELU()(x)\n", + "\n", + " x = Flatten()(x)\n", + " x = Dense(ZDIM)(x)\n", + " return Model(in1, x)\n", + "\n", + "def get_decoder():\n", + " x = in1 = Input((ZDIM,))\n", + "\n", + " x = Dense(7*7*64)(x)\n", + " x = BatchNormalization()(x)\n", + " x = ELU()(x)\n", + " x = Reshape((7,7,64))(x)\n", + "\n", + " x = Conv2DTranspose(128, (5,5), strides=(2,2), padding='same')(x)\n", + " x = BatchNormalization()(x)\n", + " x = ELU()(x)\n", + "\n", + " x = Conv2DTranspose(1, (5,5), strides=(2,2), padding='same')(x)\n", + " x = Activation('sigmoid')(x)\n", + " x = Reshape((28,28))(x)\n", + " return Model(in1, x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Regular Autoencoder" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# normal autoencoder without the variational\n", + "enc = get_encoder()\n", + "dec = get_decoder()\n", + "ae = Model(enc.input, dec(enc.output))\n", + "ae.compile('adam', 'mse')\n", + "ae.summary()\n", + "# make the epochs larger for better results\n", + "ae.fit(x_train, x_train, batch_size=128, epochs=1, shuffle=1, validation_data=(x_test, x_test))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# while the autoencoder might work without the variational, the sampling doesn't\n", + "import numpy as np\n", + "from matplotlib.pyplot import figure, imshow\n", + "imshow(np.concatenate(ae.predict(np.array([random.choice(x_test) for i in range(10)])), axis=1))\n", + "figure(figsize=(16,16))\n", + "imshow(np.concatenate(ae.layers[-1].predict(np.random.normal(size=(10, ZDIM))), axis=1))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os \n", + "\n", + "model_path = os.path.join('ae.onnx')\n", + "compiled_model_path = os.path.join('ae.compiled')\n", + "pk_path = os.path.join('ae.pk')\n", + "vk_path = os.path.join('ae.vk')\n", + "settings_path = os.path.join('ae_settings.json')\n", + "srs_path = os.path.join('ae_kzg.srs')\n", + "witness_path = os.path.join('ae_witness.json')\n", + "data_path = os.path.join('ae_input.json')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we export the decoder (which presumably is what we want) -- to onnx" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "import numpy as np\n", + "import tf2onnx\n", + "import tensorflow as tf\n", + "import json\n", + "\n", + "# After training, export to onnx (network.onnx) and create a data file (input.json)\n", + "x = 0.1*np.random.rand(1,*[1, ZDIM])\n", + "\n", + "spec = tf.TensorSpec([1, ZDIM], tf.float32, name='input_0')\n", + "\n", + "\n", + "tf2onnx.convert.from_keras(dec, input_signature=[spec], inputs_as_nchw=['input_0'], opset=12, output_path=model_path)\n", + "\n", + "data_array = x.reshape([-1]).tolist()\n", + "\n", + "data = dict(input_data = [data_array])\n", + "\n", + " # Serialize data into file:\n", + "json.dump( data, open(data_path, 'w' ))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import ezkl\n", + "\n", + "!RUST_LOG=trace\n", + "res = ezkl.gen_settings(model_path, settings_path)\n", + "assert res == True\n", + "\n", + "res = ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", + "assert res == True\n", + "print(\"verified\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# srs path\n", + "res = ezkl.get_srs(srs_path, settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# now generate the witness file\n", + "witness_path = \"ae_witness.json\"\n", + "\n", + "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", + "assert os.path.isfile(witness_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "res = ezkl.mock(witness_path, compiled_model_path)\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# HERE WE SETUP THE CIRCUIT PARAMS\n", + "# WE GOT KEYS\n", + "# WE GOT CIRCUIT PARAMETERS\n", + "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", + "\n", + "res = ezkl.setup(\n", + " compiled_model_path,\n", + " vk_path,\n", + " pk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "assert os.path.isfile(vk_path)\n", + "assert os.path.isfile(pk_path)\n", + "assert os.path.isfile(settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# GENERATE A PROOF\n", + "\n", + "\n", + "proof_path = os.path.join('ae.pf')\n", + "\n", + "res = ezkl.prove(\n", + " witness_path,\n", + " compiled_model_path,\n", + " pk_path,\n", + " proof_path,\n", + " srs_path,\n", + " \"single\",\n", + " )\n", + "\n", + "print(res)\n", + "assert os.path.isfile(proof_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# VERIFY IT\n", + "res = ezkl.verify(\n", + " proof_path,\n", + " settings_path,\n", + " vk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "print(\"verified\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Variational Autoencoder" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "in1 = Input((28,28))\n", + "x = get_encoder()(in1)\n", + "\n", + "# add the variational\n", + "z_mu = Dense(ZDIM)(x)\n", + "z_log_var = Dense(ZDIM)(x)\n", + "z = Lambda(lambda x: x[0] + K.exp(0.5 * x[1]) * K.random_normal(shape=K.shape(x[0])))([z_mu, z_log_var])\n", + "dec = get_decoder()\n", + "out = dec(z)\n", + "\n", + "mse_loss = mse(Reshape((28*28,))(in1), Reshape((28*28,))(out)) * 28 * 28\n", + "kl_loss = 1 + z_log_var - K.square(z_mu) - K.exp(z_log_var)\n", + "kl_loss = -0.5 * K.mean(kl_loss, axis=-1)\n", + "\n", + "vae = Model(in1, out)\n", + "vae.add_loss(K.mean(mse_loss + kl_loss))\n", + "vae.compile('adam')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# z is sampled from z_mu and z_log_var with gaussian noise\n", + "test = Model(in1, [z, z_mu, z_log_var])\n", + "test.predict(x_train[0:1])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "vae.fit(x_train, batch_size=128, epochs=1, shuffle=1, validation_data=(x_test, None))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "imshow(np.concatenate(vae.predict(np.array([random.choice(x_test) for i in range(10)])), axis=1))\n", + "figure(figsize=(16,16))\n", + "imshow(np.concatenate(vae.layers[5].predict(np.random.normal(size=(10, ZDIM))), axis=1))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os \n", + "\n", + "model_path = os.path.join('vae.onnx')\n", + "compiled_model_path = os.path.join('vae.compiled')\n", + "pk_path = os.path.join('vae.pk')\n", + "vk_path = os.path.join('vae.vk')\n", + "settings_path = os.path.join('vae_settings.json')\n", + "srs_path = os.path.join('vae_kzg.srs')\n", + "witness_path = os.path.join('vae_witness.json')\n", + "data_path = os.path.join('vae_input.json')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "import numpy as np\n", + "import tf2onnx\n", + "import tensorflow as tf\n", + "import json\n", + "\n", + "# After training, export to onnx (network.onnx) and create a data file (input.json)\n", + "x = 0.1*np.random.rand(1,*[1, ZDIM])\n", + "\n", + "spec = tf.TensorSpec([1, ZDIM], tf.float32, name='input_0')\n", + "\n", + "\n", + "tf2onnx.convert.from_keras(dec, input_signature=[spec], inputs_as_nchw=['input_0'], opset=12, output_path=model_path)\n", + "\n", + "data_array = x.reshape([-1]).tolist()\n", + "\n", + "data = dict(input_data = [data_array])\n", + "\n", + " # Serialize data into file:\n", + "json.dump( data, open(data_path, 'w' ))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import ezkl\n", + "\n", + "!RUST_LOG=trace\n", + "res = ezkl.gen_settings(model_path, settings_path)\n", + "assert res == True\n", + "\n", + "res = ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", + "assert res == True\n", + "print(\"verified\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# srs path\n", + "res = ezkl.get_srs(srs_path, settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# now generate the witness file \n", + "witness_path = \"vae_witness.json\"\n", + "\n", + "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", + "assert os.path.isfile(witness_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# uncomment to mock prove\n", + "# res = ezkl.mock(witness_path, compiled_model_path)\n", + "# assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# HERE WE SETUP THE CIRCUIT PARAMS\n", + "# WE GOT KEYS\n", + "# WE GOT CIRCUIT PARAMETERS\n", + "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", + "\n", + "res = ezkl.setup(\n", + " compiled_model_path,\n", + " vk_path,\n", + " pk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "\n", + "assert res == True\n", + "assert os.path.isfile(vk_path)\n", + "assert os.path.isfile(pk_path)\n", + "assert os.path.isfile(settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# GENERATE A PROOF\n", + "\n", + "\n", + "proof_path = os.path.join('test.pf')\n", + "\n", + "res = ezkl.prove(\n", + " witness_path,\n", + " compiled_model_path,\n", + " pk_path,\n", + " proof_path,\n", + " srs_path,\n", + " \"single\",\n", + " )\n", + "\n", + "print(res)\n", + "assert os.path.isfile(proof_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# VERIFY IT\n", + "res = ezkl.verify(\n", + " proof_path,\n", + " settings_path,\n", + " vk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "print(\"verified\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.15" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/examples/notebooks/nbeats_timeseries_forecasting.ipynb b/examples/notebooks/nbeats_timeseries_forecasting.ipynb index 834e9174..10e37e91 100644 --- a/examples/notebooks/nbeats_timeseries_forecasting.ipynb +++ b/examples/notebooks/nbeats_timeseries_forecasting.ipynb @@ -839,7 +839,7 @@ "res = ezkl.gen_settings(model_path, settings_path)\n", "assert res == True\n", "\n", - "res = await ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", + "res = ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", "assert res == True" ] }, @@ -970,4 +970,4 @@ }, "nbformat": 4, "nbformat_minor": 0 -} +} \ No newline at end of file diff --git a/examples/notebooks/proof_splitting.ipynb b/examples/notebooks/proof_splitting.ipynb index 63ba54c4..748e5fb0 100644 --- a/examples/notebooks/proof_splitting.ipynb +++ b/examples/notebooks/proof_splitting.ipynb @@ -264,7 +264,7 @@ " # generate settings for the current model\n", " res = ezkl.gen_settings(model_path, settings_path, py_run_args=run_args)\n", "\n", - " res = await ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\", scales=[run_args.input_scale])\n", + " res = ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\", scales=[run_args.input_scale])\n", "\n", "for i in range(2):\n", " await circuit_gen_settings(i)\n" @@ -579,4 +579,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file diff --git a/examples/notebooks/random_forest.ipynb b/examples/notebooks/random_forest.ipynb index 68b7ad5b..2309baee 100644 --- a/examples/notebooks/random_forest.ipynb +++ b/examples/notebooks/random_forest.ipynb @@ -1,313 +1,313 @@ { - "cells": [ - { - "attachments": { - "image-2.png": { - "image/png": "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wmVDYOPGjfbee+9Z//79bc2aNTZx4kS75JJL3NItb775pv361792jy0qKrL/+I//MLV2rV+//rjZwF6Ln07U/rRXXXWVffe733XXffSjH7UPfehDbhHpF1980f70pz+54409p7i42LZv3+7O0dI03//+991MbR1Qq+Kzzz5ry5Ytc9//8Ic/tJtuusntR6zvtm3bZmrpefvtt23lypV2/vnnu+f+6Ec/qrvGXeiDf8hWLXjKp5J8FTR6f+uYguPPfOYzrttdx++55x6bNGmSTZ8+3a2/KOv/9//+n0615u7Xr18/++QnP2l33HGHO//UU0+1Xr161dWHOxiRfzRnJQbsI/JjoJiRE6AlMXJVToHTEVCLlLoalyxZYp07d7bLL7/cbrvtNps1a5b16NHDTj/9dHd7BSubN292rXu//OUvXbDiPVeBnZfUna37KE2ePNlOOukku/766+3aa6+1MWPGuBawpp7zyCOPuNbNL3/5y3byySe7YMhbnqZjx47HLSvTpUsX9xytB6l7qxtdAerIkSOtT58+9pWvfMUFQQoW/Zbeeust12Ws4FDplFNOMW2bp8DYS+p6/853vuPMtSi3PF577TV77rnn7K9//WtdgKjzm7ufjDp16uTd2gWe7du3r/s7Sh+as5IF9lH6RVDWKAkQJEaptilrSgKaEKKxiL/4xS9cQHjnnXe61rsRI0a4btCpU6faueeeawrK1HKlpCDs73//u2nm6KZNm2zhwoXNPvuEE05wAc2hQ4fcnr3f/va3bcWKFdbUc55//nnXYrl27Vr78Ic/7PKpVs7mklpEFcQqyNqwYYO988477hK1jnrBZHP3yOX3CvpeffVVU4uekloH1Uoam/7yl7+4YEV1oYBbLYeNpUTu19i1UTueiBX2UftVUN6oCBAkRqWmKWfKAhqTeMUVV7hWQwVjamVS0uLPu3btqnupxerJJ59032nhXY3n8lJsi5cCR2/JHe9eOk/H9C/k+qmx52gBcG1ht3v3bnviiSfsW9/6liloPPPMM90tYp+jA94z9Tn2ObpPEJZBka+CQ81w1eLb6i73kozUna4uaHl4Xeze9w29N3U/nR/rFfu5oXuF/VhTVtiHvfYpX5QFCBKjXPuUPSkBBVK/+c1v7LOf/awb97d8+XKrrq62BQsWuK5Pbe3nLUOjIEVdokrqLh43blzdsxRY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" + "cells": [ + { + "attachments": { + "image-2.png": { + "image/png": "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wmVDYOPGjfbee+9Z//79bc2aNTZx4kS75JJL3NItb775pv361792jy0qKrL/+I//MLV2rV+//rjZwF6Ln07U/rRXXXWVffe733XXffSjH7UPfehDbhHpF1980f70pz+54409p7i42LZv3+7O0dI03//+991MbR1Qq+Kzzz5ry5Ytc9//8Ic/tJtuusntR6zvtm3bZmrpefvtt23lypV2/vnnu+f+6Ec/qrvGXeiDf8hWLXjKp5J8FTR6f+uYguPPfOYzrttdx++55x6bNGmSTZ8+3a2/KOv/9//+n0615u7Xr18/++QnP2l33HGHO//UU0+1Xr161dWHOxiRfzRnJQbsI/JjoJiRE6AlMXJVToHTEVCLlLoalyxZYp07d7bLL7/cbrvtNps1a5b16NHDTj/9dHd7BSubN292rXu//OUvXbDiPVeBnZfUna37KE2ePNlOOukku/766+3aa6+1MWPGuBawpp7zyCOPuNbNL3/5y3byySe7YMhbnqZjx47HLSvTpUsX9xytB6l7qxtdAerIkSOtT58+9pWvfMUFQQoW/Zbeeust12Ws4FDplFNOMW2bp8DYS+p6/853vuPMtSi3PF577TV77rnn7K9//WtdgKjzm7ufjDp16uTd2gWe7du3r/s7Sh+as5IF9lH6RVDWKAkQJEaptilrSgKaEKKxiL/4xS9cQHjnnXe61rsRI0a4btCpU6faueeeawrK1HKlpCDs73//u2nm6KZNm2zhwoXNPvuEE05wAc2hQ4fcnr3f/va3bcWKFdbUc55//nnXYrl27Vr78Ic/7PKpVs7mklpEFcQqyNqwYYO988477hK1jnrBZHP3yOX3CvpeffVVU4uekloH1Uoam/7yl7+4YEV1oYBbLYeNpUTu19i1UTueiBX2UftVUN6oCBAkRqWmKWfKAhqTeMUVV7hWQwVjamVS0uLPu3btqnupxerJJ59032nhXY3n8lJsi5cCR2/JHe9eOk/H9C/k+qmx52gBcG1ht3v3bnviiSfsW9/6liloPPPMM90tYp+jA94z9Tn2ObpPEJZBka+CQ81w1eLb6i73kozUna4uaHl4Xeze9w29N3U/nR/rFfu5oXuF/VhTVtiHvfYpX5QFCBKjXPuUPSkBBVK/+c1v7LOf/awb97d8+XKrrq62BQsWuK5Pbe3nLUOjIEVdokrqLh43blzdsxRY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" + }, + "image.png": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAUAAAAEbCAYAAACr2V2eAAABYmlDQ1BJQ0MgUHJvZmlsZQAAKJF1kDFLw1AUhU9stSAVHRwEHQKKUy01rdi1LSKCQxoVqlvyWlMlTR9JRNTFQRengi5uUhd/gS4OjoKDguAgIoKDP0DsoiXeNGpbxft43I/DvYfDBTrCKudGEEDJdCxlOi3mFpfE0Au60ENPQEBlNk/J8iyN4Lu3V+2O5qhuxzyvq5px+bw3PJi1N6Nscmv173xbdecLNqP+QT/BuOUAQoxYXne4x9vE/RaFIj7wWPf5xGPN5/PGzLySIb4h7mNFNU/8RBzRWnS9hUvGGvvK4KUPF8yFOeoD9IeQRgEmshAxhRzimEAM41D+2Uk0djIog2MDFlagowiHtlOkcBjkJmKGHBmiiBBL5Cch7t369w2bWrkKJN+AQKWpaYfA2S7FvG9qI0dA7w5wes1VS/25rFAL2stxyedwGuh8dN3XUSC0D9Qrrvtedd36Mfk/ABfmJ+uTZFvl1hD0AAAAVmVYSWZNTQAqAAAACAABh2kABAAAAAEAAAAaAAAAAAADkoYABwAAABIAAABEoAIABAAAAAEAAAFAoAMABAAAAAEAAAEbAAAAAEFTQ0lJAAAAU2NyZWVuc2hvdP5iyG4AAAHWaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI4MzwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4zMjA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpVc2VyQ29tbWVudD5TY3JlZW5zaG90PC9leGlmOlVzZXJDb21tZW50PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4Kk67BXQAAJDZJREFUeAHtnQuwVVUZxxfKS+QlIKJg8pSXKJQ8VbxqqKBjJmlaUxra5KTWZPhoSoXR1DR10lIZHUsrRZMJy8hSlLhAoJiIFSqKegUUBHkICEgZ/2X7uO/hnHP3Pufsc/ZZ67dmzr377L3W2uv7ffv+73rvZqNGjfrYECAAAQh4SGAvD23GZAhAAAKWAALIgwABCHhLAAH01vUYDgEIIIA8AxCAgLcEEEBvXY/hEIAAAsgzAAEIeEsAAfTW9RgOAQgggDwDEICAtwQQQG9dj+EQgAACyDMAAQh4SwAB9Nb1GA4BCCCAPAMQgIC3BBBAb12P4RCAAALIMwABCHhLAAH01vUYDgEIIIA8AxCAgLcEEEBvXY/hEIAAAsgzAAEIeEsAAfTW9RgOAQgggDwDEICAtwQQQG9dj+EQgAACyDMAAQh4SwAB9Nb1GA4BCCCAPAMQgIC3BBBAb12P4RCAAALIMwABCHhLAAH01vUYDgEIIIA8AxCAgLcEEEBvXY/hEIAAAsgzAAEIeEsAAfTW9RgOAQgggDwDEICAtwQQQG9dj+EQgAACyDMAAQh4SwAB9Nb1GA4BCCCAPAMQgIC3BBBAb12P4RCAAALIMwABCHhLAAH01vUYDgEIIIA8AxCAgLcEEEBvXY/hEIAAAsgzAAEIeEsAAfTW9RgOAQgggDwDEICAtwQQQG9dj+EQgAACyDMAAQh4SwAB9Nb1GA4BCCCAPAMQgIC3BBBAb12P4RCAAALIMwABCHhLAAH01vUYDgEIIIA8AxCAgLcEEEBvXY/hEIAAAsgzAAEIeEsAAfTW9RgOAQgggDwDEICAtwQQQG9dj+EQgAACyDMAAQh4SwAB9Nb1GA4BCCCAPAMQgIC3BBBAb12P4RCAAALIMwABCHhLoLm3lmN4LAIffvih0ee///2vadmyZay05Yr88ccfm+bNm5t99923XFmSj+cEEEDPH4CmzJfgvf/++1b4FHevvarXaPjPf/5jduzYYTZt2mQ6duxo2rRp01TxuQ6BggQQwIJ4/L64a9cus379etOiRQvTpUuX1MDYtm2b2bJliy0PIpgat9RkQRDAmnRbZQq9detWe6NOnTpV5oYR7xKI3saNG6kFRmRGtNwEqteeyV0ezqaIgGpabdu2TVGJPi2KRFD9gYFIf3qFIwhEJ4AARmflVUz1/emT5gEHNc3VTCdAoFgCCGCx5EhXdQJ777131ctAAWqbAAJY2/6rWul79+5t9ttvv6rdnxtDoBwEEMByUPQwjxEjRhiJYBLh+OOPR1yTAEueexBgFHgPJJyIQmD69OlRohUVZ8yYMWbFihVmw4YNRaUnEQSiEti7R48eU6JGJp4/BLTqQnPt2rdvn9Pos88+26gPbs2aNWbKlCl2OsqkSZOMaoZvv/22naw8cuRIU1dXZ8aPH2/OOOMM06dPH7NkyRI7uHL++eebDz74wE6y1g2mTp1q/v73v5uJEyeaYcOGmUGDBtlJzw0NDTnvr5OaFK3QunVr+5sfEIhLgCZwXGLEtwQ0DSVYEtehQwe7TO4HP/iBWbhwoTnppJNsnFatWhnV5u677z4zefJkK6inn366vabpNRrFDYLyaNasmXnkkUeMRG/atGlm3rx5wWV+QyARAghgIlj9y3Tx4sXWaNXwVNMLwosvvmjWrVtnVKOcM2eOGThwYHCJ3xCoOgEEsOoucKMAwXw8/VZNLghavxsEXQtPXQmvKw6nCeLzGwJJE0AAkybsef5DhgzJTKYeNWqUef311y0RbbAQjCJ369bNbm4QoFLfXrt27YKv/IZAYgQYBU4MLRmLgATv+9//vlF/oJbW3XbbbRbM008/bS6//HI7aLJy5Uo7aBIQq6+vN+eee6557LHHjI4JEEiKQLPd/5U/Tipz8q1dAloG984775ju3bsXbcTYsWPN7lkG5sEHH7QCGIzahjPcZ5997ABK+JyOgyax+g7zhc2bN9u+RQ2gECBQDAGawMVQI00kAh999JHZuXOnjZtL/HRBm6zmChK+QuKnNEG/Y670nINAFAI0gaNQ8jCOBij00W4rxW6IoHl9SQYJoJrWBAgUS4AaYLHkPEinuX7BxqNpM1f9iRLAYsU5bfZQnuoQQACrw70m7hqIi3aFTlMIdoTWtvgECJRCgCZwKfQcT6sNR/fff3+7XG3t2rXWWjWLgxUglTZfcwrVr6iaH+8EqTR9N++HALrp17JZJcHT+0DCb4UrNvODDjrIiun27duLykKTqNXnF2yJX1QmJIJAiAACGILBYX4Cmq6iTylBGxysXr3aaN4fAQJpIEAfYBq84EkZNK0lrYMqnrgAM7MIIIBZQPgKAQj4QwAB9MfXVbdU/YnM26u6GyhAiAACGILBYbIEtLwu34qQZO9M7hDITQABzM2FsxCAgAcEEEAPnIyJEIBAbgIIYG4unIUABDwggAB64GRMhAAEchNAAHNz4SwEIOABAQTQAyenxUQtZSt1NUlabKEcbhBAAN3wY01Yoc0M8m2AWhMGUEjnCCCAzrkUgyAAgagEEMCopIgHAQg4RwABdM6lGAQBCEQlgABGJUU8CEDAOQIIoHMuxSAIQCAqAQQwKiniQQACzhFAAJ1zKQZBAAJRCSCAUUkRr2QCzZo1s+8aLjkjMoBAmQgggGUCSTZNE9CW+NoTkACBtBBAANPiCcoBAQhUnAACWHHk3BACEEgLAQQwLZ6gHBCAQMUJIIAVR84NIQCBtBBAANPiCcoBAQhUnEDzit+RG0KgAIHmzZubXbt2FYjxyaUWLVo0iqPRZW23paA89PrNrVu3NorDFwhkE0AAs4nwvSoEBg8ebA444ACzc+dO0759ezNnzhyzbdu2nGXRfMJRo0ZlrnXu3Nls3rzZPP3002b06NF201W9frNdu3Y2n+3bt2ficgCBMAGawGEaHFeNwKpVq6yAzZs3z06WlqipJjd27NhMmSSS3bp1M5pPWF9fn/kowtKlS61w9ujRw+Yzf/58895775n+/ftn0nMAgWwCCGA2Eb5XhcDGjRvtfYcPH25atmxpVq5caZvCag4fddRRRsI2aNAgK2rhAqrWqObvunXrTMeOHc2GDRsyl5WnzhEgkI8AApiPDOcrTkBi1qtXLzNz5kxby1MBFixYYHr27GnOPPNM8/jjj2f6+YLCqSm8aNEi+3WvvfbKpNMJCaPeQ0KAQD4CCGA+MpyvOAE1bZ9//vlGy+Vat25tRUz9eJ06dWpUpq5du9rm8po1a+z5TZs22X6/IJL6AHWOAIF8BBDAfGQ4X3ECW7ZsMfoEQTW6CRMmmLlz55r777/f1NXVmQ4dOgSXzciRIzO1P52U2Ol6mzZtbJwBAwbYpnQmAQcQyCLAKHAWEL5Wj0Dfvn1Nv379zIwZM2whVCNcvHixaWhosN+feOKJTBO4S5cudqrL6tWrMwVWk1di+aUvfcmOJmtgJagdZiJxAIEQgWa7+1A+Dn3nEAKJEdAAx/Lly00w4JHrRqr1SchKCcpD8wQ1FYYAgUIEaAIXosO1ihMoVfxUYOWB+FXcdTV5QwSwJt1GoSEAgXIQQADLQZE8IACBmiSAANak2yg0BCBQDgIIYDkokgcEIFCTBBDAmnRbbRaalyLVpt9cLjUC6LJ3U2YbL0VKmUMojkEAeQggAAFvCSCA3roewyEAAQSQZwACEPCWAALoresxHAIQQAB5BiAAAW8JIIDeuh7DIQABBJBnAAIQ8JYAAuit6ytvuLan32effSp/Y+4IgTwEEMA8YDhdfgJ6b++HH35Y/ozJEQJFEkAAiwRHMghAoPYJIIC170MsgAAEiiSAABYJjmQQgEDtE0AAa9+HWAABCBRJAAEsEhzJIACB2ieAANa+D1NvQZ8+fWwZ9ba2Vq1aGX0PzqW+8BTQaQIIoNPuTYdx77//vhk3bpyRAHbu3NkW6vXXX09H4SiF1wQQQK/dXxnjN2zYYPRp27at6d69e2Vuyl0gEIEAAhgBElFKJxDU+N577z0THJeeKzlAoDQCzUtLTuqoBLQCQh+9tLtly5ZRkzkTb/PmzUbvBNm6davRsY9BrwRo3ry52XfffX00P5U2I4AJu0WCpz4wLQPTH4BC8DvhW6cu+1deeSV1ZapkgfQs6LNx40bTsWNHhLCS8PPcCwHMA6Ycp3ft2mXWrVtnO//ZBKAcRN3I46OPPjIffPCBNYbaYHV9Sh9ggvzV3FNtr3Xr1gnehaxrjUCLFi2MPps2baq1ojtXXgQwQZdKAH3s70sQqTNZSwA1LUjPCKF6BBDAhNirr0e1Pz3oBAjkIqBBITWHCdUjgABWjz139pyAaoCE6hLAA9Xl7/zdDznkkMzqj2xjhwwZEquLoFOnTka7SodD3DzCaXMdd+nSpdEyPU3eHjlypNG9s6/lSs+52iLAKHCV/PWrX/3KzovT2liFHTt22ObQBRdcUHKJvvKVr5jTTjvN5hlkdsstt5ilS5cGXyv2+8QTTzSvvvqq+dvf/rbHPb/5zW+aqVOnmvXr1+9xLXziqKOOMl//+tftPMoOHTqYJ5980jz00EO2iyFqHuH8Ch0feuihVgCDydpXXXWV0fSdFStWmH79+jW6VigfrtUGAQSwSn4677zz7J3PPvtsK3wzZswoa0mmT59uZs6cWdY8q5HZwQcfbPRPQUK0cuVK06ZNG3PNNdfY47lz55a9SAsWLDD6BEH3v/LKK63YahVL+FoQh9+1SwABTJnvjj76aHPYYYfZmoZqHXfddZf54he/aI477jg7mfr3v/+9Cf7wP/vZz5pzzjnHvmjo2WefNQ888EBBa9SEu/jii83atWuNmo6vvfaaufvuu+1I5Gc+8xlz4YUX2ik7mp7xs5/9zE7Y1cqFb3/726Z///52Bce0adPMm2++aVTOgQMH2rW9Svvb3/7Wlnno0KF2escNN9yQWfGh6zfddJNR7a2+vt785je/2aOc+Ww59thjzZ/+9CcreEq0bds284tf/MIcdNBBe+QxfPhw87Wvfc3uOCPb7rjjDrN9+3ajGuQZZ5xhV2EsW7bMyAYNUCmuyquBqj/+8Y+2Zjl69GjTu3dva8+Pf/xjy0NlV5r9998/c60Ql2z/7VFQTqSGAH2AqXHFJwVRk/jwww831157rRU/CYP+SL/3ve+ZH/3oR+bMM880BxxwgBUT1YwkNJdccok9V1dXl7FGeUycODHz0VxE9Z9J+B5//HFz0UUXWUEdNWqUTfPlL3/ZPPbYY+bSSy81f/3rX4367hS++tWvGtV8FP/ee+81kydPtudVTuV1/fXXm8suu8yK5D/+8Q/7e9WqVVZ0bMTdP1T+q6++2oqvRHPMmDHBJftbwpjPll69elmhDidoaGgwCxcuDJ+yx9piS01qCblG4SVmCmomq9b43e9+14q//hGoZjds2DBrz+WXX24OPPBA2yWhaUuqZSr88Ic/tM1u2SdBDV8rxCXsP5sRP1JLgBpgCl3zwgsvZGpPY8eOtUumxo8fb0sqsZCIqCakWlAgJu3atTOf+9znzJw5c2w89Slu2bIlY50EQWH16tVGAqKg+wwaNMjMnj3b9nGdddZZZr/99jOLFy+2K1gU5/TTT7fCeOqpp+qr6dGjhx0M0LH6FHfu3Gn78LSy4cUXX9RpW0PUUq8gPPPMM7Ympu+61+DBgxs1JVW7zGeLRFvLCKOEP/zhD7b2LOE78sgjzdtvv22TvfHGG1bA1Xz985//bEVNgxv6TJo0yTz//PO2VhpniWIhLmH/RSk3capHgBpg9djnvXP4D15TJdRk1XpifVQL06CCmm3BOf1+6qmnzKxZszJ5quP+L3/5S+YjoVIIzzvTUj3NRVNQH+Sdd95pa5aqVR5zzDH2vIQzfP9bb701I2aBqCqi8sknILpPEHSs5mM4FLJF4qVaYDiohtatW7fwKcvjpz/9qenbt6/deiu87li1adVqBwwYYH7+85/bZrv+OahGqJqdBmpkV/YIc6MbZH0pxCXsv6xkfE0ZAQQwZQ7JLo5qYwpB57yaYRIaiaD6t5YsWWKvaYF9MKKcnUeU7yeffLLt83v44YeNPqqlKajGJnHT/Z977jnTtWtXW4OKkmcQR/2FgdCqPy4sTopTyJb58+ebL3zhC7b/TXElUmqOq78vHNQ/p3s8+OCDtqwSKHESL9XWVFu95557zD//+U8rqKrJjhgxwo5O33zzzbaW3b59+3CWBY/LwaXgDbhYEQKN/xVX5JbcJA4BDXio5nL77bfbZBoYUZNStYxHH33UDi4E22ypsz4I6is85ZRTgq82vWpy+YJqRKopqb9PGzcE99N0nSuuuMIcf/zx9ryakHFrOBq9Ve1M/ZDLly+35Q+XQ/fMZ4tqaCrDddddZwdXgia6yhEO77zzjlFtUQMfskWbUCio5qtug9tuu82m1z8N/VORWKrfccKECVZUNU1Hm7ZGDeXgEvVexEuOQLPdneCf7NGU3D28zFk1EP1Rqm+uHEE1H32Cpmw4TwmWRLDUIFGQSOXKS7VLNZ/Dzd4491PeaurmKn84n0K2qJanmm64GR9Oq2OVX/2f2c3xfPwUX2Uq1q5SuKicYhLuL822h+/JEqAGmCzfsuWuWle+mlcuwSrmxhKNfHnpj7WUoLybEj/ln+/+uqaaYlNBNbxcIR+/fPFz5ZHrXClcihXdXOXgXHEE6AMsjluTqTR4oVpPodpKk5kQwWkC+qegGiChegQQwATZa7PLKLWeBItA1ikloH+MqpWyIWp1HYQAJshfD7dqgZqzR4BAQEDip+lA9P0FRKr3mz7ABNlrvpumjWieXlgE1SFP8I+A+vzU7NVvjUxT+6v+M4AAJuwD9QVq6ZU69/XRw6+5abUaJN4ajdUfsqbV6HeSQaPoup8GQIL3aCR5vyTzFiv9U0T4kqQcL28EMB6vomNreoc+tRw0B09L59599137bt9yTfFpiomajJpALcHVvEACBMpFgD7AcpF0PJ/u3bsbbcygffKCvfIqZbJ2p9EqFK3dPeKII+xcv0rdm/u4TQABdNu/ZbFOm4Rq6ZhESLW/agTVArXsT32p2m1FfWgECJRKYO/dD/aUUjMhvZsE1FcpsVG/n9bQhgdyqmWxBpTUl6atrDSJudb7BavFkft+QoA+QJ6EnAS0iak+Ws5X6SZvzgKFTmpLL71OUhs2qB8ye3OFUFQOIVCQAE3ggnj8vKgNV9Xs1aBD2sQv8Ij6BbULtprC2oGZAIFiCCCAxVBzOI12StbuM9okVNtUpTloMrFEUFOLNEDDsrI0eyudZUMA0+mXqpRKm4lqtFfbRcXZGqoqhQ3d9N///rfdQVu7QDPHLgSGwyYJIIBNIvIjgub3aUNQ1fzUv1ZrQfMDte+gRFDzFQkQiEKAQZAolByOo5FeiZ+ak3qpUS0HvQNEm0/o3Sg6ZnCklr1ZmbIjgJXhnMq7aDNPTSxWje9f//pXKssYt1Br1qyxIqjpO5q2E7wYKW4+xPeDAE1gP/y8h5ValqeBA62xdUX8AiPVf6mmvKbxBK/3DK7xGwJhAghgmIYnxxI/TSTWfDq9R8PFoPeCqEmv120igi56uDw2IYDl4VgzuWiqiJq9Er+33nqrZspdTEG1+46Wz2kZnz4ECGQTQACziTj+XX1java++eabjlv6iXkSQb2wvU+fPkYTvAkQCBNAAMM0HD/W0jEJQlpXdySFX83hl156ya4YYROFpCjXZr4IYG36LXape/bsabeRevnll+3mBlEzaNOmjd2GKmr8tMbTJgrLli2zU36K3ZFbm5kS3CLAe4Hd8mdOazp37myGDBmSea+wdqnWH/Ps2bNzxtdJxRk3bpzdbUXvNenUqZOZNWtW3ldz5s0oZRe0xllzH7W7TdSgdwcfe+yx9oXrWmmiqTZqVhNqnwA1wNr3YUELJF79+/c3qvlpiVt9fb399OrVywqimsXdunWzeUgYjj766Mzx0qVLzYIFC8z8+fOdeYG31jdrFDzOoIjWGoubOGh6jXgS3CCAALrhx7xWqMajeXHayFQ7qKjmN2HCBFsD0msZNRJ8wgkn2F1VdF7bXylor73gWEvLVAtSM9KFIBHs169f5J2ltbpEk6q1VPDkk082ixYtcgEDNuwmgAA6/BjotYsa+Vy+fHnGSk2B2bhxo1m4cKE9pwGCp556ykyaNMk27bIHSDRtZvz48TZO0i9AyhQy4QP9I2hoaLAjw3Fuddxxx5l58+Y5P30oDpNaj4sA1roHC5S/d+/edsRX63yDIMHTYEA4qAm8Y8cO+wpPNZnDQTUeTSjW3oAuBQm9arbq24waVItmaV1UWrURDwGsDT/FLqVeJana26pVqxqlXb9+vRW74KRWSWgbrLvvvts2eceOHRtcMmPGjLFzBtV/6GLQKpg4q0TEUoNDBHcI8E4Qd3zZyJKBAwfa2opqfOFQV1dnp7UEwqi+Pc2R00uHgnNqIqpmdMopp9i4Q4cONfrovJrPrgS9T0S1ZDFSn2dT4ZxzzrGMeA9JU6Rq5zrTYGrHV5FLGmwTr1HL7KAajEY1CZ8Q0IYJGtyIMi0Gdu49NdTn3fOpndYSjOBmm4f4NSaiNdEHHnigHR1vfGXPb7Dbk0mtn0EAa92DOcqv/j9N1iU0TUADRBrgETOCfwQQQMd8rtdEqqZSi9vaV8sVGhiKMxpcrXJy3/ITQADLz7SqOao/S4MVhOgENLDDJgnRebkUEwF0yZu7bWnbtq0d1XTMrETN0Siwlsex2UGimFOZOQKYSrcUXyhNa9GWV4R4BDQNRmuhCX4RQAAd87cEMMqcNsfMLtkcMRM7gl8EEEDH/K0/Yi1rI8QjIGYIYDxmLsRGAF3w4v9t0ERd9WMhgPGdSg0wPjMXUiCALnjx/zZoJBPxK86h2hpMu18T/CKAADrgb+1qoqD1vOGdXxwwrWIm0G9aMdSpuhECmCp3FF8YvfUsHI488sjwV47zENA/jzA7fQ/+oeRJwmmHCCCADjhTOz7rj1bb3GvTUomfzhGaJhCw06YIet+H2LEqpGlursRAAB3xpDb41MamWgkiMcze2dkRMxMxQ6zETZ8VK1bALhHK6cwUAUynX2KXSjWZzZs323T6IyZEJyB2rJ2OzsulmOwHWKI39bKctAw8aCME7WqSBgHUgIym5WhunZaZJR304qJgo1LthB03qNmrUeCVK1fGTWoHnyppa+wCkiAvAQQwL5rCFyR8WkSveXfBp3AKv65KALUrjfok9Z4RNcuTWmur3Vx0P73wXEJUjACW4p1K2lpKOUm7JwFedb8nkybPSPzUZNK8O3WcEwoT0Os0161bZwcXyr3eVnlrDp/efpf9QqfCpUrmapK2JlNiv3OlD7AI/6vmp+YS4hcNnpqXqpmVu59Nu7io6du1a9dUiJ9oJGVrNNLEiksAAYxJTLU/NeUQv3jgVFsWu3KGtC5fS8LWcnIjr08JIICfsoh0pAGPpPqyIhWgRiO1atXK1gLLOWCkvjftf5i2kIStabPRlfIggEV4EgEsAhpJIJBCAghgCp1y8MEHx16NUCjN4YcfnhmpHjx4sLVYfVU9e/bMaX2hazkTpPBkx44djVZ3FApR4mSnLyZNdh58Tw8BBDA9vsiUpK6uzgwYMCDzPcpBoTTjx483+sPVnLzzzjvPZqf1ryNGjLDHGj2dOHFi5jbha5mTNXbQr18/8/nPf75gqaPEyc6gmDTZefA9PQQQwPT4IrGS/OQnP7HTUMI3eO6558wjjzxiT0kATzrppMzl8LXMSQ4g4CAB5gGW0alqOl5wwQVGLyU/4ogj7IYE99xzj33v7MiRI22tThsWvPXWW+aXv/ylUdNUNS/VzLQe9b777susKunRo4e55pprjFZ3LFq0yPzud7+zJR02bJg566yz7Psr3njjDaP8gz0A86W56qqrzK233trIUi36VxP40UcfNZdddplRx/2UKVPMvffea9cUB9fU3/mNb3zD9O3b175s6f777zcNDQ12GtD5559vunTpYqegPPDAA+a1115rdI+0fNGLz+UXjc5qtci0adPMu+++a4unVSqXXnqp6d69u7VL1zS6nM/utNhEOcpDgBpgeTjaXLQSQX1sL730kpk8ebJ58sknzbe+9S17TQKja7fccosVP/0xqjl6++23myuvvNKuKpGwBeGwww4zN954o72mZtfw4cPtJQnTTTfdZPPXSovgvC7mS6NF/tmThDUhOViidvPNN1sRlQBqKVj4mgRaKy2uuOIK8+tf/9pcdNFFthyjR482mvQrkZYIH3LIIfZ8Gn/on46EXj6ZN2+eOfXUUzPFHDJkiHnooYfstdWrV9t/LrqYz+5MQg6cIIAAltmNEoslS5bYXJ999lm7QiFYmiVhDNarqp/t5ZdftuKi5WLPPPOMGTRoUKY0+kNVzU7TRubOnZvpE3ziiSfstlfjxo0zQ4cONZ07d24yTSZCEQcTJkywgnjiiSeaQw891Kg2pZquhFK1yNNOO81Ob5k9e3YRuVcmycKFC+2NTjjhBPtPYuDAgZkbL1u2zNbYAx/079/fXstndyYhB04QQADL7EbVysJB31UzVNCSrSCoiRX+ruMgXnZcXVN8faZOnWoFUC8/z25yZuen+KUGlV/L2LRjij533XWXFeZXXnnFXHvttfYVnGoin3vuuaXeKrH0qoVrkEivC1X3Q3hFSnheYsBZBclnd2KFJOOqEEAAy4xdu7H07t3b5qqRXNX4cm23rj4/1USC91Coj/DVV1/NlEYjtEGzVdeWL1+e6W+bMWOGUe1Sf6SquQQhV5rgWqHfQR5qpmeH+vp6Ww4NjLzwwgt2txnZo/5L9f+pmX/nnXc2qr1m51Ht7+L88MMPmwULFlhmYQFUrVvdEQriHPxTyWd3tW3h/uUlUHoVobzlqfncVq1aZTTtRIvzJSiqMeUKairPnDnTXH311XY9q/4o77jjjkxUDaSotqc8tL3V/Pnz7TUNQNxwww12WZnyCId8acJxch0Hzb/rrrvO9kmG40yfPt1ccskl5phjjrGDNWrqqqak2uCFF15oB0a0GiMYUQ6nTcvxrFmzjAaC1GcpfuGgfywXX3yx7Q/VypJgsCif3eG0HNc+AbbDiunDYNNRDSxkB9X+vvOd79g/No3s5qr5ZafRdw06aFF/dlANUP2H2deUt/oHg5pbOF2+NOE4+Y61YYFqlbmCyqjmYvZ1DaSoaRklSKDFqBxNc90vTn7BPcNN3nCZ8/krn93htLmO45QtV3rOVYYANcAiOOf7I5IgBWIQVfx0+2yBC4qk/HJdK5R3vjRBnoV+Z4tbOG6ucuh6YG84biWPc/0TyHX/fD4L4uZjms/uIB2/a5sAfYAx/aeaRL4/Jg0WXH/99TFz9CO6aqwS2KAmVg6rVTvTllhpC0nYmjYbXSkPAhjTkxq0kACGO9JjZuFldI1al3sLsXzN1moDTsLWatvk6v0RwCI8q3W1wa7QRST3LokGH1T7K7cAKj8NEq1du3aPvslqQU7K1mrZ4/p96QMswsPB1BXtDK2aoJp15WzaFVGk1CXJfk+GpswkwUiTstX1IBFMyztBkrI1dU52oEAIYJFOlAjqo5pgvj7BIrN2JpkET6PEaqomGSQ4GqxQf2DUQZFyl6dStpa73L7nhwCW+AQEtcESsyF5iQQ0IKLaIAECcQjQBxiHFnEhAAGnCCCATrkTYyAAgTgEEMA4tIgLAQg4RQABdMqdGAMBCMQhgADGoUVcCEDAKQIIoFPuxBgIQCAOAQQwDi3iQgACThFAAJ1yJ8ZAAAJxCCCAcWgRFwIQcIoAAuiUOzEGAhCIQwABjEOLuBCAgFMEEECn3IkxEIBAHAIIYBxaxIUABJwigAA65U6MgQAE4hBAAOPQIi4EIOAUAQTQKXdiDAQgEIcAAhiHFnEhAAGnCCCATrkTYyAAgTgEEMA4tIgLAQg4RQABdMqdGAMBCMQhgADGoUVcCEDAKQIIoFPuxBgIQCAOAQQwDi3iQgACThFAAJ1yJ8ZAAAJxCCCAcWgRFwIQcIoAAuiUOzEGAhCIQwABjEOLuBCAgFMEEECn3IkxEIBAHAIIYBxaxIUABJwigAA65U6MgQAE4hBAAOPQIi4EIOAUAQTQKXdiDAQgEIcAAhiHFnEhAAGnCCCATrkTYyAAgTgEEMA4tIgLAQg4RQABdMqdGAMBCMQhgADGoUVcCEDAKQIIoFPuxBgIQCAOAQQwDi3iQgACThFAAJ1yJ8ZAAAJxCCCAcWgRFwIQcIoAAuiUOzEGAhCIQwABjEOLuBCAgFMEEECn3IkxEIBAHAIIYBxaxIUABJwigAA65U6MgQAE4hBAAOPQIi4EIOAUAQTQKXdiDAQgEIcAAhiHFnEhAAGnCCCATrkTYyAAgTgE/gcCHHjHKxBaJwAAAABJRU5ErkJggg==" + } + }, + "cell_type": "markdown", + "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", + "metadata": {}, + "source": [ + "## Random forest\n", + "\n", + "\n", + "Sklearn based models are slightly finicky to get into a suitable onnx format. By default most tree based models will export into something that looks like this: \n", + "\n", + "\n", + "![image.png](attachment:image.png)\n", + "\n", + "\n", + "Processing such nodes can be difficult and error prone. It would be much better if the operations of the tree were represented as a proper graph, possibly ... like this: \n", + "\n", + "\n", + "![image-2.png](attachment:image-2.png)\n", + "\n", + "\n", + "This notebook showcases how to do that using the `sk2torch` python package ! " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "95613ee9", + "metadata": {}, + "outputs": [], + "source": [ + "# check if notebook is in colab\n", + "try:\n", + " # install ezkl\n", + " import google.colab\n", + " import subprocess\n", + " import sys\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"sk2torch\"])\n", + "\n", + "# rely on local installation of ezkl if the notebook is not in colab\n", + "except:\n", + " pass\n", + "\n", + "\n", + "# here we create and (potentially train a model)\n", + "\n", + "# make sure you have the dependencies required here already installed\n", + "import json\n", + "import numpy as np\n", + "from sklearn.datasets import load_iris\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.ensemble import RandomForestClassifier as Rf\n", + "import sk2torch\n", + "import torch\n", + "import ezkl\n", + "import os\n", + "from torch import nn\n", + "\n", + "\n", + "\n", + "iris = load_iris()\n", + "X, y = iris.data, iris.target\n", + "X = X.astype(np.float32)\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y)\n", + "clr = Rf()\n", + "clr.fit(X_train, y_train)\n", + "\n", + "\n", + "trees = []\n", + "for tree in clr.estimators_:\n", + " trees.append(sk2torch.wrap(tree))\n", + "\n", + "\n", + "class RandomForest(nn.Module):\n", + " def __init__(self, trees):\n", + " super(RandomForest, self).__init__()\n", + " self.trees = nn.ModuleList(trees)\n", + "\n", + " def forward(self, x):\n", + " out = self.trees[0](x)\n", + " for tree in self.trees[1:]:\n", + " out += tree(x)\n", + " return out / len(self.trees)\n", + "\n", + "\n", + "torch_rf = RandomForest(trees)\n", + "# assert predictions from torch are = to sklearn \n", + "diffs = []\n", + "for i in range(len(X_test)):\n", + " torch_pred = torch_rf(torch.tensor(X_test[i].reshape(1, -1)))\n", + " sk_pred = clr.predict(X_test[i].reshape(1, -1))\n", + " diffs.append(torch_pred[0].round() - sk_pred[0])\n", + "\n", + "print(\"num diffs\", sum(diffs))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b37637c4", + "metadata": {}, + "outputs": [], + "source": [ + "model_path = os.path.join('network.onnx')\n", + "compiled_model_path = os.path.join('network.compiled')\n", + "pk_path = os.path.join('test.pk')\n", + "vk_path = os.path.join('test.vk')\n", + "settings_path = os.path.join('settings.json')\n", + "srs_path = os.path.join('kzg.srs')\n", + "witness_path = os.path.join('witness.json')\n", + "data_path = os.path.join('input.json')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "82db373a", + "metadata": {}, + "outputs": [], + "source": [ + "# !!!!!!!!!!!!!!!!! This cell will flash a warning about onnx runtime compat but it is fine !!!!!!!!!!!!!!!!!!!!!\n", + "\n", + "\n", + "# export to onnx format\n", + "\n", + "torch_rf.eval()\n", + "\n", + "# Input to the model\n", + "shape = X_train.shape[1:]\n", + "x = torch.rand(1, *shape, requires_grad=False)\n", + "torch_out = torch_rf(x)\n", + "# Export the model\n", + "torch.onnx.export(torch_rf, # model being run\n", + " # model input (or a tuple for multiple inputs)\n", + " x,\n", + " # where to save the model (can be a file or file-like object)\n", + " \"network.onnx\",\n", + " export_params=True, # store the trained parameter weights inside the model file\n", + " opset_version=11, # the ONNX version to export the model to\n", + " do_constant_folding=True, # whether to execute constant folding for optimization\n", + " input_names=['input'], # the model's input names\n", + " output_names=['output'], # the model's output names\n", + " dynamic_axes={'input': {0: 'batch_size'}, # variable length axes\n", + " 'output': {0: 'batch_size'}})\n", + "\n", + "d = ((x).detach().numpy()).reshape([-1]).tolist()\n", + "\n", + "data = dict(input_shapes=[shape],\n", + " input_data=[d],\n", + " output_data=[((o).detach().numpy()).reshape([-1]).tolist() for o in torch_out])\n", + "\n", + "# Serialize data into file:\n", + "json.dump(data, open(\"input.json\", 'w'))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d5e374a2", + "metadata": {}, + "outputs": [], + "source": [ + "!RUST_LOG=trace\n", + "# TODO: Dictionary outputs\n", + "res = ezkl.gen_settings(model_path, settings_path)\n", + "assert res == True\n", + "\n", + "res = ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3aa4f090", + "metadata": {}, + "outputs": [], + "source": [ + "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8b74dcee", + "metadata": {}, + "outputs": [], + "source": [ + "# srs path\n", + "res = ezkl.get_srs(srs_path, settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "18c8b7c7", + "metadata": {}, + "outputs": [], + "source": [ + "# now generate the witness file \n", + "\n", + "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", + "assert os.path.isfile(witness_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b1c561a8", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# HERE WE SETUP THE CIRCUIT PARAMS\n", + "# WE GOT KEYS\n", + "# WE GOT CIRCUIT PARAMETERS\n", + "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", + "\n", + "\n", + "\n", + "res = ezkl.setup(\n", + " compiled_model_path,\n", + " vk_path,\n", + " pk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "assert os.path.isfile(vk_path)\n", + "assert os.path.isfile(pk_path)\n", + "assert os.path.isfile(settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c384cbc8", + "metadata": {}, + "outputs": [], + "source": [ + "# GENERATE A PROOF\n", + "\n", + "\n", + "proof_path = os.path.join('test.pf')\n", + "\n", + "res = ezkl.prove(\n", + " witness_path,\n", + " compiled_model_path,\n", + " pk_path,\n", + " proof_path,\n", + " srs_path,\n", + " \"single\",\n", + " )\n", + "\n", + "print(res)\n", + "assert os.path.isfile(proof_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "76f00d41", + "metadata": {}, + "outputs": [], + "source": [ + "# VERIFY IT\n", + "\n", + "res = ezkl.verify(\n", + " proof_path,\n", + " settings_path,\n", + " vk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "print(\"verified\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.15" + } }, - "image.png": { - "image/png": "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" - } - }, - "cell_type": "markdown", - "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", - "metadata": {}, - "source": [ - "## Random forest\n", - "\n", - "\n", - "Sklearn based models are slightly finicky to get into a suitable onnx format. By default most tree based models will export into something that looks like this: \n", - "\n", - "\n", - "![image.png](attachment:image.png)\n", - "\n", - "\n", - "Processing such nodes can be difficult and error prone. It would be much better if the operations of the tree were represented as a proper graph, possibly ... like this: \n", - "\n", - "\n", - "![image-2.png](attachment:image-2.png)\n", - "\n", - "\n", - "This notebook showcases how to do that using the `sk2torch` python package ! " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "95613ee9", - "metadata": {}, - "outputs": [], - "source": [ - "# check if notebook is in colab\n", - "try:\n", - " # install ezkl\n", - " import google.colab\n", - " import subprocess\n", - " import sys\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"sk2torch\"])\n", - "\n", - "# rely on local installation of ezkl if the notebook is not in colab\n", - "except:\n", - " pass\n", - "\n", - "\n", - "# here we create and (potentially train a model)\n", - "\n", - "# make sure you have the dependencies required here already installed\n", - "import json\n", - "import numpy as np\n", - "from sklearn.datasets import load_iris\n", - "from sklearn.model_selection import train_test_split\n", - "from sklearn.ensemble import RandomForestClassifier as Rf\n", - "import sk2torch\n", - "import torch\n", - "import ezkl\n", - "import os\n", - "from torch import nn\n", - "\n", - "\n", - "\n", - "iris = load_iris()\n", - "X, y = iris.data, iris.target\n", - "X = X.astype(np.float32)\n", - "X_train, X_test, y_train, y_test = train_test_split(X, y)\n", - "clr = Rf()\n", - "clr.fit(X_train, y_train)\n", - "\n", - "\n", - "trees = []\n", - "for tree in clr.estimators_:\n", - " trees.append(sk2torch.wrap(tree))\n", - "\n", - "\n", - "class RandomForest(nn.Module):\n", - " def __init__(self, trees):\n", - " super(RandomForest, self).__init__()\n", - " self.trees = nn.ModuleList(trees)\n", - "\n", - " def forward(self, x):\n", - " out = self.trees[0](x)\n", - " for tree in self.trees[1:]:\n", - " out += tree(x)\n", - " return out / len(self.trees)\n", - "\n", - "\n", - "torch_rf = RandomForest(trees)\n", - "# assert predictions from torch are = to sklearn \n", - "diffs = []\n", - "for i in range(len(X_test)):\n", - " torch_pred = torch_rf(torch.tensor(X_test[i].reshape(1, -1)))\n", - " sk_pred = clr.predict(X_test[i].reshape(1, -1))\n", - " diffs.append(torch_pred[0].round() - sk_pred[0])\n", - "\n", - "print(\"num diffs\", sum(diffs))\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b37637c4", - "metadata": {}, - "outputs": [], - "source": [ - "model_path = os.path.join('network.onnx')\n", - "compiled_model_path = os.path.join('network.compiled')\n", - "pk_path = os.path.join('test.pk')\n", - "vk_path = os.path.join('test.vk')\n", - "settings_path = os.path.join('settings.json')\n", - "srs_path = os.path.join('kzg.srs')\n", - "witness_path = os.path.join('witness.json')\n", - "data_path = os.path.join('input.json')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "82db373a", - "metadata": {}, - "outputs": [], - "source": [ - "# !!!!!!!!!!!!!!!!! This cell will flash a warning about onnx runtime compat but it is fine !!!!!!!!!!!!!!!!!!!!!\n", - "\n", - "\n", - "# export to onnx format\n", - "\n", - "torch_rf.eval()\n", - "\n", - "# Input to the model\n", - "shape = X_train.shape[1:]\n", - "x = torch.rand(1, *shape, requires_grad=False)\n", - "torch_out = torch_rf(x)\n", - "# Export the model\n", - "torch.onnx.export(torch_rf, # model being run\n", - " # model input (or a tuple for multiple inputs)\n", - " x,\n", - " # where to save the model (can be a file or file-like object)\n", - " \"network.onnx\",\n", - " export_params=True, # store the trained parameter weights inside the model file\n", - " opset_version=11, # the ONNX version to export the model to\n", - " do_constant_folding=True, # whether to execute constant folding for optimization\n", - " input_names=['input'], # the model's input names\n", - " output_names=['output'], # the model's output names\n", - " dynamic_axes={'input': {0: 'batch_size'}, # variable length axes\n", - " 'output': {0: 'batch_size'}})\n", - "\n", - "d = ((x).detach().numpy()).reshape([-1]).tolist()\n", - "\n", - "data = dict(input_shapes=[shape],\n", - " input_data=[d],\n", - " output_data=[((o).detach().numpy()).reshape([-1]).tolist() for o in torch_out])\n", - "\n", - "# Serialize data into file:\n", - "json.dump(data, open(\"input.json\", 'w'))\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d5e374a2", - "metadata": {}, - "outputs": [], - "source": [ - "!RUST_LOG=trace\n", - "# TODO: Dictionary outputs\n", - "res = ezkl.gen_settings(model_path, settings_path)\n", - "assert res == True\n", - "\n", - "res = await ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3aa4f090", - "metadata": {}, - "outputs": [], - "source": [ - "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8b74dcee", - "metadata": {}, - "outputs": [], - "source": [ - "# srs path\n", - "res = ezkl.get_srs(srs_path, settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "18c8b7c7", - "metadata": {}, - "outputs": [], - "source": [ - "# now generate the witness file \n", - "\n", - "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", - "assert os.path.isfile(witness_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b1c561a8", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "# HERE WE SETUP THE CIRCUIT PARAMS\n", - "# WE GOT KEYS\n", - "# WE GOT CIRCUIT PARAMETERS\n", - "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", - "\n", - "\n", - "\n", - "res = ezkl.setup(\n", - " compiled_model_path,\n", - " vk_path,\n", - " pk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "assert os.path.isfile(vk_path)\n", - "assert os.path.isfile(pk_path)\n", - "assert os.path.isfile(settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c384cbc8", - "metadata": {}, - "outputs": [], - "source": [ - "# GENERATE A PROOF\n", - "\n", - "\n", - "proof_path = os.path.join('test.pf')\n", - "\n", - "res = ezkl.prove(\n", - " witness_path,\n", - " compiled_model_path,\n", - " pk_path,\n", - " proof_path,\n", - " srs_path,\n", - " \"single\",\n", - " )\n", - "\n", - "print(res)\n", - "assert os.path.isfile(proof_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "76f00d41", - "metadata": {}, - "outputs": [], - "source": [ - "# VERIFY IT\n", - "\n", - "res = ezkl.verify(\n", - " proof_path,\n", - " settings_path,\n", - " vk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "print(\"verified\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.15" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/notebooks/simple_demo_aggregated_proofs.ipynb b/examples/notebooks/simple_demo_aggregated_proofs.ipynb index 5358da09..f50d88cd 100644 --- a/examples/notebooks/simple_demo_aggregated_proofs.ipynb +++ b/examples/notebooks/simple_demo_aggregated_proofs.ipynb @@ -1,396 +1,396 @@ { - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", - "metadata": {}, - "source": [ - "## EZKL Jupyter Notebook Demo (Aggregated Proofs) \n", - "\n", - "Demonstrates how to use EZKL with aggregated proofs" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "95613ee9", - "metadata": {}, - "outputs": [], - "source": [ - "# check if notebook is in colab\n", - "try:\n", - " # install ezkl\n", - " import google.colab\n", - " import subprocess\n", - " import sys\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", - "\n", - "# rely on local installation of ezkl if the notebook is not in colab\n", - "except:\n", - " pass\n", - "\n", - "\n", - "# here we create and (potentially train a model)\n", - "\n", - "# make sure you have the dependencies required here already installed\n", - "from torch import nn\n", - "import ezkl\n", - "import os\n", - "import json\n", - "import torch\n", - "\n", - "\n", - "# Defines the model\n", - "# we got convs, we got relu, we got linear layers\n", - "# What else could one want ????\n", - "\n", - "class MyModel(nn.Module):\n", - " def __init__(self):\n", - " super(MyModel, self).__init__()\n", - "\n", - " self.conv1 = nn.Conv2d(in_channels=1, out_channels=2, kernel_size=5, stride=2)\n", - " self.conv2 = nn.Conv2d(in_channels=2, out_channels=3, kernel_size=5, stride=2)\n", - "\n", - " self.relu = nn.ReLU()\n", - "\n", - " self.d1 = nn.Linear(48, 48)\n", - " self.d2 = nn.Linear(48, 10)\n", - "\n", - " def forward(self, x):\n", - " # 32x1x28x28 => 32x32x26x26\n", - " x = self.conv1(x)\n", - " x = self.relu(x)\n", - " x = self.conv2(x)\n", - " x = self.relu(x)\n", - "\n", - " # flatten => 32 x (32*26*26)\n", - " x = x.flatten(start_dim = 1)\n", - "\n", - " # 32 x (32*26*26) => 32x128\n", - " x = self.d1(x)\n", - " x = self.relu(x)\n", - "\n", - " # logits => 32x10\n", - " logits = self.d2(x)\n", - "\n", - " return logits\n", - "\n", - "\n", - "circuit = MyModel()\n", - "\n", - "# Train the model as you like here (skipped for brevity)\n", - "\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b37637c4", - "metadata": {}, - "outputs": [], - "source": [ - "model_path = os.path.join('network.onnx')\n", - "compiled_model_path = os.path.join('network.compiled')\n", - "pk_path = os.path.join('test.pk')\n", - "vk_path = os.path.join('test.vk')\n", - "proof_path = os.path.join('test.pf')\n", - "settings_path = os.path.join('settings.json')\n", - "srs_path = os.path.join('kzg.srs')\n", - "witness_path = os.path.join('witness.json')\n", - "data_path = os.path.join('input.json')\n", - "aggregate_proof_path = os.path.join('aggr.pf')\n", - "aggregate_vk_path = os.path.join('aggr.vk')\n", - "aggregate_pk_path = os.path.join('aggr.pk')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "82db373a", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "\n", - "# After training, export to onnx (network.onnx) and create a data file (input.json)\n", - "x = 0.1*torch.rand(1,*[1, 28, 28], requires_grad=True)\n", - "\n", - "# Flips the neural net into inference mode\n", - "circuit.eval()\n", - "\n", - " # Export the model\n", - "torch.onnx.export(circuit, # model being run\n", - " x, # model input (or a tuple for multiple inputs)\n", - " model_path, # where to save the model (can be a file or file-like object)\n", - " export_params=True, # store the trained parameter weights inside the model file\n", - " opset_version=10, # the ONNX version to export the model to\n", - " do_constant_folding=True, # whether to execute constant folding for optimization\n", - " input_names = ['input'], # the model's input names\n", - " output_names = ['output'], # the model's output names\n", - " dynamic_axes={'input' : {0 : 'batch_size'}, # variable length axes\n", - " 'output' : {0 : 'batch_size'}})\n", - "\n", - "data_array = ((x).detach().numpy()).reshape([-1]).tolist()\n", - "\n", - "data = dict(input_data = [data_array])\n", - "\n", - " # Serialize data into file:\n", - "json.dump( data, open(data_path, 'w' ))\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d5e374a2", - "metadata": {}, - "outputs": [], - "source": [ - "!RUST_LOG=trace\n", - "# TODO: Dictionary outputs\n", - "res = ezkl.gen_settings(model_path, settings_path)\n", - "assert res == True\n", - "\n", - "res = await ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3aa4f090", - "metadata": {}, - "outputs": [], - "source": [ - "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8b74dcee", - "metadata": {}, - "outputs": [], - "source": [ - "# srs path\n", - "res = ezkl.get_srs(srs_path, settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "18c8b7c7", - "metadata": {}, - "outputs": [], - "source": [ - "# now generate the witness file \n", - "\n", - "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", - "assert os.path.isfile(witness_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b1c561a8", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "# HERE WE SETUP THE CIRCUIT PARAMS\n", - "# WE GOT KEYS\n", - "# WE GOT CIRCUIT PARAMETERS\n", - "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", - "\n", - "\n", - "\n", - "res = ezkl.setup(\n", - " compiled_model_path,\n", - " vk_path,\n", - " pk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "assert os.path.isfile(vk_path)\n", - "assert os.path.isfile(pk_path)\n", - "assert os.path.isfile(settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c384cbc8", - "metadata": {}, - "outputs": [], - "source": [ - "# GENERATE A PROOF\n", - "\n", - "\n", - "proof_path = os.path.join('test.pf')\n", - "\n", - "res = ezkl.prove(\n", - " witness_path,\n", - " compiled_model_path,\n", - " pk_path,\n", - " proof_path,\n", - " srs_path,\n", - " \"for-aggr\", # IMPORTANT NOTE: To produce an aggregated EVM proof you will want to use poseidon for the smaller proofs\n", - " )\n", - "\n", - "print(res)\n", - "assert os.path.isfile(proof_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "76f00d41", - "metadata": {}, - "outputs": [], - "source": [ - "# VERIFY IT\n", - "\n", - "res = ezkl.verify(\n", - " proof_path,\n", - " settings_path,\n", - " vk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "print(\"verified\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0832b909", - "metadata": {}, - "outputs": [], - "source": [ - "# Generate a larger SRS. This is needed for the aggregated proof\n", - "\n", - "large_srs_path = \"large_kzg.srs\"\n", - "res = ezkl.get_srs(large_srs_path, settings_path=None, logrows=21)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c5a64be6", - "metadata": {}, - "outputs": [], - "source": [ - "# Run mock aggregate to check whether the proof works\n", - "# Use mock to check for validity as it takes a shorter time to check compared to a full aggregated proof\n", - "\n", - "res = ezkl.mock_aggregate([proof_path], 21)\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fee8acc6", - "metadata": {}, - "outputs": [], - "source": [ - "# Setup the vk and pk for aggregate\n", - "res = ezkl.setup_aggregate(\n", - " [proof_path],\n", - " aggregate_vk_path,\n", - " aggregate_pk_path,\n", - " large_srs_path,\n", - " 21\n", - ")\n", - "\n", - "assert os.path.isfile(aggregate_vk_path)\n", - "assert os.path.isfile(aggregate_pk_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "171702d3", - "metadata": {}, - "outputs": [], - "source": [ - "# Run aggregate proof\n", - "res = ezkl.aggregate(\n", - " aggregate_proof_path,\n", - " [proof_path],\n", - " aggregate_pk_path,\n", - " large_srs_path,\n", - " \"evm\",\n", - " 21,\n", - " \"safe\"\n", - ")\n", - "\n", - "assert os.path.isfile(aggregate_proof_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "671dfdd5", - "metadata": {}, - "outputs": [], - "source": [ - "# Check if the proof is valid\n", - "res = ezkl.verify_aggr(\n", - " aggregate_proof_path,\n", - " aggregate_vk_path,\n", - " large_srs_path,\n", - " 21,\n", - ")\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "50eba2f4", - "metadata": {}, - "outputs": [], - "source": [ - "# Create a smart contract verifier for the aggregated proof\n", - "\n", - "sol_code_path = os.path.join(\"Verifier.sol\")\n", - "abi_path = os.path.join(\"Verifier_ABI.json\")\n", - "\n", - "res = ezkl.create_evm_verifier_aggr(\n", - " aggregate_vk_path,\n", - " large_srs_path,\n", - " sol_code_path,\n", - " abi_path,\n", - " [settings_path]\n", - ")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", + "metadata": {}, + "source": [ + "## EZKL Jupyter Notebook Demo (Aggregated Proofs) \n", + "\n", + "Demonstrates how to use EZKL with aggregated proofs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "95613ee9", + "metadata": {}, + "outputs": [], + "source": [ + "# check if notebook is in colab\n", + "try:\n", + " # install ezkl\n", + " import google.colab\n", + " import subprocess\n", + " import sys\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", + "\n", + "# rely on local installation of ezkl if the notebook is not in colab\n", + "except:\n", + " pass\n", + "\n", + "\n", + "# here we create and (potentially train a model)\n", + "\n", + "# make sure you have the dependencies required here already installed\n", + "from torch import nn\n", + "import ezkl\n", + "import os\n", + "import json\n", + "import torch\n", + "\n", + "\n", + "# Defines the model\n", + "# we got convs, we got relu, we got linear layers\n", + "# What else could one want ????\n", + "\n", + "class MyModel(nn.Module):\n", + " def __init__(self):\n", + " super(MyModel, self).__init__()\n", + "\n", + " self.conv1 = nn.Conv2d(in_channels=1, out_channels=2, kernel_size=5, stride=2)\n", + " self.conv2 = nn.Conv2d(in_channels=2, out_channels=3, kernel_size=5, stride=2)\n", + "\n", + " self.relu = nn.ReLU()\n", + "\n", + " self.d1 = nn.Linear(48, 48)\n", + " self.d2 = nn.Linear(48, 10)\n", + "\n", + " def forward(self, x):\n", + " # 32x1x28x28 => 32x32x26x26\n", + " x = self.conv1(x)\n", + " x = self.relu(x)\n", + " x = self.conv2(x)\n", + " x = self.relu(x)\n", + "\n", + " # flatten => 32 x (32*26*26)\n", + " x = x.flatten(start_dim = 1)\n", + "\n", + " # 32 x (32*26*26) => 32x128\n", + " x = self.d1(x)\n", + " x = self.relu(x)\n", + "\n", + " # logits => 32x10\n", + " logits = self.d2(x)\n", + "\n", + " return logits\n", + "\n", + "\n", + "circuit = MyModel()\n", + "\n", + "# Train the model as you like here (skipped for brevity)\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b37637c4", + "metadata": {}, + "outputs": [], + "source": [ + "model_path = os.path.join('network.onnx')\n", + "compiled_model_path = os.path.join('network.compiled')\n", + "pk_path = os.path.join('test.pk')\n", + "vk_path = os.path.join('test.vk')\n", + "proof_path = os.path.join('test.pf')\n", + "settings_path = os.path.join('settings.json')\n", + "srs_path = os.path.join('kzg.srs')\n", + "witness_path = os.path.join('witness.json')\n", + "data_path = os.path.join('input.json')\n", + "aggregate_proof_path = os.path.join('aggr.pf')\n", + "aggregate_vk_path = os.path.join('aggr.vk')\n", + "aggregate_pk_path = os.path.join('aggr.pk')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "82db373a", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "\n", + "# After training, export to onnx (network.onnx) and create a data file (input.json)\n", + "x = 0.1*torch.rand(1,*[1, 28, 28], requires_grad=True)\n", + "\n", + "# Flips the neural net into inference mode\n", + "circuit.eval()\n", + "\n", + " # Export the model\n", + "torch.onnx.export(circuit, # model being run\n", + " x, # model input (or a tuple for multiple inputs)\n", + " model_path, # where to save the model (can be a file or file-like object)\n", + " export_params=True, # store the trained parameter weights inside the model file\n", + " opset_version=10, # the ONNX version to export the model to\n", + " do_constant_folding=True, # whether to execute constant folding for optimization\n", + " input_names = ['input'], # the model's input names\n", + " output_names = ['output'], # the model's output names\n", + " dynamic_axes={'input' : {0 : 'batch_size'}, # variable length axes\n", + " 'output' : {0 : 'batch_size'}})\n", + "\n", + "data_array = ((x).detach().numpy()).reshape([-1]).tolist()\n", + "\n", + "data = dict(input_data = [data_array])\n", + "\n", + " # Serialize data into file:\n", + "json.dump( data, open(data_path, 'w' ))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d5e374a2", + "metadata": {}, + "outputs": [], + "source": [ + "!RUST_LOG=trace\n", + "# TODO: Dictionary outputs\n", + "res = ezkl.gen_settings(model_path, settings_path)\n", + "assert res == True\n", + "\n", + "res = ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3aa4f090", + "metadata": {}, + "outputs": [], + "source": [ + "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8b74dcee", + "metadata": {}, + "outputs": [], + "source": [ + "# srs path\n", + "res = ezkl.get_srs(srs_path, settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "18c8b7c7", + "metadata": {}, + "outputs": [], + "source": [ + "# now generate the witness file \n", + "\n", + "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", + "assert os.path.isfile(witness_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b1c561a8", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# HERE WE SETUP THE CIRCUIT PARAMS\n", + "# WE GOT KEYS\n", + "# WE GOT CIRCUIT PARAMETERS\n", + "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", + "\n", + "\n", + "\n", + "res = ezkl.setup(\n", + " compiled_model_path,\n", + " vk_path,\n", + " pk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "assert os.path.isfile(vk_path)\n", + "assert os.path.isfile(pk_path)\n", + "assert os.path.isfile(settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c384cbc8", + "metadata": {}, + "outputs": [], + "source": [ + "# GENERATE A PROOF\n", + "\n", + "\n", + "proof_path = os.path.join('test.pf')\n", + "\n", + "res = ezkl.prove(\n", + " witness_path,\n", + " compiled_model_path,\n", + " pk_path,\n", + " proof_path,\n", + " srs_path,\n", + " \"for-aggr\", # IMPORTANT NOTE: To produce an aggregated EVM proof you will want to use poseidon for the smaller proofs\n", + " )\n", + "\n", + "print(res)\n", + "assert os.path.isfile(proof_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "76f00d41", + "metadata": {}, + "outputs": [], + "source": [ + "# VERIFY IT\n", + "\n", + "res = ezkl.verify(\n", + " proof_path,\n", + " settings_path,\n", + " vk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "print(\"verified\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0832b909", + "metadata": {}, + "outputs": [], + "source": [ + "# Generate a larger SRS. This is needed for the aggregated proof\n", + "\n", + "large_srs_path = \"large_kzg.srs\"\n", + "res = ezkl.get_srs(large_srs_path, settings_path=None, logrows=21)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c5a64be6", + "metadata": {}, + "outputs": [], + "source": [ + "# Run mock aggregate to check whether the proof works\n", + "# Use mock to check for validity as it takes a shorter time to check compared to a full aggregated proof\n", + "\n", + "res = ezkl.mock_aggregate([proof_path], 21)\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fee8acc6", + "metadata": {}, + "outputs": [], + "source": [ + "# Setup the vk and pk for aggregate\n", + "res = ezkl.setup_aggregate(\n", + " [proof_path],\n", + " aggregate_vk_path,\n", + " aggregate_pk_path,\n", + " large_srs_path,\n", + " 21\n", + ")\n", + "\n", + "assert os.path.isfile(aggregate_vk_path)\n", + "assert os.path.isfile(aggregate_pk_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "171702d3", + "metadata": {}, + "outputs": [], + "source": [ + "# Run aggregate proof\n", + "res = ezkl.aggregate(\n", + " aggregate_proof_path,\n", + " [proof_path],\n", + " aggregate_pk_path,\n", + " large_srs_path,\n", + " \"evm\",\n", + " 21,\n", + " \"safe\"\n", + ")\n", + "\n", + "assert os.path.isfile(aggregate_proof_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "671dfdd5", + "metadata": {}, + "outputs": [], + "source": [ + "# Check if the proof is valid\n", + "res = ezkl.verify_aggr(\n", + " aggregate_proof_path,\n", + " aggregate_vk_path,\n", + " large_srs_path,\n", + " 21,\n", + ")\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "50eba2f4", + "metadata": {}, + "outputs": [], + "source": [ + "# Create a smart contract verifier for the aggregated proof\n", + "\n", + "sol_code_path = os.path.join(\"Verifier.sol\")\n", + "abi_path = os.path.join(\"Verifier_ABI.json\")\n", + "\n", + "res = ezkl.create_evm_verifier_aggr(\n", + " aggregate_vk_path,\n", + " large_srs_path,\n", + " sol_code_path,\n", + " abi_path,\n", + " [settings_path]\n", + ")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/notebooks/simple_demo_all_public.ipynb b/examples/notebooks/simple_demo_all_public.ipynb index 84f1bddd..72bd0bf7 100644 --- a/examples/notebooks/simple_demo_all_public.ipynb +++ b/examples/notebooks/simple_demo_all_public.ipynb @@ -1,290 +1,290 @@ { - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", - "metadata": {}, - "source": [ - "## EZKL Jupyter Notebook Demo \n", - "\n", - "Here we demonstrate the use of the EZKL package in a Jupyter notebook whereby all components of the circuit are public or pre-committed to. This is the simplest case of using EZKL (proof of computation)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "95613ee9", - "metadata": {}, - "outputs": [], - "source": [ - "# check if notebook is in colab\n", - "try:\n", - " # install ezkl\n", - " import google.colab\n", - " import subprocess\n", - " import sys\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", - "\n", - "# rely on local installation of ezkl if the notebook is not in colab\n", - "except:\n", - " pass\n", - "\n", - "\n", - "# here we create and (potentially train a model)\n", - "\n", - "# make sure you have the dependencies required here already installed\n", - "from torch import nn\n", - "import ezkl\n", - "import os\n", - "import json\n", - "import torch\n", - "\n", - "\n", - "# Defines the model\n", - "# we got convs, we got relu, we got linear layers\n", - "# What else could one want ????\n", - "\n", - "class MyModel(nn.Module):\n", - " def __init__(self):\n", - " super(MyModel, self).__init__()\n", - "\n", - " self.conv1 = nn.Conv2d(in_channels=1, out_channels=2, kernel_size=5, stride=2)\n", - " self.conv2 = nn.Conv2d(in_channels=2, out_channels=3, kernel_size=5, stride=2)\n", - "\n", - " self.relu = nn.ReLU()\n", - "\n", - " self.d1 = nn.Linear(48, 48)\n", - " self.d2 = nn.Linear(48, 10)\n", - "\n", - " def forward(self, x):\n", - " # 32x1x28x28 => 32x32x26x26\n", - " x = self.conv1(x)\n", - " x = self.relu(x)\n", - " x = self.conv2(x)\n", - " x = self.relu(x)\n", - "\n", - " # flatten => 32 x (32*26*26)\n", - " x = x.flatten(start_dim = 1)\n", - "\n", - " # 32 x (32*26*26) => 32x128\n", - " x = self.d1(x)\n", - " x = self.relu(x)\n", - "\n", - " # logits => 32x10\n", - " logits = self.d2(x)\n", - "\n", - " return logits\n", - "\n", - "\n", - "circuit = MyModel()\n", - "\n", - "# Train the model as you like here (skipped for brevity)\n", - "\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b37637c4", - "metadata": {}, - "outputs": [], - "source": [ - "model_path = os.path.join('network.onnx')\n", - "compiled_model_path = os.path.join('network.compiled')\n", - "pk_path = os.path.join('test.pk')\n", - "vk_path = os.path.join('test.vk')\n", - "settings_path = os.path.join('settings.json')\n", - "srs_path = os.path.join('kzg.srs')\n", - "witness_path = os.path.join('witness.json')\n", - "data_path = os.path.join('input.json')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "82db373a", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "\n", - "# After training, export to onnx (network.onnx) and create a data file (input.json)\n", - "x = 0.1*torch.rand(1,*[1, 28, 28], requires_grad=True)\n", - "\n", - "# Flips the neural net into inference mode\n", - "circuit.eval()\n", - "\n", - " # Export the model\n", - "torch.onnx.export(circuit, # model being run\n", - " x, # model input (or a tuple for multiple inputs)\n", - " model_path, # where to save the model (can be a file or file-like object)\n", - " export_params=True, # store the trained parameter weights inside the model file\n", - " opset_version=10, # the ONNX version to export the model to\n", - " do_constant_folding=True, # whether to execute constant folding for optimization\n", - " input_names = ['input'], # the model's input names\n", - " output_names = ['output'], # the model's output names\n", - " dynamic_axes={'input' : {0 : 'batch_size'}, # variable length axes\n", - " 'output' : {0 : 'batch_size'}})\n", - "\n", - "data_array = ((x).detach().numpy()).reshape([-1]).tolist()\n", - "\n", - "data = dict(input_data = [data_array])\n", - "\n", - " # Serialize data into file:\n", - "json.dump( data, open(data_path, 'w' ))\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d5e374a2", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "py_run_args = ezkl.PyRunArgs()\n", - "py_run_args.input_visibility = \"public\"\n", - "py_run_args.output_visibility = \"public\"\n", - "py_run_args.param_visibility = \"fixed\" # \"fixed\" for params means that the committed to params are used for all proofs\n", - "\n", - "res = ezkl.gen_settings(model_path, settings_path, py_run_args=py_run_args)\n", - "assert res == True\n", - "\n", - "res = await ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3aa4f090", - "metadata": {}, - "outputs": [], - "source": [ - "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8b74dcee", - "metadata": {}, - "outputs": [], - "source": [ - "# srs path\n", - "res = ezkl.get_srs(srs_path, settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "18c8b7c7", - "metadata": {}, - "outputs": [], - "source": [ - "# now generate the witness file \n", - "\n", - "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", - "assert os.path.isfile(witness_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b1c561a8", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "# HERE WE SETUP THE CIRCUIT PARAMS\n", - "# WE GOT KEYS\n", - "# WE GOT CIRCUIT PARAMETERS\n", - "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", - "\n", - "\n", - "\n", - "res = ezkl.setup(\n", - " compiled_model_path,\n", - " vk_path,\n", - " pk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "assert os.path.isfile(vk_path)\n", - "assert os.path.isfile(pk_path)\n", - "assert os.path.isfile(settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c384cbc8", - "metadata": {}, - "outputs": [], - "source": [ - "# GENERATE A PROOF\n", - "\n", - "\n", - "proof_path = os.path.join('test.pf')\n", - "\n", - "res = ezkl.prove(\n", - " witness_path,\n", - " compiled_model_path,\n", - " pk_path,\n", - " proof_path,\n", - " srs_path,\n", - " \"single\",\n", - " )\n", - "\n", - "print(res)\n", - "assert os.path.isfile(proof_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "76f00d41", - "metadata": {}, - "outputs": [], - "source": [ - "# VERIFY IT\n", - "\n", - "res = ezkl.verify(\n", - " proof_path,\n", - " settings_path,\n", - " vk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "print(\"verified\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.15" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", + "metadata": {}, + "source": [ + "## EZKL Jupyter Notebook Demo \n", + "\n", + "Here we demonstrate the use of the EZKL package in a Jupyter notebook whereby all components of the circuit are public or pre-committed to. This is the simplest case of using EZKL (proof of computation)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "95613ee9", + "metadata": {}, + "outputs": [], + "source": [ + "# check if notebook is in colab\n", + "try:\n", + " # install ezkl\n", + " import google.colab\n", + " import subprocess\n", + " import sys\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", + "\n", + "# rely on local installation of ezkl if the notebook is not in colab\n", + "except:\n", + " pass\n", + "\n", + "\n", + "# here we create and (potentially train a model)\n", + "\n", + "# make sure you have the dependencies required here already installed\n", + "from torch import nn\n", + "import ezkl\n", + "import os\n", + "import json\n", + "import torch\n", + "\n", + "\n", + "# Defines the model\n", + "# we got convs, we got relu, we got linear layers\n", + "# What else could one want ????\n", + "\n", + "class MyModel(nn.Module):\n", + " def __init__(self):\n", + " super(MyModel, self).__init__()\n", + "\n", + " self.conv1 = nn.Conv2d(in_channels=1, out_channels=2, kernel_size=5, stride=2)\n", + " self.conv2 = nn.Conv2d(in_channels=2, out_channels=3, kernel_size=5, stride=2)\n", + "\n", + " self.relu = nn.ReLU()\n", + "\n", + " self.d1 = nn.Linear(48, 48)\n", + " self.d2 = nn.Linear(48, 10)\n", + "\n", + " def forward(self, x):\n", + " # 32x1x28x28 => 32x32x26x26\n", + " x = self.conv1(x)\n", + " x = self.relu(x)\n", + " x = self.conv2(x)\n", + " x = self.relu(x)\n", + "\n", + " # flatten => 32 x (32*26*26)\n", + " x = x.flatten(start_dim = 1)\n", + "\n", + " # 32 x (32*26*26) => 32x128\n", + " x = self.d1(x)\n", + " x = self.relu(x)\n", + "\n", + " # logits => 32x10\n", + " logits = self.d2(x)\n", + "\n", + " return logits\n", + "\n", + "\n", + "circuit = MyModel()\n", + "\n", + "# Train the model as you like here (skipped for brevity)\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b37637c4", + "metadata": {}, + "outputs": [], + "source": [ + "model_path = os.path.join('network.onnx')\n", + "compiled_model_path = os.path.join('network.compiled')\n", + "pk_path = os.path.join('test.pk')\n", + "vk_path = os.path.join('test.vk')\n", + "settings_path = os.path.join('settings.json')\n", + "srs_path = os.path.join('kzg.srs')\n", + "witness_path = os.path.join('witness.json')\n", + "data_path = os.path.join('input.json')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "82db373a", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "\n", + "# After training, export to onnx (network.onnx) and create a data file (input.json)\n", + "x = 0.1*torch.rand(1,*[1, 28, 28], requires_grad=True)\n", + "\n", + "# Flips the neural net into inference mode\n", + "circuit.eval()\n", + "\n", + " # Export the model\n", + "torch.onnx.export(circuit, # model being run\n", + " x, # model input (or a tuple for multiple inputs)\n", + " model_path, # where to save the model (can be a file or file-like object)\n", + " export_params=True, # store the trained parameter weights inside the model file\n", + " opset_version=10, # the ONNX version to export the model to\n", + " do_constant_folding=True, # whether to execute constant folding for optimization\n", + " input_names = ['input'], # the model's input names\n", + " output_names = ['output'], # the model's output names\n", + " dynamic_axes={'input' : {0 : 'batch_size'}, # variable length axes\n", + " 'output' : {0 : 'batch_size'}})\n", + "\n", + "data_array = ((x).detach().numpy()).reshape([-1]).tolist()\n", + "\n", + "data = dict(input_data = [data_array])\n", + "\n", + " # Serialize data into file:\n", + "json.dump( data, open(data_path, 'w' ))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d5e374a2", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "py_run_args = ezkl.PyRunArgs()\n", + "py_run_args.input_visibility = \"public\"\n", + "py_run_args.output_visibility = \"public\"\n", + "py_run_args.param_visibility = \"fixed\" # \"fixed\" for params means that the committed to params are used for all proofs\n", + "\n", + "res = ezkl.gen_settings(model_path, settings_path, py_run_args=py_run_args)\n", + "assert res == True\n", + "\n", + "res = ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3aa4f090", + "metadata": {}, + "outputs": [], + "source": [ + "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8b74dcee", + "metadata": {}, + "outputs": [], + "source": [ + "# srs path\n", + "res = ezkl.get_srs(srs_path, settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "18c8b7c7", + "metadata": {}, + "outputs": [], + "source": [ + "# now generate the witness file \n", + "\n", + "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", + "assert os.path.isfile(witness_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b1c561a8", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# HERE WE SETUP THE CIRCUIT PARAMS\n", + "# WE GOT KEYS\n", + "# WE GOT CIRCUIT PARAMETERS\n", + "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", + "\n", + "\n", + "\n", + "res = ezkl.setup(\n", + " compiled_model_path,\n", + " vk_path,\n", + " pk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "assert os.path.isfile(vk_path)\n", + "assert os.path.isfile(pk_path)\n", + "assert os.path.isfile(settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c384cbc8", + "metadata": {}, + "outputs": [], + "source": [ + "# GENERATE A PROOF\n", + "\n", + "\n", + "proof_path = os.path.join('test.pf')\n", + "\n", + "res = ezkl.prove(\n", + " witness_path,\n", + " compiled_model_path,\n", + " pk_path,\n", + " proof_path,\n", + " srs_path,\n", + " \"single\",\n", + " )\n", + "\n", + "print(res)\n", + "assert os.path.isfile(proof_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "76f00d41", + "metadata": {}, + "outputs": [], + "source": [ + "# VERIFY IT\n", + "\n", + "res = ezkl.verify(\n", + " proof_path,\n", + " settings_path,\n", + " vk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "print(\"verified\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/notebooks/simple_demo_public_input_output.ipynb b/examples/notebooks/simple_demo_public_input_output.ipynb index 64bc691b..71452fd7 100644 --- a/examples/notebooks/simple_demo_public_input_output.ipynb +++ b/examples/notebooks/simple_demo_public_input_output.ipynb @@ -1,290 +1,290 @@ { - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", - "metadata": {}, - "source": [ - "## EZKL Jupyter Notebook Demo \n", - "\n", - "Here we demonstrate how to use the EZKL package to run a private network on public data to produce a public output.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "95613ee9", - "metadata": {}, - "outputs": [], - "source": [ - "# check if notebook is in colab\n", - "try:\n", - " # install ezkl\n", - " import google.colab\n", - " import subprocess\n", - " import sys\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", - "\n", - "# rely on local installation of ezkl if the notebook is not in colab\n", - "except:\n", - " pass\n", - "\n", - "\n", - "# here we create and (potentially train a model)\n", - "\n", - "# make sure you have the dependencies required here already installed\n", - "from torch import nn\n", - "import ezkl\n", - "import os\n", - "import json\n", - "import torch\n", - "\n", - "\n", - "# Defines the model\n", - "# we got convs, we got relu, we got linear layers\n", - "# What else could one want ????\n", - "\n", - "class MyModel(nn.Module):\n", - " def __init__(self):\n", - " super(MyModel, self).__init__()\n", - "\n", - " self.conv1 = nn.Conv2d(in_channels=1, out_channels=2, kernel_size=5, stride=2)\n", - " self.conv2 = nn.Conv2d(in_channels=2, out_channels=3, kernel_size=5, stride=2)\n", - "\n", - " self.relu = nn.ReLU()\n", - "\n", - " self.d1 = nn.Linear(48, 48)\n", - " self.d2 = nn.Linear(48, 10)\n", - "\n", - " def forward(self, x):\n", - " # 32x1x28x28 => 32x32x26x26\n", - " x = self.conv1(x)\n", - " x = self.relu(x)\n", - " x = self.conv2(x)\n", - " x = self.relu(x)\n", - "\n", - " # flatten => 32 x (32*26*26)\n", - " x = x.flatten(start_dim = 1)\n", - "\n", - " # 32 x (32*26*26) => 32x128\n", - " x = self.d1(x)\n", - " x = self.relu(x)\n", - "\n", - " # logits => 32x10\n", - " logits = self.d2(x)\n", - "\n", - " return logits\n", - "\n", - "\n", - "circuit = MyModel()\n", - "\n", - "# Train the model as you like here (skipped for brevity)\n", - "\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b37637c4", - "metadata": {}, - "outputs": [], - "source": [ - "model_path = os.path.join('network.onnx')\n", - "compiled_model_path = os.path.join('network.compiled')\n", - "pk_path = os.path.join('test.pk')\n", - "vk_path = os.path.join('test.vk')\n", - "settings_path = os.path.join('settings.json')\n", - "srs_path = os.path.join('kzg.srs')\n", - "witness_path = os.path.join('witness.json')\n", - "data_path = os.path.join('input.json')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "82db373a", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "\n", - "# After training, export to onnx (network.onnx) and create a data file (input.json)\n", - "x = 0.1*torch.rand(1,*[1, 28, 28], requires_grad=True)\n", - "\n", - "# Flips the neural net into inference mode\n", - "circuit.eval()\n", - "\n", - " # Export the model\n", - "torch.onnx.export(circuit, # model being run\n", - " x, # model input (or a tuple for multiple inputs)\n", - " model_path, # where to save the model (can be a file or file-like object)\n", - " export_params=True, # store the trained parameter weights inside the model file\n", - " opset_version=10, # the ONNX version to export the model to\n", - " do_constant_folding=True, # whether to execute constant folding for optimization\n", - " input_names = ['input'], # the model's input names\n", - " output_names = ['output'], # the model's output names\n", - " dynamic_axes={'input' : {0 : 'batch_size'}, # variable length axes\n", - " 'output' : {0 : 'batch_size'}})\n", - "\n", - "data_array = ((x).detach().numpy()).reshape([-1]).tolist()\n", - "\n", - "data = dict(input_data = [data_array])\n", - "\n", - " # Serialize data into file:\n", - "json.dump( data, open(data_path, 'w' ))\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d5e374a2", - "metadata": {}, - "outputs": [], - "source": [ - "py_run_args = ezkl.PyRunArgs()\n", - "py_run_args.input_visibility = \"public\"\n", - "py_run_args.output_visibility = \"public\"\n", - "py_run_args.param_visibility = \"private\" # private by default\n", - "\n", - "res = ezkl.gen_settings(model_path, settings_path, py_run_args=py_run_args)\n", - "\n", - "assert res == True\n", - "\n", - "res = await ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3aa4f090", - "metadata": {}, - "outputs": [], - "source": [ - "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8b74dcee", - "metadata": {}, - "outputs": [], - "source": [ - "# srs path\n", - "res = ezkl.get_srs(srs_path, settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "18c8b7c7", - "metadata": {}, - "outputs": [], - "source": [ - "# now generate the witness file \n", - "\n", - "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", - "assert os.path.isfile(witness_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b1c561a8", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "# HERE WE SETUP THE CIRCUIT PARAMS\n", - "# WE GOT KEYS\n", - "# WE GOT CIRCUIT PARAMETERS\n", - "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", - "\n", - "\n", - "\n", - "res = ezkl.setup(\n", - " compiled_model_path,\n", - " vk_path,\n", - " pk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "assert os.path.isfile(vk_path)\n", - "assert os.path.isfile(pk_path)\n", - "assert os.path.isfile(settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c384cbc8", - "metadata": {}, - "outputs": [], - "source": [ - "# GENERATE A PROOF\n", - "\n", - "\n", - "proof_path = os.path.join('test.pf')\n", - "\n", - "res = ezkl.prove(\n", - " witness_path,\n", - " compiled_model_path,\n", - " pk_path,\n", - " proof_path,\n", - " srs_path,\n", - " \"single\",\n", - " )\n", - "\n", - "print(res)\n", - "assert os.path.isfile(proof_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "76f00d41", - "metadata": {}, - "outputs": [], - "source": [ - "# VERIFY IT\n", - "\n", - "res = ezkl.verify(\n", - " proof_path,\n", - " settings_path,\n", - " vk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "print(\"verified\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.15" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", + "metadata": {}, + "source": [ + "## EZKL Jupyter Notebook Demo \n", + "\n", + "Here we demonstrate how to use the EZKL package to run a private network on public data to produce a public output.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "95613ee9", + "metadata": {}, + "outputs": [], + "source": [ + "# check if notebook is in colab\n", + "try:\n", + " # install ezkl\n", + " import google.colab\n", + " import subprocess\n", + " import sys\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", + "\n", + "# rely on local installation of ezkl if the notebook is not in colab\n", + "except:\n", + " pass\n", + "\n", + "\n", + "# here we create and (potentially train a model)\n", + "\n", + "# make sure you have the dependencies required here already installed\n", + "from torch import nn\n", + "import ezkl\n", + "import os\n", + "import json\n", + "import torch\n", + "\n", + "\n", + "# Defines the model\n", + "# we got convs, we got relu, we got linear layers\n", + "# What else could one want ????\n", + "\n", + "class MyModel(nn.Module):\n", + " def __init__(self):\n", + " super(MyModel, self).__init__()\n", + "\n", + " self.conv1 = nn.Conv2d(in_channels=1, out_channels=2, kernel_size=5, stride=2)\n", + " self.conv2 = nn.Conv2d(in_channels=2, out_channels=3, kernel_size=5, stride=2)\n", + "\n", + " self.relu = nn.ReLU()\n", + "\n", + " self.d1 = nn.Linear(48, 48)\n", + " self.d2 = nn.Linear(48, 10)\n", + "\n", + " def forward(self, x):\n", + " # 32x1x28x28 => 32x32x26x26\n", + " x = self.conv1(x)\n", + " x = self.relu(x)\n", + " x = self.conv2(x)\n", + " x = self.relu(x)\n", + "\n", + " # flatten => 32 x (32*26*26)\n", + " x = x.flatten(start_dim = 1)\n", + "\n", + " # 32 x (32*26*26) => 32x128\n", + " x = self.d1(x)\n", + " x = self.relu(x)\n", + "\n", + " # logits => 32x10\n", + " logits = self.d2(x)\n", + "\n", + " return logits\n", + "\n", + "\n", + "circuit = MyModel()\n", + "\n", + "# Train the model as you like here (skipped for brevity)\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b37637c4", + "metadata": {}, + "outputs": [], + "source": [ + "model_path = os.path.join('network.onnx')\n", + "compiled_model_path = os.path.join('network.compiled')\n", + "pk_path = os.path.join('test.pk')\n", + "vk_path = os.path.join('test.vk')\n", + "settings_path = os.path.join('settings.json')\n", + "srs_path = os.path.join('kzg.srs')\n", + "witness_path = os.path.join('witness.json')\n", + "data_path = os.path.join('input.json')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "82db373a", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "\n", + "# After training, export to onnx (network.onnx) and create a data file (input.json)\n", + "x = 0.1*torch.rand(1,*[1, 28, 28], requires_grad=True)\n", + "\n", + "# Flips the neural net into inference mode\n", + "circuit.eval()\n", + "\n", + " # Export the model\n", + "torch.onnx.export(circuit, # model being run\n", + " x, # model input (or a tuple for multiple inputs)\n", + " model_path, # where to save the model (can be a file or file-like object)\n", + " export_params=True, # store the trained parameter weights inside the model file\n", + " opset_version=10, # the ONNX version to export the model to\n", + " do_constant_folding=True, # whether to execute constant folding for optimization\n", + " input_names = ['input'], # the model's input names\n", + " output_names = ['output'], # the model's output names\n", + " dynamic_axes={'input' : {0 : 'batch_size'}, # variable length axes\n", + " 'output' : {0 : 'batch_size'}})\n", + "\n", + "data_array = ((x).detach().numpy()).reshape([-1]).tolist()\n", + "\n", + "data = dict(input_data = [data_array])\n", + "\n", + " # Serialize data into file:\n", + "json.dump( data, open(data_path, 'w' ))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d5e374a2", + "metadata": {}, + "outputs": [], + "source": [ + "py_run_args = ezkl.PyRunArgs()\n", + "py_run_args.input_visibility = \"public\"\n", + "py_run_args.output_visibility = \"public\"\n", + "py_run_args.param_visibility = \"private\" # private by default\n", + "\n", + "res = ezkl.gen_settings(model_path, settings_path, py_run_args=py_run_args)\n", + "\n", + "assert res == True\n", + "\n", + "res = ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3aa4f090", + "metadata": {}, + "outputs": [], + "source": [ + "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8b74dcee", + "metadata": {}, + "outputs": [], + "source": [ + "# srs path\n", + "res = ezkl.get_srs(srs_path, settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "18c8b7c7", + "metadata": {}, + "outputs": [], + "source": [ + "# now generate the witness file \n", + "\n", + "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", + "assert os.path.isfile(witness_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b1c561a8", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# HERE WE SETUP THE CIRCUIT PARAMS\n", + "# WE GOT KEYS\n", + "# WE GOT CIRCUIT PARAMETERS\n", + "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", + "\n", + "\n", + "\n", + "res = ezkl.setup(\n", + " compiled_model_path,\n", + " vk_path,\n", + " pk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "assert os.path.isfile(vk_path)\n", + "assert os.path.isfile(pk_path)\n", + "assert os.path.isfile(settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c384cbc8", + "metadata": {}, + "outputs": [], + "source": [ + "# GENERATE A PROOF\n", + "\n", + "\n", + "proof_path = os.path.join('test.pf')\n", + "\n", + "res = ezkl.prove(\n", + " witness_path,\n", + " compiled_model_path,\n", + " pk_path,\n", + " proof_path,\n", + " srs_path,\n", + " \"single\",\n", + " )\n", + "\n", + "print(res)\n", + "assert os.path.isfile(proof_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "76f00d41", + "metadata": {}, + "outputs": [], + "source": [ + "# VERIFY IT\n", + "\n", + "res = ezkl.verify(\n", + " proof_path,\n", + " settings_path,\n", + " vk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "print(\"verified\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/notebooks/simple_demo_public_network_output.ipynb b/examples/notebooks/simple_demo_public_network_output.ipynb index 268f50a2..bc68279d 100644 --- a/examples/notebooks/simple_demo_public_network_output.ipynb +++ b/examples/notebooks/simple_demo_public_network_output.ipynb @@ -1,290 +1,290 @@ { - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", - "metadata": {}, - "source": [ - "## EZKL Jupyter Notebook Demo \n", - "\n", - "Here we demonstrate how to use the EZKL package to run a publicly known / committted to network on some private data, producing a public output.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "95613ee9", - "metadata": {}, - "outputs": [], - "source": [ - "# check if notebook is in colab\n", - "try:\n", - " # install ezkl\n", - " import google.colab\n", - " import subprocess\n", - " import sys\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", - "\n", - "# rely on local installation of ezkl if the notebook is not in colab\n", - "except:\n", - " pass\n", - "\n", - "\n", - "# here we create and (potentially train a model)\n", - "\n", - "# make sure you have the dependencies required here already installed\n", - "from torch import nn\n", - "import ezkl\n", - "import os\n", - "import json\n", - "import torch\n", - "\n", - "\n", - "# Defines the model\n", - "# we got convs, we got relu, we got linear layers\n", - "# What else could one want ????\n", - "\n", - "class MyModel(nn.Module):\n", - " def __init__(self):\n", - " super(MyModel, self).__init__()\n", - "\n", - " self.conv1 = nn.Conv2d(in_channels=1, out_channels=2, kernel_size=5, stride=2)\n", - " self.conv2 = nn.Conv2d(in_channels=2, out_channels=3, kernel_size=5, stride=2)\n", - "\n", - " self.relu = nn.ReLU()\n", - "\n", - " self.d1 = nn.Linear(48, 48)\n", - " self.d2 = nn.Linear(48, 10)\n", - "\n", - " def forward(self, x):\n", - " # 32x1x28x28 => 32x32x26x26\n", - " x = self.conv1(x)\n", - " x = self.relu(x)\n", - " x = self.conv2(x)\n", - " x = self.relu(x)\n", - "\n", - " # flatten => 32 x (32*26*26)\n", - " x = x.flatten(start_dim = 1)\n", - "\n", - " # 32 x (32*26*26) => 32x128\n", - " x = self.d1(x)\n", - " x = self.relu(x)\n", - "\n", - " # logits => 32x10\n", - " logits = self.d2(x)\n", - "\n", - " return logits\n", - "\n", - "\n", - "circuit = MyModel()\n", - "\n", - "# Train the model as you like here (skipped for brevity)\n", - "\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b37637c4", - "metadata": {}, - "outputs": [], - "source": [ - "model_path = os.path.join('network.onnx')\n", - "compiled_model_path = os.path.join('network.compiled')\n", - "pk_path = os.path.join('test.pk')\n", - "vk_path = os.path.join('test.vk')\n", - "settings_path = os.path.join('settings.json')\n", - "srs_path = os.path.join('kzg.srs')\n", - "witness_path = os.path.join('witness.json')\n", - "data_path = os.path.join('input.json')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "82db373a", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "\n", - "# After training, export to onnx (network.onnx) and create a data file (input.json)\n", - "x = 0.1*torch.rand(1,*[1, 28, 28], requires_grad=True)\n", - "\n", - "# Flips the neural net into inference mode\n", - "circuit.eval()\n", - "\n", - " # Export the model\n", - "torch.onnx.export(circuit, # model being run\n", - " x, # model input (or a tuple for multiple inputs)\n", - " model_path, # where to save the model (can be a file or file-like object)\n", - " export_params=True, # store the trained parameter weights inside the model file\n", - " opset_version=10, # the ONNX version to export the model to\n", - " do_constant_folding=True, # whether to execute constant folding for optimization\n", - " input_names = ['input'], # the model's input names\n", - " output_names = ['output'], # the model's output names\n", - " dynamic_axes={'input' : {0 : 'batch_size'}, # variable length axes\n", - " 'output' : {0 : 'batch_size'}})\n", - "\n", - "data_array = ((x).detach().numpy()).reshape([-1]).tolist()\n", - "\n", - "data = dict(input_data = [data_array])\n", - "\n", - " # Serialize data into file:\n", - "json.dump( data, open(data_path, 'w' ))\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d5e374a2", - "metadata": {}, - "outputs": [], - "source": [ - "py_run_args = ezkl.PyRunArgs()\n", - "py_run_args.input_visibility = \"private\"\n", - "py_run_args.output_visibility = \"public\"\n", - "py_run_args.param_visibility = \"fixed\" # private by default\n", - "\n", - "res = ezkl.gen_settings(model_path, settings_path, py_run_args=py_run_args)\n", - "\n", - "assert res == True\n", - "\n", - "res = await ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3aa4f090", - "metadata": {}, - "outputs": [], - "source": [ - "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8b74dcee", - "metadata": {}, - "outputs": [], - "source": [ - "# srs path\n", - "res = ezkl.get_srs(srs_path, settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "18c8b7c7", - "metadata": {}, - "outputs": [], - "source": [ - "# now generate the witness file \n", - "\n", - "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", - "assert os.path.isfile(witness_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b1c561a8", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "# HERE WE SETUP THE CIRCUIT PARAMS\n", - "# WE GOT KEYS\n", - "# WE GOT CIRCUIT PARAMETERS\n", - "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", - "\n", - "\n", - "\n", - "res = ezkl.setup(\n", - " compiled_model_path,\n", - " vk_path,\n", - " pk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "assert os.path.isfile(vk_path)\n", - "assert os.path.isfile(pk_path)\n", - "assert os.path.isfile(settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c384cbc8", - "metadata": {}, - "outputs": [], - "source": [ - "# GENERATE A PROOF\n", - "\n", - "\n", - "proof_path = os.path.join('test.pf')\n", - "\n", - "res = ezkl.prove(\n", - " witness_path,\n", - " compiled_model_path,\n", - " pk_path,\n", - " proof_path,\n", - " srs_path,\n", - " \"single\",\n", - " )\n", - "\n", - "print(res)\n", - "assert os.path.isfile(proof_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "76f00d41", - "metadata": {}, - "outputs": [], - "source": [ - "# VERIFY IT\n", - "\n", - "res = ezkl.verify(\n", - " proof_path,\n", - " settings_path,\n", - " vk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "print(\"verified\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.15" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", + "metadata": {}, + "source": [ + "## EZKL Jupyter Notebook Demo \n", + "\n", + "Here we demonstrate how to use the EZKL package to run a publicly known / committted to network on some private data, producing a public output.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "95613ee9", + "metadata": {}, + "outputs": [], + "source": [ + "# check if notebook is in colab\n", + "try:\n", + " # install ezkl\n", + " import google.colab\n", + " import subprocess\n", + " import sys\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", + "\n", + "# rely on local installation of ezkl if the notebook is not in colab\n", + "except:\n", + " pass\n", + "\n", + "\n", + "# here we create and (potentially train a model)\n", + "\n", + "# make sure you have the dependencies required here already installed\n", + "from torch import nn\n", + "import ezkl\n", + "import os\n", + "import json\n", + "import torch\n", + "\n", + "\n", + "# Defines the model\n", + "# we got convs, we got relu, we got linear layers\n", + "# What else could one want ????\n", + "\n", + "class MyModel(nn.Module):\n", + " def __init__(self):\n", + " super(MyModel, self).__init__()\n", + "\n", + " self.conv1 = nn.Conv2d(in_channels=1, out_channels=2, kernel_size=5, stride=2)\n", + " self.conv2 = nn.Conv2d(in_channels=2, out_channels=3, kernel_size=5, stride=2)\n", + "\n", + " self.relu = nn.ReLU()\n", + "\n", + " self.d1 = nn.Linear(48, 48)\n", + " self.d2 = nn.Linear(48, 10)\n", + "\n", + " def forward(self, x):\n", + " # 32x1x28x28 => 32x32x26x26\n", + " x = self.conv1(x)\n", + " x = self.relu(x)\n", + " x = self.conv2(x)\n", + " x = self.relu(x)\n", + "\n", + " # flatten => 32 x (32*26*26)\n", + " x = x.flatten(start_dim = 1)\n", + "\n", + " # 32 x (32*26*26) => 32x128\n", + " x = self.d1(x)\n", + " x = self.relu(x)\n", + "\n", + " # logits => 32x10\n", + " logits = self.d2(x)\n", + "\n", + " return logits\n", + "\n", + "\n", + "circuit = MyModel()\n", + "\n", + "# Train the model as you like here (skipped for brevity)\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b37637c4", + "metadata": {}, + "outputs": [], + "source": [ + "model_path = os.path.join('network.onnx')\n", + "compiled_model_path = os.path.join('network.compiled')\n", + "pk_path = os.path.join('test.pk')\n", + "vk_path = os.path.join('test.vk')\n", + "settings_path = os.path.join('settings.json')\n", + "srs_path = os.path.join('kzg.srs')\n", + "witness_path = os.path.join('witness.json')\n", + "data_path = os.path.join('input.json')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "82db373a", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "\n", + "# After training, export to onnx (network.onnx) and create a data file (input.json)\n", + "x = 0.1*torch.rand(1,*[1, 28, 28], requires_grad=True)\n", + "\n", + "# Flips the neural net into inference mode\n", + "circuit.eval()\n", + "\n", + " # Export the model\n", + "torch.onnx.export(circuit, # model being run\n", + " x, # model input (or a tuple for multiple inputs)\n", + " model_path, # where to save the model (can be a file or file-like object)\n", + " export_params=True, # store the trained parameter weights inside the model file\n", + " opset_version=10, # the ONNX version to export the model to\n", + " do_constant_folding=True, # whether to execute constant folding for optimization\n", + " input_names = ['input'], # the model's input names\n", + " output_names = ['output'], # the model's output names\n", + " dynamic_axes={'input' : {0 : 'batch_size'}, # variable length axes\n", + " 'output' : {0 : 'batch_size'}})\n", + "\n", + "data_array = ((x).detach().numpy()).reshape([-1]).tolist()\n", + "\n", + "data = dict(input_data = [data_array])\n", + "\n", + " # Serialize data into file:\n", + "json.dump( data, open(data_path, 'w' ))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d5e374a2", + "metadata": {}, + "outputs": [], + "source": [ + "py_run_args = ezkl.PyRunArgs()\n", + "py_run_args.input_visibility = \"private\"\n", + "py_run_args.output_visibility = \"public\"\n", + "py_run_args.param_visibility = \"fixed\" # private by default\n", + "\n", + "res = ezkl.gen_settings(model_path, settings_path, py_run_args=py_run_args)\n", + "\n", + "assert res == True\n", + "\n", + "res = ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3aa4f090", + "metadata": {}, + "outputs": [], + "source": [ + "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8b74dcee", + "metadata": {}, + "outputs": [], + "source": [ + "# srs path\n", + "res = ezkl.get_srs(srs_path, settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "18c8b7c7", + "metadata": {}, + "outputs": [], + "source": [ + "# now generate the witness file \n", + "\n", + "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", + "assert os.path.isfile(witness_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b1c561a8", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# HERE WE SETUP THE CIRCUIT PARAMS\n", + "# WE GOT KEYS\n", + "# WE GOT CIRCUIT PARAMETERS\n", + "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", + "\n", + "\n", + "\n", + "res = ezkl.setup(\n", + " compiled_model_path,\n", + " vk_path,\n", + " pk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "assert os.path.isfile(vk_path)\n", + "assert os.path.isfile(pk_path)\n", + "assert os.path.isfile(settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c384cbc8", + "metadata": {}, + "outputs": [], + "source": [ + "# GENERATE A PROOF\n", + "\n", + "\n", + "proof_path = os.path.join('test.pf')\n", + "\n", + "res = ezkl.prove(\n", + " witness_path,\n", + " compiled_model_path,\n", + " pk_path,\n", + " proof_path,\n", + " srs_path,\n", + " \"single\",\n", + " )\n", + "\n", + "print(res)\n", + "assert os.path.isfile(proof_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "76f00d41", + "metadata": {}, + "outputs": [], + "source": [ + "# VERIFY IT\n", + "\n", + "res = ezkl.verify(\n", + " proof_path,\n", + " settings_path,\n", + " vk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "print(\"verified\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/notebooks/sklearn_mlp.ipynb b/examples/notebooks/sklearn_mlp.ipynb index 4680469e..cbf6abba 100644 --- a/examples/notebooks/sklearn_mlp.ipynb +++ b/examples/notebooks/sklearn_mlp.ipynb @@ -1,269 +1,269 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", - "metadata": {}, - "source": [ - "## Sklearn MLP to ONNX\n", - "\n", - "\n", - "Sklearn based models are slightly finicky to get into a suitable onnx format. \n", - "\n", - "This notebook showcases how to do that using the `hummingbird-ml` python package ! " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "95613ee9", - "metadata": {}, - "outputs": [], - "source": [ - "# check if notebook is in colab\n", - "try:\n", - " # install ezkl\n", - " import google.colab\n", - " import subprocess\n", - " import sys\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"hummingbird-ml\"])\n", - "\n", - "# rely on local installation of ezkl if the notebook is not in colab\n", - "except:\n", - " pass\n", - "\n", - "\n", - "# here we create and (potentially train a model)\n", - "\n", - "# make sure you have the dependencies required here already installed\n", - "import json\n", - "import numpy as np\n", - "from sklearn.datasets import load_iris\n", - "from sklearn.model_selection import train_test_split\n", - "from sklearn.neural_network import MLPClassifier\n", - "from hummingbird.ml import convert\n", - "import torch\n", - "import ezkl\n", - "import os\n", - "\n", - "\n", - "\n", - "iris = load_iris()\n", - "X, y = iris.data, iris.target\n", - "X = X.astype(np.float32)\n", - "X_train, X_test, y_train, y_test = train_test_split(X, y)\n", - "clr = MLPClassifier()\n", - "clr.fit(X_train, y_train)\n", - "\n", - "circuit = convert(clr, \"torch\", X_test[:1]).model\n", - "\n", - "\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b37637c4", - "metadata": {}, - "outputs": [], - "source": [ - "model_path = os.path.join('network.onnx')\n", - "compiled_model_path = os.path.join('network.compiled')\n", - "pk_path = os.path.join('test.pk')\n", - "vk_path = os.path.join('test.vk')\n", - "settings_path = os.path.join('settings.json')\n", - "srs_path = os.path.join('kzg.srs')\n", - "witness_path = os.path.join('witness.json')\n", - "data_path = os.path.join('input.json')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "82db373a", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "\n", - "# export to onnx format\n", - "# !!!!!!!!!!!!!!!!! This will flash a warning but it is fine !!!!!!!!!!!!!!!!!!!!!\n", - "\n", - "# Input to the model\n", - "shape = X_train.shape[1:]\n", - "x = torch.rand(1, *shape, requires_grad=True)\n", - "torch_out = circuit(x)\n", - "# Export the model\n", - "torch.onnx.export(circuit, # model being run\n", - " # model input (or a tuple for multiple inputs)\n", - " x,\n", - " # where to save the model (can be a file or file-like object)\n", - " \"network.onnx\",\n", - " export_params=True, # store the trained parameter weights inside the model file\n", - " opset_version=10, # the ONNX version to export the model to\n", - " do_constant_folding=True, # whether to execute constant folding for optimization\n", - " input_names=['input'], # the model's input names\n", - " output_names=['output'], # the model's output names\n", - " dynamic_axes={'input': {0: 'batch_size'}, # variable length axes\n", - " 'output': {0: 'batch_size'}})\n", - "\n", - "d = ((x).detach().numpy()).reshape([-1]).tolist()\n", - "\n", - "data = dict(input_shapes=[shape],\n", - " input_data=[d],\n", - " output_data=[((o).detach().numpy()).reshape([-1]).tolist() for o in torch_out])\n", - "\n", - "# Serialize data into file:\n", - "json.dump(data, open(\"input.json\", 'w'))\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d5e374a2", - "metadata": {}, - "outputs": [], - "source": [ - "!RUST_LOG=trace\n", - "# TODO: Dictionary outputs\n", - "res = ezkl.gen_settings(model_path, settings_path)\n", - "assert res == True\n", - "\n", - "res = await ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3aa4f090", - "metadata": {}, - "outputs": [], - "source": [ - "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8b74dcee", - "metadata": {}, - "outputs": [], - "source": [ - "# srs path\n", - "res = ezkl.get_srs(srs_path, settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "18c8b7c7", - "metadata": {}, - "outputs": [], - "source": [ - "# now generate the witness file \n", - "\n", - "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", - "assert os.path.isfile(witness_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b1c561a8", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "# HERE WE SETUP THE CIRCUIT PARAMS\n", - "# WE GOT KEYS\n", - "# WE GOT CIRCUIT PARAMETERS\n", - "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", - "\n", - "\n", - "\n", - "res = ezkl.setup(\n", - " compiled_model_path,\n", - " vk_path,\n", - " pk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "assert os.path.isfile(vk_path)\n", - "assert os.path.isfile(pk_path)\n", - "assert os.path.isfile(settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c384cbc8", - "metadata": {}, - "outputs": [], - "source": [ - "# GENERATE A PROOF\n", - "\n", - "\n", - "proof_path = os.path.join('test.pf')\n", - "\n", - "res = ezkl.prove(\n", - " witness_path,\n", - " compiled_model_path,\n", - " pk_path,\n", - " proof_path,\n", - " srs_path,\n", - " \"single\",\n", - " )\n", - "\n", - "print(res)\n", - "assert os.path.isfile(proof_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "76f00d41", - "metadata": {}, - "outputs": [], - "source": [ - "# VERIFY IT\n", - "\n", - "res = ezkl.verify(\n", - " proof_path,\n", - " settings_path,\n", - " vk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "print(\"verified\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.15" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "cells": [ + { + "cell_type": "markdown", + "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", + "metadata": {}, + "source": [ + "## Sklearn MLP to ONNX\n", + "\n", + "\n", + "Sklearn based models are slightly finicky to get into a suitable onnx format. \n", + "\n", + "This notebook showcases how to do that using the `hummingbird-ml` python package ! " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "95613ee9", + "metadata": {}, + "outputs": [], + "source": [ + "# check if notebook is in colab\n", + "try:\n", + " # install ezkl\n", + " import google.colab\n", + " import subprocess\n", + " import sys\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"hummingbird-ml\"])\n", + "\n", + "# rely on local installation of ezkl if the notebook is not in colab\n", + "except:\n", + " pass\n", + "\n", + "\n", + "# here we create and (potentially train a model)\n", + "\n", + "# make sure you have the dependencies required here already installed\n", + "import json\n", + "import numpy as np\n", + "from sklearn.datasets import load_iris\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.neural_network import MLPClassifier\n", + "from hummingbird.ml import convert\n", + "import torch\n", + "import ezkl\n", + "import os\n", + "\n", + "\n", + "\n", + "iris = load_iris()\n", + "X, y = iris.data, iris.target\n", + "X = X.astype(np.float32)\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y)\n", + "clr = MLPClassifier()\n", + "clr.fit(X_train, y_train)\n", + "\n", + "circuit = convert(clr, \"torch\", X_test[:1]).model\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b37637c4", + "metadata": {}, + "outputs": [], + "source": [ + "model_path = os.path.join('network.onnx')\n", + "compiled_model_path = os.path.join('network.compiled')\n", + "pk_path = os.path.join('test.pk')\n", + "vk_path = os.path.join('test.vk')\n", + "settings_path = os.path.join('settings.json')\n", + "srs_path = os.path.join('kzg.srs')\n", + "witness_path = os.path.join('witness.json')\n", + "data_path = os.path.join('input.json')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "82db373a", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "\n", + "# export to onnx format\n", + "# !!!!!!!!!!!!!!!!! This will flash a warning but it is fine !!!!!!!!!!!!!!!!!!!!!\n", + "\n", + "# Input to the model\n", + "shape = X_train.shape[1:]\n", + "x = torch.rand(1, *shape, requires_grad=True)\n", + "torch_out = circuit(x)\n", + "# Export the model\n", + "torch.onnx.export(circuit, # model being run\n", + " # model input (or a tuple for multiple inputs)\n", + " x,\n", + " # where to save the model (can be a file or file-like object)\n", + " \"network.onnx\",\n", + " export_params=True, # store the trained parameter weights inside the model file\n", + " opset_version=10, # the ONNX version to export the model to\n", + " do_constant_folding=True, # whether to execute constant folding for optimization\n", + " input_names=['input'], # the model's input names\n", + " output_names=['output'], # the model's output names\n", + " dynamic_axes={'input': {0: 'batch_size'}, # variable length axes\n", + " 'output': {0: 'batch_size'}})\n", + "\n", + "d = ((x).detach().numpy()).reshape([-1]).tolist()\n", + "\n", + "data = dict(input_shapes=[shape],\n", + " input_data=[d],\n", + " output_data=[((o).detach().numpy()).reshape([-1]).tolist() for o in torch_out])\n", + "\n", + "# Serialize data into file:\n", + "json.dump(data, open(\"input.json\", 'w'))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d5e374a2", + "metadata": {}, + "outputs": [], + "source": [ + "!RUST_LOG=trace\n", + "# TODO: Dictionary outputs\n", + "res = ezkl.gen_settings(model_path, settings_path)\n", + "assert res == True\n", + "\n", + "res = ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3aa4f090", + "metadata": {}, + "outputs": [], + "source": [ + "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8b74dcee", + "metadata": {}, + "outputs": [], + "source": [ + "# srs path\n", + "res = ezkl.get_srs(srs_path, settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "18c8b7c7", + "metadata": {}, + "outputs": [], + "source": [ + "# now generate the witness file \n", + "\n", + "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", + "assert os.path.isfile(witness_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b1c561a8", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# HERE WE SETUP THE CIRCUIT PARAMS\n", + "# WE GOT KEYS\n", + "# WE GOT CIRCUIT PARAMETERS\n", + "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", + "\n", + "\n", + "\n", + "res = ezkl.setup(\n", + " compiled_model_path,\n", + " vk_path,\n", + " pk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "assert os.path.isfile(vk_path)\n", + "assert os.path.isfile(pk_path)\n", + "assert os.path.isfile(settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c384cbc8", + "metadata": {}, + "outputs": [], + "source": [ + "# GENERATE A PROOF\n", + "\n", + "\n", + "proof_path = os.path.join('test.pf')\n", + "\n", + "res = ezkl.prove(\n", + " witness_path,\n", + " compiled_model_path,\n", + " pk_path,\n", + " proof_path,\n", + " srs_path,\n", + " \"single\",\n", + " )\n", + "\n", + "print(res)\n", + "assert os.path.isfile(proof_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "76f00d41", + "metadata": {}, + "outputs": [], + "source": [ + "# VERIFY IT\n", + "\n", + "res = ezkl.verify(\n", + " proof_path,\n", + " settings_path,\n", + " vk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "print(\"verified\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/notebooks/stacked_regression.ipynb b/examples/notebooks/stacked_regression.ipynb index fa7dbf50..a0a5503c 100644 --- a/examples/notebooks/stacked_regression.ipynb +++ b/examples/notebooks/stacked_regression.ipynb @@ -1,304 +1,304 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", - "metadata": {}, - "source": [ - "## Stacked Regression\n", - "\n", - "\n", - "Sklearn based models are slightly finicky to get into a suitable onnx format.\n", - "This notebook showcases how to do so using the `hummingbird-ml` python package !\n", - "\n", - "We're going to combine a few models to create a stacked regression model.\n", - "1. Linear Ridge Regression\n", - "2. Support Vector Regression\n", - "3. Random Forest Regression as a meta-estimator\n", - "\n", - "We then use hummingbird to convert the model to Torch and ONNX formats.\n", - "\n", - "\n", - "\n", - "We then use ezkl to run zk-proofs.\n", - "\n", - "The generated onnx should look like this:\n", - "\n", - "![Alt text](image.png)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "95613ee9", - "metadata": {}, - "outputs": [], - "source": [ - "# check if notebook is in colab\n", - "try:\n", - " # install ezkl\n", - " import google.colab\n", - " import subprocess\n", - " import sys\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"hummingbird-ml\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"scikit-learn==1.3.1\"])\n", - "\n", - "# rely on local installation of ezkl if the notebook is not in colab\n", - "except:\n", - " pass\n", - "\n", - "import os\n", - "import torch\n", - "import ezkl\n", - "import json\n", - "from hummingbird.ml import convert\n", - "\n", - "\n", - "# here we create and (potentially train a model)\n", - "\n", - "# make sure you have the dependencies required here already installed\n", - "import numpy as np\n", - "from sklearn.linear_model import RidgeCV\n", - "from sklearn.svm import LinearSVR\n", - "from sklearn.ensemble import RandomForestRegressor\n", - "from sklearn.ensemble import StackingRegressor\n", - "\n", - "estimators = [\n", - " ('lr', RidgeCV()),\n", - " ('svr', LinearSVR(dual=\"auto\", random_state=42))\n", - "]\n", - "\n", - "X = np.array([[1, 1], [1, 2], [2, 2], [2, 3], [3, 3], [4, 4], [6, 8]])\n", - "# y = 1 * x_0 + 2 * x_1 + 3\n", - "y = np.dot(X, np.array([1, 2])) + 3\n", - "\n", - "reg = StackingRegressor(\n", - " estimators=estimators,\n", - " final_estimator=RandomForestRegressor(n_estimators=2,\n", - " random_state=42)\n", - ")\n", - "reg.fit(X, y)\n", - "reg.score(X, y)\n", - "\n", - "circuit = convert(reg, \"torch\", X[:1]).model\n", - "\n", - "\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8b0a6f4b", - "metadata": {}, - "outputs": [], - "source": [ - "print(circuit)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b37637c4", - "metadata": {}, - "outputs": [], - "source": [ - "model_path = os.path.join('network.onnx')\n", - "compiled_model_path = os.path.join('network.compiled')\n", - "pk_path = os.path.join('test.pk')\n", - "vk_path = os.path.join('test.vk')\n", - "settings_path = os.path.join('settings.json')\n", - "srs_path = os.path.join('kzg.srs')\n", - "witness_path = os.path.join('witness.json')\n", - "data_path = os.path.join('input.json')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "82db373a", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "\n", - "# export to onnx format\n", - "# !!!!!!!!!!!!!!!!! This will flash a warning but it is fine !!!!!!!!!!!!!!!!!!!!!\n", - "\n", - "# Input to the model\n", - "shape = X.shape[1:]\n", - "x = torch.rand(1, *shape, requires_grad=True)\n", - "torch_out = circuit(x)\n", - "# Export the model\n", - "torch.onnx.export(circuit, # model being run\n", - " # model input (or a tuple for multiple inputs)\n", - " x,\n", - " # where to save the model (can be a file or file-like object)\n", - " \"network.onnx\",\n", - " export_params=True, # store the trained parameter weights inside the model file\n", - " opset_version=10, # the ONNX version to export the model to\n", - " do_constant_folding=True, # whether to execute constant folding for optimization\n", - " input_names=['input'], # the model's input names\n", - " output_names=['output'], # the model's output names\n", - " dynamic_axes={'input': {0: 'batch_size'}, # variable length axes\n", - " 'output': {0: 'batch_size'}})\n", - "\n", - "d = ((x).detach().numpy()).reshape([-1]).tolist()\n", - "\n", - "data = dict(input_shapes=[shape],\n", - " input_data=[d],\n", - " output_data=[((o).detach().numpy()).reshape([-1]).tolist() for o in torch_out])\n", - "\n", - "# Serialize data into file:\n", - "json.dump(data, open(\"input.json\", 'w'))\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d5e374a2", - "metadata": {}, - "outputs": [], - "source": [ - "!RUST_LOG=trace\n", - "# TODO: Dictionary outputs\n", - "res = ezkl.gen_settings(model_path, settings_path)\n", - "assert res == True\n", - "\n", - "res = await ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3aa4f090", - "metadata": {}, - "outputs": [], - "source": [ - "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8b74dcee", - "metadata": {}, - "outputs": [], - "source": [ - "# srs path\n", - "res = ezkl.get_srs(srs_path, settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "18c8b7c7", - "metadata": {}, - "outputs": [], - "source": [ - "# now generate the witness file \n", - "\n", - "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", - "assert os.path.isfile(witness_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b1c561a8", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "# HERE WE SETUP THE CIRCUIT PARAMS\n", - "# WE GOT KEYS\n", - "# WE GOT CIRCUIT PARAMETERS\n", - "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", - "\n", - "\n", - "\n", - "res = ezkl.setup(\n", - " compiled_model_path,\n", - " vk_path,\n", - " pk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "assert os.path.isfile(vk_path)\n", - "assert os.path.isfile(pk_path)\n", - "assert os.path.isfile(settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c384cbc8", - "metadata": {}, - "outputs": [], - "source": [ - "# GENERATE A PROOF\n", - "\n", - "\n", - "proof_path = os.path.join('test.pf')\n", - "\n", - "res = ezkl.prove(\n", - " witness_path,\n", - " compiled_model_path,\n", - " pk_path,\n", - " proof_path,\n", - " srs_path,\n", - " \"single\",\n", - " )\n", - "\n", - "print(res)\n", - "assert os.path.isfile(proof_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "76f00d41", - "metadata": {}, - "outputs": [], - "source": [ - "# VERIFY IT\n", - "\n", - "res = ezkl.verify(\n", - " proof_path,\n", - " settings_path,\n", - " vk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "print(\"verified\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.15" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "cells": [ + { + "cell_type": "markdown", + "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", + "metadata": {}, + "source": [ + "## Stacked Regression\n", + "\n", + "\n", + "Sklearn based models are slightly finicky to get into a suitable onnx format.\n", + "This notebook showcases how to do so using the `hummingbird-ml` python package !\n", + "\n", + "We're going to combine a few models to create a stacked regression model.\n", + "1. Linear Ridge Regression\n", + "2. Support Vector Regression\n", + "3. Random Forest Regression as a meta-estimator\n", + "\n", + "We then use hummingbird to convert the model to Torch and ONNX formats.\n", + "\n", + "\n", + "\n", + "We then use ezkl to run zk-proofs.\n", + "\n", + "The generated onnx should look like this:\n", + "\n", + "![Alt text](image.png)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "95613ee9", + "metadata": {}, + "outputs": [], + "source": [ + "# check if notebook is in colab\n", + "try:\n", + " # install ezkl\n", + " import google.colab\n", + " import subprocess\n", + " import sys\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"hummingbird-ml\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"scikit-learn==1.3.1\"])\n", + "\n", + "# rely on local installation of ezkl if the notebook is not in colab\n", + "except:\n", + " pass\n", + "\n", + "import os\n", + "import torch\n", + "import ezkl\n", + "import json\n", + "from hummingbird.ml import convert\n", + "\n", + "\n", + "# here we create and (potentially train a model)\n", + "\n", + "# make sure you have the dependencies required here already installed\n", + "import numpy as np\n", + "from sklearn.linear_model import RidgeCV\n", + "from sklearn.svm import LinearSVR\n", + "from sklearn.ensemble import RandomForestRegressor\n", + "from sklearn.ensemble import StackingRegressor\n", + "\n", + "estimators = [\n", + " ('lr', RidgeCV()),\n", + " ('svr', LinearSVR(dual=\"auto\", random_state=42))\n", + "]\n", + "\n", + "X = np.array([[1, 1], [1, 2], [2, 2], [2, 3], [3, 3], [4, 4], [6, 8]])\n", + "# y = 1 * x_0 + 2 * x_1 + 3\n", + "y = np.dot(X, np.array([1, 2])) + 3\n", + "\n", + "reg = StackingRegressor(\n", + " estimators=estimators,\n", + " final_estimator=RandomForestRegressor(n_estimators=2,\n", + " random_state=42)\n", + ")\n", + "reg.fit(X, y)\n", + "reg.score(X, y)\n", + "\n", + "circuit = convert(reg, \"torch\", X[:1]).model\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8b0a6f4b", + "metadata": {}, + "outputs": [], + "source": [ + "print(circuit)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b37637c4", + "metadata": {}, + "outputs": [], + "source": [ + "model_path = os.path.join('network.onnx')\n", + "compiled_model_path = os.path.join('network.compiled')\n", + "pk_path = os.path.join('test.pk')\n", + "vk_path = os.path.join('test.vk')\n", + "settings_path = os.path.join('settings.json')\n", + "srs_path = os.path.join('kzg.srs')\n", + "witness_path = os.path.join('witness.json')\n", + "data_path = os.path.join('input.json')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "82db373a", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "\n", + "# export to onnx format\n", + "# !!!!!!!!!!!!!!!!! This will flash a warning but it is fine !!!!!!!!!!!!!!!!!!!!!\n", + "\n", + "# Input to the model\n", + "shape = X.shape[1:]\n", + "x = torch.rand(1, *shape, requires_grad=True)\n", + "torch_out = circuit(x)\n", + "# Export the model\n", + "torch.onnx.export(circuit, # model being run\n", + " # model input (or a tuple for multiple inputs)\n", + " x,\n", + " # where to save the model (can be a file or file-like object)\n", + " \"network.onnx\",\n", + " export_params=True, # store the trained parameter weights inside the model file\n", + " opset_version=10, # the ONNX version to export the model to\n", + " do_constant_folding=True, # whether to execute constant folding for optimization\n", + " input_names=['input'], # the model's input names\n", + " output_names=['output'], # the model's output names\n", + " dynamic_axes={'input': {0: 'batch_size'}, # variable length axes\n", + " 'output': {0: 'batch_size'}})\n", + "\n", + "d = ((x).detach().numpy()).reshape([-1]).tolist()\n", + "\n", + "data = dict(input_shapes=[shape],\n", + " input_data=[d],\n", + " output_data=[((o).detach().numpy()).reshape([-1]).tolist() for o in torch_out])\n", + "\n", + "# Serialize data into file:\n", + "json.dump(data, open(\"input.json\", 'w'))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d5e374a2", + "metadata": {}, + "outputs": [], + "source": [ + "!RUST_LOG=trace\n", + "# TODO: Dictionary outputs\n", + "res = ezkl.gen_settings(model_path, settings_path)\n", + "assert res == True\n", + "\n", + "res = ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3aa4f090", + "metadata": {}, + "outputs": [], + "source": [ + "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8b74dcee", + "metadata": {}, + "outputs": [], + "source": [ + "# srs path\n", + "res = ezkl.get_srs(srs_path, settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "18c8b7c7", + "metadata": {}, + "outputs": [], + "source": [ + "# now generate the witness file \n", + "\n", + "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", + "assert os.path.isfile(witness_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b1c561a8", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# HERE WE SETUP THE CIRCUIT PARAMS\n", + "# WE GOT KEYS\n", + "# WE GOT CIRCUIT PARAMETERS\n", + "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", + "\n", + "\n", + "\n", + "res = ezkl.setup(\n", + " compiled_model_path,\n", + " vk_path,\n", + " pk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "assert os.path.isfile(vk_path)\n", + "assert os.path.isfile(pk_path)\n", + "assert os.path.isfile(settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c384cbc8", + "metadata": {}, + "outputs": [], + "source": [ + "# GENERATE A PROOF\n", + "\n", + "\n", + "proof_path = os.path.join('test.pf')\n", + "\n", + "res = ezkl.prove(\n", + " witness_path,\n", + " compiled_model_path,\n", + " pk_path,\n", + " proof_path,\n", + " srs_path,\n", + " \"single\",\n", + " )\n", + "\n", + "print(res)\n", + "assert os.path.isfile(proof_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "76f00d41", + "metadata": {}, + "outputs": [], + "source": [ + "# VERIFY IT\n", + "\n", + "res = ezkl.verify(\n", + " proof_path,\n", + " settings_path,\n", + " vk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "print(\"verified\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/notebooks/svm.ipynb b/examples/notebooks/svm.ipynb index 1b05312a..9ed950a7 100644 --- a/examples/notebooks/svm.ipynb +++ b/examples/notebooks/svm.ipynb @@ -1,433 +1,433 @@ { - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", - "metadata": {}, - "source": [ - "## Support Vector Machines\n", - "\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "95613ee9", - "metadata": {}, - "outputs": [], - "source": [ - "# check if notebook is in colab\n", - "try:\n", - " # install ezkl\n", - " import google.colab\n", - " import subprocess\n", - " import sys\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"sk2torch\"])\n", - "\n", - "# rely on local installation of ezkl if the notebook is not in colab\n", - "except:\n", - " pass\n", - "\n", - "\n", - "# here we create and (potentially train a model)\n", - "\n", - "# make sure you have the dependencies required here already installed\n", - "import json\n", - "import numpy as np\n", - "from sklearn.svm import SVC\n", - "import sk2torch\n", - "import torch\n", - "import ezkl\n", - "import os\n", - "\n", - "\n", - "# Create a dataset of two Gaussians. There will be some overlap\n", - "# between the two classes, which adds some uncertainty to the model.\n", - "xs = np.concatenate(\n", - " [\n", - " np.random.random(size=(256, 2)) + [1, 0],\n", - " np.random.random(size=(256, 2)) + [-1, 0],\n", - " ],\n", - " axis=0,\n", - ")\n", - "ys = np.array([False] * 256 + [True] * 256)\n", - "\n", - "# Train an SVM on the data and wrap it in PyTorch.\n", - "sk_model = SVC(probability=True)\n", - "sk_model.fit(xs, ys)\n", - "model = sk2torch.wrap(sk_model)\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b37637c4", - "metadata": {}, - "outputs": [], - "source": [ - "model_path = os.path.join('network.onnx')\n", - "compiled_model_path = os.path.join('network.compiled')\n", - "pk_path = os.path.join('test.pk')\n", - "vk_path = os.path.join('test.vk')\n", - "settings_path = os.path.join('settings.json')\n", - "srs_path = os.path.join('kzg.srs')\n", - "witness_path = os.path.join('witness.json')\n", - "data_path = os.path.join('input.json')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7f0ca328", - "metadata": {}, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt\n", - "# Create a coordinate grid to compute a vector field on.\n", - "spaced = np.linspace(-2, 2, num=25)\n", - "grid_xs = torch.tensor([[x, y] for x in spaced for y in spaced], requires_grad=True)\n", - "\n", - "\n", - "# Compute the gradients of the SVM output.\n", - "outputs = model.predict_proba(grid_xs)[:, 1]\n", - "(input_grads,) = torch.autograd.grad(outputs.sum(), (grid_xs,))\n", - "\n", - "\n", - "# Create a quiver plot of the vector field.\n", - "plt.quiver(\n", - " grid_xs[:, 0].detach().numpy(),\n", - " grid_xs[:, 1].detach().numpy(),\n", - " input_grads[:, 0].detach().numpy(),\n", - " input_grads[:, 1].detach().numpy(),\n", - ")\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "82db373a", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "\n", - "# export to onnx format\n", - "# !!!!!!!!!!!!!!!!! This will flash a warning but it is fine !!!!!!!!!!!!!!!!!!!!!\n", - "\n", - "# Input to the model\n", - "shape = xs.shape[1:]\n", - "x = grid_xs[0:1]\n", - "torch_out = model.predict(x)\n", - "# Export the model\n", - "torch.onnx.export(model, # model being run\n", - " # model input (or a tuple for multiple inputs)\n", - " x,\n", - " # where to save the model (can be a file or file-like object)\n", - " \"network.onnx\",\n", - " export_params=True, # store the trained parameter weights inside the model file\n", - " opset_version=10, # the ONNX version to export the model to\n", - " do_constant_folding=True, # whether to execute constant folding for optimization\n", - " input_names=['input'], # the model's input names\n", - " output_names=['output'], # the model's output names\n", - " dynamic_axes={'input': {0: 'batch_size'}, # variable length axes\n", - " 'output': {0: 'batch_size'}})\n", - "\n", - "d = ((x).detach().numpy()).reshape([-1]).tolist()\n", - "\n", - "data = dict(input_shapes=[shape],\n", - " input_data=[d],\n", - " output_data=[o.reshape([-1]).tolist() for o in torch_out])\n", - "\n", - "# Serialize data into file:\n", - "json.dump(data, open(\"input.json\", 'w'))\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d5e374a2", - "metadata": {}, - "outputs": [], - "source": [ - "!RUST_LOG=trace\n", - "# TODO: Dictionary outputs\n", - "res = ezkl.gen_settings(model_path, settings_path)\n", - "assert res == True\n", - "\n", - "res = await ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3aa4f090", - "metadata": {}, - "outputs": [], - "source": [ - "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8b74dcee", - "metadata": {}, - "outputs": [], - "source": [ - "# srs path\n", - "res = ezkl.get_srs(srs_path, settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "18c8b7c7", - "metadata": {}, - "outputs": [], - "source": [ - "# now generate the witness file \n", - "\n", - "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", - "assert os.path.isfile(witness_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b1c561a8", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "# HERE WE SETUP THE CIRCUIT PARAMS\n", - "# WE GOT KEYS\n", - "# WE GOT CIRCUIT PARAMETERS\n", - "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", - "\n", - "\n", - "\n", - "res = ezkl.setup(\n", - " compiled_model_path,\n", - " vk_path,\n", - " pk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "assert os.path.isfile(vk_path)\n", - "assert os.path.isfile(pk_path)\n", - "assert os.path.isfile(settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c384cbc8", - "metadata": {}, - "outputs": [], - "source": [ - "# GENERATE A PROOF\n", - "\n", - "\n", - "proof_path = os.path.join('test.pf')\n", - "\n", - "res = ezkl.prove(\n", - " witness_path,\n", - " compiled_model_path,\n", - " pk_path,\n", - " proof_path,\n", - " srs_path,\n", - " \"single\",\n", - " )\n", - "\n", - "print(res)\n", - "assert os.path.isfile(proof_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "76f00d41", - "metadata": {}, - "outputs": [], - "source": [ - "# VERIFY IT\n", - "\n", - "res = ezkl.verify(\n", - " proof_path,\n", - " settings_path,\n", - " vk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "print(\"verified\")" - ] - }, - { - "cell_type": "markdown", - "id": "760580d4", - "metadata": {}, - "source": [ - "# Linear SVC" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "481824fe", - "metadata": {}, - "outputs": [], - "source": [ - "### Linear SVC\n", - "\n", - "# check if notebook is in colab\n", - "try:\n", - " # install ezkl\n", - " import google.colab\n", - " import subprocess\n", - " import sys\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"sk2torch\"])\n", - "\n", - "# rely on local installation of ezkl if the notebook is not in colab\n", - "except:\n", - " pass\n", - "\n", - "\n", - "# here we create and (potentially train a model)\n", - "\n", - "# make sure you have the dependencies required here already installed\n", - "import json\n", - "import numpy as np\n", - "from sklearn.svm import LinearSVC\n", - "import sk2torch\n", - "import torch\n", - "import ezkl\n", - "import os\n", - "\n", - "\n", - "xs = np.concatenate(\n", - " [\n", - " np.random.random(size=(256, 2)) + [1, 0],\n", - " np.random.random(size=(256, 2)) + [-1, 0],\n", - " ],\n", - " axis=0,\n", - ")\n", - "ys = np.array([False] * 256 + [True] * 256)\n", - "\n", - "# Train an SVM on the data and wrap it in PyTorch.\n", - "sk_model = LinearSVC()\n", - "sk_model.fit(xs, ys)\n", - "model = sk2torch.wrap(sk_model)\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7d1d47fe", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "\n", - "# export to onnx format\n", - "# !!!!!!!!!!!!!!!!! This will flash a warning but it is fine !!!!!!!!!!!!!!!!!!!!!\n", - "\n", - "# Input to the model\n", - "shape = xs.shape[1:]\n", - "x = grid_xs[0:1]\n", - "torch_out = model.predict(x)\n", - "# Export the model\n", - "torch.onnx.export(model, # model being run\n", - " # model input (or a tuple for multiple inputs)\n", - " x,\n", - " # where to save the model (can be a file or file-like object)\n", - " \"network.onnx\",\n", - " export_params=True, # store the trained parameter weights inside the model file\n", - " opset_version=10, # the ONNX version to export the model to\n", - " do_constant_folding=True, # whether to execute constant folding for optimization\n", - " input_names=['input'], # the model's input names\n", - " output_names=['output'], # the model's output names\n", - " dynamic_axes={'input': {0: 'batch_size'}, # variable length axes\n", - " 'output': {0: 'batch_size'}})\n", - "\n", - "d = ((x).detach().numpy()).reshape([-1]).tolist()\n", - "\n", - "data = dict(input_shapes=[shape],\n", - " input_data=[d],\n", - " output_data=[o.reshape([-1]).tolist() for o in torch_out])\n", - "\n", - "# Serialize data into file:\n", - "json.dump(data, open(\"input.json\", 'w'))\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7c00b3f6", - "metadata": {}, - "outputs": [], - "source": [ - "model_path = os.path.join('network.onnx')\n", - "compiled_model_path = os.path.join('network.compiled')\n", - "pk_path = os.path.join('test.pk')\n", - "vk_path = os.path.join('test.vk')\n", - "settings_path = os.path.join('settings.json')\n", - "srs_path = os.path.join('kzg.srs')\n", - "witness_path = os.path.join('witness.json')\n", - "data_path = os.path.join('input.json')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "69536185", - "metadata": {}, - "outputs": [], - "source": [ - "!RUST_LOG=trace\n", - "# TODO: Dictionary outputs\n", - "res = ezkl.gen_settings(model_path, settings_path)\n", - "assert res == True\n", - "\n", - "res = await ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", - "assert res == True" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.15" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", + "metadata": {}, + "source": [ + "## Support Vector Machines\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "95613ee9", + "metadata": {}, + "outputs": [], + "source": [ + "# check if notebook is in colab\n", + "try:\n", + " # install ezkl\n", + " import google.colab\n", + " import subprocess\n", + " import sys\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"sk2torch\"])\n", + "\n", + "# rely on local installation of ezkl if the notebook is not in colab\n", + "except:\n", + " pass\n", + "\n", + "\n", + "# here we create and (potentially train a model)\n", + "\n", + "# make sure you have the dependencies required here already installed\n", + "import json\n", + "import numpy as np\n", + "from sklearn.svm import SVC\n", + "import sk2torch\n", + "import torch\n", + "import ezkl\n", + "import os\n", + "\n", + "\n", + "# Create a dataset of two Gaussians. There will be some overlap\n", + "# between the two classes, which adds some uncertainty to the model.\n", + "xs = np.concatenate(\n", + " [\n", + " np.random.random(size=(256, 2)) + [1, 0],\n", + " np.random.random(size=(256, 2)) + [-1, 0],\n", + " ],\n", + " axis=0,\n", + ")\n", + "ys = np.array([False] * 256 + [True] * 256)\n", + "\n", + "# Train an SVM on the data and wrap it in PyTorch.\n", + "sk_model = SVC(probability=True)\n", + "sk_model.fit(xs, ys)\n", + "model = sk2torch.wrap(sk_model)\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b37637c4", + "metadata": {}, + "outputs": [], + "source": [ + "model_path = os.path.join('network.onnx')\n", + "compiled_model_path = os.path.join('network.compiled')\n", + "pk_path = os.path.join('test.pk')\n", + "vk_path = os.path.join('test.vk')\n", + "settings_path = os.path.join('settings.json')\n", + "srs_path = os.path.join('kzg.srs')\n", + "witness_path = os.path.join('witness.json')\n", + "data_path = os.path.join('input.json')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7f0ca328", + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "# Create a coordinate grid to compute a vector field on.\n", + "spaced = np.linspace(-2, 2, num=25)\n", + "grid_xs = torch.tensor([[x, y] for x in spaced for y in spaced], requires_grad=True)\n", + "\n", + "\n", + "# Compute the gradients of the SVM output.\n", + "outputs = model.predict_proba(grid_xs)[:, 1]\n", + "(input_grads,) = torch.autograd.grad(outputs.sum(), (grid_xs,))\n", + "\n", + "\n", + "# Create a quiver plot of the vector field.\n", + "plt.quiver(\n", + " grid_xs[:, 0].detach().numpy(),\n", + " grid_xs[:, 1].detach().numpy(),\n", + " input_grads[:, 0].detach().numpy(),\n", + " input_grads[:, 1].detach().numpy(),\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "82db373a", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "\n", + "# export to onnx format\n", + "# !!!!!!!!!!!!!!!!! This will flash a warning but it is fine !!!!!!!!!!!!!!!!!!!!!\n", + "\n", + "# Input to the model\n", + "shape = xs.shape[1:]\n", + "x = grid_xs[0:1]\n", + "torch_out = model.predict(x)\n", + "# Export the model\n", + "torch.onnx.export(model, # model being run\n", + " # model input (or a tuple for multiple inputs)\n", + " x,\n", + " # where to save the model (can be a file or file-like object)\n", + " \"network.onnx\",\n", + " export_params=True, # store the trained parameter weights inside the model file\n", + " opset_version=10, # the ONNX version to export the model to\n", + " do_constant_folding=True, # whether to execute constant folding for optimization\n", + " input_names=['input'], # the model's input names\n", + " output_names=['output'], # the model's output names\n", + " dynamic_axes={'input': {0: 'batch_size'}, # variable length axes\n", + " 'output': {0: 'batch_size'}})\n", + "\n", + "d = ((x).detach().numpy()).reshape([-1]).tolist()\n", + "\n", + "data = dict(input_shapes=[shape],\n", + " input_data=[d],\n", + " output_data=[o.reshape([-1]).tolist() for o in torch_out])\n", + "\n", + "# Serialize data into file:\n", + "json.dump(data, open(\"input.json\", 'w'))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d5e374a2", + "metadata": {}, + "outputs": [], + "source": [ + "!RUST_LOG=trace\n", + "# TODO: Dictionary outputs\n", + "res = ezkl.gen_settings(model_path, settings_path)\n", + "assert res == True\n", + "\n", + "res = ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3aa4f090", + "metadata": {}, + "outputs": [], + "source": [ + "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8b74dcee", + "metadata": {}, + "outputs": [], + "source": [ + "# srs path\n", + "res = ezkl.get_srs(srs_path, settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "18c8b7c7", + "metadata": {}, + "outputs": [], + "source": [ + "# now generate the witness file \n", + "\n", + "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", + "assert os.path.isfile(witness_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b1c561a8", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# HERE WE SETUP THE CIRCUIT PARAMS\n", + "# WE GOT KEYS\n", + "# WE GOT CIRCUIT PARAMETERS\n", + "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", + "\n", + "\n", + "\n", + "res = ezkl.setup(\n", + " compiled_model_path,\n", + " vk_path,\n", + " pk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "assert os.path.isfile(vk_path)\n", + "assert os.path.isfile(pk_path)\n", + "assert os.path.isfile(settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c384cbc8", + "metadata": {}, + "outputs": [], + "source": [ + "# GENERATE A PROOF\n", + "\n", + "\n", + "proof_path = os.path.join('test.pf')\n", + "\n", + "res = ezkl.prove(\n", + " witness_path,\n", + " compiled_model_path,\n", + " pk_path,\n", + " proof_path,\n", + " srs_path,\n", + " \"single\",\n", + " )\n", + "\n", + "print(res)\n", + "assert os.path.isfile(proof_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "76f00d41", + "metadata": {}, + "outputs": [], + "source": [ + "# VERIFY IT\n", + "\n", + "res = ezkl.verify(\n", + " proof_path,\n", + " settings_path,\n", + " vk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "print(\"verified\")" + ] + }, + { + "cell_type": "markdown", + "id": "760580d4", + "metadata": {}, + "source": [ + "# Linear SVC" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "481824fe", + "metadata": {}, + "outputs": [], + "source": [ + "### Linear SVC\n", + "\n", + "# check if notebook is in colab\n", + "try:\n", + " # install ezkl\n", + " import google.colab\n", + " import subprocess\n", + " import sys\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"sk2torch\"])\n", + "\n", + "# rely on local installation of ezkl if the notebook is not in colab\n", + "except:\n", + " pass\n", + "\n", + "\n", + "# here we create and (potentially train a model)\n", + "\n", + "# make sure you have the dependencies required here already installed\n", + "import json\n", + "import numpy as np\n", + "from sklearn.svm import LinearSVC\n", + "import sk2torch\n", + "import torch\n", + "import ezkl\n", + "import os\n", + "\n", + "\n", + "xs = np.concatenate(\n", + " [\n", + " np.random.random(size=(256, 2)) + [1, 0],\n", + " np.random.random(size=(256, 2)) + [-1, 0],\n", + " ],\n", + " axis=0,\n", + ")\n", + "ys = np.array([False] * 256 + [True] * 256)\n", + "\n", + "# Train an SVM on the data and wrap it in PyTorch.\n", + "sk_model = LinearSVC()\n", + "sk_model.fit(xs, ys)\n", + "model = sk2torch.wrap(sk_model)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7d1d47fe", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "\n", + "# export to onnx format\n", + "# !!!!!!!!!!!!!!!!! This will flash a warning but it is fine !!!!!!!!!!!!!!!!!!!!!\n", + "\n", + "# Input to the model\n", + "shape = xs.shape[1:]\n", + "x = grid_xs[0:1]\n", + "torch_out = model.predict(x)\n", + "# Export the model\n", + "torch.onnx.export(model, # model being run\n", + " # model input (or a tuple for multiple inputs)\n", + " x,\n", + " # where to save the model (can be a file or file-like object)\n", + " \"network.onnx\",\n", + " export_params=True, # store the trained parameter weights inside the model file\n", + " opset_version=10, # the ONNX version to export the model to\n", + " do_constant_folding=True, # whether to execute constant folding for optimization\n", + " input_names=['input'], # the model's input names\n", + " output_names=['output'], # the model's output names\n", + " dynamic_axes={'input': {0: 'batch_size'}, # variable length axes\n", + " 'output': {0: 'batch_size'}})\n", + "\n", + "d = ((x).detach().numpy()).reshape([-1]).tolist()\n", + "\n", + "data = dict(input_shapes=[shape],\n", + " input_data=[d],\n", + " output_data=[o.reshape([-1]).tolist() for o in torch_out])\n", + "\n", + "# Serialize data into file:\n", + "json.dump(data, open(\"input.json\", 'w'))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7c00b3f6", + "metadata": {}, + "outputs": [], + "source": [ + "model_path = os.path.join('network.onnx')\n", + "compiled_model_path = os.path.join('network.compiled')\n", + "pk_path = os.path.join('test.pk')\n", + "vk_path = os.path.join('test.vk')\n", + "settings_path = os.path.join('settings.json')\n", + "srs_path = os.path.join('kzg.srs')\n", + "witness_path = os.path.join('witness.json')\n", + "data_path = os.path.join('input.json')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "69536185", + "metadata": {}, + "outputs": [], + "source": [ + "!RUST_LOG=trace\n", + "# TODO: Dictionary outputs\n", + "res = ezkl.gen_settings(model_path, settings_path)\n", + "assert res == True\n", + "\n", + "res = ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", + "assert res == True" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/notebooks/variance.ipynb b/examples/notebooks/variance.ipynb index 8ae51e52..5a407e13 100644 --- a/examples/notebooks/variance.ipynb +++ b/examples/notebooks/variance.ipynb @@ -236,7 +236,7 @@ "\n", "\n", "ezkl.gen_settings(onnx_filename, settings_filename)\n", - "await ezkl.calibrate_settings(\n", + "ezkl.calibrate_settings(\n", " input_filename, onnx_filename, settings_filename, \"resources\")\n", "res = ezkl.get_srs(srs_path, settings_filename)\n", "ezkl.compile_circuit(onnx_filename, compiled_filename, settings_filename)\n", @@ -462,4 +462,4 @@ }, "nbformat": 4, "nbformat_minor": 0 -} +} \ No newline at end of file diff --git a/examples/notebooks/voice_judge.ipynb b/examples/notebooks/voice_judge.ipynb index b5c33541..e1b7d0aa 100644 --- a/examples/notebooks/voice_judge.ipynb +++ b/examples/notebooks/voice_judge.ipynb @@ -1,918 +1,918 @@ { - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Voice judgoor\n", - "\n", - "Here we showcase a full-end-to-end flow of:\n", - "1. training a model for a specific task (judging voices)\n", - "2. creating a proof of judgment\n", - "3. creating and deploying an evm verifier\n", - "4. verifying the proof of judgment using the verifier\n", - "\n", - "First we download a few voice related datasets from kaggle, which are all labelled using the same emotion and tone labelling standard.\n", - "\n", - "We have 8 emotions in both speaking and singing datasets: neutral, calm, happy, sad, angry, fear, disgust, surprise.\n", - "\n", - "To download the dataset make sure you have the kaggle cli installed in your local env `pip install kaggle`. Make sure you set up your `kaggle.json` file as detailed [here](https://www.kaggle.com/docs/api#getting-started-installation-&-authentication).\n", - "Then run the associated `voice_data.sh` data download script: `sh voice_data.sh`.\n", - "\n", - "Make sure you set the `VOICE_DATA_DIR` variables to point to the directory the `voice_data.sh` script has downloaded to. This script also accepts an argument to download to a specific directory: `sh voice_data.sh /path/to/voice/data`.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "voice_data_dir: .\n" - ] - } - ], - "source": [ - "\n", - "import os\n", - "# os.environ[\"VOICE_DATA_DIR\"] = \".\"\n", - "\n", - "voice_data_dir = os.environ.get('VOICE_DATA_DIR')\n", - "\n", - "# if is none set to \"\" \n", - "if voice_data_dir is None:\n", - " voice_data_dir = \"\"\n", - "\n", - "print(\"voice_data_dir: \", voice_data_dir)\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### TESS Dataset" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# check if notebook is in colab\n", - "try:\n", - " # install ezkl\n", - " import google.colab\n", - " import subprocess\n", - " import sys\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", - "\n", - "# rely on local installation of ezkl if the notebook is not in colab\n", - "except:\n", - " pass\n", - "\n", - "from torch import nn\n", - "import ezkl\n", - "import os\n", - "import json\n", - "import pandas as pd\n", - "import logging\n", - "\n", - "# read in VOICE_DATA_DIR from environment variable\n", - "\n", - "# FORMAT = '%(levelname)s %(name)s %(asctime)-15s %(filename)s:%(lineno)d %(message)s'\n", - "# logging.basicConfig(format=FORMAT)\n", - "# logging.getLogger().setLevel(logging.INFO)\n", - "\n", - "\n", - "Tess = os.path.join(voice_data_dir, \"data/TESS/\")\n", - "\n", - "tess = os.listdir(Tess)\n", - "\n", - "emotions = []\n", - "files = []\n", - "\n", - "for item in tess:\n", - " items = os.listdir(Tess + item)\n", - " for file in items:\n", - " part = file.split('.')[0]\n", - " part = part.split('_')[2]\n", - " if part == 'ps':\n", - " emotions.append('surprise')\n", - " else:\n", - " emotions.append(part)\n", - " files.append(Tess + item + '/' + file)\n", - "\n", - "tess_df = pd.concat([pd.DataFrame(emotions, columns=['Emotions']), pd.DataFrame(files, columns=['Files'])], axis=1)\n", - "tess_df" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### RAVDESS SONG dataset" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Ravdess = os.path.join(voice_data_dir, \"data/RAVDESS_SONG/audio_song_actors_01-24/\")\n", - "\n", - "ravdess_list = os.listdir(Ravdess)\n", - "\n", - "files = []\n", - "emotions = []\n", - "\n", - "for item in ravdess_list:\n", - " actor = os.listdir(Ravdess + item)\n", - " for file in actor:\n", - " name = file.split('.')[0]\n", - " parts = name.split('-')\n", - " emotions.append(int(parts[2]))\n", - " files.append(Ravdess + item + '/' + file)\n", - "\n", - "emotion_data = pd.DataFrame(emotions, columns=['Emotions'])\n", - "files_data = pd.DataFrame(files, columns=['Files'])\n", - "\n", - "ravdess_song_df = pd.concat([emotion_data, files_data], axis=1)\n", - "\n", - "ravdess_song_df.Emotions.replace({1:'neutral', 2:'calm', 3:'happy', 4:'sad', 5:'angry', 6:'fear', 7:'disgust', 8:'surprise'}, inplace=True)\n", - "\n", - "ravdess_song_df" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### RAVDESS SPEECH Dataset" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Ravdess = os.path.join(voice_data_dir, \"data/RAVDESS_SPEECH/audio_speech_actors_01-24/\")\n", - "\n", - "ravdess_list = os.listdir(Ravdess)\n", - "\n", - "files = []\n", - "emotions = []\n", - "\n", - "for item in ravdess_list:\n", - " actor = os.listdir(Ravdess + item)\n", - " for file in actor:\n", - " name = file.split('.')[0]\n", - " parts = name.split('-')\n", - " emotions.append(int(parts[2]))\n", - " files.append(Ravdess + item + '/' + file)\n", - " \n", - "emotion_data = pd.DataFrame(emotions, columns=['Emotions'])\n", - "files_data = pd.DataFrame(files, columns=['Files'])\n", - "\n", - "ravdess_df = pd.concat([emotion_data, files_data], axis=1)\n", - "\n", - "ravdess_df.Emotions.replace({1:'neutral', 2:'calm', 3:'happy', 4:'sad', 5:'angry', 6:'fear', 7:'disgust', 8:'surprise'}, inplace=True)\n", - "\n", - "ravdess_df" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### CREMA Dataset" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Crema = os.path.join(voice_data_dir, \"data/CREMA-D/\")\n", - "\n", - "crema = os.listdir(Crema)\n", - "emotions = []\n", - "files = []\n", - "\n", - "for item in crema:\n", - " files.append(Crema + item)\n", - " \n", - " parts = item.split('_')\n", - " if parts[2] == 'SAD':\n", - " emotions.append('sad')\n", - " elif parts[2] == 'ANG':\n", - " emotions.append('angry')\n", - " elif parts[2] == 'DIS':\n", - " emotions.append('disgust')\n", - " elif parts[2] == 'FEA':\n", - " emotions.append('fear')\n", - " elif parts[2] == 'HAP':\n", - " emotions.append('happy')\n", - " elif parts[2] == 'NEU':\n", - " emotions.append('neutral')\n", - " else :\n", - " emotions.append('unknown')\n", - " \n", - "emotions_data = pd.DataFrame(emotions, columns=['Emotions'])\n", - "files_data = pd.DataFrame(files, columns=['Files'])\n", - "\n", - "crema_df = pd.concat([emotions_data, files_data], axis=1)\n", - "\n", - "crema_df" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### SAVEE Dataset" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Savee = os.path.join(voice_data_dir,\"data/SAVEE/\")\n", - "\n", - "savee = os.listdir(Savee)\n", - "\n", - "emotions = []\n", - "files = []\n", - "\n", - "for item in savee:\n", - " files.append(Savee + item)\n", - " part = item.split('_')[1]\n", - " ele = part[:-6]\n", - " if ele == 'a':\n", - " emotions.append('angry')\n", - " elif ele == 'd':\n", - " emotions.append('disgust')\n", - " elif ele == 'f':\n", - " emotions.append('fear')\n", - " elif ele == 'h':\n", - " emotions.append('happy')\n", - " elif ele == 'n':\n", - " emotions.append('neutral')\n", - " elif ele == 'sa':\n", - " emotions.append('sad')\n", - " else:\n", - " emotions.append('surprise')\n", - "\n", - "savee_df = pd.concat([pd.DataFrame(emotions, columns=['Emotions']), pd.DataFrame(files, columns=['Files'])], axis=1)\n", - "savee_df" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Combining all datasets" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "df = pd.concat([ravdess_df, ravdess_song_df, crema_df, tess_df, savee_df], axis = 0)\n", - "# relabel indices\n", - "df.index = range(len(df.index))\n", - "df.to_csv(\"df.csv\",index=False)\n", - "df\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import seaborn as sns\n", - "sns.histplot(data=df, x=\"Emotions\")\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Training \n", - "\n", - "Here we convert all audio files into 2D frequency-domain spectrograms so that we can leverage convolutional neural networks, which tend to be more efficient than time-series model like RNNs or LSTMs.\n", - "We thus: \n", - "1. Extract the mel spectrogram from each of the audio recordings. \n", - "2. Rescale each of these to the decibel (DB) scale. \n", - "3. Define the model as the following model: `(x) -> (conv) -> (relu) -> (linear) -> (y)`\n", - "\n", - "\n", - "You may notice that we introduce a second computational graph `(key) -> (key)`. The reasons for this are to do with MEV, and if you are not interested you can skip the following paragraph. \n", - "\n", - "Let's say that obtaining a high score from the judge and then submitting said score to the EVM verifier could result in the issuance of a reward (financial or otherwise). There is an incentive then for MEV bots to scalp any issued valid proof and submit a duplicate transaction with the same proof to the verifier contract in the hopes of obtaining the reward before the original issuer. Here we add `(key) -> (key)` such that the transaction creator's public key / address is both a private input AND a public input to the proof. As such the on-chain verification only succeeds if the key passed in during proof time is also passed in as a public input to the contract. The reward issued by the contract can then be irrevocably tied to that key such that even if the proof is submitted by another actor, the reward would STILL go to the original singer / transaction issuer. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "\n", - "import librosa\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "\n", - "\n", - "#stft extraction from augmented data\n", - "def extract_mel_spec(filename):\n", - " x,sr=librosa.load(filename,duration=3,offset=0.5)\n", - " X = librosa.feature.melspectrogram(y=x, sr=sr)\n", - " Xdb = librosa.power_to_db(X, ref=np.max)\n", - " Xdb = Xdb.reshape(1,128,-1)\n", - " return Xdb\n", - "\n", - "Xdb=df.iloc[:,1].apply(lambda x: extract_mel_spec(x))\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here we convert label to a number between 0 and 1 where 1 is pleasant surprised and 0 is disgust and the rest are floats in between. The model loves pleasantly surprised voices and hates disgust ;) " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# get max size\n", - "max_size = 0\n", - "for i in range(len(Xdb)):\n", - " if Xdb[i].shape[2] > max_size:\n", - " max_size = Xdb[i].shape[2]\n", - "\n", - "# 0 pad 2nd dim to max size\n", - "Xdb=Xdb.apply(lambda x: np.pad(x,((0,0),(0,0),(0,max_size-x.shape[2]))))\n", - "\n", - "Xdb=pd.DataFrame(Xdb)\n", - "Xdb['label'] = df['Emotions']\n", - "# convert label to a number between 0 and 1 where 1 is pleasant surprised and 0 is disgust and the rest are floats in betwee\n", - "Xdb['label'] = Xdb['label'].apply(lambda x: 1 if x=='surprise' else 0 if x=='disgust' else 0.2 if x=='fear' else 0.4 if x=='happy' else 0.6 if x=='sad' else 0.8)\n", - "\n", - "Xdb.iloc[0,0][0].shape" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import torch\n", - "# Defines the model\n", - "# we got convs, we got relu, we got linear layers\n", - "# What else could one want ????\n", - "\n", - "class MyModel(nn.Module):\n", - " def __init__(self):\n", - " super(MyModel, self).__init__()\n", - "\n", - " self.conv1 = nn.Conv2d(in_channels=1, out_channels=1, kernel_size=5, stride=4)\n", - "\n", - " self.d1 = nn.Linear(992, 1)\n", - "\n", - " self.sigmoid = nn.Sigmoid()\n", - " self.relu = nn.ReLU()\n", - "\n", - " def forward(self, key, x):\n", - " # 32x1x28x28 => 32x32x26x26\n", - " x = self.conv1(x)\n", - " x = self.relu(x)\n", - " x = x.flatten(start_dim=1)\n", - " x = self.d1(x)\n", - " x = self.sigmoid(x)\n", - "\n", - " return [key, x]\n", - "\n", - "\n", - "circuit = MyModel()\n", - "\n", - "output = circuit(0, torch.tensor(Xdb.iloc[0,0][0].reshape(1,1,128,130)))\n", - "\n", - "output\n", - "\n", - "\n", - "\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here we leverage the classic Adam optimizer, coupled with 0.001 weight decay so as to regularize the model. The weight decay (a.k.a L2 regularization) can also help on the zk-circuit end of things in that it prevents inputs to Halo2 lookup tables from falling out of range (lookup tables are how we represent non-linearities like ReLU and Sigmoid inside our circuits). " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from tqdm import tqdm\n", - "\n", - "# Train the model using pytorch\n", - "n_epochs = 10 # number of epochs to run\n", - "batch_size = 10 # size of each batch\n", - "\n", - "\n", - "loss_fn = nn.MSELoss() #MSE\n", - "# adds l2 regularization\n", - "optimizer = torch.optim.Adam(circuit.parameters(), lr=0.001, weight_decay=0.001)\n", - "\n", - "# randomly shuffle dataset\n", - "Xdb = Xdb.sample(frac=1).reset_index(drop=True)\n", - "\n", - "# split into train and test and validation sets with 80% train, 10% test, 10% validation\n", - "train = Xdb.iloc[:int(len(Xdb)*0.8)]\n", - "test = Xdb.iloc[int(len(Xdb)*0.8):int(len(Xdb)*0.9)]\n", - "val = Xdb.iloc[int(len(Xdb)*0.9):]\n", - "\n", - "batches_per_epoch = len(train)\n", - "\n", - "\n", - "def get_loss(Xbatch, ybatch):\n", - " y_pred = circuit(0, Xbatch)[1]\n", - " loss = loss_fn(y_pred, ybatch)\n", - " return loss\n", - "\n", - "for epoch in range(n_epochs):\n", - " # X is a torch Variable\n", - " permutation = torch.randperm(batches_per_epoch)\n", - "\n", - " with tqdm(range(batches_per_epoch), unit=\"batch\", mininterval=0) as bar:\n", - " bar.set_description(f\"Epoch {epoch}\")\n", - " for i in bar:\n", - " start = i * batch_size\n", - " # take a batch\n", - " indices = np.random.choice(batches_per_epoch, batch_size)\n", - "\n", - " data = np.concatenate(train.iloc[indices.tolist(),0].values)\n", - " labels = train.iloc[indices.tolist(),1].values.astype(np.float32)\n", - "\n", - " data = data.reshape(batch_size,1,128,130)\n", - " labels = labels.reshape(batch_size,1)\n", - "\n", - " # convert to tensors\n", - " Xbatch = torch.tensor(data)\n", - " ybatch = torch.tensor(labels)\n", - "\n", - " # forward pass\n", - " loss = get_loss(Xbatch, ybatch)\n", - " # backward pass\n", - " optimizer.zero_grad()\n", - " loss.backward()\n", - " # update weights\n", - " optimizer.step()\n", - "\n", - " bar.set_postfix(\n", - " batch_loss=float(loss),\n", - " )\n", - " # get validation loss\n", - " val_data = np.concatenate(val.iloc[:,0].values)\n", - " val_labels = val.iloc[:,1].values.astype(np.float32)\n", - " val_data = val_data.reshape(len(val),1,128,130)\n", - " val_labels = val_labels.reshape(len(val),1)\n", - " val_loss = get_loss(torch.tensor(val_data), torch.tensor(val_labels))\n", - " print(f\"Validation loss: {val_loss}\")\n", - "\n", - "\n", - "\n", - "# get validation loss\n", - "test_data = np.concatenate(test.iloc[:,0].values)\n", - "test_labels = val.iloc[:,1].values.astype(np.float32)\n", - "test_data = val_data.reshape(len(val),1,128,130)\n", - "test_labels = val_labels.reshape(len(val),1)\n", - "test_loss = get_loss(torch.tensor(test_data), torch.tensor(test_labels))\n", - "print(f\"Test loss: {test_loss}\")\n", - "\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#\n", - "val_data = {\n", - " \"input_data\": [np.zeros(100).tolist(), np.concatenate(val.iloc[:100,0].values).flatten().tolist()],\n", - "}\n", - "# save as json file\n", - "with open(\"val_data.json\", \"w\") as f:\n", - " json.dump(val_data, f)\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "x = 0.1*torch.rand(1,*[1, 128, 130], requires_grad=True)\n", - "key = torch.rand(1,*[1], requires_grad=True)\n", - "\n", - "# Flips the neural net into inference mode\n", - "circuit.eval()\n", - "\n", - " # Export the model\n", - "torch.onnx.export(circuit, # model being run\n", - " (key, x), # model input (or a tuple for multiple inputs)\n", - " \"network.onnx\", # where to save the model (can be a file or file-like object)\n", - " export_params=True, # store the trained parameter weights inside the model file\n", - " opset_version=10, # the ONNX version to export the model to\n", - " do_constant_folding=True, # whether to execute constant folding for optimization\n", - " input_names = ['input'], # the model's input names\n", - " output_names = ['output'], # the model's output names\n", - " dynamic_axes={'input' : {0 : 'batch_size'},\n", - " 'input.1' : {0 : 'batch_size'}, # variable length axes\n", - " 'output' : {0 : 'batch_size'}})\n", - "\n", - "key_array = ((key).detach().numpy()).reshape([-1]).tolist()\n", - "data_array = ((x).detach().numpy()).reshape([-1]).tolist()\n", - "\n", - "data = dict(input_data = [key_array, data_array])\n", - "\n", - " # Serialize data into file:\n", - "json.dump( data, open(\"input.json\", 'w' ))\n", - "\n", - "\n", - "# ezkl.export(circuit, input_shape = [[1], [1025, 130]], run_gen_witness=False, run_calibrate_settings=False)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here we set the visibility of the different parts of the circuit, whereby the model params and the outputs of the computational graph (the key and the judgment) are public" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import ezkl\n", - "import os \n", - "\n", - "model_path = os.path.join('network.onnx')\n", - "compiled_model_path = os.path.join('network.compiled')\n", - "pk_path = os.path.join('test.pk')\n", - "vk_path = os.path.join('test.vk')\n", - "settings_path = os.path.join('settings.json')\n", - "srs_path = os.path.join('kzg.params')\n", - "data_path = os.path.join('input.json')\n", - "val_data = os.path.join('val_data.json')\n", - "\n", - "run_args = ezkl.PyRunArgs()\n", - "run_args.input_visibility = \"private\"\n", - "run_args.param_visibility = \"fixed\"\n", - "run_args.output_visibility = \"public\"\n", - "run_args.variables = [(\"batch_size\", 1)]\n", - "\n", - "\n", - "# TODO: Dictionary outputs\n", - "res = ezkl.gen_settings(model_path, settings_path, py_run_args=run_args)\n", - "assert res == True\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we generate a settings file. This file basically instantiates a bunch of parameters that determine their circuit shape, size etc... Because of the way we represent nonlinearities in the circuit (using Halo2's [lookup tables](https://zcash.github.io/halo2/design/proving-system/lookup.html)), it is often best to _calibrate_ this settings file as some data can fall out of range of these lookups.\n", - "\n", - "You can pass a dataset for calibration that will be representative of real inputs you might find if and when you deploy the prover. Here we use the validation dataset we used during training. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "\n", - "res = await ezkl.calibrate_settings(val_data, model_path, settings_path, \"resources\")\n", - "assert res == True\n", - "print(\"verified\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", - "assert res == True" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As we use Halo2 with KZG-commitments we need an SRS string from (preferably) a multi-party trusted setup ceremony. For an overview of the procedures for such a ceremony check out [this page](https://blog.ethereum.org/2023/01/16/announcing-kzg-ceremony). The `get_srs` command retrieves a correctly sized SRS given the calibrated settings file from [here](https://github.com/han0110/halo2-kzg-srs). \n", - "\n", - "These SRS were generated with [this](https://github.com/privacy-scaling-explorations/perpetualpowersoftau) ceremony. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "res = ezkl.get_srs(srs_path, settings_path)\n", - "\n", - "assert os.path.exists(srs_path)\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We now need to generate the (partial) circuit witness. These are the model outputs (and any hashes) that are generated when feeding the previously generated `input.json` through the circuit / model. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "witness_path = \"witness.json\"\n", - "\n", - "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", - "assert os.path.isfile(witness_path)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As a sanity check we can run a mock proof. This just checks that all the constraints are valid. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "\n", - "res = ezkl.mock(witness_path, compiled_model_path)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here we setup verifying and proving keys for the circuit. As the name suggests the proving key is needed for ... proving and the verifying key is needed for ... verifying. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "!export RUST_LOG=trace\n", - "# HERE WE SETUP THE CIRCUIT PARAMS\n", - "# WE GOT KEYS\n", - "# WE GOT CIRCUIT PARAMETERS\n", - "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", - "res = ezkl.setup(\n", - " compiled_model_path,\n", - " vk_path,\n", - " pk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "assert os.path.isfile(vk_path)\n", - "assert os.path.isfile(pk_path)\n", - "assert os.path.isfile(settings_path)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we generate a full proof. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# GENERATE A PROOF\n", - "\n", - "proof_path = os.path.join('test.pf')\n", - "\n", - "res = ezkl.prove(\n", - " witness_path,\n", - " compiled_model_path,\n", - " pk_path,\n", - " proof_path,\n", - " srs_path,\n", - " \"single\",\n", - " )\n", - "\n", - "print(res)\n", - "assert os.path.isfile(proof_path)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And verify it as a sanity check. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# VERIFY IT\n", - "\n", - "res = ezkl.verify(\n", - " proof_path,\n", - " settings_path,\n", - " vk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "print(\"verified\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "abi_path = 'test.abi'\n", - "sol_code_path = 'test.sol'\n", - "vk_path = os.path.join('test.vk')\n", - "srs_path = os.path.join('kzg.params')\n", - "settings_path = os.path.join('settings.json')\n", - "\n", - "\n", - "res = ezkl.create_evm_verifier(\n", - " vk_path,\n", - " srs_path,\n", - " settings_path,\n", - " sol_code_path,\n", - " abi_path,\n", - " )\n", - "\n", - "assert res == True" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Verify if the Verifier Works Locally" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Deploy The Contract" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Make sure anvil is running locally first\n", - "# run with $ anvil -p 3030\n", - "# we use the default anvil node here\n", - "import json\n", - "\n", - "address_path = os.path.join(\"address.json\")\n", - "\n", - "res = ezkl.deploy_evm(\n", - " address_path,\n", - " sol_code_path,\n", - " 'http://127.0.0.1:3030'\n", - ")\n", - "\n", - "assert res == True\n", - "\n", - "with open(address_path, 'r') as file:\n", - " addr = file.read().rstrip()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# make sure anvil is running locally\n", - "# $ anvil -p 3030\n", - "\n", - "res = ezkl.verify_evm(\n", - " proof_path,\n", - " addr,\n", - " \"http://127.0.0.1:3030\"\n", - ")\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.13" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Voice judgoor\n", + "\n", + "Here we showcase a full-end-to-end flow of:\n", + "1. training a model for a specific task (judging voices)\n", + "2. creating a proof of judgment\n", + "3. creating and deploying an evm verifier\n", + "4. verifying the proof of judgment using the verifier\n", + "\n", + "First we download a few voice related datasets from kaggle, which are all labelled using the same emotion and tone labelling standard.\n", + "\n", + "We have 8 emotions in both speaking and singing datasets: neutral, calm, happy, sad, angry, fear, disgust, surprise.\n", + "\n", + "To download the dataset make sure you have the kaggle cli installed in your local env `pip install kaggle`. Make sure you set up your `kaggle.json` file as detailed [here](https://www.kaggle.com/docs/api#getting-started-installation-&-authentication).\n", + "Then run the associated `voice_data.sh` data download script: `sh voice_data.sh`.\n", + "\n", + "Make sure you set the `VOICE_DATA_DIR` variables to point to the directory the `voice_data.sh` script has downloaded to. This script also accepts an argument to download to a specific directory: `sh voice_data.sh /path/to/voice/data`.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "voice_data_dir: .\n" + ] + } + ], + "source": [ + "\n", + "import os\n", + "# os.environ[\"VOICE_DATA_DIR\"] = \".\"\n", + "\n", + "voice_data_dir = os.environ.get('VOICE_DATA_DIR')\n", + "\n", + "# if is none set to \"\" \n", + "if voice_data_dir is None:\n", + " voice_data_dir = \"\"\n", + "\n", + "print(\"voice_data_dir: \", voice_data_dir)\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### TESS Dataset" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# check if notebook is in colab\n", + "try:\n", + " # install ezkl\n", + " import google.colab\n", + " import subprocess\n", + " import sys\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", + "\n", + "# rely on local installation of ezkl if the notebook is not in colab\n", + "except:\n", + " pass\n", + "\n", + "from torch import nn\n", + "import ezkl\n", + "import os\n", + "import json\n", + "import pandas as pd\n", + "import logging\n", + "\n", + "# read in VOICE_DATA_DIR from environment variable\n", + "\n", + "# FORMAT = '%(levelname)s %(name)s %(asctime)-15s %(filename)s:%(lineno)d %(message)s'\n", + "# logging.basicConfig(format=FORMAT)\n", + "# logging.getLogger().setLevel(logging.INFO)\n", + "\n", + "\n", + "Tess = os.path.join(voice_data_dir, \"data/TESS/\")\n", + "\n", + "tess = os.listdir(Tess)\n", + "\n", + "emotions = []\n", + "files = []\n", + "\n", + "for item in tess:\n", + " items = os.listdir(Tess + item)\n", + " for file in items:\n", + " part = file.split('.')[0]\n", + " part = part.split('_')[2]\n", + " if part == 'ps':\n", + " emotions.append('surprise')\n", + " else:\n", + " emotions.append(part)\n", + " files.append(Tess + item + '/' + file)\n", + "\n", + "tess_df = pd.concat([pd.DataFrame(emotions, columns=['Emotions']), pd.DataFrame(files, columns=['Files'])], axis=1)\n", + "tess_df" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### RAVDESS SONG dataset" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Ravdess = os.path.join(voice_data_dir, \"data/RAVDESS_SONG/audio_song_actors_01-24/\")\n", + "\n", + "ravdess_list = os.listdir(Ravdess)\n", + "\n", + "files = []\n", + "emotions = []\n", + "\n", + "for item in ravdess_list:\n", + " actor = os.listdir(Ravdess + item)\n", + " for file in actor:\n", + " name = file.split('.')[0]\n", + " parts = name.split('-')\n", + " emotions.append(int(parts[2]))\n", + " files.append(Ravdess + item + '/' + file)\n", + "\n", + "emotion_data = pd.DataFrame(emotions, columns=['Emotions'])\n", + "files_data = pd.DataFrame(files, columns=['Files'])\n", + "\n", + "ravdess_song_df = pd.concat([emotion_data, files_data], axis=1)\n", + "\n", + "ravdess_song_df.Emotions.replace({1:'neutral', 2:'calm', 3:'happy', 4:'sad', 5:'angry', 6:'fear', 7:'disgust', 8:'surprise'}, inplace=True)\n", + "\n", + "ravdess_song_df" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### RAVDESS SPEECH Dataset" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Ravdess = os.path.join(voice_data_dir, \"data/RAVDESS_SPEECH/audio_speech_actors_01-24/\")\n", + "\n", + "ravdess_list = os.listdir(Ravdess)\n", + "\n", + "files = []\n", + "emotions = []\n", + "\n", + "for item in ravdess_list:\n", + " actor = os.listdir(Ravdess + item)\n", + " for file in actor:\n", + " name = file.split('.')[0]\n", + " parts = name.split('-')\n", + " emotions.append(int(parts[2]))\n", + " files.append(Ravdess + item + '/' + file)\n", + " \n", + "emotion_data = pd.DataFrame(emotions, columns=['Emotions'])\n", + "files_data = pd.DataFrame(files, columns=['Files'])\n", + "\n", + "ravdess_df = pd.concat([emotion_data, files_data], axis=1)\n", + "\n", + "ravdess_df.Emotions.replace({1:'neutral', 2:'calm', 3:'happy', 4:'sad', 5:'angry', 6:'fear', 7:'disgust', 8:'surprise'}, inplace=True)\n", + "\n", + "ravdess_df" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### CREMA Dataset" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Crema = os.path.join(voice_data_dir, \"data/CREMA-D/\")\n", + "\n", + "crema = os.listdir(Crema)\n", + "emotions = []\n", + "files = []\n", + "\n", + "for item in crema:\n", + " files.append(Crema + item)\n", + " \n", + " parts = item.split('_')\n", + " if parts[2] == 'SAD':\n", + " emotions.append('sad')\n", + " elif parts[2] == 'ANG':\n", + " emotions.append('angry')\n", + " elif parts[2] == 'DIS':\n", + " emotions.append('disgust')\n", + " elif parts[2] == 'FEA':\n", + " emotions.append('fear')\n", + " elif parts[2] == 'HAP':\n", + " emotions.append('happy')\n", + " elif parts[2] == 'NEU':\n", + " emotions.append('neutral')\n", + " else :\n", + " emotions.append('unknown')\n", + " \n", + "emotions_data = pd.DataFrame(emotions, columns=['Emotions'])\n", + "files_data = pd.DataFrame(files, columns=['Files'])\n", + "\n", + "crema_df = pd.concat([emotions_data, files_data], axis=1)\n", + "\n", + "crema_df" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### SAVEE Dataset" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Savee = os.path.join(voice_data_dir,\"data/SAVEE/\")\n", + "\n", + "savee = os.listdir(Savee)\n", + "\n", + "emotions = []\n", + "files = []\n", + "\n", + "for item in savee:\n", + " files.append(Savee + item)\n", + " part = item.split('_')[1]\n", + " ele = part[:-6]\n", + " if ele == 'a':\n", + " emotions.append('angry')\n", + " elif ele == 'd':\n", + " emotions.append('disgust')\n", + " elif ele == 'f':\n", + " emotions.append('fear')\n", + " elif ele == 'h':\n", + " emotions.append('happy')\n", + " elif ele == 'n':\n", + " emotions.append('neutral')\n", + " elif ele == 'sa':\n", + " emotions.append('sad')\n", + " else:\n", + " emotions.append('surprise')\n", + "\n", + "savee_df = pd.concat([pd.DataFrame(emotions, columns=['Emotions']), pd.DataFrame(files, columns=['Files'])], axis=1)\n", + "savee_df" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Combining all datasets" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.concat([ravdess_df, ravdess_song_df, crema_df, tess_df, savee_df], axis = 0)\n", + "# relabel indices\n", + "df.index = range(len(df.index))\n", + "df.to_csv(\"df.csv\",index=False)\n", + "df\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import seaborn as sns\n", + "sns.histplot(data=df, x=\"Emotions\")\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Training \n", + "\n", + "Here we convert all audio files into 2D frequency-domain spectrograms so that we can leverage convolutional neural networks, which tend to be more efficient than time-series model like RNNs or LSTMs.\n", + "We thus: \n", + "1. Extract the mel spectrogram from each of the audio recordings. \n", + "2. Rescale each of these to the decibel (DB) scale. \n", + "3. Define the model as the following model: `(x) -> (conv) -> (relu) -> (linear) -> (y)`\n", + "\n", + "\n", + "You may notice that we introduce a second computational graph `(key) -> (key)`. The reasons for this are to do with MEV, and if you are not interested you can skip the following paragraph. \n", + "\n", + "Let's say that obtaining a high score from the judge and then submitting said score to the EVM verifier could result in the issuance of a reward (financial or otherwise). There is an incentive then for MEV bots to scalp any issued valid proof and submit a duplicate transaction with the same proof to the verifier contract in the hopes of obtaining the reward before the original issuer. Here we add `(key) -> (key)` such that the transaction creator's public key / address is both a private input AND a public input to the proof. As such the on-chain verification only succeeds if the key passed in during proof time is also passed in as a public input to the contract. The reward issued by the contract can then be irrevocably tied to that key such that even if the proof is submitted by another actor, the reward would STILL go to the original singer / transaction issuer. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "\n", + "import librosa\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "\n", + "#stft extraction from augmented data\n", + "def extract_mel_spec(filename):\n", + " x,sr=librosa.load(filename,duration=3,offset=0.5)\n", + " X = librosa.feature.melspectrogram(y=x, sr=sr)\n", + " Xdb = librosa.power_to_db(X, ref=np.max)\n", + " Xdb = Xdb.reshape(1,128,-1)\n", + " return Xdb\n", + "\n", + "Xdb=df.iloc[:,1].apply(lambda x: extract_mel_spec(x))\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we convert label to a number between 0 and 1 where 1 is pleasant surprised and 0 is disgust and the rest are floats in between. The model loves pleasantly surprised voices and hates disgust ;) " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# get max size\n", + "max_size = 0\n", + "for i in range(len(Xdb)):\n", + " if Xdb[i].shape[2] > max_size:\n", + " max_size = Xdb[i].shape[2]\n", + "\n", + "# 0 pad 2nd dim to max size\n", + "Xdb=Xdb.apply(lambda x: np.pad(x,((0,0),(0,0),(0,max_size-x.shape[2]))))\n", + "\n", + "Xdb=pd.DataFrame(Xdb)\n", + "Xdb['label'] = df['Emotions']\n", + "# convert label to a number between 0 and 1 where 1 is pleasant surprised and 0 is disgust and the rest are floats in betwee\n", + "Xdb['label'] = Xdb['label'].apply(lambda x: 1 if x=='surprise' else 0 if x=='disgust' else 0.2 if x=='fear' else 0.4 if x=='happy' else 0.6 if x=='sad' else 0.8)\n", + "\n", + "Xdb.iloc[0,0][0].shape" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "# Defines the model\n", + "# we got convs, we got relu, we got linear layers\n", + "# What else could one want ????\n", + "\n", + "class MyModel(nn.Module):\n", + " def __init__(self):\n", + " super(MyModel, self).__init__()\n", + "\n", + " self.conv1 = nn.Conv2d(in_channels=1, out_channels=1, kernel_size=5, stride=4)\n", + "\n", + " self.d1 = nn.Linear(992, 1)\n", + "\n", + " self.sigmoid = nn.Sigmoid()\n", + " self.relu = nn.ReLU()\n", + "\n", + " def forward(self, key, x):\n", + " # 32x1x28x28 => 32x32x26x26\n", + " x = self.conv1(x)\n", + " x = self.relu(x)\n", + " x = x.flatten(start_dim=1)\n", + " x = self.d1(x)\n", + " x = self.sigmoid(x)\n", + "\n", + " return [key, x]\n", + "\n", + "\n", + "circuit = MyModel()\n", + "\n", + "output = circuit(0, torch.tensor(Xdb.iloc[0,0][0].reshape(1,1,128,130)))\n", + "\n", + "output\n", + "\n", + "\n", + "\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we leverage the classic Adam optimizer, coupled with 0.001 weight decay so as to regularize the model. The weight decay (a.k.a L2 regularization) can also help on the zk-circuit end of things in that it prevents inputs to Halo2 lookup tables from falling out of range (lookup tables are how we represent non-linearities like ReLU and Sigmoid inside our circuits). " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from tqdm import tqdm\n", + "\n", + "# Train the model using pytorch\n", + "n_epochs = 10 # number of epochs to run\n", + "batch_size = 10 # size of each batch\n", + "\n", + "\n", + "loss_fn = nn.MSELoss() #MSE\n", + "# adds l2 regularization\n", + "optimizer = torch.optim.Adam(circuit.parameters(), lr=0.001, weight_decay=0.001)\n", + "\n", + "# randomly shuffle dataset\n", + "Xdb = Xdb.sample(frac=1).reset_index(drop=True)\n", + "\n", + "# split into train and test and validation sets with 80% train, 10% test, 10% validation\n", + "train = Xdb.iloc[:int(len(Xdb)*0.8)]\n", + "test = Xdb.iloc[int(len(Xdb)*0.8):int(len(Xdb)*0.9)]\n", + "val = Xdb.iloc[int(len(Xdb)*0.9):]\n", + "\n", + "batches_per_epoch = len(train)\n", + "\n", + "\n", + "def get_loss(Xbatch, ybatch):\n", + " y_pred = circuit(0, Xbatch)[1]\n", + " loss = loss_fn(y_pred, ybatch)\n", + " return loss\n", + "\n", + "for epoch in range(n_epochs):\n", + " # X is a torch Variable\n", + " permutation = torch.randperm(batches_per_epoch)\n", + "\n", + " with tqdm(range(batches_per_epoch), unit=\"batch\", mininterval=0) as bar:\n", + " bar.set_description(f\"Epoch {epoch}\")\n", + " for i in bar:\n", + " start = i * batch_size\n", + " # take a batch\n", + " indices = np.random.choice(batches_per_epoch, batch_size)\n", + "\n", + " data = np.concatenate(train.iloc[indices.tolist(),0].values)\n", + " labels = train.iloc[indices.tolist(),1].values.astype(np.float32)\n", + "\n", + " data = data.reshape(batch_size,1,128,130)\n", + " labels = labels.reshape(batch_size,1)\n", + "\n", + " # convert to tensors\n", + " Xbatch = torch.tensor(data)\n", + " ybatch = torch.tensor(labels)\n", + "\n", + " # forward pass\n", + " loss = get_loss(Xbatch, ybatch)\n", + " # backward pass\n", + " optimizer.zero_grad()\n", + " loss.backward()\n", + " # update weights\n", + " optimizer.step()\n", + "\n", + " bar.set_postfix(\n", + " batch_loss=float(loss),\n", + " )\n", + " # get validation loss\n", + " val_data = np.concatenate(val.iloc[:,0].values)\n", + " val_labels = val.iloc[:,1].values.astype(np.float32)\n", + " val_data = val_data.reshape(len(val),1,128,130)\n", + " val_labels = val_labels.reshape(len(val),1)\n", + " val_loss = get_loss(torch.tensor(val_data), torch.tensor(val_labels))\n", + " print(f\"Validation loss: {val_loss}\")\n", + "\n", + "\n", + "\n", + "# get validation loss\n", + "test_data = np.concatenate(test.iloc[:,0].values)\n", + "test_labels = val.iloc[:,1].values.astype(np.float32)\n", + "test_data = val_data.reshape(len(val),1,128,130)\n", + "test_labels = val_labels.reshape(len(val),1)\n", + "test_loss = get_loss(torch.tensor(test_data), torch.tensor(test_labels))\n", + "print(f\"Test loss: {test_loss}\")\n", + "\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#\n", + "val_data = {\n", + " \"input_data\": [np.zeros(100).tolist(), np.concatenate(val.iloc[:100,0].values).flatten().tolist()],\n", + "}\n", + "# save as json file\n", + "with open(\"val_data.json\", \"w\") as f:\n", + " json.dump(val_data, f)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = 0.1*torch.rand(1,*[1, 128, 130], requires_grad=True)\n", + "key = torch.rand(1,*[1], requires_grad=True)\n", + "\n", + "# Flips the neural net into inference mode\n", + "circuit.eval()\n", + "\n", + " # Export the model\n", + "torch.onnx.export(circuit, # model being run\n", + " (key, x), # model input (or a tuple for multiple inputs)\n", + " \"network.onnx\", # where to save the model (can be a file or file-like object)\n", + " export_params=True, # store the trained parameter weights inside the model file\n", + " opset_version=10, # the ONNX version to export the model to\n", + " do_constant_folding=True, # whether to execute constant folding for optimization\n", + " input_names = ['input'], # the model's input names\n", + " output_names = ['output'], # the model's output names\n", + " dynamic_axes={'input' : {0 : 'batch_size'},\n", + " 'input.1' : {0 : 'batch_size'}, # variable length axes\n", + " 'output' : {0 : 'batch_size'}})\n", + "\n", + "key_array = ((key).detach().numpy()).reshape([-1]).tolist()\n", + "data_array = ((x).detach().numpy()).reshape([-1]).tolist()\n", + "\n", + "data = dict(input_data = [key_array, data_array])\n", + "\n", + " # Serialize data into file:\n", + "json.dump( data, open(\"input.json\", 'w' ))\n", + "\n", + "\n", + "# ezkl.export(circuit, input_shape = [[1], [1025, 130]], run_gen_witness=False, run_calibrate_settings=False)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we set the visibility of the different parts of the circuit, whereby the model params and the outputs of the computational graph (the key and the judgment) are public" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import ezkl\n", + "import os \n", + "\n", + "model_path = os.path.join('network.onnx')\n", + "compiled_model_path = os.path.join('network.compiled')\n", + "pk_path = os.path.join('test.pk')\n", + "vk_path = os.path.join('test.vk')\n", + "settings_path = os.path.join('settings.json')\n", + "srs_path = os.path.join('kzg.params')\n", + "data_path = os.path.join('input.json')\n", + "val_data = os.path.join('val_data.json')\n", + "\n", + "run_args = ezkl.PyRunArgs()\n", + "run_args.input_visibility = \"private\"\n", + "run_args.param_visibility = \"fixed\"\n", + "run_args.output_visibility = \"public\"\n", + "run_args.variables = [(\"batch_size\", 1)]\n", + "\n", + "\n", + "# TODO: Dictionary outputs\n", + "res = ezkl.gen_settings(model_path, settings_path, py_run_args=run_args)\n", + "assert res == True\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we generate a settings file. This file basically instantiates a bunch of parameters that determine their circuit shape, size etc... Because of the way we represent nonlinearities in the circuit (using Halo2's [lookup tables](https://zcash.github.io/halo2/design/proving-system/lookup.html)), it is often best to _calibrate_ this settings file as some data can fall out of range of these lookups.\n", + "\n", + "You can pass a dataset for calibration that will be representative of real inputs you might find if and when you deploy the prover. Here we use the validation dataset we used during training. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "\n", + "res = ezkl.calibrate_settings(val_data, model_path, settings_path, \"resources\")\n", + "assert res == True\n", + "print(\"verified\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", + "assert res == True" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we use Halo2 with KZG-commitments we need an SRS string from (preferably) a multi-party trusted setup ceremony. For an overview of the procedures for such a ceremony check out [this page](https://blog.ethereum.org/2023/01/16/announcing-kzg-ceremony). The `get_srs` command retrieves a correctly sized SRS given the calibrated settings file from [here](https://github.com/han0110/halo2-kzg-srs). \n", + "\n", + "These SRS were generated with [this](https://github.com/privacy-scaling-explorations/perpetualpowersoftau) ceremony. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "res = ezkl.get_srs(srs_path, settings_path)\n", + "\n", + "assert os.path.exists(srs_path)\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now need to generate the (partial) circuit witness. These are the model outputs (and any hashes) that are generated when feeding the previously generated `input.json` through the circuit / model. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "witness_path = \"witness.json\"\n", + "\n", + "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", + "assert os.path.isfile(witness_path)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As a sanity check we can run a mock proof. This just checks that all the constraints are valid. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "\n", + "res = ezkl.mock(witness_path, compiled_model_path)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we setup verifying and proving keys for the circuit. As the name suggests the proving key is needed for ... proving and the verifying key is needed for ... verifying. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!export RUST_LOG=trace\n", + "# HERE WE SETUP THE CIRCUIT PARAMS\n", + "# WE GOT KEYS\n", + "# WE GOT CIRCUIT PARAMETERS\n", + "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", + "res = ezkl.setup(\n", + " compiled_model_path,\n", + " vk_path,\n", + " pk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "assert os.path.isfile(vk_path)\n", + "assert os.path.isfile(pk_path)\n", + "assert os.path.isfile(settings_path)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we generate a full proof. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# GENERATE A PROOF\n", + "\n", + "proof_path = os.path.join('test.pf')\n", + "\n", + "res = ezkl.prove(\n", + " witness_path,\n", + " compiled_model_path,\n", + " pk_path,\n", + " proof_path,\n", + " srs_path,\n", + " \"single\",\n", + " )\n", + "\n", + "print(res)\n", + "assert os.path.isfile(proof_path)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And verify it as a sanity check. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# VERIFY IT\n", + "\n", + "res = ezkl.verify(\n", + " proof_path,\n", + " settings_path,\n", + " vk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "print(\"verified\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "abi_path = 'test.abi'\n", + "sol_code_path = 'test.sol'\n", + "vk_path = os.path.join('test.vk')\n", + "srs_path = os.path.join('kzg.params')\n", + "settings_path = os.path.join('settings.json')\n", + "\n", + "\n", + "res = ezkl.create_evm_verifier(\n", + " vk_path,\n", + " srs_path,\n", + " settings_path,\n", + " sol_code_path,\n", + " abi_path,\n", + " )\n", + "\n", + "assert res == True" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Verify if the Verifier Works Locally" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Deploy The Contract" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Make sure anvil is running locally first\n", + "# run with $ anvil -p 3030\n", + "# we use the default anvil node here\n", + "import json\n", + "\n", + "address_path = os.path.join(\"address.json\")\n", + "\n", + "res = ezkl.deploy_evm(\n", + " address_path,\n", + " sol_code_path,\n", + " 'http://127.0.0.1:3030'\n", + ")\n", + "\n", + "assert res == True\n", + "\n", + "with open(address_path, 'r') as file:\n", + " addr = file.read().rstrip()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# make sure anvil is running locally\n", + "# $ anvil -p 3030\n", + "\n", + "res = ezkl.verify_evm(\n", + " proof_path,\n", + " addr,\n", + " \"http://127.0.0.1:3030\"\n", + ")\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/examples/notebooks/xgboost.ipynb b/examples/notebooks/xgboost.ipynb index 37354d56..7acf68c8 100644 --- a/examples/notebooks/xgboost.ipynb +++ b/examples/notebooks/xgboost.ipynb @@ -1,334 +1,334 @@ { - "cells": [ - { - "attachments": { - "image-3.png": { - "image/png": "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BOXk5JhLEhMTg7k0qHO190bvr4GdAwEEEEAAATsLEFjs3HqUvYGAv8Dy/vvvyxVXXGH+RfuDDz6Qq666SjSwTJ8+XZ566imzAtNdd90lM2fOpIelgSgvQiFQXFwshYWFkpycHIrbN7inhpbMzEzb70vUoFK8QAABBBBwnQCBxXVN7twKNxdYhgwZImeeeab87W9/M0FFA8upp54qp512muzdu1d69eolf//73wkszv31sEzNjhw5IjokTJerDvWhm4/qYhL6xYEAAggggIBdBQgsdm05yt1EwFdgaXJSozd0srMO0dFx/1Y8mHRvxVZpW5l0LlUgE+3b9pT/u1oDS6dOnRy33Hd72HAPBBBAAAH7CBBY7NNWlLQFgdYElhZuGfGPCSwRb4J2L4C/wJKSkiJnn322mXOyePFi2bRpU0DP7tGjh+imqb4OAosvFd5DAAEEELCbAIHFbi1Gef0KEFj80vCBhQT8BZb77rtP/vnPf5ohijfddNPRn7t162aGkOlQMj10In3nzp1l//79pufkjjvukMcee0y8n9evKoGlvgY/I4AAAgjYVYDAYteWo9xNBHQuSocOHZq8b+c3vD0sujwthzMEfAWWLl26mL2BvHsAaSjR5Yh1jpWu8tWzZ0/55JNPZOfOnaJhZu3atdK1a1dZtmyZeT179mxZuXJlEyACSxMS3kAAAQQQsKEAgcWGjUaRfQvs2rWrxQ34fF9p3Xdra2vNalL6L+oczhDwFVgGDhwouqnpa6+91qCSOln+xBNPNF+64tfcuXPNohELFy40AUXf+8///E/561//2uA67wsCi1eC7wgggAACdhYgsNi59Sh7AwHtYUlKSmrwnt1faA+L/mt7Wlqa3atC+f8t4Cuw6CaP9957r/zpT38yE/KPOeYYKSkpMctxv/3222YDyP79+8sbb7xhlijWz88//3xz/j333CMPPvigT18Ci08W3kQAAQQQsJkAgcVmDUZx/QsQWPzb8Il1BHwFFi2dLrM9btw4ycvLk9TUVHniiSfkyiuvNL2Guprd4cOHZcGCBfKrX/3KzHOJioqSl156Sa6//noz6V73GGp8EFgai/AaAQQQQMCOAgQWO7YaZfYpQGDxycKbFhPIzs42vSi+9mHReSvaS6i9K95De1+0p63+0fg9DS++lubW++i8Lnro6uvxMwIIIICA3QQILHZrMcrrV4DA4peGDywkkJ+fL9rzEY7hi/qc5ORk0SWTORBAAAEEELCrAIHFri1HuZsI+AosEydONOeVlZWZScq6SWRLx8iRI82QHF11qbi4uKXTQ/o5c1hCyhuRm2uI0CWI4+PjzUpgoSpEZWWl6KIN3bt3D9UjuC8CCCCAAAJhESCwhIWZh4RDwFdgmTJlisybN0+GDx8uOmxm3bp1zRZFlw/WP/C+//57OfPMM+Wjjz5q9vxQf0hgCbVwZO5fUFAgusKXHjExMe0aXDSUa1DR33ftWdEeFg4EEEAAAQTsLEBgsXPrUfYGAr4Ci05I3rZtm/Tp00fee++9o5vr6SpLvXv3NtcfPHhQ1q9f3+BeI0aMEP0X6s2bNzd4P9wvCCzhFg/f87TXT3tbtI01tDR36NwWDR++NodsfJ3OZdGV5XTIWUv3bXwtrxFAAAEEELCiAIHFiq1CmVol4CuweHtYdOKxbsLn7THRzfg6depknqMTk3UFJu8xYMAAsynfihUrvG9F7DuBJWL0lnqwDh/LyspqsYfQUoWmMAgggAACCLSTAIGlnSC5TeQFfAUW7WHZvn276AZ82lvi7THRncW9KycVFhbKoUOHTAV0SNhVV10lGzZsEF3NSXcUj+RBYImkvnWerb+/ffv2Nb+X1ikVJUEAAQQQQCA8AgSW8DjzlDAIHDhwwExkDsOjwvYI72pS2iPE4V4Beljc2/bUHAEEEEBAhMDCb4FjBLz7W+gme045NLBoT5AOaeNwr4AOX+zXr1+TuVbuFaHmCCCAAAJuEiCwuKm1HV7XoqIi0dWXwrG/RTgoq3RZWs8E6q5du5rdzsPxTJ5hTQENLD169JAtW7ZYs4CUCgEEEEAAgRAKEFhCiMutwy+gqyjpJHpd0lVXVrLjUV1dfbT82rvilABmx7awSpl1SGBqaqpZbtsqZaIcCCCAAAIIhEuAwBIuaZ4TNgFdjlgnq3v3omjvByckJIhO2tdJ/qE4tOxxcXFmoYBQ3J972k+gf//+or933kUj7FcDSowAAggggEDrBQgsrbfjSpcK6L909+zZUzZu3OhSAaodbgENLMXFxQ2W3w53GXgeAggggAACkRIgsERKnufaWuCkk06SPXv28AekrVvRPoXXjUx1A1TdbJIDAQQQQAABtwkQWNzW4tS3XQS0l0WHhelys7t37zb/+t0uN+YmCDQS0B3ue/XqRY9eIxdeIoAAAgi4R4DA4p62pqYhENDQouFF/6jMzc01PS466Z8DgfYSGDx4sFn9Licnp71uyX0QQAABBBCwlQCBxVbNRWGtKqA7keuXLj+rXzrh/9ChQ6JLLevcAw4EWiOQnp5uljPesGFDay7nGgQQQAABBBwhQGBxRDNSCSsJJCYmmqFi2uui4UVXd9KVv/Ly8kQ3gtR5CPqdA4HmBHS44THHHCO7du0yPSzNnctnCCCAAAIIOFmAwOLk1qVulhDQJYp1DoKGFt1TxRtoNLjoV0VFhdk7RkOMLsnMgYDuIzR06FApLCyUAwcOAIIAAggggICrBQgsrm5+Kh8pgZiYGBNcNMDo5pC6yaV3g0hvL4w30OhGkvTIRKqlwv/c2NhYGThwoAmzuhIdBwIIIIAAAm4XILC4/TeA+ltKQHtjtAdGw4v3S4cGaaDRnhhfX/TKWKoJ21QYnQfVr18/OXLkiOzbt69N9+JiBBBAAAEEnCJAYHFKS1IPRwvov7rrXBhfX/qZBhk9dAiRBpj6wUYXAOCwvoAOG9RV57RXRVec40AAAQQQQACB/xMgsPCbgIDNBbT3RXthOnfubObJNA41OqSscYDRlcs02Oi8Go7ICuiQQA0rpaWlZmU5/c6BAAIIIIAAAj8IEFh+sOAnBBwpoGGmfojR1cv00Pd1Lo23R0a/e7804Hh/diRKhCule6vs3bvXzFXRwKk/6zAwDgQQQAABBBBoKkBgaWrCOwi4RsDbO+MNNfrd+6UhR4ebaS9M/QDTOODU1dU5zksXPNChdFr/thx6DzVWS++RlZVlNhtV14MHD5ovJxp668t3BBBAAAEE2ipAYGmrINcj4GAB/WNbFwLwF2j0ff3Du1IXBPD00Ogf3iUlJUeHm2m40SFpdjk0mOk8IK2TLi2sX2051MN7j9TUVBk3bpx069bN3HLnzp2yadOmttyeaxFAAAEEEHCFAIHFFc1MJREInYC3R8YbarwBx/u+/sHuHV7m/a4roB0+fPjo+1ZYGEDnjmhY0WFyWof2PDS06ZeuAKZzVjQQ6aGbiXIggAACCCCAQPMCBJbmffgUAQTaKKABwBte9LuGAZ1HoyHF+35NTc3R8GJ6bP49n0avLSgoMJ+1sRgtXp6fn2/2u/Huh9PiBUGeoL03Wp/MzMwgr+R0BBBAAAEE3C1AYHF3+1N7BCwhoCGmcc+MhhkNDzE6LM079OzfQcYbahoPQWtLZQ4dOmTKoMPgQnVoaPEOCQvVM7gvAggggAACThMgsDitRakPAg4V8PbGNA423tf63TvkzBtovK/1u76nX/UPXa1Lj23btsmBAwfMpp3eOSf1z2uvn3V+jy5hzIEAAggggAACgQsQWAK34kwEELCwgAYN75Azb7hp/FqHZHnDizfM9O/f3ww7W7BggbneV2C57LLL5O233zZDxuoTnHXWWbJ+/Xqzf4r3fV/veT8jsHgl+I4AAggggEDgAgSWwK04EwEEbC5Qf9Uzb6jRXpYOHTrI66+/LjqXpnFg0UnyDz74oLzxxhvy+eefG4HExEQzD2fChAmybNky2b17t+md0bk59d9rzEVgaSzCawQQQAABBFoWILC0bMQZCCDgUAENK7pSl375GxJ2/vnny5YtW2Ty5MnyyCOPSO/eveWaa66RDRs2yPjx4+Xxxx83Cwg0fk9DTOODwNJYhNcIIIAAAgi0LEBgadmIMxBAwAUC/gLL3/72N3nyySdNSPn73/8uOuRLe1V27dol06ZNk08//dTsr9L4PQKLC35pqCICCCCAQFgECCxhYeYhCCBgdQFfgUXnt9x2223y8ccfy9ChQ81cFd1PZc2aNbJ161a58cYbZd68eTJq1Kgm7xFYrN7ilA8BBBBAwC4CBBa7tBTlRACBkAr4Ciw6zEsn4+/Zs8c8+/7775eZM2eaoHLw4EEZOHCgPPXUU6JDvTS81H+PwBLS5uLmCCCAAAIuEiCwuKixqSoCCPgXCHYfltjYWLN7ff07+nqv/ufl5eXSvXv3+m/xMwIIIIAAAgi0IEBgaQGIjxFAwB0C2dnZZoUw3c8lFEdtba1ZUpnAEgpd7okAAggg4GQBAouTW5e6IYBAwALFxcWiX7pkcSiOsrIy6dixo3Tq1CkUt+eeCCCAAAIIOFaAwOLYpqViCCAQrIAub1xVVXV0Lxbdt6UtR11dnblc93fR4WKZmZltuR3XIoAAAggg4EoBAosrm51KI4CAPwHtZamoqDCbSDYXWLQnRj8vLS31dyvRwKLn6CaV9Kz4ZeIDBBBAAAEEmhUgsDTLw4cIIICAb4EhQ4aYXpONGzf6PoF3EUAAAQQQQKBdBAgs7cLITRBAwG0C3bp1E52gv3fvXrdVnfoigAACCCAQVgECS1i5eRgCCDhFICsrS2JiYmTDhg1OqRL1QAABBBBAwJICBBZLNguFQgABqwvQw2L1FqJ8CCCAAAJOESCwOKUlqQcCCIRVgMASVm4ehgACCCDgYgECi4sbn6ojgEDrBQgsrbfjSgQQQAABBIIRILAEo8W5CCCAwL8FBg0aZFYJ27x5MyYIIIAAAgggEEIBAksIcbk1Agg4V4AeFue2LTVDAAEEELCWAIHFWu1BaRBAwCYCBBabNBTFRAABBBCwvQCBxfZNSAUQQCASAgSWSKjzTAQQQAABNwoQWNzY6tQZAQTaJJCRkSEaWCorKyUqKkq2bdvWpvtxMQIIIIAAAgj4FyCw+LfhEwQQQMCvwDnnnGM+W7lypeTl5fk9jw8QQAABBBBAoG0CBJa2+XE1Agi4VOCUU06RpKQkWbx4sUsFqDYCCCCAAALhESCwhMeZpyCAQJgECgsLpaqmSmpqa6WmuiZkT42Ni5WY6BipqKgI2TNiYmMkJiZW4mNjpVPHTiF7DjdGAAEEEEDAygIEFiu3DmVDAIGgBErLSqW4skwSOyZLcroz/sAvKyyV8sJiSY5PlA6JyUF5cDICCCCAAAJOECCwOKEVqQMCCBiB7LzDktI9Q2IT4x0lUlNVLQX7DktGSprZrNJRlaMyCCCAAAIItCBAuzNlKwAAQABJREFUYGkBiI8RQMAeAjo0q6CsWDL6drNHgYMs5ZF9OdIhNtHMmwnyUk5HAAEEEEDA1gIEFls3H4VHAAGvQHl5uWc4WKmk9e7qfctR3wsP5kqixElyMsPCHNWwVAYBBBBAoEUBAkuLRJyAAAJ2ENAeFg0sqb26NCiu7pNy6qixMmTAYNm9b498tnSR1Hom5Dc+OnboaN7XeTCTJ/6HLFy2WErLyhqfFrHXRYfyTGDRlck4EEAAAQQQcJMAgcVNrU1dEXCwgL/A8tP/OFcKi4tk6arlMurEkdKrew+Z895ciY6Olu5dukrekXwp94SdyRPOlsqqSlm4fIlc+bNL5N1P5kl8XLxk5+ZIXV2dkeucliFFJUWe86okMSHB816UpHhW79JzQn0QWEItzP0RQAABBKwqQGCxastQLgQQCErAX2CZfv1v5NFnZhy9ly4PXOQJMFdffLkJGscPGy4zX3xGLv/ZL6S6ulre/PBd+Zkn5FRUVhwNKhpwLj3/IimrKJe+PfvI3A/fkUH9B8rJI06Slau/lqVfLT96/1D9QGAJlSz3RQABBBCwugCBxeotRPkQQCAgAX+B5fZf/VYemfWEDB04WE4bNU6SEpNkxgtPS9fOXSRr8BA596xz5Lk5L0kXz+tKT0hZteYbuebnV8h7n35oel+mX3ez/O8/npKZf3lU/vn+XOnRtbtn6FiN7D24X0pLy+Trdd8GVL62nkRgaasg1yOAAAII2FWAwGLXlqPcCCDQQMBfYNEelqdfed4zH6XUDOO68arrZOZLz8qt026U2e+8IaePHm9CR2ZGplR5hnqtXP2VCSxzPT0tRSXF8ttrfy1PvjhLfn/TdHlm9gtmKJmeN/yYY6WwqEjWbFjXoByhekFgCZUs90UAAQQQsLoAgcXqLUT5EEAgIAF/gaVvrz7yi3MvlAPZB838lTfmvSO79u6W26//ree9A573epr5KsUlJXL5T38uL7zxqkzxTLqvH1ie8PSw6ET8rp0zRSfnf/jZx9KrR08CS0Atw0kIIIAAAgi0TYDA0jY/rkYAAYsI+Ass3uLp3JViT4+JdwK9vh8bG2vmrXjP0RXF6n/ufd/7PSYmxqwk1tw53nPb+zs9LO0tyv0QQAABBOwiQGCxS0tRTgQQaFagpcDS7MU2+JDAYoNGoogIIIAAAiERILCEhJWbIoBAuAUILOEW53kIIIAAAgiER4DAEh5nnoIAAiEW0MBSpBtH9swM8ZMic/uiQ/mSFBUnbBwZGX+eigACCCAQOQECS+TseTICCLSjgAaWQ9nZEhMT3Y53tc6tampqpUtmJoHFOk1CSRBAAAEEwiRAYAkTNI9BAIHQCmhgycvLk/j4+NA+KEJ3r6yslLS0NAJLhPx5LAIIIIBA5AQILJGz58kIINCOAgSWdsTkVggggAACCFhIgMBiocagKAgg0HoBAkvr7bgSAQQQQAABKwsQWKzcOpQNAQQCFghHYImOjpbk5GQpLi4OuFwtnRgXF2f2gykrK2v2VIaENcvDhwgggAACDhYgsDi4cakaAm4SaCmwTJ48WVauXCmHDx9uwJLpmciuYaCwsLDB+75eDB8+XA4cOCA1NTVy8sknm00m165dKz169JAuXbqIbjy5Zs0ac68xY8ZIVVWVLF++3Gw2Wf9+et7IkSNl8+bNUl5eLqNGjZKlS5fWP6XJzwSWJiS8gQACCCDgEgECi0sammoi4HQBf4Glf//+0r17dzn22GPl448/ltzcXBM29HwNF1OnTpWSkhKZO3eu9OnTx3xt3LhRDh061ITszDPPlIULF0pWVpYUFRXJ/v37G5xzxhlnyNdffy2jR482QSUlJUX0OdXV1VJaWmqCS6dOnaRfv37mOXruwYMHZdy4cbJq1SoTcBrcsN4LAks9DH5EAAEEEHCVAIHFVc1NZRFwroCvwKJ7ltxyyy0yb948Offcc+Xll182q4h17NhRxo4dK1988YWMGDFCCgoK5LPPPhPtFdGfJ0yYII8//ngDrG7dukl6erps2rTJBB79OTExUVasWCHZnuWUdaiYXq/3ueyyyyQnJ0c6dOhgXuuNTjvtNNMjs2zZMjly5IjpYdm3b58JLKmpqTJgwABZvXp1g2fWf0Fgqa/BzwgggAACbhIgsLiptakrAg4W8BVYdJjWRRddJE899ZTccMMN8sEHH8jAgQOlZ8+ecvzxx8vrr79uel+012XDhg1yxRVXmJ4V7SG59957G2jFxsaanhMduqVhRYONvnf66afL/PnzZeLEiSa8aG/NNddcIy+88IIZKqbP+uabb0w5dMnl1157zQQXHRLmDSwamvRnXZbZ30Fg8SfD+wgggAACThcgsDi9hakfAi4R8BVYdJL8tGnTzFCsjIwMmT17tgwbNswMyUpISDDzRnQ+ig71mjNnjlx11VWya9cu0WFkjzzySBM579AtHWKmIUOPdevWSX5+vpmHor0reujwMw0q2pOzaNEis3eKDgvTZ2mvy+7duxv0sHiHmpmL/fyPwOIHhrcRQAABBBwvQGBxfBNTQQTcIaA9G9rroUGk8aHBpba29ujbjV97P9D36+rqzJf3vfrfNYDovBSduxITE2M+0hDi69DVvzSk6P2aO3QomYapvXv3NneamZyv81/0+RwIIIAAAgi4SYDA4qbWpq4IOFhAV9vSng6n7nSv9dNgo/NyOBBAAAEEEHCTAIHFTa1NXRFwuIBOdNehUzoZ3kmHDnfTHh2d+M+BAAIIIICA2wQILG5rceqLgIMFdAiWTlzX/U90rxMd4mXnwzvcTMOK9q44tffIzm1E2RFAAAEEQi9AYAm9MU9AAIEwC+iu8RpaQnnoXBINEjoMLVSHzn/ROTlO6zEKlRf3RQABBBBwpgCBxZntSq0QQCDEArr5oy5rvH379hA/idsjgAACCCDgbgECi7vbn9ojgEArBXQ+ia4E1tLqXq28PZchgAACCCCAwL8FCCz8KiCAAAKtENCd6bWHZevWra24mksQQAABBBBAIFABAkugUpyHAAII1BOgh6UeBj8igAACCCAQQgECSwhxuTUCCDhXgMDi3LalZggggAAC1hIgsFirPSgNAgjYRIDAYpOGopgIIIAAArYXILDYvgmpAAIIREKgT58+ZtL9jh07IvF4nokAAggggIBrBAgsrmlqKooAAu0pQA9Le2pyLwQQQAABBPwLEFj82/AJAggg4FeAwOKXhg8QQAABBBBoVwECS7tycjMEEHCDQEZGhhkOxj4sbmht6ogAAgggEGkBAkukW4DnI4CA7QQGDx4sUVFREhMTIykpKbJy5Urb1YECI4AAAgggYBcBAotdWopyIoCApQTOOeccUx4NK3l5eZYqG4VBAAEEEEDASQIEFie1JnVBAIGjAnV1dVJRUWF6QY6+2Y4/HHfccZKcnCyrVq1qx7v+cKuamhpJSEgwPTk/vMtPCCCAAAIIuE+AwOK+NqfGCDheoLDgiIjnD/6Y6CiRutBUV4eDxcTGSGVFZWge4Cl4jSd01UXHSGpaeoiewW0RQAABBBCwvgCBxfptRAkRQCAIgeLCQomprZbemRmSlBAfxJXWO7Wyulr25uRJtURLsmeuDAcCCCCAAAJuFCCwuLHVqTMCDhWora2V4iP5Mqh7piTExTmmlhv3HJDETilmZTLHVIqKIIAAAgggEKAAgSVAKE5DAAHrC+icldqyUhnSq5v1CxtECbcdyJa6uARJSkoK4ipORQABBBBAwBkCBBZntCO1QAABj4AJLOVlMqRnV0d57MrOlcroWAKLo1qVyiCAAAIIBCpAYAlUivMQQMDyAv4Cy+gzJpiJ6xXl5bL+m68kNye7xbokeVYA+9GYcbL0s/ktnhvqEwgsoRbm/ggggAACVhYgsFi5dSgbAggEJeAvsFz565vlrVdelE4pqXLBZVfKM4/8P9Flj1PT06W0uFiqqqrMc+LjEyQlPU1ys7MluWNHmfCTc+WLTz+SivIKKfcMNdND309MTJK8wznmdYdOnaS2plZi42KlqKDAvKebSqZ3zpT83MPmOebNNvyPwNIGPC5FAAEEELC9AIHF9k1IBRBAwCvgL7Bc/qubZPasmea0q2++RV556kk567wLpNLT49K9Vx9Z8MG7UlJcJBdcfpXs2LxJ0jI6y5IFn8jUm26RdV+vkmNGHC9znptlemlOOfV0KS4qkurqKln4r3lywx13y44tmyQpuYPs37NbVq9YJhdNvVb27dolvQcMkLkvPn80EHnLGex3AkuwYpyPAAIIIOAkAQKLk1qTuiDgcgF/gWXabXdInmcYWO/+A+RzT8jYuOZbufu//0c+efctyezWXWpra2TJ/E/k51dPk9Url8umdWs8e6zEyo/P/5m88+pLoiHlSF6ubN+0UYYce5wJNOMmnCWP/ul+uea3t8kLTzxm5C+77teybOECmfLzS2XlF4vk+JGnyGcfvi/fb93SppYhsLSJj4sRQAABBGwuQGCxeQNSfAQQ+EHAX2Dx9rCcOGqMJCQmyqoli+Wa39wmb736okRHRZveEt2/JS4+XvoMGCTjJ06SN1963gwJ++D11+Qkz1yWUk8PTK++/c0wr53btpqhZS/MeEyum36nPPfYw6YQl067wfTMjBh5snz5+QKJi42TosICz3Cysh8K2YqfCCytQOMSBBBAAAHHCBBYHNOUVAQBBFoKLDq3RIPKa88+JSePO03SMzMluUMHT8j41Mw/Oe+SyyTn4EGRKJGlnvd0Dkv9wBLnmeNy3IkneXpb8kzPzKtPPynae5O9f58ke+ayrF21QjavXyfnXXK5GQbWKTVV3p39ytH5L61tIQJLa+W4DgEEEEDACQIEFie0InVAAAEj4C+w+OOJiYnxDAerbTAxPtYzFKzas8O8vyMmJtYMIdNJ+3por8o/n58lGob0Xt6jpft4zwvkO4ElECXOQQABBBBwqgCBxaktS70QcKFAsIGlPYgGDM2S77dsbo9b+b0HgcUvDR8ggAACCLhAgMDigkamigi4RSASgSUctgSWcCjzDAQQQAABqwoQWKzaMpQLAQSCFtDAUllSLP26dg76WitfsD83X+riE9np3sqNRNkQQAABBEImQGAJGS03RgCBcAtoYDl06JDEx8WF+9EhfV6lZ2PLLl26EFhCqszNEUAAAQSsKkBgsWrLUC4EEAhaQANLnmcFr3jP8sROOiorKyUtLY3A4qRGpS4IIIAAAgELEFgCpuJEBBCwugCBxeotRPkQQAABBBAIXoDAErwZVyCAgEUFCCwWbRiKhQACCCCAQBsECCxtwONSBBCwlkAkA0tKSooUFhY2AInzzKXR/VjK2rjTPUPCGrDyAgEEEEDAZQIEFpc1ONVFwMkCgQSWXr16ybBhw2T+/PntRqFhZdCgQfLtt9/KiBEjJDMzU9auXWsCzKhRo2Tp0qVtehaBpU18XIwAAgggYHMBAovNG5DiI4DADwL+AktWVpb06NHDhAidvD527FjZuXOn7Nq1S/bu3WvCRp8+fWTjxo2Sk5MjI0eONLvd6/02bNggGkhOOOEE2bdvn+zYseOHB/77p/Hjx8uKFStEe1QGDBggmzZtksmTJ8sHH3wg48aNk1WrVkmVZ6Wv1h4EltbKcR0CCCCAgBMECCxOaEXqgAACRsBXYElISJDp06fLu+++KzExMVJaWirnnXeeLFmyRE499VR54oknRANHQUGBTJgwQWbOnCn333+/zJ07V8444wzz/YILLpBly5aZ81977TU5fPjwUfGoqCg5/fTTZdGiRea9zp07m/M0/GzZskVSU1NNiFm9evXRa4L9gcASrBjnI4AAAgg4SYDA4qTWpC4IuFzAV2BRkh/96EdmqJbOMVmzZo3oMK0333xTbr/9dpkxY4ZcccUVZv+W0aNHywMPPCB33XWXPPjgg3LhhReaXhf9fMGCBdKhQwdZvny56YWpT33mmWfKwoULRcORHtXV1TJlyhR57733zHO1Z0aXW27tQWBprRzXIYAAAgg4QYDA4oRWpA4IIGAEfAUWDRFTp06V4uJi04uiw7XqBxbtUbn++uvN8LD+/fubHpe7775bdnqGjGlvyaxZs8z5ffv2NYFkzpw5UlRU1EB84MCBJqRoz8ukSZPkyJEjUltba3pxvGGmwQVBviCwBAnG6QgggAACjhIgsDiqOakMAu4WKCkpMRPdfW0cqat1ac+HryM6Olrq6urMl85Due222+Thhx82r73n63AyDSF6nq9j6NChZgiYfqbn1tTUSHJysmRkZJh5Mr6uCfQ9DWI6j6Zjx46BXsJ5CCCAAAIIOEaAwOKYpqQiCCCggeLgwYNHh2a1RkTnpOjE/Pz8/NZcHpJrNLB07drVLJEckgdwUwQQQAABBCwsQGCxcONQNAQQCF5Ah2WVl5dLUlJS8Bdb8Aqti/b6aGDhQAABBBBAwI0CBBY3tjp1RsDhAhpadN6HHtpjEorDe19/Q8Ta+sz6Q9QIK23V5HoEEEAAATsLEFjs3HqUHQEE/Arovif65Q0Wfk9s5Qc6N0XnxWRnZ7fyDs1fpnNgEhMTGQbWPBOfIoAAAgi4QIDA4oJGpooIIND+AroRpQaWPXv2tP/NuSMCCCCAAAIIHBUgsByl4AcEEEAgcIFu3bqZuSV79+4N/CLORAABBBBAAIGgBQgsQZNxAQIIICDSq1cvE1h0vxYOBBBAAAEEEAidAIEldLbcGQEEHCxAD4uDG5eqIYAAAghYSoDAYqnmoDAIIGAXAQKLXVqKciKAAAII2F2AwGL3FqT8CCAQEYHu3bubIWFMuo8IPw9FAAEEEHCRAIHFRY1NVRFAoP0E6GFpP0vuhAACCCCAQHMCBJbmdPgMAQQQ8CNAYPEDw9sIIIAAAgi0swCBpZ1BuR0CCLhDgMDijnamlggggAACkRcgsES+DSgBAgjYTEB3uU9OTjZzWAoKCiQvL89mNaC4CCCAAAII2EeAwGKftqKkCCBgEYHBgwdLx44dJTo62ux2v3LlSouUjGIggAACCCDgPAECi/PalBohgEAYBM455xzzFA0r9LCEAZxHIIAAAgi4VoDA4tqmp+IIOFugsrJSqqqqJCoqKiQVHTRokBkWtm7dupDcv7a2VhISEsyws5A8gJsigAACCCBgEwECi00aimIigEDgAsUFR0RqayQ+JkbiYmMCvzCIM6Oi/m84WFVVZRBXBX5qZU2NVFXXSG1dlHRMSzPDzwK/mjMRQAABBBBwjgCBxTltSU0QQMAjUJCfL8kxUTKgR1dHeOw6dFhKqqolJT3DEfWhEggggAACCAQrQGAJVozzEUDAsgI1nl6JkoJ8ObZPT8uWsTUF27z3gMR3TGF4WGvwuAYBBBBAwPYCBBbbNyEVQAABr0BJSYlEVVXI0F7dvW854vv2/dlSGR0jnTp1ckR9qAQCCCCAAALBCBBYgtHiXAQQsLRARUWF1JaXyZCezhgO5sXelZ3rCSyxkpSU5H2L7wgggAACCLhGgMDimqamogg4X8BfYBl9xgRJTUuXivJyWf/NV5Kbk90iRpJnY8gfjRknSz+b3+K5oT6BwBJqYe6PAAIIIGBlAQKLlVuHsiGAQFAC/gLLlb++Wd565UXplJIqF1x2pTzzyP+Turo6SU1Pl9LiYrP8sT4oPj7BM7k9TXKzsyXZszHkhJ+cK198+pEn6FRIeVmpKYu+n5iYJHmHc8zrDp5hWrU1tRIbFytFnl3v9dCllNM7Z0p+7mHzHPNmG/5HYGkDHpcigAACCNhegMBi+yakAggg4BXwF1gu/9VNMnvWTHPa1TffIq889aScdd4FUunpceneq48s+OBdKSkukgsuv0p2bN4kaRmdZcmCT2TqTbfIuq9XyTEjjpc5z80yvTSnnHq6FBcVSXV1lSz81zy54Y67ZceWTZKU3EH279ktq1csk4umXiv7du2S3gMGyNwXnz8aiLzlDPY7gSVYMc5HAAEEEHCSAIHFSa1JXRBwuYC/wDLttjskzzMMrHf/AfK5J2RsXPOt3P3f/yOfvPuWZHbrLrWePVuWzP9Efn71NFm9crlsWrdGYmJj5cfn/0zeefUl0ZByJC9Xtm/aKEOOPc4EmnETzpJH/3S/XPPb2+SFJx4z8pdd92tZtnCBTPn5pbLyi0Vy/MhT5LMP35fvt25pU8sQWNrEx8UIIIAAAjYXILDYvAEpPgII/CDgL7B4e1hOHDVGEhITZdWSxXLNb26Tt159UaI9G0Bqb0lxYaHExcdLnwGDZPzESfLmS8+bIWEfvP6anOSZy1Lq6YHp1be/Gea1c9tWM7TshRmPyXXT75TnHnvYFOLSaTeYnpkRI0+WLz9f4Nm0Mk6KCgs8w8nKfihkK34isLQCjUsQQAABBBwjQGBxTFNSEQQQaCmw6NwSDSqvPfuUnDzuNEnPzJTkDh08IeNTM//kvEsuk5yDBz2TUESWet7TOSz1A0ucZ47LcSee5OltyTM9M68+/aRo7032/n2S7JnLsnbVCtm8fp2cd8nlZhhYp9RUeXf2K0fnv7S2hQgsrZXjOgQQQAABJwgQWJzQitQBAQSMgL/A4o8nJibGMxystsHE+FjPULDq6mp/l0hMTKwZQqaT9vXQXpV/Pj/LTLTXe3mPlu7jPS+Q7wSWQJQ4BwEEEEDAqQIEFqe2LPVCwIUCwQaW9iAaMDRLvt+yuT1u5fceBBa/NHyAAAIIIOACAQKLCxqZKiLgFoFIBJZw2BJYwqHMMxBAAAEErCpAYLFqy1AuBBAIWkADS1lRofTMSA36WitfkH2kSGKSktnp3sqNRNkQQAABBEImQGAJGS03RgCBcAtoYMn2bPqoc1Oio6PD/fiQPE/nxdTU1EimZ4GApKSkkDyDmyKAAAIIIGBlAQKLlVuHsiGAQFACGljyPCt4xXuWJ3bSUVlZKWlpaQQWJzUqdUEAAQQQCFiAwBIwFScigIDVBQgsVm8hyocAAggggEDwAgSW4M24AgEELCoQycCSkpIihZ7NJ+sfcXFxossbl7Vx40h6WOqr8jMCCCCAgNsECCxua3Hqi4CDBQIJLL169ZJhw4bJ/Pnz201Cw8qgQYPk22+/lREjRpj5JmvXrjUBZtSoUbJ06dI2PYvA0iY+LkYAAQQQsLkAgcXmDUjxEUDgBwF/gSUrK0t69OghGiJ0LsjYsWNl586dsmvXLtm7d68JG3369JGNGzdKTk6OjBw50mweqffbsGGDaCA54YQTZN++fbJjx44fHvjvn8aPHy8rVqwQ7VEZMGCAbNq0SSZPniwffPCBjBs3TlatWmV2vm9yYYBvEFgChOI0BBBAAAFHChBYHNmsVAoBdwr4CiwJCQkyffp0effdd83qYaWlpXLeeefJkiVL5NRTT5UnnnhCNHAUFBTIhAkTZObMmXL//ffL3Llz5YwzzjDfL7jgAlm2bJk5/7XXXpPDhw8fBY6KipLTTz9dFi1aZN7r3LmzOU/Dz5YtWyQ1NdWEmNWrVx+9JtgfCCzBinE+AggggICTBAgsTmpN6oKAywV8BRYl+dGPfmSGaukckzVr1ogO03rzzTfl9ttvlxkzZsgVV1whhw4dktGjR8sDDzwgd911lzz44INy4YUXml4X/XzBggXSoUMHWb58uemFqU995plnysKFC0XDkR7V1dUyZcoUee+998xztWdGVy9r7UFgaa0c1yGAAAIIOEGAwOKEVqQOCCBgBHwFFg0RU6dOleLiYtOLosO16gcW7VG5/vrrzfCw/v37mx6Xu+++W3Z6hoxpb8msWbPM+X379jWBZM6cOVJUVNRAfODAgSakaM/LpEmT5MiRI6L7p2gvjjfMNLggyBcEliDBOB0BBBBAwFECBBZHNSeVQcDdAr4Ci1dEV+vSng9fh24yWVdXZ750Hsptt90mDz/8sHntPV83o9QQouf5OoYOHWqGgOlneq5u9picnCwZGRlmnoyvawJ9j8ASqBTnIYAAAgg4UYDA4sRWpU4IuFRAA0tubu7RoVmtYdA5KToxPz8/vzWXh+QarZcGn8TExJDcn5sigAACCCBgZQECi5Vbh7IhgEBQAtoDonNRtIdDv5xyaGDp2rWr2dPFKXWiHggggAACCAQqQGAJVIrzEEDAFgK62pfOMdG5KzrUy86HBjAdDqZDy9LT0+1cFcqOAAIIIIBAqwUILK2m40IEELCqgK7Ipb0Sevibc9LWsnvDkIaKUBw6NE0PDV46HIwDAQQQQAABtwoQWNza8tQbARcIaO+EN1i0d3V1I0qdoL979+72vrW5nwah+Pj4kNybmyKAAAIIIGAnAQKLnVqLsiKAgGUEunXrZgLL3r17LVMmCoIAAggggIATBQgsTmxV6oQAAiEX6Nmzp5kEH6oelpBXgAcggAACCCBgEwECi00aimIigIC1BOhhsVZ7UBoEEEAAAecKEFic27bUDAEEQihAYAkhLrdGAAEEEECgngCBpR4GPyKAAAKBChBYApXiPAQQQAABBNomQGBpmx9XI4CASwX69u1rJt1v377dpQJUGwEEEEAAgfAIEFjC48xTEEDAYQL0sDisQakOAggggIBlBQgslm0aCoYAAlYWILBYuXUoGwIIIICAkwQILE5qTeqCAAJhEyCwhI2aByGAAAIIuFyAwOLyXwCqjwACwQsMHjxY6urqzD4sNTU1sm3btuBvwhUIIIAAAgggEJAAgSUgJk5CAAEEfhDQwNKxY0eJjo6WwsJCAssPNPyEAAIIIIBAuwsQWNqdlBsigIAbBM455xxTzY8++sgN1aWOCCCAAAIIREyAwBIxeh6MAAKhEqioqJCSkpKjw7ZC8ZyePXtKVFSU7Nu3LxS3Fx1qpj04iYmJ5iskD+GmCCCAAAII2ECAwGKDRqKICCAQuEB+fr6UlZWZP/Z1nklMTEzgF1vozNraWhOI9LuGlvT0dAuVjqIggAACCCAQPgECS/iseRICCIRYoLy8XPLy8swf+No74ZSjtLRU0tLSJDk52SlVoh4IIIAAAggELEBgCZiKExFAwOoCGlYqKysdN4RK66QBLDMz0+pNQPkQQAABBBBodwECS7uTckMEEIiUwKFDh8wf9nFxcZEqQkieq8PCqqqqRPd+4UAAAQQQQMBtAgQWt7U49UXAwQLZ2dlmzopd5634axqdi6PD3Xr06OHvFN5HAAEEEEDAsQIEFsc2LRVDwH0CvgJLr169ZOLEiQZj9+7dsnjxYrN6WHM6V1xxhbz66qvNndLsZ/q8YcOGyZYtW2T+/PktPq/Zm3k+JLC0JMTnCCCAAAJOFiCwOLl1qRsCLhPwFVhGjhwpGlo0qOjeKbqK2Mcffyw6bEwnsufk5BxV0iFX+vmtt94qDz30kKSmpkpBQYHZ0T4+Pl508rsuZdy9e3c5fPiwGaalF+vcEt1AUuea6POGDBkib7zxhnne/v37Ze3atZKUlCTFxcVm4rwO79LXer4+Q4ey6TLJubm5oksyNz4ILI1FeI0AAggg4CYBAoubWpu6IuBwAX+BJSMjQz799FM58cQTZeDAgbJs2TK56qqrZMeOHSYwPPfcc3LDDTeYsNKhQwcTQDSw3HnnnSa4DBo0SE444QR5//335fbbb5fNmzfL8OHD5bHHHpMLL7zQLKPcv39/mT17tnTq1EnOO+88E1h27dplekf69Okj48ePlzlz5sgFF1wgGzduNGFGy9ulSxczjE3LouX785//3KSVCCxNSHgDAQQQQMBFAgQWFzU2VUXA6QL+AsvFF19sekS0R+Vvf/ubXHnllVJdXS179uyRiy66SG655Ra5+eab5X/+539EA8tNN91kgkrjwKJBRYPJvHnzTA+Jej777LPy0ksvmV4c3ezxxRdfFA04GlCOOeYYmTVrltkE0ldg0aCkZdIhZC+//LIJSA8//HCTIWQEFqf/5lI/BBBAAIHmBAgszenwGQII2ErAX2DRHpbPPvtM7r//fnnwwQdNr8jOnTtND4tuyqi71d9xxx0mzOgGjdddd50JLPfcc485/7jjjpOsrCxZv3696Vl56623pHPnzmb41l133SUzZswwq5PpUC99X4eZ6dAynceiPTOLFi0yPSr/+Mc/5Be/+IWsXr3avH766adFy6aBRefM/O53v5NHHnmEwGKr3zoKiwACCCAQagECS6iFuT8CCIRNoLnAokPCxo4da3pCFixYYELJkSNHTDjQXpKf//znZnhWWVnZ0SFh06ZNM3u66LwVnYvyzjvvmKFj2pOiPSOPP/64/OQnPzHLDetQMP1c57lce+21JgT17t3b9Ljotffdd9/R93TomM6nIbCE7VeDByGAAAII2FiAwGLjxqPoCCDQUMBXYGl4RsNXOvFee0W8R2xsrBkq5n2t3xufo+81Pk+XUda9UnTolvdISUmRoqKiBu/5upf3/Oa+MySsOR0+QwABBBBwugCBxektTP0QcJFAsIHFLjQEFru0FOVEAAEEEAiFAIElFKrcEwEEIiJAYIkIOw9FAAEEEEAgpAIElpDycnMEEAinwIEDB8wQLKftdK/DzXTejM6J4UAAAQQQQMBtAgQWt7U49UXAwQLe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wtG8gDofPnzY9GZpbwsHAggggAACrREgsLRGjWsQQCAgAe2JKCsrs1xg0cJruTSweFfXCqhCnpO010DnwrRlSFmgz3LCeTk5OWaxhISEBCdUhzoggAACCERAgMASAXQeiYBbBLQ3Qud6WPGPVe396d69uxmyFEx7FBQUmLkZVus1CqYO4TxXe1h0Hgs9LOFU51kIIICAswQILM5qT2qDgKUEmgssY8eONXNBNm3aFFCZzz//fFmwYIEJQHpBt27d5Nhjj5XPP/88oOsbn2S3wPLTn/5U/vWvf0lFRUXjqjR5rYsBTJ48Wd5///2jn6mVzr9p7eaSQ4cONUsn6ypkixYtEl3AQO950kknyapVq/zel8BytAn4AQEEEECglQIEllbCcRkCCLQs0Fxguffee0V7K2bMmGFupHus6NwQ7bnQYVcaSHRIma7opec999xz5g/wd955x5z/m9/8Rrp27Sp/+MMfTA+O7vauE/x1c0mdX6L30H/V194dLUfjo70Diw4T0yFm+ge6zt3w9ippvXRYlB76s36mf+xrz5PWTV9rCNFeiMLCQvNZ47Lqder13nvvydKlS4/eS3+oqqoy16uF1lnDit7zqaeeMjZ79uwx58+cOVPmzp1rQp+uaqZLROsmk1puXRBBjbQ86qftUP9Q2wsuuEBeeeUVGT16tOzevduU3/veNddcI3PmzDHzlepfpz8TWBqL8BoBBBBAIFgBAkuwYpyPAAIBC/gLLAMHDpQTTzxRevbsKc8884z5g/uWW24xfzQvX75czjjjDPOHroYX/UP8oYcekunTp5vnPvroo6J/cF9//fXm+9///ne5+eabZfv27TJkyBBz7pVXXmn+1X/MmDGmB0b/wG58tGdg0WB0ww03mD1isrKy5B//+Iccf/zxMmLECPPHvbee9913n3z77bcyYMAA+fDDD03AuOSSS+TNN9+Uc889V15++WW58cYb5cknn5SzzjrLBLDvvvtOzj77bPn+++/NexpE9Lj//vtFP1uxYoX84he/kI0bN8qgQYNEe6yWLFkiv/rVryQ3N1dmz55t3td7bN682QSea6+9Vnbu3GneV7+bbrpJXnjhBbnqqqtMMGwcWE499VQTZjRE6nV6//Hjx5vQsnr1ahNitPfm66+/bsxMYGkiwhsIIIAAAsEKEFiCFeN8BBAIWMBfYPntb38rX375pfmDWXtRPv30U9HAor0o+seyfv7II4+Yf/nXn72BZd26dXLo0CETYrTXQv+o1wCjw5X69+8v1113nfnjXSfS//73vxc9X3slfB3tGVg0pPTp00fmz58vw4cPNz082suhE/v1j3jtDdKepNtuu00ee+wx6devnwk0OmRLeyy0Hvq+lkmXAdZrtedDe2L00HDy/PPPy6WXXmqChQYR9frf//1fMyxLg4QOjTvhhBNEe0M0UFx22WXmPq+//rox0WChn3322WeigbFv375y+eWXm2CjoVDLqKFlx44dTbimTJlirnn66aflJz/5iQlhei/tvdGApM/VXqAvvviiybX0sDQh4Q0EEEAAgSAFCCxBgnE6AggELuArsOiQJf1X/bffftsM2TrttNPkzjvvNH+A6x/EGlj0D/T/+q//Mj0RF1100dHAosOafvnLX5rhVo8//rgJABp2dD6M/vGvf8Tfc889pjdA/wDXUKN/hPs62jOwaM+GhhbtNRk5cqQpnwYPHeK1du1a02uiPSPak6G9J9rjMmrUKNHhbRpWtLfpxRdfNL0RjcuqQUh7SzSQ6HO0Tnqd9irpvfRz7QF57bXXTE+MDunyBhb9rvNMOnbsKCtXrjQhZf/+/XLyySfLJ598YgLegw8+aMKe9vToHKGvvvqqcRFMnXS420cffWTu16tXLzlw4ID06NHDhM3zzjvP9PBs27atybUEliYkvIEAAgggEKQAgSVIME5HAIHABXwFFv1jWf/41Qnkeugf8f/85z/liiuuEA0sOp9D/4DXP8J1KJf2njz88MNmSJj2puhwJv2j/YMPPjDv6dwJ/YNehyrpBHDtxdDX2rNy+umnmx4ADQ2Nj/YMLBpOpk6daia1azjQkKT1bCmw6PC3iRMnmrJeffXVZt6JDgnT3phJkyaZUKA9NtpzoUFDDx0apw7ewKLv/fjHP5bevXubIXU6j8UbWLQcDzzwgOm50jk12quiw8h0yJxOntd7//nPfzbD62bNmmXcdJ6Klrv+ofVTU+0N05XV9L56jobH8vJyszS0Bi5fB4HFlwrvIYAAAggEI0BgCUaLcxFAICiB1u7DcvHFF5ueCe1R0N3kdY5Hc4f+Qa1DqLR3IdCjLfuw6PN87d6uvUfBlCHQsjZ3ng5/0xXEdKUuDT86Kb+llcC0/Hro0LPGhwYSXWGs/qG9OzqHRsOYhtD6h07Y19Di79Bw2alTJzO8z985vI8AAggggEBzAgSW5nT4DAEE2iSgvRit2elew4AOmdJ/xddJ5d65HG0qTL2L9Q91HXqmPT0aMoI59A927QXSVbascmjvii44oHNKfA3LCracGv7qH631V2edb6PtyT4s9UX5GQEEEEAgGAECSzBanIsAAkEL6FLDeui/xFvl0CClK5D56iVpqYy6Gpb2HOn12vvD4V9Ah6dp+ElPT/d/Ep8ggAACCCDQggCBpQUgPkYAgbYJ6HAh7WXxDj8KtkejbU9veLX2FGg5dL+RtvwRrYFHv7xDq3SZZY4fBDTU6f4w2qvSmlD4w534CQEEEEAAARECC78FCCAQFgGdM6JDqXTORWsODQW6lK538nlr7qEBQ7/ao7dHg4+GFh1aRmBp2Braq6LOGgw5EEAAAQQQaKsAgaWtglyPAAJhEdAhWLp/iW6QyIEAAggggAAC7hEgsLinrakpArYW0EnuukHihg0bbF0PCo8AAggggAACwQkQWILz4mwEEIiQAD0sEYLnsQgggAACCERYgMAS4Qbg8QggEJiA9rDoHiG68SEHAggggAACCLhHgMDinrampgjYWoAeFls3H4VHAAEEEECg1QIEllbTcSECCIRTgMASTm2ehQACCCCAgHUECCzWaQtKggACzQjokLCePXvKunXrmjmLjxBAAAEEEEDAaQIEFqe1KPVBwKEC9LA4tGGpFgIIIIAAAi0IEFhaAOJjBBCwhgCBxRrtQCkQQAABBBAItwCBJdziPA8BBFolQGBpFRsXIYAAAgggYHsBAovtm5AKIOAOAeawuKOdqSUCCCCAAAKNBQgsjUV4jQAClhTw18OSnp4u+fn5rSpzsNfGxcVJUlKSFBYWtup5XIQAAggggAACwQsQWII34woEEIiAgL/A8uMf/1g+/fTTZkt08skny1dffdXknECurX9Rhw4dJDU1Vfbv31//bX5GAAEEEEAAgRAKEFhCiMutEUCg/QQ0LPTt21c2btzY4KZnn322HDlyRDp16iTffPON+eykk06SqKgoWbZsmXTp0kVOP/10WbhwoZSXl8txxx1nztHPzjjjDMnNzTXnfPHFF1JSUtLg3rGxsTJ27FiJiYmR9evXS1VVlXTr1s3cp1evXtKxY0fZsGGDVFZWyrHHHivV1dXmmbW1tQ3uwwsEEEAAAQQQaL0AgaX1dlyJAAJhFPDXwzJ58mRZtGiRCQ0aQL788kuJj4+XwYMHm/fWrl0r55xzjnz00Ufm+yeffCIafjSEjBkzRhYsWCDdu3eXtLS0Jnu8ZGZmyoknnigrVqwQDSGJiYnSr18/E4z0GePHjzdB6Kc//al5rgaq4uLiJqEqjEw8CgEEEEAAAccJEFgc16RUCAFnCvgLLBpG5s+fb3o3tLdF57NoT4fONSktLZXVq1cfDSz/8R//IR9//LEJKxpYNODocDLthdEeEz238aGfZWVlSVFRkezdu/doYNFrNchor82ll14qK1eulOjoaMnJyZGCgoLGt+E1AggggAACCLRSgMDSSjguQwCB8Ar4CywaQnQol36+detWSUlJEZ1Mr8O5srOzxdvDokO3NMT07NnTfNeemFNOOaXZwKL3GT16tLn/oUOHzPAx7WHRoWEDBgww4WTbtm2iK5jpULGEhAQzVyYvLy+8ODwNAQQQQAABBwsQWBzcuFQNAScJtLSssfZueOeOaO9JTU2Nz+rXP6/xCTr8S4eGeQ8NQPv27TM9J957ez9r/L25+zY+l9cIIIAAAgggELgAgSVwK85EAIEICvjrYYlgkXg0AggggAACCIRBgMASBmQegQACbRcgsLTdkDsggAACCCBgRwECix1bjTIj4EIBAosLG50qI4AAAggg4BEgsPBrgAACthDQCfC9e/dusvSwLQpPIRFAAAEEEECg1QIEllbTcSECCIRTgB6WcGrzLAQQQAABBKwjQGCxTltQEgQQaEaAwNIMDh8hgAACCCDgYAECi4Mbl6oh4CQBXdZYd6T/7rvvnFQt6oIAAggggAACLQgQWFoA4mMEEIi8QEZGhtlRXjdt1A0c2Zgx8m1CCRBAAAEEEAiXAIElXNI8BwEEWi2ggWXYsMc61z0AAAafSURBVGFmY8icnBzR3eU5EEAAAQQQQMAdAgQWd7QztUTA9gJjxowxu9BrWCGw2L45qQACCCCAAAIBCxBYAqbiRAQQaKtAbW2tlJWVSWVlpcTGxgZ1u7S0NNF5LNu3bw/qOj05KipKYmJiJCkpKehruQABBBBAAAEEIitAYImsP09HwDUCGlRKSkpMeNAAER8fH7a6a1DSkBQXFyepqalhey4PQgABBBBAAIG2CxBY2m7IHRBAoAUBDQw6UT4hIUE6derUwtmh+1jLoD07KSkpoXsId0YAAQQQQACBdhUgsLQrJzdDAAFfAtqzUlFRITp5PpJHdXW15Ofnm3LoEDEOBBBAAAEEELC+AIHF+m1ECRGwvYD2bNTV1Zk5KJGuzOHDh82wMB0exoEAAggggAAC1hcgsFi/jSghArYXKCoqMnNXOnbsGPG6ZGdnm+BED0vEm4ICIIAAAgggEJAAgSUgJk5CAIG2CLQlsGjI0TkwpaWlARXBO0fF3+aSBJaAGDkJAQQQQAABywgQWCzTFBQEAecK+AssulpYly5dRIdpaSjRZYd1nklVVZWZGF9YWCjnnHOOWeFr8eLFkpycLDU1NWa1ryNHjhgwnUCv52lQ0WFe3bp1k0mTJsns2bN9hhwCi3N/z6gZAggggIAzBQgszmxXaoWApQR8BRYNFzfccIPZBDIrK0v+8Y9/yMknnyz79++XTZs2yc033ywzZ86UadOmmZDy1ltvyS233CIbN240wWX37t2ycOFCc96TTz4p/fv3l2OPPVaKi4tl3LhxMmfOHNm5c2cTBwJLExLeQAABBBBAwNICBBZLNw+FQ8AZAr4Ci4aUPn36yPz582X48OFm5S7tJakfWDSIaPjQPVS++uorufPOO+Whhx4yKL/5zW9kxowZTQLL8uXLZfLkyfLKK6/4xCOw+GThTQQQQAABBCwrQGCxbNNQMAScI+ArsAwaNEg0tHz44YcycuRIs0eL9roUFBTI6tWrZfr06fLoo4+awKJDxFatWiX33HOP/PWvfzUw2gOjgeXWW2+Vxx9/3NxL76mBZcqUKfLyyy/7BCSw+GThTQQQQAABBCwrQGCxbNNQMAScI+ArsERHR8vUqVPNnBWdWP/CCy+Y5YavvfZa+f77783wrj/+8Y/Ss2dPufTSS00A0eFh+/btM5tPLlu2TL799lu5/PLLTdjR+TAHDx6Ujz76yISdjz/+WNavX98EkcDShIQ3EEAAAQQQsLQAgcXSzUPhEHCGgE6Q10n1vjaO1OWFdSK999DgoV96vvfQ17qPi3deS+PPdSiZTtavf3ivqf+e/pyTkyNpaWlmgn7jz3iNAAIIIIAAAtYTILBYr00oEQKOEygrKzMrdnXu3LlNdRs2bJiZdN/am3h3utdyaA8PBwIIIIAAAghYX4DAYv02ooQIOEJAly7WOSqpqakRq09ubq5Z/jiSZYhY5XkwAggggAACNhUgsNi04Sg2AnYTqKioEO9cFi27hpdwHTrkTHtXEhISzP4u4Xouz0EAAQQQQACBtgsQWNpuyB0QQCAIAd2xXsNLfHx8EFe17VSdz6JzZTSwcCCAAAIIIICAvQQILPZqL0qLAAIIIIAAAggggICrBAgsrmpuKosAAggggAACCCCAgL0ECCz2ai9KiwACCCCAAAIIIICAqwQILK5qbiqLAAIIIIAAAggggIC9BAgs9movSosAAggggAACCCCAgKsECCyuam4qiwACCCCAAAIIIICAvQQILPZqL0qLAAIIIIAAAggggICrBAgsrmpuKosAAggggAACCCCAgL0ECCz2ai9KiwACCCCAAAIIIICAqwQILK5qbiqLAAIIIIAAAggggIC9BAgs9movSosAAggggAACCCCAgKsECCyuam4qiwACCCCAAAIIIICAvQQILPZqL0qLAAIIIIAAAggggICrBAgsrmpuKosAAggggAACCCCAgL0ECCz2ai9KiwACCCCAAAIIIICAqwQILK5qbiqLAAIIIIAAAggggIC9BAgs9movSosAAggggAACCCCAgKsECCyuam4qiwACCCCAAAIIIICAvQQILPZqL0qLAAIIIIAAAggggICrBAgsrmpuKosAAggggAACCCCAgL0ECCz2ai9KiwACCCCAAAIIIICAqwQILK5qbiqLAAIIIIAAAggggIC9BAgs9movSosAAggggAACCCCAgKsECCyuam4qiwACCCCAAAIIIICAvQQILPZqL0qLAAIIIIAAAggggICrBP4/LTSuZ2kLvQEAAAAASUVORK5CYII=" + "cells": [ + { + "attachments": { + "image-3.png": { + "image/png": "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BOXk5JhLEhMTg7k0qHO190bvr4GdAwEEEEAAATsLEFjs3HqUvYGAv8Dy/vvvyxVXXGH+RfuDDz6Qq666SjSwTJ8+XZ566imzAtNdd90lM2fOpIelgSgvQiFQXFwshYWFkpycHIrbN7inhpbMzEzb70vUoFK8QAABBBBwnQCBxXVN7twKNxdYhgwZImeeeab87W9/M0FFA8upp54qp512muzdu1d69eolf//73wkszv31sEzNjhw5IjokTJerDvWhm4/qYhL6xYEAAggggIBdBQgsdm05yt1EwFdgaXJSozd0srMO0dFx/1Y8mHRvxVZpW5l0LlUgE+3b9pT/u1oDS6dOnRy33Hd72HAPBBBAAAH7CBBY7NNWlLQFgdYElhZuGfGPCSwRb4J2L4C/wJKSkiJnn322mXOyePFi2bRpU0DP7tGjh+imqb4OAosvFd5DAAEEELCbAIHFbi1Gef0KEFj80vCBhQT8BZb77rtP/vnPf5ohijfddNPRn7t162aGkOlQMj10In3nzp1l//79pufkjjvukMcee0y8n9evKoGlvgY/I4AAAgjYVYDAYteWo9xNBHQuSocOHZq8b+c3vD0sujwthzMEfAWWLl26mL2BvHsAaSjR5Yh1jpWu8tWzZ0/55JNPZOfOnaJhZu3atdK1a1dZtmyZeT179mxZuXJlEyACSxMS3kAAAQQQsKEAgcWGjUaRfQvs2rWrxQ34fF9p3Xdra2vNalL6L+oczhDwFVgGDhwouqnpa6+91qCSOln+xBNPNF+64tfcuXPNohELFy40AUXf+8///E/561//2uA67wsCi1eC7wgggAACdhYgsNi59Sh7AwHtYUlKSmrwnt1faA+L/mt7Wlqa3atC+f8t4Cuw6CaP9957r/zpT38yE/KPOeYYKSkpMctxv/3222YDyP79+8sbb7xhlijWz88//3xz/j333CMPPvigT18Ci08W3kQAAQQQsJkAgcVmDUZx/QsQWPzb8Il1BHwFFi2dLrM9btw4ycvLk9TUVHniiSfkyiuvNL2Guprd4cOHZcGCBfKrX/3KzHOJioqSl156Sa6//noz6V73GGp8EFgai/AaAQQQQMCOAgQWO7YaZfYpQGDxycKbFhPIzs42vSi+9mHReSvaS6i9K95De1+0p63+0fg9DS++lubW++i8Lnro6uvxMwIIIICA3QQILHZr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QYHZ0T4+Pl508rsuZdy9e3c5fPiwGaalF+vcEt1AUuea6POGDBkib7zxhnne/v37Ze3atZKUlCTFxcVm4rwO79LXer4+Q4ey6TLJubm5oksyNz4ILI1FeI0AAggg4CYBAoubWpu6IuBwAX+BJSMjQz799FM58cQTZeDAgbJs2TK56qqrZMeOHSYwPPfcc3LDDTeYsNKhQwcTQDSw3HnnnSa4DBo0SE444QR5//335fbbb5fNmzfL8OHD5bHHHpMLL7zQLKPcv39/mT17tnTq1EnOO+88E1h27dplekf69Okj48ePlzlz5sgFF1wgGzduNGFGy9ulSxczjE3LouX785//3KSVCCxNSHgDAQQQQMBFAgQWFzU2VUXA6QL+AsvFF19sekS0R+Vvf/ubXHnllVJdXS179uyRiy66SG655Ra5+eab5X/+539EA8tNN91kgkrjwKJBRYPJvHnzTA+Jej777LPy0ksvmV4c3ezxxRdfFA04GlCOOeYYmTVrltkE0ldg0aCkZdIhZC+//LIJSA8//HCTIWQEFqf/5lI/BBBAAIHmBAgszenwGQII2ErAX2DRHpbPPvtM7r//fnnwwQdNr8jOnTtND4tuyqi71d9xxx0mzOgGjdddd50JLPfcc485/7jjjpOsrCxZv3696Vl56623pHPnzmb41l133SUzZswwq5PpUC99X4eZ6dAynceiPTOLFi0yPSr/+Mc/5Be/+IWsXr3avH766adFy6aBRefM/O53v5NHHnmEwGKr3zoKiwACCCAQagECS6iFuT8CCIRNoLnAokPCxo4da3pCFixYYELJkSNHTDjQXpKf//znZnhWWVnZ0SFh06ZNM3u66LwVnYvyzjvvmKFj2pOiPSOPP/64/OQnPzHLDetQMP1c57lce+21JgT17t3b9Ljotffdd9/R93TomM6nIbCE7VeDByGAAAII2FiAwGLjxqPoCCDQUMBXYGl4RsNXOvFee0W8R2xsrBkq5n2t3xufo+81Pk+XUda9UnTolvdISUmRoqKiBu/5upf3/Oa+MySsOR0+QwABBBBwugCBxektTP0QcJFAsIHFLjQEFru0FOVEAAEEEAiFAIElFKrcEwEEIiJAYIkIOw9FAAEEEEAgpAIElpDycnMEEAinwIEDB8wQLKftdK/DzXTejM6J4UAAAQQQQMBtAgQWt7U49UXAwQLewBIdHe2oWuqQMAKLo5qUyiCAAAIIBCFAYAkCi1MRQMDaArpjvIYVJwYWXRygR48e1m4ASocAAggggEAIBAgsIUDllgggEBkBAktk3HkqAggggAACoRQgsIRSl3sjgEBYBcIRWDp06CDl5eVmiJa3crqEcWFhofdlu3/XIWH0sLQ7KzdEAAEEELCJAIHFJg1FMRFAoGWBcASW008/XZYsWWL2YjnllFNk6dKlMnr0aFm7dq3oppOhOAgsoVDlnggggAACdhEgsNilpSgnAgi0KOArsCQmJsrJJ58sFRUV8vXXX8vQoUMlLy9PdGf64uJiEzJOOOEEswv9jh07JCsry8wV0QCi59U/kpKSZMSIEbJy5Uo59dRTzXlvvPGG6DP0HitWrKh/erv9TGBpN0puhAACCCBgQwECiw0bjSIjgIBvAV+BZcCAAdKxY0cZO3asLF682ISUKVOmiC59/Oyzz8p1110ny5YtMwFk7ty5MnXqVHn33XfN5+vXr2/wIO1JWbNmjRkSph/ofebNm2fOOfPMM2XhwoXm5/b+H4GlvUW5HwIIIICAnQQILHZqLcqKAALNCvgKLKeddpr07NlTjj/+eHn99ddFQ8itt94qu3fvljfffFP+8pe/yIIFC0Tnpixfvlz69OljelF0Tsrbb7/d4Hl6Hz1v69at5n1vYImKihIdKrZo0aIG57fXCwJLe0lyHwQQQAABOwoQWOzYapQZAQR8CvgKLJMmTZJ+/fpJQkKCmW+Snp5uJszr0K9PPvlEBg4cKH379jWfv/XWW3LhhReaXpiCggL58MMPmzynfk+KN7DoMLOioiLRfWBCcRBYQqHKPRFAAAEE7CJAYLFLS1FOBBBoUUADi/Z2NN7pXvdl0d3i/R16vn6uwUCP2NhYqa6u9nm6DjHbu3evWbXLe4IGli1btnhftvt3LZuuEqY9PBwIIIAAAgi4TYDA4rYWp74IOFggJyfHhI7GgcXuVdbAol/dunWze1UoPwIIIIAAAkELEFiCJuMCBBCwqsCRI0ekpKTErNpl1TK2ply6wpkOaevcuXNrLucaBBBAAAEEbC1AYLF181F4BBCoL1BTUyOHDx82c1Ti4uJEh4LZ+fAOBdNhbpmZmaJ14kAAAQQQQMBtAgQWt7U49UXA4QL6R76u8KW9Et6hVKGoss5z0SChc0tCcei9NXDFx8ebPWMIK6FQ5p4IIIAAAnYQILDYoZUoIwIIWE5g0KBBZnL+5s2bQ1Y2XQRAgwsHAggggAACbhYgsLi59ak7Agi0WkAnwGuvh64YxoEAAggggAACoRMgsITOljsjgICDBfr37296WLZt2+bgWlI1BBBAAAEEIi9AYIl8G1ACBBCwoQA9LDZsNIqMAAIIIGBLAQKLLZuNQiOAQKQFCCyRbgGejwACCCDgFgECi1tamnoigEC7ChBY2pWTmyGAAAIIIOBXgMDil4YPEEAAAf8CQ4YMMXNYNm7c6P8kPkEAAQQQQACBNgsQWNpMyA0QQMCNAvSwuLHVqTMCCCCAQCQECCyRUOeZCCBgewECi+2bkAoggAACCNhEgMBik4aimAggYC0BAou12oPSIIAAAgg4V4DA4ty2pWYIIBAigYyMDOnSpYvExMRIZWWlsBdLiKC5LQIIIIAAAh4BAgu/BggggECQAhpYjj32WImKipIDBw4QWIL043QEEEAAAQSCESCwBKPFuQgggMC/Bc4880xJTEyUjz76CBMEEEAAAQQQCKEAgSWEuNwaAQSsJVBbWyvFxcVSXV4utXV1poektSXs1KmTxMfHSW5uXmtvYa6Ljo6SmPgESU5ONsskt+lmXIwAAggggIADBQgsDmxUqoQAAk0F6jwBJT8nR6KqKqVjVK14XkqMZ0hXJA9PEaTO819Jda3UJiZLWmamREdHR7JIPBsBBBBAAAHLCRBYLNckFAgBBEIhUFRUJLVH8qRzXEwobt/me+ZX1UhdarqkpKS0+V7cAAEEEEAAAScJEFic1JrUBQEE/AocPnRI0msqJcEzBMuKR62nUIckVjL+vfqYFctImRBAAAEEEIiEAIElEuo8EwEEwi5weP9+6RpdK1YecHWwNkoyuvdgWFjYfzt4IAIIIICAlQUILFZuHcqGAALtJnBo717pGetZy73eHeM8k93Pvuhi06vx1ReLZeO339T79Icfhw4fIWN/fLa8+sTjktq5s5kLoxP42/vYVy3StVevNi0G0N5l4n4IIIAAAghEWoDAEukW4PkIIBAWAV+B5eJp18t3X38l2zZ8J5ff9Bt587lnpMQz1yU2Lk7SO2dKzsEDoqFm6q3T5bP33pG9338v0+68Sz785xzZvW2rdEpL+7+ye2bwl5aUSBdP70j2/n2iYSY+IUEyunaVHM8+LTXV1ZLmCTpHcnPNvRM8yyHrcxofBJbGIrxGAAEEEECAjSP5HUAAAZcI+AosP/nFpSZALP3kI8nzrCCmR7devUWDzPaNG6TPwEHy9gvPy7S77pbVy76UlQs/lxvuuU++XbpEPp77htz9yOPy7ZdLZdhJP5L9u3ZKqWfJ5OSOHeXdl1+Uqz0hZ9fWrTLgmGPkqb/8l/zsml/K2hXL5aRx4+XL+Z+a8xvTE1gai/AaAQQQQAABAgu/Awgg4BIBX4FFd6o/fvQYOXHMWEnN6CzP/PdfZNLPLpJvPIFk387v5cJrp8mSj/8l5/z8EtP7ooHk6um/k7menpjiwkK5+Q9/kif//Ec5Y/K5kpt9SNZ/tUpuvPcP8ve//FkGZB1jAs+lv75Jbrpgitlj5cb7/iib1q6RT99606c6gcUnC28igAACCLhcgCFhLv8FoPoIuEXAV2A5cew4WbN8mWdPljqZctkVsu279TLwmGGyac1q+X7zJtGw8YmnJ+Xcy69sEFjeev5ZKSookF/fe7/pPTntnMkmsGz45mvz3ufvvyc/Gn+azH/nLfnl7+6Uv90xXRKTkuWa238nuYey5Y1nn/bJTmDxycKbCCCAAAIuFyCwuPwXgOoj4BYBX4FFh2eNmTjJhI3OXbvJcw/9tyQld5DLbrpZCvLyPXNPquT1Z542c1h0fov2sIybdLYZAqbn+gssb3mGkV1+0289c152yPCRJ8sDN/7KvP707bkyZsJEM2dm4+pvm9ATWJqQ8AYCCCCAAAJCYOGXAAEEXCHgK7BoxaNjYjwhJbnJJPiY2FgzWd4Xjg4l016Z5g6zY73nvNqamuZOa/AZgaUBBy8QQAABBBAwAgQWfhEQQMAVAjmejSO71VVZfB+WaM8+LN3Zh8UVv5FUEgEEEEAgUAECS6BSnIcAArYWyMvOlvjKMkmLjbFkPYqra6U4LkEyu3WzZPkoFAIIIIAAApESILBESp7nIoBAWAVKPPuklBUckTSpkcRoa+13X+nZtyVPYiWhUyfp5PniQAABBBBAAIEfBAgsP1jwEwIIOFwgzrMhZOHhHCn2hJfo2pqI7yhvZsF4/peYkiop6elSE8R8F4c3FdVDAAEEEEDgqACB5SgFPyCAgBMF4uPjpV+/fpLo2V2+oqJCcj27ze/fv99Mmo/xTLiP5KET93UCf9euXaVz587SoUMHqayslO+//17Ky8sjWTSejQACCCCAgGUECCyWaQoKggAC7SmgQ6v69OkjCQkJJqQUePZN0S8rH0lJSdKlSxdJ9/S2VFVVyb59+yxfZit7UjYEEEAAAWcIEFic0Y7UAgEE/i2QkZFh/uiP9SxLnJeXJ9meyfZ2HGrVs2dPSU1NNbXKycmRw4cP08YIIIAAAgi4UoDA4spmp9IIOE9Ah1Vp74T2TOgf+Pn5+Y6opIYWrZcOFzvkWZpZA1itZ5I+BwIIIIAAAm4RILC4paWpJwIOFdC5H909e5fo/JSDBw9KsWc3eiceyZ7NLbt5ljzWoW4HDhwwocyJ9aROCCCAAAIINBYgsDQW4TUCCNhCQOem9O7dW3RSvc71KCwstEW521pI7Wnp1auXWTRg7969UlZW1tZbcj0CCCCAAAKWFiCwWLp5KBwCCPgSSEtLk759+5peBu1tcOOhQ+A0uOzevdssKuBGA+qMAAIIIOAOAQKLO9qZWiLgGAFdQWvAgAGyfft216+gpb0tgwcPNss067wdDgQQQAABBJwoQGBxYqtSJwQcKqDL/h5zzDGybds2KSoqcmgtg6uWmgwbNky2bt2KSXB0nI0AAgggYBMBAotNGopiIoCAmA0gdWNFtw4D8/c7kJmZKTpMToMcBwIIIIAAAk4TILA4rUWpDwIOFNC9VXRPlaysLDly5IhZ3teB1Wx1lTSwqNGWLVtafQ8uRAABBBBAwKoCBBartgzlQgCBowL6x7iGFd0AUoMLPQlHacwPo0aNEt0oUw/dpwUfQ8H/EEAAAQQcIkBgcUhDUg0EnC4wbtw4SUlJMX+M8wd5w9bWQKehRYfKrVmzpuGHvEIAAQQQQMDmAgQWmzcgxUfALgKlpaWi809iYmJaVWRdHUw3iWxLWImKijLP14nqbT10t/mSkhJTJ90LJtKHLkagm2bq3iyRPqKjo0W/2sM50nXh+QgggAACkRcgsES+DSgBAo4WKC8vN/NO9A98PVobWNoDqa6uTrQc+oe0BqDWHhq+NKx462KFwNLauoTiuurqatGvuLg4SU1NDcUjuCcCCCCAgIsECCwuamyqikAkBA4ePGgem5iYGInH+3ymBo7k5GSzspbPE5p5U/8Qz8/PN9frPigc/gV0vpH2tOgKZhwIIIAAAgi0VoDA0lo5rkMAgRYFNBjoql4aDqx0aC+LDk/r0qXL0V6SQMunw670Wp03wtG8gDofPnzY9GZpbwsHAggggAACrREgsLRGjWsQQCAgAe2JKCsrs1xg0cJruTSweFfXCqhCnpO010DnwrRlSFmgz3LCeTk5OWaxhISEBCdUhzoggAACCERAgMASAXQeiYBbBLQ3Qud6WPGPVe396d69uxmyFEx7FBQUmLkZVus1CqYO4TxXe1h0Hgs9LOFU51kIIICAswQILM5qT2qDgKUEmgssY8eONXNBNm3aFFCZzz//fFmwYIEJQHpBt27d5Nhjj5XPP/88oOsbn2S3wPLTn/5U/vWvf0lFRUXjqjR5rYsBTJ48Wd5///2jn6mVzr9p7eaSQ4cONUsn6ypkixYtEl3AQO950kknyapVq/zel8BytAn4AQEEEECglQIEllbCcRkCCLQs0Fxguffee0V7K2bMmGFupHus6NwQ7bnQYVcaSHRIma7opec999xz5g/wd955x5z/m9/8Rrp27Sp/+MMfTA+O7vauE/x1c0mdX6L30H/V194dLUfjo70Diw4T0yFm+ge6zt3w9ippvXRYlB76s36mf+xrz5PWTV9rCNFeiMLCQvNZ47Lqder13nvvydKlS4/eS3+oqqoy16uF1lnDit7zqaeeMjZ79uwx58+cOVPmzp1rQp+uaqZLROsmk1puXRBBjbQ86qftUP9Q2wsuuEBeeeUVGT16tOzevduU3/veNddcI3PmzDHzlepfpz8TWBqL8BoBBBBAIFgBAkuwYpyPAAIBC/gLLAMHDpQTTzxRevbsKc8884z5g/uWW24xfzQvX75czjjjDPOHroYX/UP8oYcekunTp5vnPvroo6J/cF9//fXm+9///ne5+eabZfv27TJkyBBz7pVXXmn+1X/MmDGmB0b/wG58tGdg0WB0ww03mD1isrKy5B//+Iccf/zxMmLECPPHvbee9913n3z77bcyYMAA+fDDD03AuOSSS+TNN9+Uc889V15++WW58cYb5cknn5SzzjrLBLDvvvtOzj77bPn+++/NexpE9Lj//vtFP1uxYoX84he/kI0bN8qgQYNEe6yWLFkiv/rVryQ3N1dmz55t3td7bN682QSea6+9Vnbu3GneV7+bbrpJXnjhBbnqqqtMMGwcWE499VQTZjRE6nV6//Hjx5vQsnr1ahNitPfm66+/bsxMYGkiwhsIIIAAAsEKEFiCFeN8BBAIWMBfYPntb38rX375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sNi04Sg2AnYTqKioEO9cFi27hpdwHTrkTHtXEhISzP4u4Xouz0EAAQQQQACBtgsQWNpuyB0QQCAIAd2xXsNLfHx8EFe17VSdz6JzZTSwcCCAAAIIIICAvQQILPZqL0qLAAIIIIAAAggggICrBAgsrmpuKosAAggggAACCCCAgL0ECCz2ai9KiwACCCCAAAIIIICAqwQILK5qbiqLAAIIIIAAAggggIC9BAgs9movSosAAggggAACCCCAgKsECCyuam4qiwACCCCAAAIIIICAvQQILPZqL0qLAAIIIIAAAggggICrBAgsrmpuKosAAggggAACCCCAgL0ECCz2ai9KiwACCCCAAAIIIICAqwQILK5qbiqLAAIIIIAAAggggIC9BAgs9movSosAAggggAACCCCAgKsECCyuam4qiwACCCCAAAIIIICAvQQILPZqL0qLAAIIIIAAAggggICrBAgsrmpuKosAAggggAACCCCAgL0ECCz2ai9KiwACCCCAAAIIIICAqwQILK5qbiqLAAIIIIAAAggggIC9BAgs9movSosAAggggAACCCCAgKsECCyuam4qiwACCCCAAAIIIICAvQQILPZqL0qLAAIIIIAAAggggICrBAgsrmpuKosAAggggAACCCCAgL0ECCz2ai9KiwACCCCAAAIIIICAqwQILK5qbiqLAAIIIIAAAggggIC9BAgs9movSosAAggggAACCCCAgKsECCyuam4qiwACCCCAAAIIIICAvQQILPZqL0qLAAIIIIAAAggggICrBP4/LTSuZ2kLvQEAAAAASUVORK5CYII=" + }, + "image.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", + "metadata": {}, + "source": [ + "## XGBoost models\n", + "\n", + "\n", + "XGBoost based models are slightly finicky to get into a suitable onnx format. By default most tree based models will export into something that looks like this: \n", + "\n", + "\n", + "![image.png](attachment:image.png)\n", + "\n", + "\n", + "Processing such nodes can be difficult and error prone. It would be much better if the operations of the tree were represented as a proper graph, possibly ... like this: \n", + "\n", + "\n", + "![image-3.png](attachment:image-3.png)\n", + "\n", + "\n", + "This notebook showcases how to do that using the `hummingbird` python package ! " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a60b90d6", + "metadata": {}, + "outputs": [], + "source": [ + "!python -m pip install hummingbird_ml" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "95613ee9", + "metadata": {}, + "outputs": [], + "source": [ + "# check if notebook is in colab\n", + "try:\n", + " # install ezkl\n", + " import google.colab\n", + " import subprocess\n", + " import sys\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"hummingbird-ml\"])\n", + " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"xgboost\"])\n", + "\n", + "# rely on local installation of ezkl if the notebook is not in colab\n", + "except:\n", + " pass\n", + "\n", + "\n", + "# here we create and (potentially train a model)\n", + "\n", + "# make sure you have the dependencies required here already installed\n", + "import json\n", + "import numpy as np\n", + "from sklearn.datasets import load_iris\n", + "from sklearn.model_selection import train_test_split\n", + "from xgboost import XGBClassifier as Gbc\n", + "import torch\n", + "import ezkl\n", + "import os\n", + "from torch import nn\n", + "import xgboost as xgb\n", + "from hummingbird.ml import convert\n", + "\n", + "NUM_CLASSES = 3\n", + "\n", + "iris = load_iris()\n", + "X, y = iris.data, iris.target\n", + "X = X.astype(np.float32)\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y)\n", + "clr = Gbc(n_estimators=12)\n", + "clr.fit(X_train, y_train)\n", + "\n", + "# convert to torch\n", + "\n", + "\n", + "torch_gbt = convert(clr, 'torch')\n", + "\n", + "print(torch_gbt)\n", + "# assert predictions from torch are = to sklearn\n", + "diffs = []\n", + "\n", + "for i in range(len(X_test)):\n", + " torch_pred = torch_gbt.predict(torch.tensor(X_test[i].reshape(1, -1)))\n", + " sk_pred = clr.predict(X_test[i].reshape(1, -1))\n", + " diffs.append(torch_pred != sk_pred[0])\n", + "\n", + "print(\"num diff: \", sum(diffs))\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b37637c4", + "metadata": {}, + "outputs": [], + "source": [ + "model_path = os.path.join('network.onnx')\n", + "compiled_model_path = os.path.join('network.compiled')\n", + "pk_path = os.path.join('test.pk')\n", + "vk_path = os.path.join('test.vk')\n", + "settings_path = os.path.join('settings.json')\n", + "srs_path = os.path.join('kzg.srs')\n", + "witness_path = os.path.join('witness.json')\n", + "data_path = os.path.join('input.json')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "82db373a", + "metadata": {}, + "outputs": [], + "source": [ + "# !!!!!!!!!!!!!!!!! This cell will flash a warning about onnx runtime compat but it is fine !!!!!!!!!!!!!!!!!!!!!\n", + "\n", + "\n", + "# export to onnx format\n", + "\n", + "\n", + "# Input to the model\n", + "shape = X_train.shape[1:]\n", + "x = torch.rand(1, *shape, requires_grad=False)\n", + "torch_out = torch_gbt.predict(x)\n", + "# Export the model\n", + "torch.onnx.export(torch_gbt.model, # model being run\n", + " # model input (or a tuple for multiple inputs)\n", + " x,\n", + " # where to save the model (can be a file or file-like object)\n", + " \"network.onnx\",\n", + " export_params=True, # store the trained parameter weights inside the model file\n", + " opset_version=18, # the ONNX version to export the model to\n", + " input_names=['input'], # the model's input names\n", + " output_names=['output'], # the model's output names\n", + " dynamic_axes={'input': {0: 'batch_size'}, # variable length axes\n", + " 'output': {0: 'batch_size'}})\n", + "\n", + "d = ((x).detach().numpy()).reshape([-1]).tolist()\n", + "\n", + "data = dict(input_shapes=[shape],\n", + " input_data=[d],\n", + " output_data=[(o).reshape([-1]).tolist() for o in torch_out])\n", + "\n", + "# Serialize data into file:\n", + "json.dump(data, open(\"input.json\", 'w'))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d5e374a2", + "metadata": {}, + "outputs": [], + "source": [ + "run_args = ezkl.PyRunArgs()\n", + "run_args.variables = [(\"batch_size\", 1)]\n", + "\n", + "# TODO: Dictionary outputs\n", + "res = ezkl.gen_settings(model_path, settings_path, py_run_args=run_args)\n", + "assert res == True\n", + "\n", + "res = ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3aa4f090", + "metadata": {}, + "outputs": [], + "source": [ + "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", + "assert res == True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8b74dcee", + "metadata": {}, + "outputs": [], + "source": [ + "# srs path\n", + "res = ezkl.get_srs(srs_path, settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "18c8b7c7", + "metadata": {}, + "outputs": [], + "source": [ + "# now generate the witness file \n", + "\n", + "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", + "assert os.path.isfile(witness_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b1c561a8", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# HERE WE SETUP THE CIRCUIT PARAMS\n", + "# WE GOT KEYS\n", + "# WE GOT CIRCUIT PARAMETERS\n", + "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", + "\n", + "\n", + "\n", + "res = ezkl.setup(\n", + " compiled_model_path,\n", + " vk_path,\n", + " pk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "assert os.path.isfile(vk_path)\n", + "assert os.path.isfile(pk_path)\n", + "assert os.path.isfile(settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c384cbc8", + "metadata": {}, + "outputs": [], + "source": [ + "# GENERATE A PROOF\n", + "\n", + "\n", + "proof_path = os.path.join('test.pf')\n", + "\n", + "res = ezkl.prove(\n", + " witness_path,\n", + " compiled_model_path,\n", + " pk_path,\n", + " proof_path,\n", + " srs_path,\n", + " \"single\",\n", + " )\n", + "\n", + "print(res)\n", + "assert os.path.isfile(proof_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "76f00d41", + "metadata": {}, + "outputs": [], + "source": [ + "# VERIFY IT\n", + "\n", + "res = ezkl.verify(\n", + " proof_path,\n", + " settings_path,\n", + " vk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "print(\"verified\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1f50a8d0", + "metadata": {}, + "outputs": [], + "source": [ + "# VERIFY IT\n", + "\n", + "res = ezkl.verify(\n", + " proof_path,\n", + " settings_path,\n", + " vk_path,\n", + " srs_path,\n", + " )\n", + "\n", + "assert res == True\n", + "print(\"verified\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.15" + } }, - "image.png": { - "image/png": "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" - } - }, - "cell_type": "markdown", - "id": "cf69bb3f-94e6-4dba-92cd-ce08df117d67", - "metadata": {}, - "source": [ - "## XGBoost models\n", - "\n", - "\n", - "XGBoost based models are slightly finicky to get into a suitable onnx format. By default most tree based models will export into something that looks like this: \n", - "\n", - "\n", - "![image.png](attachment:image.png)\n", - "\n", - "\n", - "Processing such nodes can be difficult and error prone. It would be much better if the operations of the tree were represented as a proper graph, possibly ... like this: \n", - "\n", - "\n", - "![image-3.png](attachment:image-3.png)\n", - "\n", - "\n", - "This notebook showcases how to do that using the `hummingbird` python package ! " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a60b90d6", - "metadata": {}, - "outputs": [], - "source": [ - "!python -m pip install hummingbird_ml" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "95613ee9", - "metadata": {}, - "outputs": [], - "source": [ - "# check if notebook is in colab\n", - "try:\n", - " # install ezkl\n", - " import google.colab\n", - " import subprocess\n", - " import sys\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"ezkl\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"onnx\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"hummingbird-ml\"])\n", - " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"xgboost\"])\n", - "\n", - "# rely on local installation of ezkl if the notebook is not in colab\n", - "except:\n", - " pass\n", - "\n", - "\n", - "# here we create and (potentially train a model)\n", - "\n", - "# make sure you have the dependencies required here already installed\n", - "import json\n", - "import numpy as np\n", - "from sklearn.datasets import load_iris\n", - "from sklearn.model_selection import train_test_split\n", - "from xgboost import XGBClassifier as Gbc\n", - "import torch\n", - "import ezkl\n", - "import os\n", - "from torch import nn\n", - "import xgboost as xgb\n", - "from hummingbird.ml import convert\n", - "\n", - "NUM_CLASSES = 3\n", - "\n", - "iris = load_iris()\n", - "X, y = iris.data, iris.target\n", - "X = X.astype(np.float32)\n", - "X_train, X_test, y_train, y_test = train_test_split(X, y)\n", - "clr = Gbc(n_estimators=12)\n", - "clr.fit(X_train, y_train)\n", - "\n", - "# convert to torch\n", - "\n", - "\n", - "torch_gbt = convert(clr, 'torch')\n", - "\n", - "print(torch_gbt)\n", - "# assert predictions from torch are = to sklearn\n", - "diffs = []\n", - "\n", - "for i in range(len(X_test)):\n", - " torch_pred = torch_gbt.predict(torch.tensor(X_test[i].reshape(1, -1)))\n", - " sk_pred = clr.predict(X_test[i].reshape(1, -1))\n", - " diffs.append(torch_pred != sk_pred[0])\n", - "\n", - "print(\"num diff: \", sum(diffs))\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b37637c4", - "metadata": {}, - "outputs": [], - "source": [ - "model_path = os.path.join('network.onnx')\n", - "compiled_model_path = os.path.join('network.compiled')\n", - "pk_path = os.path.join('test.pk')\n", - "vk_path = os.path.join('test.vk')\n", - "settings_path = os.path.join('settings.json')\n", - "srs_path = os.path.join('kzg.srs')\n", - "witness_path = os.path.join('witness.json')\n", - "data_path = os.path.join('input.json')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "82db373a", - "metadata": {}, - "outputs": [], - "source": [ - "# !!!!!!!!!!!!!!!!! This cell will flash a warning about onnx runtime compat but it is fine !!!!!!!!!!!!!!!!!!!!!\n", - "\n", - "\n", - "# export to onnx format\n", - "\n", - "\n", - "# Input to the model\n", - "shape = X_train.shape[1:]\n", - "x = torch.rand(1, *shape, requires_grad=False)\n", - "torch_out = torch_gbt.predict(x)\n", - "# Export the model\n", - "torch.onnx.export(torch_gbt.model, # model being run\n", - " # model input (or a tuple for multiple inputs)\n", - " x,\n", - " # where to save the model (can be a file or file-like object)\n", - " \"network.onnx\",\n", - " export_params=True, # store the trained parameter weights inside the model file\n", - " opset_version=18, # the ONNX version to export the model to\n", - " input_names=['input'], # the model's input names\n", - " output_names=['output'], # the model's output names\n", - " dynamic_axes={'input': {0: 'batch_size'}, # variable length axes\n", - " 'output': {0: 'batch_size'}})\n", - "\n", - "d = ((x).detach().numpy()).reshape([-1]).tolist()\n", - "\n", - "data = dict(input_shapes=[shape],\n", - " input_data=[d],\n", - " output_data=[(o).reshape([-1]).tolist() for o in torch_out])\n", - "\n", - "# Serialize data into file:\n", - "json.dump(data, open(\"input.json\", 'w'))\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d5e374a2", - "metadata": {}, - "outputs": [], - "source": [ - "run_args = ezkl.PyRunArgs()\n", - "run_args.variables = [(\"batch_size\", 1)]\n", - "\n", - "# TODO: Dictionary outputs\n", - "res = ezkl.gen_settings(model_path, settings_path, py_run_args=run_args)\n", - "assert res == True\n", - "\n", - "res = await ezkl.calibrate_settings(data_path, model_path, settings_path, \"resources\")\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3aa4f090", - "metadata": {}, - "outputs": [], - "source": [ - "res = ezkl.compile_circuit(model_path, compiled_model_path, settings_path)\n", - "assert res == True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8b74dcee", - "metadata": {}, - "outputs": [], - "source": [ - "# srs path\n", - "res = ezkl.get_srs(srs_path, settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "18c8b7c7", - "metadata": {}, - "outputs": [], - "source": [ - "# now generate the witness file \n", - "\n", - "res = ezkl.gen_witness(data_path, compiled_model_path, witness_path)\n", - "assert os.path.isfile(witness_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b1c561a8", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "# HERE WE SETUP THE CIRCUIT PARAMS\n", - "# WE GOT KEYS\n", - "# WE GOT CIRCUIT PARAMETERS\n", - "# EVERYTHING ANYONE HAS EVER NEEDED FOR ZK\n", - "\n", - "\n", - "\n", - "res = ezkl.setup(\n", - " compiled_model_path,\n", - " vk_path,\n", - " pk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "assert os.path.isfile(vk_path)\n", - "assert os.path.isfile(pk_path)\n", - "assert os.path.isfile(settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c384cbc8", - "metadata": {}, - "outputs": [], - "source": [ - "# GENERATE A PROOF\n", - "\n", - "\n", - "proof_path = os.path.join('test.pf')\n", - "\n", - "res = ezkl.prove(\n", - " witness_path,\n", - " compiled_model_path,\n", - " pk_path,\n", - " proof_path,\n", - " srs_path,\n", - " \"single\",\n", - " )\n", - "\n", - "print(res)\n", - "assert os.path.isfile(proof_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "76f00d41", - "metadata": {}, - "outputs": [], - "source": [ - "# VERIFY IT\n", - "\n", - "res = ezkl.verify(\n", - " proof_path,\n", - " settings_path,\n", - " vk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "print(\"verified\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1f50a8d0", - "metadata": {}, - "outputs": [], - "source": [ - "# VERIFY IT\n", - "\n", - "res = ezkl.verify(\n", - " proof_path,\n", - " settings_path,\n", - " vk_path,\n", - " srs_path,\n", - " )\n", - "\n", - "assert res == True\n", - "print(\"verified\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.15" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/src/execute.rs b/src/execute.rs index 177dc359..bf9e0953 100644 --- a/src/execute.rs +++ b/src/execute.rs @@ -119,7 +119,7 @@ pub async fn run(cli: Cli) -> Result<(), Box> { compiled_circuit, transcript, num_runs, - } => fuzz(compiled_circuit, witness, transcript, num_runs).await, + } => fuzz(compiled_circuit, witness, transcript, num_runs), Commands::GenSrs { srs_path, logrows } => gen_srs_cmd(srs_path, logrows as u32), #[cfg(not(target_arch = "wasm32"))] @@ -149,7 +149,7 @@ pub async fn run(cli: Cli) -> Result<(), Box> { target, scales, max_logrows, - } => calibrate(model, data, settings_path, target, scales, max_logrows).await, + } => calibrate(model, data, settings_path, target, scales, max_logrows), Commands::GenWitness { data, compiled_circuit, @@ -159,7 +159,7 @@ pub async fn run(cli: Cli) -> Result<(), Box> { } => gen_witness(compiled_circuit, data, Some(output), vk_path, srs_path) .await .map(|_| ()), - Commands::Mock { model, witness } => mock(model, witness).await, + Commands::Mock { model, witness } => mock(model, witness), #[cfg(not(target_arch = "wasm32"))] Commands::CreateEVMVerifier { vk_path, @@ -258,7 +258,6 @@ pub async fn run(cli: Cli) -> Result<(), Box> { proof_type, check_mode, ) - .await .map(|_| ()), Commands::MockAggregate { aggregation_snarks, @@ -603,7 +602,7 @@ use colored_json::ToColoredJson; /// Calibrate the circuit parameters to a given a dataset #[cfg(not(target_arch = "wasm32"))] #[allow(trivial_casts)] -pub(crate) async fn calibrate( +pub(crate) fn calibrate( model_path: PathBuf, data: PathBuf, settings_path: PathBuf, @@ -677,8 +676,6 @@ pub(crate) async fn calibrate( "input scale: {}, param scale: {}, scale rebase multiplier: {}", input_scale, param_scale, scale_rebase_multiplier )); - std::thread::sleep(Duration::from_millis(100)); - // vec of settings copied chunks.len() times let run_args_iterable = vec![settings.run_args.clone(); chunks.len()]; @@ -704,53 +701,48 @@ pub(crate) async fn calibrate( let mut circuit = match GraphCircuit::from_run_args(&local_run_args, &model_path) { Ok(c) => c, Err(_) => { - return tokio::task::spawn(async move { - Err(format!("failed to create circuit from run args")) - as Result - }) + return Err(format!("failed to create circuit from run args")) + as Result } }; - tokio::task::spawn(async move { - let data = circuit - .load_graph_input(&chunk) - .await - .map_err(|e| format!("failed to load circuit inputs: {}", e))?; + let data = circuit + .load_graph_from_file_exclusively(&chunk) + .map_err(|e| format!("failed to load circuit inputs: {}", e))?; - circuit - .calibrate(&data, max_logrows) - .map_err(|e| format!("failed to calibrate: {}", e))?; + circuit + .calibrate(&data, max_logrows) + .map_err(|e| format!("failed to calibrate: {}", e))?; - let settings = circuit.settings().clone(); + let settings = circuit.settings().clone(); - let found_run_args = RunArgs { - input_scale: settings.run_args.input_scale, - param_scale: settings.run_args.param_scale, - lookup_range: settings.run_args.lookup_range, - logrows: settings.run_args.logrows, - scale_rebase_multiplier: settings.run_args.scale_rebase_multiplier, - ..run_args.clone() - }; + let found_run_args = RunArgs { + input_scale: settings.run_args.input_scale, + param_scale: settings.run_args.param_scale, + lookup_range: settings.run_args.lookup_range, + logrows: settings.run_args.logrows, + scale_rebase_multiplier: settings.run_args.scale_rebase_multiplier, + ..run_args.clone() + }; - let found_settings = GraphSettings { - run_args: found_run_args, - required_lookups: settings.required_lookups, - model_output_scales: settings.model_output_scales, - model_input_scales: settings.model_input_scales, - num_rows: settings.num_rows, - total_assignments: settings.total_assignments, - total_const_size: settings.total_const_size, - ..original_settings.clone() - }; + let found_settings = GraphSettings { + run_args: found_run_args, + required_lookups: settings.required_lookups, + model_output_scales: settings.model_output_scales, + model_input_scales: settings.model_input_scales, + num_rows: settings.num_rows, + total_assignments: settings.total_assignments, + total_const_size: settings.total_const_size, + ..original_settings.clone() + }; - Ok(found_settings) as Result - }) + Ok(found_settings) as Result }) - .collect::>>>(); + .collect::>>(); let mut res: Vec = vec![]; for task in tasks { - if let Ok(task) = task.await? { + if let Ok(task) = task { res.push(task); } } @@ -888,7 +880,7 @@ pub(crate) async fn calibrate( Ok(()) } -pub(crate) async fn mock( +pub(crate) fn mock( compiled_circuit_path: PathBuf, data_path: PathBuf, ) -> Result<(), Box> { @@ -1284,7 +1276,7 @@ pub(crate) async fn test_update_account_calls( #[cfg(not(target_arch = "wasm32"))] #[allow(clippy::too_many_arguments)] -pub(crate) async fn prove( +pub(crate) fn prove( data_path: PathBuf, compiled_circuit_path: PathBuf, pk_path: PathBuf, @@ -1353,7 +1345,7 @@ pub(crate) async fn prove( } #[cfg(not(target_arch = "wasm32"))] -pub(crate) async fn fuzz( +pub(crate) fn fuzz( compiled_circuit_path: PathBuf, data_path: PathBuf, transcript: TranscriptType, diff --git a/src/graph/mod.rs b/src/graph/mod.rs index c120d078..445bcb1a 100644 --- a/src/graph/mod.rs +++ b/src/graph/mod.rs @@ -674,6 +674,26 @@ impl GraphCircuit { self.process_data_source(&data.input_data, shapes, scales, input_types) } + /// + pub fn load_graph_from_file_exclusively( + &mut self, + data: &GraphData, + ) -> Result>, Box> { + let shapes = self.model().graph.input_shapes(); + let scales = self.model().graph.get_input_scales(); + let input_types = self.model().graph.get_input_types(); + info!("input scales: {:?}", scales); + + match &data.input_data { + DataSource::File(file_data) => { + self.load_file_data(file_data, &shapes, scales, input_types) + } + _ => { + panic!("Cannot use non-file data source as input for this method.") + } + } + } + /// #[cfg(not(target_arch = "wasm32"))] pub async fn load_graph_input( diff --git a/src/python.rs b/src/python.rs index 684aa614..4c5a81d0 100644 --- a/src/python.rs +++ b/src/python.rs @@ -680,27 +680,22 @@ fn gen_settings( max_logrows = None, ))] fn calibrate_settings( - py: Python, data: PathBuf, model: PathBuf, settings: PathBuf, target: Option, scales: Option>, max_logrows: Option, -) -> PyResult<&pyo3::PyAny> { +) -> Result { let target = target.unwrap_or(CalibrationTarget::Resources { col_overflow: false, }); + crate::execute::calibrate(model, data, settings, target, scales, max_logrows).map_err(|e| { + let err_str = format!("Failed to calibrate settings: {}", e); + PyRuntimeError::new_err(err_str) + })?; - pyo3_asyncio::tokio::future_into_py(py, async move { - crate::execute::calibrate(model, data, settings, target, scales, max_logrows) - .await - .map_err(|e| { - let err_str = format!("Failed to calibrate settings: {}", e); - PyRuntimeError::new_err(err_str) - })?; - Ok(true) - }) + Ok(true) } /// runs the forward pass operation @@ -736,14 +731,10 @@ fn gen_witness( model, ))] fn mock(witness: PathBuf, model: PathBuf) -> PyResult { - Runtime::new() - .unwrap() - .block_on(crate::execute::mock(model, witness)) - .map_err(|e| { - let err_str = format!("Failed to run mock: {}", e); - PyRuntimeError::new_err(err_str) - })?; - + crate::execute::mock(model, witness).map_err(|e| { + let err_str = format!("Failed to run mock: {}", e); + PyRuntimeError::new_err(err_str) + })?; Ok(true) } @@ -806,21 +797,19 @@ fn prove( srs_path: PathBuf, proof_type: ProofType, ) -> PyResult { - let snark = Runtime::new() - .unwrap() - .block_on(crate::execute::prove( - witness, - model, - pk_path, - proof_path, - srs_path, - proof_type, - CheckMode::UNSAFE, - )) - .map_err(|e| { - let err_str = format!("Failed to run prove: {}", e); - PyRuntimeError::new_err(err_str) - })?; + let snark = crate::execute::prove( + witness, + model, + pk_path, + proof_path, + srs_path, + proof_type, + CheckMode::UNSAFE, + ) + .map_err(|e| { + let err_str = format!("Failed to run prove: {}", e); + PyRuntimeError::new_err(err_str) + })?; Python::with_gil(|py| Ok(snark.to_object(py))) } diff --git a/tests/python/binding_tests.py b/tests/python/binding_tests.py index 8ce0bfdc..42d7f350 100644 --- a/tests/python/binding_tests.py +++ b/tests/python/binding_tests.py @@ -2,7 +2,6 @@ import ezkl import os import pytest import json -import asyncio import subprocess import time @@ -156,7 +155,8 @@ def test_gen_srs(): assert os.path.isfile(params_k20_path) -async def calibrate_over_user_range(): + +def test_calibrate_over_user_range(): data_path = os.path.join( examples_path, 'onnx', @@ -183,20 +183,14 @@ async def calibrate_over_user_range(): model_path, output_path, py_run_args=run_args) assert res == True - res = await ezkl.calibrate_settings( + res = ezkl.calibrate_settings( data_path, model_path, output_path, "resources", [0, 1, 2]) assert res == True assert os.path.isfile(output_path) -def test_calibrate_calibrate_over_user_range(): - """ - Test for calibrate - """ - asyncio.run(calibrate_over_user_range()) - -async def calibrate(): +def test_calibrate(): data_path = os.path.join( examples_path, 'onnx', @@ -223,19 +217,12 @@ async def calibrate(): model_path, output_path, py_run_args=run_args) assert res == True - res = await ezkl.calibrate_settings( + res = ezkl.calibrate_settings( data_path, model_path, output_path, "resources") assert res == True assert os.path.isfile(output_path) -def test_calibrate(): - """ - Test for calibrate - """ - asyncio.run(calibrate()) - - def test_model_compile(): """ Test for model compilation/serialization @@ -559,7 +546,7 @@ def test_verify_evm(): assert res == True -async def aggregate_and_verify_aggr(): +def test_aggregate_and_verify_aggr(): data_path = os.path.join( examples_path, 'onnx', @@ -588,7 +575,7 @@ async def aggregate_and_verify_aggr(): res = ezkl.gen_settings(model_path, settings_path) assert res == True - res = await ezkl.calibrate_settings( + res = ezkl.calibrate_settings( data_path, model_path, settings_path, "resources") assert res == True assert os.path.isfile(settings_path) @@ -665,14 +652,7 @@ async def aggregate_and_verify_aggr(): assert res == True -def test_aggregate_and_verify_aggr(): - """ - Tests for aggregated proof and verifying aggregate proof - """ - asyncio.run(aggregate_and_verify_aggr()) - - -async def evm_aggregate_and_verify_aggr(): +def test_evm_aggregate_and_verify_aggr(): data_path = os.path.join( examples_path, 'onnx', @@ -697,7 +677,7 @@ async def evm_aggregate_and_verify_aggr(): settings_path, ) - await ezkl.calibrate_settings( + ezkl.calibrate_settings( data_path, model_path, settings_path, @@ -807,25 +787,21 @@ async def evm_aggregate_and_verify_aggr(): # assert res == True -def test_evm_aggregate_and_verify_aggr(): - """ - Tests for aggregated proof and verifying aggregate proof - """ - asyncio.run(evm_aggregate_and_verify_aggr()) - def get_examples(): EXAMPLES_OMIT = [ + # these are too large 'mobilenet_large', 'mobilenet', 'doodles', 'nanoGPT', - # these fails for some reason + "self_attention", 'multihead_attention', 'large_op_graph', '1l_instance_norm', 'variable_cnn', 'accuracy', - 'linear_regression' + 'linear_regression', + "mnist_gan", ] examples = [] for subdir, _, _ in os.walk(os.path.join(examples_path, "onnx")): @@ -851,9 +827,15 @@ def test_all_examples(model_file, input_file): witness_path = os.path.join(folder_path, 'witness.json') proof_path = os.path.join(folder_path, 'proof.json') + print("Testing example: ", model_file) res = ezkl.gen_settings(model_file, settings_path) assert res + res = ezkl.calibrate_settings( + input_file, model_file, settings_path, "resources") + assert res + + print("Compiling example: ", model_file) res = ezkl.compile_circuit(model_file, compiled_model_path, settings_path) assert res @@ -865,8 +847,10 @@ def test_all_examples(model_file, input_file): # generate the srs file if the path does not exist if not os.path.exists(srs_path): + print("Generating srs file: ", srs_path) ezkl.gen_srs(os.path.join(folder_path, srs_path), logrows) + print("Setting up example: ", model_file) res = ezkl.setup( compiled_model_path, vk_path, @@ -877,9 +861,11 @@ def test_all_examples(model_file, input_file): assert os.path.isfile(vk_path) assert os.path.isfile(pk_path) + print("Generating witness for example: ", model_file) res = ezkl.gen_witness(input_file, compiled_model_path, witness_path) assert os.path.isfile(witness_path) + print("Proving example: ", model_file) ezkl.prove( witness_path, compiled_model_path, @@ -890,6 +876,8 @@ def test_all_examples(model_file, input_file): ) assert os.path.isfile(proof_path) + + print("Verifying example: ", model_file) res = ezkl.verify( proof_path, settings_path,