diff --git a/docs/advanced_examples/ConvolutionalNeuralNetwork.ipynb b/docs/advanced_examples/ConvolutionalNeuralNetwork.ipynb index ee74318c8..b9774e3bb 100644 --- a/docs/advanced_examples/ConvolutionalNeuralNetwork.ipynb +++ b/docs/advanced_examples/ConvolutionalNeuralNetwork.ipynb @@ -42,11 +42,10 @@ "from sklearn.datasets import load_digits\n", "from sklearn.model_selection import train_test_split\n", "from torch import nn\n", - "from torch.nn.utils import prune\n", "from torch.utils.data import DataLoader, TensorDataset\n", "from tqdm import tqdm\n", "\n", - "from concrete.ml.torch.compile import compile_brevitas_qat_model\n", + "from concrete.ml.torch.compile import compile_torch_model\n", "\n", "# And some helpers for visualization.\n", "\n", @@ -71,7 +70,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -126,80 +125,27 @@ "metadata": {}, "outputs": [], "source": [ - "import brevitas.nn as qnn\n", - "\n", - "\n", "class TinyCNN(nn.Module):\n", - " \"\"\"A very small CNN to classify the sklearn digits data-set.\n", - "\n", - " This class also allows pruning to a maximum of 10 active neurons, which\n", - " should help keep the accumulator bit width low.\n", - " \"\"\"\n", + " \"\"\"A very small CNN to classify the sklearn digits data-set.\"\"\"\n", "\n", - " def __init__(self, n_classes, n_bits) -> None:\n", + " def __init__(self, n_classes) -> None:\n", " \"\"\"Construct the CNN with a configurable number of classes.\"\"\"\n", " super().__init__()\n", "\n", - " a_bits = n_bits\n", - " w_bits = n_bits\n", - "\n", " # This network has a total complexity of 1216 MAC\n", - " self.q1 = qnn.QuantIdentity(bit_width=a_bits, return_quant_tensor=True)\n", - " self.conv1 = qnn.QuantConv2d(1, 8, 3, stride=1, padding=0, weight_bit_width=w_bits)\n", - " self.q2 = qnn.QuantIdentity(bit_width=a_bits, return_quant_tensor=True)\n", - " self.conv2 = qnn.QuantConv2d(8, 16, 3, stride=2, padding=0, weight_bit_width=w_bits)\n", - " self.q3 = qnn.QuantIdentity(bit_width=a_bits, return_quant_tensor=True)\n", - " self.conv3 = qnn.QuantConv2d(16, 32, 2, stride=1, padding=0, weight_bit_width=w_bits)\n", - " self.q4 = qnn.QuantIdentity(bit_width=a_bits, return_quant_tensor=True)\n", - " self.fc1 = qnn.QuantLinear(\n", - " 32,\n", - " n_classes,\n", - " bias=True,\n", - " weight_bit_width=w_bits,\n", - " )\n", - "\n", - " # Enable pruning, prepared for training\n", - " self.toggle_pruning(True)\n", - "\n", - " def toggle_pruning(self, enable):\n", - " \"\"\"Enables or removes pruning.\"\"\"\n", - "\n", - " # Maximum number of active neurons (i.e., corresponding weight != 0)\n", - " n_active = 12\n", - "\n", - " # Go through all the convolution layers\n", - " for layer in (self.conv1, self.conv2, self.conv3):\n", - " s = layer.weight.shape\n", - "\n", - " # Compute fan-in (number of inputs to a neuron)\n", - " # and fan-out (number of neurons in the layer)\n", - " st = [s[0], np.prod(s[1:])]\n", - "\n", - " # The number of input neurons (fan-in) is the product of\n", - " # the kernel width x height x inChannels.\n", - " if st[1] > n_active:\n", - " if enable:\n", - " # This will create a forward hook to create a mask tensor that is multiplied\n", - " # with the weights during forward. The mask will contain 0s or 1s\n", - " prune.l1_unstructured(layer, \"weight\", (st[1] - n_active) * st[0])\n", - " else:\n", - " # When disabling pruning, the mask is multiplied with the weights\n", - " # and the result is stored in the weights member\n", - " prune.remove(layer, \"weight\")\n", + " self.conv1 = nn.Conv2d(1, 8, 3, stride=1, padding=0)\n", + " self.conv2 = nn.Conv2d(8, 16, 3, stride=2, padding=0)\n", + " self.conv3 = nn.Conv2d(16, 32, 2, stride=1, padding=0)\n", + " self.fc1 = nn.Linear(32, n_classes)\n", "\n", " def forward(self, x):\n", " \"\"\"Run inference on the tiny CNN, apply the decision layer on the reshaped conv output.\"\"\"\n", - "\n", - " x = self.q1(x)\n", " x = self.conv1(x)\n", " x = torch.relu(x)\n", - " x = self.q2(x)\n", " x = self.conv2(x)\n", " x = torch.relu(x)\n", - " x = self.q3(x)\n", " x = self.conv3(x)\n", " x = torch.relu(x)\n", - " x = self.q4(x)\n", " x = x.flatten(1)\n", " x = self.fc1(x)\n", " return x" @@ -237,16 +183,19 @@ "name": "stderr", "output_type": "stream", "text": [ - "Training with 2 bit weights and activations: 100%|██████████| 150/150 [01:05<00:00, 2.28it/s]\n", - "Training with 3 bit weights and activations: 100%|██████████| 150/150 [01:00<00:00, 2.49it/s]\n", - "Training with 4 bit weights and activations: 100%|██████████| 150/150 [01:02<00:00, 2.39it/s]\n", - "Training with 5 bit weights and activations: 100%|██████████| 150/150 [01:02<00:00, 2.38it/s]\n", - "Training with 6 bit weights and activations: 100%|██████████| 150/150 [01:05<00:00, 2.29it/s]\n" + "Training: 0%| | 0/150 [00:00" ] @@ -287,29 +236,17 @@ "test_dataset = TensorDataset(torch.Tensor(x_test), torch.Tensor(y_test))\n", "test_dataloader = DataLoader(test_dataset)\n", "\n", - "nets = []\n", - "bit_range = range(2, 7)\n", - "\n", "# Train the network with Adam, output the test set accuracy every epoch\n", - "losses = []\n", - "for n_bits in bit_range:\n", - " net = TinyCNN(10, n_bits)\n", - " losses_bits = []\n", - " optimizer = torch.optim.Adam(net.parameters())\n", - " for _ in tqdm(range(N_EPOCHS), desc=f\"Training with {n_bits} bit weights and activations\"):\n", - " losses_bits.append(train_one_epoch(net, optimizer, train_dataloader))\n", - " losses.append(losses_bits)\n", - "\n", - " # Finally, disable pruning (sets the pruned weights to 0)\n", - " net.toggle_pruning(False)\n", - " nets.append(net)\n", + "net = TinyCNN(10)\n", + "losses_bits = []\n", + "optimizer = torch.optim.Adam(net.parameters())\n", + "for _ in tqdm(range(N_EPOCHS), desc=\"Training\"):\n", + " losses_bits.append(train_one_epoch(net, optimizer, train_dataloader))\n", "\n", "fig = plt.figure(figsize=(8, 4))\n", - "for losses_bits in losses:\n", - " plt.plot(losses_bits)\n", + "plt.plot(losses_bits)\n", "plt.ylabel(\"Cross Entropy Loss\")\n", "plt.xlabel(\"Epoch\")\n", - "plt.legend(list(map(str, bit_range)))\n", "plt.title(\"Training set loss during training\")\n", "plt.grid(True)\n", "plt.show()" @@ -333,11 +270,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Test accuracy for 2-bit weights and activations: 72.89%\n", - "Test accuracy for 3-bit weights and activations: 89.56%\n", - "Test accuracy for 4-bit weights and activations: 96.00%\n", - "Test accuracy for 5-bit weights and activations: 96.89%\n", - "Test accuracy for 6-bit weights and activations: 96.44%\n" + "Test accuracy for 6-bit weights and activations: 98.22%\n" ] } ], @@ -372,8 +305,7 @@ " )\n", "\n", "\n", - "for idx, net in enumerate(nets):\n", - " test_torch(net, bit_range[idx], test_dataloader)" + "test_torch(net, 6, test_dataloader)" ] }, { @@ -441,14 +373,9 @@ "### Test the network using Simulation\n", "\n", "Note that this is not a test in FHE. The simulated FHE mode gives \n", - "insight into the number of accumulator bits that are needed and the \n", - "impact of FHE execution on the accuracy.\n", + "insight about the impact of FHE execution on the accuracy.\n", "\n", - "The torch/brevitas neural network is quantized during training and, for inference, it is converted \n", - "to FHE by Concrete ML using a dedicated function, `compile_brevitas_qat_model`.\n", - "\n", - "In this test we determine the accuracy and accumulator bit-widths for the various quantization settings\n", - "that are trained above." + "The torch neural network is converted to FHE by Concrete ML using a dedicated function, `compile_torch_model`." ] }, { @@ -461,22 +388,15 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 450/450 [00:01<00:00, 280.84it/s]\n", - "100%|██████████| 450/450 [00:01<00:00, 280.89it/s]\n", - "100%|██████████| 450/450 [00:01<00:00, 280.64it/s]\n", - "100%|██████████| 450/450 [00:01<00:00, 251.91it/s]\n", - "100%|██████████| 450/450 [00:01<00:00, 251.96it/s]" + "WARNING: high error rate, more details with --display-optimizer-choice\n", + "100%|██████████| 450/450 [00:01<00:00, 295.41it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Simulated FHE execution for 2 bit network: 1.61s, 280.09it/s\n", - "Simulated FHE execution for 3 bit network: 1.61s, 279.71it/s\n", - "Simulated FHE execution for 4 bit network: 1.61s, 280.00it/s\n", - "Simulated FHE execution for 5 bit network: 1.79s, 251.08it/s\n", - "Simulated FHE execution for 6 bit network: 1.79s, 251.20it/s\n" + "Simulated FHE execution for 6 bit network accuracy: 0.98%\n" ] }, { @@ -488,118 +408,19 @@ } ], "source": [ - "accs = []\n", - "accum_bits = []\n", - "sim_time = []\n", - "\n", - "\n", - "for idx in range(len(bit_range)):\n", - " q_module = compile_brevitas_qat_model(nets[idx], x_train)\n", - "\n", - " accum_bits.append(q_module.fhe_circuit.graph.maximum_integer_bit_width())\n", - "\n", - " start_time = time.time()\n", - " accs.append(\n", - " test_with_concrete(\n", - " q_module,\n", - " test_dataloader,\n", - " use_sim=True,\n", - " )\n", - " )\n", - " sim_time.append(time.time() - start_time)\n", - "\n", - "for idx, vl_time_bits in enumerate(sim_time):\n", - " print(\n", - " f\"Simulated FHE execution for {bit_range[idx]} bit network: {vl_time_bits:.2f}s, \"\n", - " f\"{len(test_dataloader) / vl_time_bits:.2f}it/s\"\n", - " )" - ] - }, - { - "cell_type": "markdown", - "id": "da4666bf", - "metadata": {}, - "source": [ - "### Analysis of quantized results\n", + "n_bits = 6\n", "\n", - "We plot the accuracies obtained for various levels of quantization of weights and activations. \n", - "In addition, we plot the maximum accumulator bit width required to run inference of the network for\n", - "each weight and activation bit width. This is shown as the numbers next to the graph markers. \n", + "q_module = compile_torch_model(net, x_train, rounding_threshold_bits=6, p_error=0.1)\n", "\n", - "This accumulator bit width is determined by the compiler and is an important quantity in designing FHE-compatible neural networks." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "5b31947f", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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tXnzZrm7u9vtmNOmTdOkSZMKv05PT1fTpk0VHR3t0Bdrbm6u1q5dq4EDB8rT09PsONXOuawcPf3aFkl5mnZje93cuVG52qGfHB995BzoJ+dAPzk++sg50E/OgX5yfM7URwV3PMA+HK5oEhgYKElXnEmSnp6uWrVqldrOuHHjdOjQIe3fv18NGjSQJPn7+2vq1Kk6efKkXn/9dX322We6++67ix23Tp06xY55+TZX4u3tLW9v72LLPT09HX5gSc6T09nM35yojIt5Cm8QoNuuayZ3N0uF2qOfHB995BzoJ+dAPzk++sg50E/OgX5yfM7QR46ez9k43E0CJT0/5MSJEzp//rzN545cLiMjQ1u3blXbtm0LCyaXi4qKkiTt2rXrqo5b0vNOgJIcOZulj7ZferX11CHhFS6YAAAAAACqjsMVTSIiIiRJa9asKbZu9erVRba5kpycHElFXyl8udOnT0tSkVkh9jgu8Edz1+5VTr5VPVvWUURYXbPjAAAAAADKwOGKJv3791eLFi306aef6ueffy5cnpaWphdeeEFeXl665557CpcfP35c8fHxRW7nqVOnjtq0aaPDhw/rvffeK9J+amqqXnnlFUn/m3EiSXfeeacCAwP11ltv6ejRo4XLjx49qrffflvBwcEaPny4vU8X1divx9L01a5jkqRpQ9rKYmGWCQAAAAA4E4crmnh4eOi9996T1WpV37599X//93+aPHmyOnbsqL179+qFF15QaGho4fbTpk1T27Zt9dVXXxVp57XXXpOHh4fGjx+vAQMGaMqUKbr//vsVFham+Ph43XbbbRowYEDh9rVq1dLbb7+tlJQUdenSRRMmTNCECRPUpUsXnTlzRn//+98VEBBQVR8DqoE5q+IlScM6NlL7JiU/DwcAAAAA4Hgc7kGw0qUZIFu2bNGMGTP0+eefKzc3V+3bt9ecOXM0YsSIq2pjyJAh2rZtm15++WVt2bJFGzdulI+Pj9q2batnn31WDz30ULF9Ro8ereDgYL3wwgtasGCBLBaL/vSnP+npp58uUmABSrM58bQ2J6bI092iKYPamB0HAAAAAFAODlk0kaRu3bpp5cqVpW63cOFCLVy40Oa6rl27avHixWU67uDBgzV48OAy7QNczmo19OLKS7NMRvcIUdPaviYnAgAAAACUh8PdngM4u2W7k/VbcroCvD00oR9v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l6bvvvtOkvT9999r5syZxf5dvHhRKSkpSklJuWKOhIQEZWdn67rrrpO3t3eRdRaLRT179rzivn/605+KLWvSpIkkKTU1tfQPoRS///67XnjhBUVHR+vpp5/WokWLdMMNN2jChAnFXjecmJioa665RjVq1Ci1XcMw9MEHH6hv376qXbu23N3dZbFYVKdOHUlScnJy4bY//vijDMNQVFRUkVt27GnMmDHKy8vTokWLCpclJibqhx9+0ODBg4u9bScuLk633HKLGjZsKE9Pz8JnVfzyyy9FspfXrl275Ovrq27duhVbV3Br2M8//1xsXUWvh927d0uS+vTpU2xdSEhIsWfalNfPP/+sUaNGqVmzZvLy8ir8/L755hvl5OTYHC+Vfa0XyM7O1vDhw5WUlKT58+erb9++RdaX5dotj/j4eF28eFHdunWz+Vadyux/AIDr4JkmAIBSXf4w2KefflpxcXHy8fEpnEXi5uam3r17FxZNbL1q+OzZs5KkefPmlXiszMzMK77mNj09XZJUr149m+vr169/xXZr1qxZbFnBrIv8/PwSM12NxYsXyzAMjR8/XpLk6empL774QjfeeKOmT5+ujIwMvfDCC9q9e7cOHjxocyaILY899pjefvttNW3aVMOGDVPDhg0LC0azZs1SdnZ24bZpaWmSZHN2gr2MGDFCEydO1CeffKLHH39c0qVZJtKlgsrl/v3vf2vEiBHy9/fXoEGDFBoaKl9f38KHix46dKjCedLT069YoCiYSVBw3VyuotdDwWdd0rVo64GvZbFt27bCMRQdHa3WrVvL399fFotFS5cu1e7du4v0f4HKvtYL3HfffdqyZYumT59eOJPlcmW5dsujoF+vNO4rs/8BAK6DogkAoFQdO3ZUrVq1tG3bNuXk5Cg2NlY9evQoMtsjMjJSy5cv18GDBwvfvnH5Q2ALfkn55Zdf1K5du3LlKGjjj7eGFDh58mS52rWHglcKBwQEFC7z9vbW119/rcGDB2v27NnKyMhQcnKy/Pz89PDDD5fa5qlTpzRv3jx16NBB27dvL/LX9BMnThS+baZAwUNTjx07Zoczsq127doaOnSoli5dqoSEBLVp00affPKJAgMDddNNNxXZdubMmfLx8dFPP/1U5LYNSaXeinW1atasecXr4cSJE4Xb2FvBq3jLci26uV2a4JuXl1dsXUER5nLPP/+8srOztXnz5mIPM/3uu+8KZ7uYYdasWfrXv/6lO+64Q88991yx9WW9dsujoF+vNO4rs/8BAK6D23MAAKVyc3NTRESELly4oGXLlmnPnj3FXv1Z8FyTdevWafPmzfL399d1111XuL5gVsr27dvLnaNNmzby9vbWTz/9VOyv1IZhVKjty7m5uZX5r80FbxT54+uOfX19tXz5cnXv3l1vv/22vvzyS82aNUt169Yttc39+/fLMAwNGDCg2O0HmzdvLrb9ddddJzc3N8XGxtp81sUflec8pf/NKPnkk0+0detWHThwQLfffnuRV0tLUlJSktq2bVusYHL8+HHt37+/WLsFzwEpS6bOnTsrKyur8Hk7lyvoi6t981FZdOzYUZLtfjh06JCOHDlSbHnBG3VsFbVsvUI4KSlJtWvXLlYwycrK0s6dO8uV+3Ll+bwladGiRZo5c6a6detW+LriPyrrtVuePOHh4fLx8dGOHTtsvga7MvsfAOA6KJoAAK5KwayRgr8Q/7Fo0qVLFwUEBOiNN95QWlqa+vTpU+ShozExMQoICNBf/vIX/fbbb8Xaz8rKKnzuyZV4e3vr9ttv18mTJ/X6668XWffRRx8pPj6+HGdWXO3atXX06NEy7XPXXXfJ29tbc+fO1apVq4qs8/f317Bhwwq/vtqZIAUPzN22bZusVmvh8qNHjxZ5/XOB+vXr67bbblNSUpLNv+SfOnWqyCyH8pynJN1www2qVauW/vWvf+mjjz6SVPzWnIL8+/btKzIT4OLFi3rooYdsFnUKHhprq+BwJQW3hUybNq1Im0eOHNHcuXPl4eGhu++++6rbu1q9e/dW8+bN9e233xZ5RbFhGJo+fbrNX/wLXg+8cOHCIsu/+OILbdy4sdj2ISEhOnfuXJHxkp+frz//+c86ffp0hc+hVq1aslgsZfq8t23bppiYGDVr1kzLli274nN5ynrtSmXvfy8vL911111KSUkp9tygVatWafXq1WrVqlWRh+ICAFBW3J4DALgqBUWTX3/9VT4+PurRo0eR9e7u7urVq1dhweDyW3MkqW7dulq0aJHuuOMOdezYUYMHD1Z4eLiys7N18OBBbdy4UT179ixWcPij2bNna926dZo6dao2btyozp07KyEhQd9++60GDx6sVatWFd4GUV79+vXT4sWLdcstt6hz585yd3fXsGHD1KFDhyvuExoaqvfee08xMTEaMmSI+vXrp86dOys7O1tr1qzR3r17ddNNN2nfvn167bXX1KRJE02aNKnEHA0bNtRtt92mJUuW6LrrrlP//v118uRJffvtt+rfv7+SkpKK7fP3v/9dv/76q55//nmtWLFC/fr1k2EY2rt3r9asWaOTJ08W3sZTnvOULhWv7rzzTv3zn//UggULFBISUuwhoJI0YcIETZgwQZ07d9btt9+uvLw8rV27VoZhqGPHjsVuL4mKipLFYtH06dP122+/KTAwUEFBQYVvW7FlzJgx+vLLL/X111+rQ4cOuvHGG5WZmanPP/9cZ8+e1auvvqoWLVqUeD7l4ebmpvnz52vo0KEaMGCARowYoUaNGmnDhg06fvy4OnTooP/85z9F9rn55pvVsmVLLVy4UEeOHFHnzp21Z88ebdiwQUOHDtWKFSuKbD9hwgStWbNGvXv31p133ikfHx/FxcXp2LFjioyMLDarqaz8/f3VtWtXbdq0SWPGjFHr1q3l5uamMWPGFHvDVYH7779f2dnZ6tatm955551i60NDQzVu3LhyXbv9+vXTF198odtuu01DhgyRj4+POnbsWOy2r8vNmTNHGzdu1HPPPadt27ape/fuOnjwoP7973/L19dXCxYsqPD3AwCAizPpVccAACdjtVqN4OBgQ5IRGRlpc5vZs2cbkgxJxo4dO2xuEx8fb9x3331GSEiI4eXlZdSqVcto37698dhjjxk//PBDkW0lGREREcXa2L9/v3HHHXcYgYGBhq+vr9GnTx9j48aNxqOPPmpIMnbt2lW4bWxsrCHJmDFjRrF2Dhw4YEgyxo4dW2T58ePHjTvvvNMIDg423NzcDEnGggULSvp4Cu3cudMYOXKk0aBBA8PDw8MIDg42brjhBuPrr78uzF63bl3DYrEYn332WantZWRkGJMnTzZCQ0MNb29vo3Xr1sbf/vY3Iycn54qfT1pamvHMM88Y4eHhhre3txEYGGh06tTJePbZZ42cnJyrOs+SPjfDMIwtW7YU9vW0adNsbmO1Wo1//OMfxrXXXmv4+PgYDRo0MO677z7j1KlTRkREhGHrf0MWLlxotG/f3vD29jYkGSEhIYXrrrRPbm6u8corrxTuFxAQYERERBR+5pdbsGDBFfuztHO2ZdOmTUbfvn2NGjVqGLVr1zbuuOMO49ChQ1fMeuDAAeOWW24xAgICDD8/P6N///7Gjh07jBkzZhiSjNjY2CLbf/HFF0aXLl0MX19fIzg42LjzzjuNpKQkY+zYsYYk48CBAxU6t4SEBGPo0KFGUFCQYbFYimSw1V5ISEhhv9v6d/n1WNZrNzc313jyySeNZs2aGR4eHsXG5pWu99OnTxuPPfaYERISYnh6ehrBwcHG7bffbvzyyy/FtrX1uRW4Uh8AAFybxTAMo1KrMgAAVJHevXtr+/btSktLk7+/v9lx4MIiIyO1ceNG8b9ZAAA4N+YrAgCcTsGbai5X8FDSAQMGUDABAACAXfBMEwCA02nXrp06d+6sa665Ru7u7vr5558VFxengIAAvfLKK2bHAwAAQDVB0QQA4HQefPBBffPNN/rxxx+VmZmpunXratSoUXrmmWcUHh5udjwAAABUEzzTBAAAAAAAwAaeaQIAAAAAAGADRRMAAAAAAAAbKJoAAAAAAADYQNEEAAAAAADABoomAAAAAAAANlA0AQAAAAAAsIGiCQAAAAAAgA0UTQAAAAAAAGz4fy+y6tTSsyMFAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig = plt.figure(figsize=(12, 8))\n", - "plt.rcParams[\"font.size\"] = 14\n", - "plt.plot(bit_range, accs, \"-x\")\n", - "for bits, acc, accum in zip(bit_range, accs, accum_bits):\n", - " plt.gca().annotate(str(accum), (bits - 0.1, acc + 0.01))\n", - "plt.ylabel(\"Accuracy on test set\")\n", - "plt.xlabel(\"Weight & activation quantization\")\n", - "plt.grid(True)\n", - "plt.title(\n", - " \"Accuracy for varying quantization bit width. Accumulator bit-width shown on graph markers\"\n", + "start_time = time.time()\n", + "accs = test_with_concrete(\n", + " q_module,\n", + " test_dataloader,\n", + " use_sim=True,\n", ")\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "7acb5a3f", - "metadata": {}, - "source": [ - "### Test the CNN in FHE\n", - "\n", - "We identify 3 bit weights and activations as a good compromise for which the maximum accumulator size\n", - "is low but the accuracy is acceptable. We can now compile to FHE and execute on encrypted data." - ] - }, - { - "cell_type": "markdown", - "id": "a218aff7", - "metadata": {}, - "source": [ - "### 1. Compile to FHE" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "16fa5e3b", - "metadata": {}, - "outputs": [], - "source": [ - "bits_for_fhe = 3\n", - "idx_bits_fhe = bit_range.index(bits_for_fhe)\n", - "\n", - "accum_bits_required = accum_bits[idx_bits_fhe]\n", - "\n", - "q_module_fhe = None\n", - "\n", - "net = nets[idx_bits_fhe]\n", + "sim_time = time.time() - start_time\n", "\n", - "q_module_fhe = compile_brevitas_qat_model(\n", - " net,\n", - " x_train,\n", - ")" + "print(f\"Simulated FHE execution for {n_bits} bit network accuracy: {accs:.2f}%\")" ] }, { @@ -607,12 +428,12 @@ "id": "2875e825", "metadata": {}, "source": [ - "### 2. Generate Keys" + "### Generate Keys" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 8, "id": "6e8b6471", "metadata": {}, "outputs": [ @@ -620,14 +441,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "Keygen time: 137.80s\n" + "Keygen time: 3.98s\n" ] } ], "source": [ - "# Generate keys first, this may take some time (up to 30min)\n", + "# Generate keys first\n", "t = time.time()\n", - "q_module_fhe.fhe_circuit.keygen()\n", + "q_module.fhe_circuit.keygen()\n", "print(f\"Keygen time: {time.time()-t:.2f}s\")" ] }, @@ -649,14 +470,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 1/1 [00:32<00:00, 32.33s/it]" + "100%|██████████| 100/100 [04:19<00:00, 2.59s/it]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Time per inference in FHE: 32.34\n" + "Time per inference in FHE: 2.59 with 99.00% accuracy\n" ] }, { @@ -669,16 +490,23 @@ ], "source": [ "# Run inference in FHE on a single encrypted example\n", - "mini_test_dataset = TensorDataset(torch.Tensor(x_test[[0], :]), torch.Tensor(y_test[[0]]))\n", + "mini_test_dataset = TensorDataset(torch.Tensor(x_test[:100, :]), torch.Tensor(y_test[:100]))\n", "mini_test_dataloader = DataLoader(mini_test_dataset)\n", "\n", "t = time.time()\n", - "test_with_concrete(\n", - " q_module_fhe,\n", + "accuracy_test = test_with_concrete(\n", + " q_module,\n", " mini_test_dataloader,\n", " use_sim=False,\n", ")\n", - "print(f\"Time per inference in FHE: {(time.time() - t) / len(mini_test_dataset):.2f}\")" + "elapsed_time = time.time() - t\n", + "time_per_inference = elapsed_time / len(mini_test_dataset)\n", + "accuracy_percentage = 100 * accuracy_test\n", + "\n", + "print(\n", + " f\"Time per inference in FHE: {time_per_inference:.2f} \"\n", + " f\"with {accuracy_percentage:.2f}% accuracy\"\n", + ")" ] }, { @@ -688,13 +516,9 @@ "source": [ "### Conclusion\n", "\n", - "We see that quantization with **3** bit weight and activations is the best viable FHE configuration,\n", - "as the accumulator bit width for this configuration is between **7 and 8** bits (can vary due to the final \n", - "distribution of the weights). The accuracy in this setting, 92% is a few percentage points \n", - "under the maximum accuracy achievable with larger accumulator bit widths (97-98%). \n", + "In this example, a simple CNN model is trained with torch and reach 98% accuracy in clear. The model is then converted to FHE and evaluated over 100 samples in FHE.\n", "\n", - "Compiling the higher bit-width networks is also possible, but in this example, to ensure FHE execution is fast\n", - "we used the lower bit-width quantization setting.\n" + "The model in FHE achieves **the same accuracy** as the original torch model with a FHE execution time of **2.9 seconds** per image." ] } ],