From b55cf2958a305184e073e76a8d32d10225188475 Mon Sep 17 00:00:00 2001 From: Umut Date: Wed, 8 Dec 2021 11:05:57 +0300 Subject: [PATCH] docs: write some missing sections and update some outdated ones --- .../artifacts/auto/1.initial.graph.png | Bin 7755 -> 7054 bytes .../artifacts/auto/2.final.graph.png | Bin 0 -> 7054 bytes .../artifacts/manual/1.initial.graph.png | Bin 23985 -> 33573 bytes .../manual/2.after-float-fuse-0.graph.png | Bin 0 -> 17280 bytes .../artifacts/manual/2.final.graph.png | Bin 23985 -> 0 bytes .../artifacts/manual/3.final.graph.png | Bin 0 -> 17280 bytes docs/dev/explanation/COMPILATION.md | 25 +- docs/user/benchmarks.md | 21 +- docs/user/howto/COMPILING_AND_EXECUTING.md | 1 - .../user/howto/DEBUG_SUPPORT_SUBMIT_ISSUES.md | 41 +-- docs/user/howto/PRINTING_AND_DRAWING.md | 1 + docs/user/howto/REDUCE_NEEDED_PRECISION.md | 52 +++- docs/user/index.rst | 1 - docs/user/tutorial/ARITHMETIC_OPERATIONS.md | 245 ------------------ docs/user/tutorial/COMPILATION_ARTIFACTS.md | 183 ++++++++----- docs/user/tutorial/INDEXING.md | 104 +++++++- docs/user/tutorial/TABLE_LOOKUP.md | 68 ++++- 17 files changed, 365 insertions(+), 377 deletions(-) create mode 100644 docs/_static/tutorials/artifacts/auto/2.final.graph.png create mode 100644 docs/_static/tutorials/artifacts/manual/2.after-float-fuse-0.graph.png delete mode 100644 docs/_static/tutorials/artifacts/manual/2.final.graph.png create mode 100644 docs/_static/tutorials/artifacts/manual/3.final.graph.png delete mode 100644 docs/user/tutorial/ARITHMETIC_OPERATIONS.md diff --git a/docs/_static/tutorials/artifacts/auto/1.initial.graph.png b/docs/_static/tutorials/artifacts/auto/1.initial.graph.png index e88663dffc60707a81a63d987e12b32008f08ca2..50495286b6ec941da79074e70988da1ac030105f 100644 GIT binary patch literal 7054 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 Hvdw-as)VYZ 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 HZyE7Fn!;k- diff --git a/docs/_static/tutorials/artifacts/auto/2.final.graph.png b/docs/_static/tutorials/artifacts/auto/2.final.graph.png new file mode 100644 index 0000000000000000000000000000000000000000..50495286b6ec941da79074e70988da1ac030105f GIT binary patch literal 7054 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. \ No newline at end of file +If you want to see more functions in the progress tracker or if there is another metric you would like to track, don't hesitate to drop an email to . diff --git a/docs/user/howto/COMPILING_AND_EXECUTING.md b/docs/user/howto/COMPILING_AND_EXECUTING.md index f0482fe30..afdcec90b 100644 --- a/docs/user/howto/COMPILING_AND_EXECUTING.md +++ b/docs/user/howto/COMPILING_AND_EXECUTING.md @@ -85,7 +85,6 @@ FIXME(benoit): explain the API to encrypt, run_inference, decrypt, keygen etc wh ## Further reading -- [Arithmetic Operations Tutorial](../tutorial/ARITHMETIC_OPERATIONS.md) - [Working With Floating Points Tutorial](../tutorial/WORKING_WITH_FLOATING_POINTS.md) - [Table Lookup Tutorial](../tutorial/TABLE_LOOKUP.md) - [Compiling a torch model](../tutorial/COMPILING_TORCH_MODEL.md) diff --git a/docs/user/howto/DEBUG_SUPPORT_SUBMIT_ISSUES.md b/docs/user/howto/DEBUG_SUPPORT_SUBMIT_ISSUES.md index b23cf6700..c462e8b25 100644 --- a/docs/user/howto/DEBUG_SUPPORT_SUBMIT_ISSUES.md +++ b/docs/user/howto/DEBUG_SUPPORT_SUBMIT_ISSUES.md @@ -43,31 +43,34 @@ Hopefully, it is just a misunderstanding or a small mistake on your side, that o When things are more complicated, or if you want to have a look by yourself, you may want to have a look to the compilation reports, which are called artifacts. This is as simple as described in [here](../tutorial/COMPILATION_ARTIFACTS.md) -This function will create a directory, containing notably: -```{warning} -FIXME(Umut): check it is still accurate -``` -- bounds.txt: a file describing the expected ranges of data in the different steps of the computation -- cryptographic_parameters.txt: a file describing the different keys -- ir_nodes.txt: a file describing the different nodes in the intermediate representation (IR) -- optimizations_applied.txt: a file describing the different optimizations which were applied -- target_nodes.txt: a file describing the different nodes in the VM graph +The artifact system will create a directory, containing: +- **environment.txt:** information about your system +- **requirements.txt:** information about your python dependencies +- **function.txt:** source code of the function you are compiling +- **parameters.txt:** parameters you specified for compilation +- **1.initial.graph.txt:** textual representation of the initial computation graph right after tracing +- **1.initial.graph.png:** visual representation of the initial computation graph right after tracing +- ... +- **X.description.graph.txt:** textual representation of the Xth computation graph after topological transforms +- **X.description.graph.png:** visual representation of the Xth computation graph after topological transforms +- ... +- **N.final.graph.txt:** textual representation of the final computation graph right before MLIR conversion +- **N.final.graph.png:** visual representation of the final computation graph right before MLIR conversion +- **bounds.txt:** ranges of data in the different steps of the computation for the final graph that is being compiled +- **mlir.txt**: resulting MLIR code that is sent to the compiler (if compilation succeeded) +- **traceback.txt**: information about the error you encountered (if compilation failed) + Attaching the artifact with your issue or Slack message may help people to have a look at the core of the problem. The more precise your bug, the more likely we can reproduce and fix -```{warning} -FIXME(Umut): is it still needed or do we already have some of those information in artifacts? -``` - -In order to simplify our work and let us reproduce your bug easily, any information is useful. Notably, in addition to the python script, some information like: -- the OS version -- the python version -- the python packages you use -- the reproducibility rate you see on your side +To simplify our work and let us reproduce your bug easily, we need all the information we can get. So, in addition to your python script, the following information would be very useful. +- compilation artifacts +- reproducibility rate you see on your side - any insight you might have on the bug - any workaround you have been able to find -may be useful to us. Don't remember, **Concrete** is a project where we are open to contribution, more information at Contributing (TODO: add a link). + +Remember, **Concrete Framework** is a project where we are open to contributions, more information at [Contributing](../../dev/howto/CONTRIBUTING.md). ## Submitting an issue diff --git a/docs/user/howto/PRINTING_AND_DRAWING.md b/docs/user/howto/PRINTING_AND_DRAWING.md index 8bb477350..4c06ac6f6 100644 --- a/docs/user/howto/PRINTING_AND_DRAWING.md +++ b/docs/user/howto/PRINTING_AND_DRAWING.md @@ -1,5 +1,6 @@ ```{warning} FIXME(all): should we update to the new API or have it for both? +FIXME(all): we should add an example drawing and printing with fusing (so subgraphs) ``` # Printing and Drawing diff --git a/docs/user/howto/REDUCE_NEEDED_PRECISION.md b/docs/user/howto/REDUCE_NEEDED_PRECISION.md index eb4f413e6..a1d7b1c04 100644 --- a/docs/user/howto/REDUCE_NEEDED_PRECISION.md +++ b/docs/user/howto/REDUCE_NEEDED_PRECISION.md @@ -1,8 +1,54 @@ -```{warning} -FIXME(Umut): put somewhere an example of an error dump if the user asks for too much precision and explain +# Having a Function Which Requires Less Precision + +With our current technology, we cannot represent integers with more than 7 bits. +We are actively working on supporting larger integers, so it should get better in the future. + +## What happens when you have larger values? + +You get a compilation error. Here is an example: + + +```python +import concrete.numpy as hnp + +def f(x): + return 42 * x + +compiler = hnp.NPFHECompiler(f, {"x": "encrypted"}) +compiler.eval_on_inputset(range(2 ** 3)) +compiler.get_compiled_fhe_circuit() ``` -# Having a Function Which Requires Less Precision +results in + +``` +Traceback (most recent call last): + File "/home/default/Documents/Projects/Zama/hdk/dist/demo.py", line 9, in + circuit = compiler.get_compiled_fhe_circuit() + File "/home/default/Documents/Projects/Zama/hdk/concrete/numpy/np_fhe_compiler.py", line 274, in get_compiled_fhe_circuit + return compile_op_graph_to_fhe_circuit( + File "/home/default/Documents/Projects/Zama/hdk/concrete/numpy/compile.py", line 676, in compile_op_graph_to_fhe_circuit + result = run_compilation_function_with_error_management( + File "/home/default/Documents/Projects/Zama/hdk/concrete/numpy/compile.py", line 141, in run_compilation_function_with_error_management + return compilation_function() + File "/home/default/Documents/Projects/Zama/hdk/concrete/numpy/compile.py", line 674, in compilation_function + return _compile_op_graph_to_fhe_circuit_internal(op_graph, show_mlir, compilation_artifacts) + File "/home/default/Documents/Projects/Zama/hdk/concrete/numpy/compile.py", line 626, in _compile_op_graph_to_fhe_circuit_internal + prepare_op_graph_for_mlir(op_graph) + File "/home/default/Documents/Projects/Zama/hdk/concrete/numpy/compile.py", line 603, in prepare_op_graph_for_mlir + update_bit_width_for_mlir(op_graph) + File "/home/default/Documents/Projects/Zama/hdk/concrete/common/mlir/utils.py", line 204, in update_bit_width_for_mlir + raise RuntimeError( +RuntimeError: max_bit_width of some nodes is too high for the current version of the compiler (maximum must be 7) which is not compatible with: + +%0 = x # EncryptedScalar +%1 = 42 # ClearScalar +%2 = mul(%0, %1) # EncryptedScalar +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9 bits is not supported for the time being +return %2 +``` + +when you try to run. ## Why can some computation work with less precision? diff --git a/docs/user/index.rst b/docs/user/index.rst index d47d4646f..ac8009b1a 100644 --- a/docs/user/index.rst +++ b/docs/user/index.rst @@ -15,7 +15,6 @@ Getting Started :caption: Tutorial tutorial/COMPILING_TORCH_MODEL.md - tutorial/ARITHMETIC_OPERATIONS.md tutorial/TABLE_LOOKUP.md tutorial/WORKING_WITH_FLOATING_POINTS.md tutorial/NUMPY_SUPPORT.md diff --git a/docs/user/tutorial/ARITHMETIC_OPERATIONS.md b/docs/user/tutorial/ARITHMETIC_OPERATIONS.md deleted file mode 100644 index 4264b224d..000000000 --- a/docs/user/tutorial/ARITHMETIC_OPERATIONS.md +++ /dev/null @@ -1,245 +0,0 @@ -```{warning} -FIXME(Umut): update a bit, with the new API -FIXME(Umut/Arthur): update a bit to explain things with the tensors and new operations. At the same time, I think we can exhaustively give examples of every supported functions, since we start to have a lot, so maybe, we would just explain a bit? -FIXME(all): actually, I am not even sure we should keep this .md, it can't be exhaustive enough, and looks pretty trivial. What do you think - -``` - -# Arithmetic Operations - -In this tutorial, we are going to go over all arithmetic operations available in **Concrete**. Please read [Compiling and Executing](../howto/COMPILING_AND_EXECUTING.md) before reading further to see how you can compile the functions below. - -## Addition - -### Static ClearScalar and EncryptedScalar - - -```python -def f(x): - return x + 42 -``` - -or - - -```python -def f(x): - return 42 + x -``` - -where - -- `x = EncryptedScalar(UnsignedInteger(bits))` - -results in - - -```python -circuit.run(3) == 45 -circuit.run(0) == 42 -``` - -### Dynamic ClearScalar and EncryptedScalar - - -```python -def f(x, y): - return x + y -``` - -or - - -```python -def f(x, y): - return y + x -``` - -results in - - -```python -circuit.run(6, 4) == 10 -circuit.run(1, 1) == 2 -``` - -where - -- `x = EncryptedScalar(UnsignedInteger(bits))` -- `y = ClearScalar(UnsignedInteger(bits))` - -### EncryptedScalar and EncryptedScalar - - -```python -def f(x, y): - return x + y -``` - -where - -- `x = EncryptedScalar(UnsignedInteger(bits))` -- `y = EncryptedScalar(UnsignedInteger(bits))` - -results in - - -```python -circuit.run(7, 7) == 14 -circuit.run(3, 4) == 7 -``` - -## Subtraction - -### Static ClearScalar and EncryptedScalar - - -```python -def f(x): - return 3 - x -``` - -where - -- `x = EncryptedScalar(UnsignedInteger(bits))` - -results in - - -```python -circuit.run(2) == 1 -circuit.run(3) == 0 -``` - -### Dynamic ClearScalar and EncryptedScalar - - -```python -def f(x, y): - return y - x -``` - -where - -- `x = EncryptedScalar(UnsignedInteger(bits))` -- `y = ClearScalar(UnsignedInteger(bits))` - -results in - - -```python -circuit.run(2, 4) == 2 -circuit.run(1, 7) == 6 -``` - -## Multiplication - -### Static ClearScalar and EncryptedScalar - - -```python -def f(x): - return x * 2 -``` - -or - - -```python -def f(x): - return 2 * x -``` - -where - -- `x = EncryptedScalar(UnsignedInteger(bits))` - -results in - - -```python -circuit.run(2) == 4 -circuit.run(5) == 10 -``` - -### Dynamic ClearScalar and EncryptedScalar - - -```python -def f(x, y): - return x * y -``` - -or - - -```python -def f(x, y): - return y * x -``` - -where - -- `x = EncryptedScalar(UnsignedInteger(bits))` -- `y = ClearScalar(UnsignedInteger(bits))` - -results in - - -```python -circuit.run(2, 3) == 6 -circuit.run(1, 7) == 7 -``` - -## Dot Product - -### Dynamic ClearTensor and EncryptedTensor - - -```python -def f(x, y): - return np.dot(x, y) -``` - -or - - -```python -def f(x, y): - return np.dot(y, x) -``` - -where - -- `x = EncryptedTensor(UnsignedInteger(bits), shape=(2,))` -- `y = ClearTensor(UnsignedInteger(bits), shape=(2,))` - -results in - - -```python -circuit.run([1, 1], [2, 3]) == 5 -circuit.run([2, 3], [2, 3]) == 13 -``` - -## Combining all together - - -```python -def f(x, y, z): - return 100 - (2 * (np.dot(x, y) + z)) -``` - -where - -- `x = EncryptedTensor(UnsignedInteger(bits), shape=(2,))` -- `y = ClearTensor(UnsignedInteger(bits), shape=(2,))` -- `z = EncryptedScalar(UnsignedInteger(bits))` - -results in - - -```python -circuit.run([1, 2], [4, 3], 10) == 60 -circuit.run([2, 3], [3, 2], 5) == 66 -``` diff --git a/docs/user/tutorial/COMPILATION_ARTIFACTS.md b/docs/user/tutorial/COMPILATION_ARTIFACTS.md index 4ba939dd4..a42ef60da 100644 --- a/docs/user/tutorial/COMPILATION_ARTIFACTS.md +++ b/docs/user/tutorial/COMPILATION_ARTIFACTS.md @@ -1,7 +1,3 @@ -```{warning} -FIXME(Umut): check it is still valid. I guess yes, but some files may have gone or renamed. -``` - # Compilation Artifacts In this tutorial, we are going to go over the artifact system, which is designed to inspect/debug the compilation process easily. @@ -16,7 +12,7 @@ def f(x): return np.sin(x) ``` -This function fails (for now) to compile because `Concrete` doesn't support floating point outputs. When you try to compile it (you might want to check [this](../howto/COMPILING_AND_EXECUTING.md) to see how you can do that), an exception will be raised and the artifacts will be exported automatically. +This function fails to compile because **Concrete Framework** doesn't support floating point outputs. When you try to compile it (you might want to check [this](../howto/COMPILING_AND_EXECUTING.md) to see how you can do that), an exception will be raised and the artifacts will be exported automatically. ### environment.txt @@ -60,34 +56,58 @@ x :: EncryptedScalar> ### 1.initial.graph.txt -This file contains information about the initial computation graph of the function you are trying to compile. +This file contains textual representation of the initial computation graph right after tracing. ``` -%0 = x # EncryptedScalar> -%1 = np.sin(0) # EncryptedScalar> -return(%1) +%0 = x # EncryptedScalar +%1 = sin(%0) # EncryptedScalar +return %1 ``` ### 1.initial.graph.png -This file contains the visualization of the initial computation graph of the function you are trying to compile. +This file contains the visual representation of the initial computation graph right after tracing. ![](../../_static/tutorials/artifacts/auto/1.initial.graph.png) +### 2.final.graph.txt + +This file contains textual representation of the final computation graph right before MLIR conversion. + +``` +%0 = x # EncryptedScalar +%1 = sin(%0) # EncryptedScalar +return %1 +``` + +### 2.final.graph.png + +This file contains the visual representation of the final computation graph right before MLIR conversion. + +![](../../_static/tutorials/artifacts/auto/2.final.graph.png) + ### traceback.txt This file contains information about the error you got. ``` Traceback (most recent call last): - File "/src/concrete/numpy/compile.py", line 301, in compile_numpy_function + File "/home/default/Documents/Projects/Zama/hdk/concrete/numpy/compile.py", line 141, in run_compilation_function_with_error_management + return compilation_function() + File "/home/default/Documents/Projects/Zama/hdk/concrete/numpy/compile.py", line 769, in compilation_function return _compile_numpy_function_internal( - File "/src/concrete/numpy/compile.py", line 234, in _compile_numpy_function_internal - op_graph = _compile_numpy_function_into_op_graph_internal( - File "/src/concrete/numpy/compile.py", line 103, in _compile_numpy_function_into_op_graph_internal - raise ValueError( -ValueError: cannot be compiled as it has nodes with either float inputs or outputs. -Offending nodes : + File "/home/default/Documents/Projects/Zama/hdk/concrete/numpy/compile.py", line 722, in _compile_numpy_function_internal + fhe_circuit = _compile_op_graph_to_fhe_circuit_internal( + File "/home/default/Documents/Projects/Zama/hdk/concrete/numpy/compile.py", line 626, in _compile_op_graph_to_fhe_circuit_internal + prepare_op_graph_for_mlir(op_graph) + File "/home/default/Documents/Projects/Zama/hdk/concrete/numpy/compile.py", line 597, in prepare_op_graph_for_mlir + raise RuntimeError( +RuntimeError: function you are trying to compile isn't supported for MLIR lowering + +%0 = x # EncryptedScalar +%1 = sin(%0) # EncryptedScalar +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ only integer outputs are supported +return %1 ``` ## Manual export @@ -96,74 +116,114 @@ Manual exports are mostly used for visualization. Nonetheless, they can be very ```python import concrete.numpy as hnp +import numpy as np import pathlib +def f(x): + return 127 - (50 * (np.sin(x) + 1)).astype(np.uint32) + artifacts = hnp.CompilationArtifacts(pathlib.Path("/tmp/custom/export/path")) -hnp.compile_numpy_function( - lambda x: 100 - (3 * (x + 2)), - {"x": hnp.EncryptedScalar(hnp.UnsignedInteger(3))}, - inputset=range(2 ** 3), - compilation_artifacts=artifacts, -) + +compiler = hnp.NPFHECompiler(f, {"x": "encrypted"}, compilation_artifacts=artifacts) +compiler.eval_on_inputset(range(2 ** 3)) + artifacts.export() ``` -Since this example compiles, we can see some new artifacts. - ### 1.initial.graph.txt -This file contains information about the initial computation graph of the function you are trying to compile. +This file contains textual representation of the initial computation graph right after tracing. ``` -%0 = Constant(100) # ClearScalar> -%1 = Constant(3) # ClearScalar> -%2 = x # EncryptedScalar> -%3 = Constant(2) # ClearScalar> -%4 = Add(2, 3) # EncryptedScalar> -%5 = Mul(4, 1) # EncryptedScalar> -%6 = Sub(0, 5) # EncryptedScalar> -return(%6) +%0 = 127 # ClearScalar +%1 = 50 # ClearScalar +%2 = 1 # ClearScalar +%3 = x # EncryptedScalar +%4 = sin(%3) # EncryptedScalar +%5 = add(%4, %2) # EncryptedScalar +%6 = mul(%5, %1) # EncryptedScalar +%7 = astype(%6, dtype=uint32) # EncryptedScalar +%8 = sub(%0, %7) # EncryptedScalar +return %8 ``` ### 1.initial.graph.png -This file contains the visualization of the initial computation graph of the function you are trying to compile. +This file contains the visual representation of the initial computation graph right after tracing. ![](../../_static/tutorials/artifacts/manual/1.initial.graph.png) -### 2.final.graph.txt +### 2.after-float-fuse-0.graph.txt -This file contains information about the final computation graph of the function you are trying to compile. +This file contains textual representation of the intermediate computation graph after fusing. ``` -%0 = Constant(100) # ClearScalar> -%1 = Constant(3) # ClearScalar> -%2 = x # EncryptedScalar> -%3 = Constant(2) # ClearScalar> -%4 = Add(2, 3) # EncryptedScalar> -%5 = Mul(4, 1) # EncryptedScalar> -%6 = Sub(0, 5) # EncryptedScalar> -return(%6) +%0 = 127 # ClearScalar +%1 = x # EncryptedScalar +%2 = subgraph(%1) # EncryptedScalar +%3 = sub(%0, %2) # EncryptedScalar +return %3 + +Subgraphs: + + %2 = subgraph(%1): + + %0 = 50 # ClearScalar + %1 = 1 # ClearScalar + %2 = float_subgraph_input # EncryptedScalar + %3 = sin(%2) # EncryptedScalar + %4 = add(%3, %1) # EncryptedScalar + %5 = mul(%4, %0) # EncryptedScalar + %6 = astype(%5, dtype=uint32) # EncryptedScalar + return %6 ``` -### 2.final.graph.png +### 2.after-float-fuse-0.graph.png -This file contains the visualization of the final computation graph of the function you are trying to compile. +This file contains the visual representation of the intermediate computation graph after fusing. -![](../../_static/tutorials/artifacts/manual/2.final.graph.png) +![](../../_static/tutorials/artifacts/manual/2.after-float-fuse-0.graph.png) + +### 3.final.graph.txt + +This file contains textual representation of the final computation graph right before MLIR conversion. + +``` +%0 = 127 # ClearScalar +%1 = x # EncryptedScalar +%2 = subgraph(%1) # EncryptedScalar +%3 = sub(%0, %2) # EncryptedScalar +return %3 + +Subgraphs: + + %2 = subgraph(%1): + + %0 = 50 # ClearScalar + %1 = 1 # ClearScalar + %2 = float_subgraph_input # EncryptedScalar + %3 = sin(%2) # EncryptedScalar + %4 = add(%3, %1) # EncryptedScalar + %5 = mul(%4, %0) # EncryptedScalar + %6 = astype(%5, dtype=uint32) # EncryptedScalar + return %6 +``` + +### 3.final.graph.png + +This file contains the visual representation of the final computation graph right before MLIR conversion. + +![](../../_static/tutorials/artifacts/manual/3.final.graph.png) ### bounds.txt This file contains information about the bounds of the final computation graph of the function you are trying to compile using the input set you provide. ``` -%0 :: [100, 100] -%1 :: [3, 3] -%2 :: [0, 7] -%3 :: [2, 2] -%4 :: [2, 9] -%5 :: [6, 27] -%6 :: [73, 94] +%0 :: [127, 127] +%1 :: [0, 7] +%2 :: [2, 95] +%3 :: [32, 125] ``` You can learn what bounds are [here](../../dev/explanation/TERMINOLOGY_AND_STRUCTURE.md). @@ -175,15 +235,14 @@ This file contains information about the MLIR of the function you are trying to ``` module { func @main(%arg0: !HLFHE.eint<7>) -> !HLFHE.eint<7> { - %c100_i8 = constant 100 : i8 - %c3_i8 = constant 3 : i8 - %c2_i8 = constant 2 : i8 - %0 = "HLFHE.add_eint_int"(%arg0, %c2_i8) : (!HLFHE.eint<7>, i8) -> !HLFHE.eint<7> - %1 = "HLFHE.mul_eint_int"(%0, %c3_i8) : (!HLFHE.eint<7>, i8) -> !HLFHE.eint<7> - %2 = "HLFHE.sub_int_eint"(%c100_i8, %1) : (i8, !HLFHE.eint<7>) -> !HLFHE.eint<7> - return %2 : !HLFHE.eint<7> + %c127_i8 = arith.constant 127 : i8 + %cst = arith.constant dense<"..."> : tensor<128xi64> + %0 = "HLFHE.apply_lookup_table"(%arg0, %cst) : (!HLFHE.eint<7>, tensor<128xi64>) -> !HLFHE.eint<7> + %1 = "HLFHE.sub_int_eint"(%c127_i8, %0) : (i8, !HLFHE.eint<7>) -> !HLFHE.eint<7> + return %1 : !HLFHE.eint<7> } } + ``` You can learn more about MLIR [here](../../dev/explanation/MLIR.md). diff --git a/docs/user/tutorial/INDEXING.md b/docs/user/tutorial/INDEXING.md index 4a9e077bf..9dc2695d2 100644 --- a/docs/user/tutorial/INDEXING.md +++ b/docs/user/tutorial/INDEXING.md @@ -1,9 +1,103 @@ -```{warning} -FIXME(Umut): to be done -``` - # Indexing -# Slicing +## Constant Indexing +Constant indexing refers to the index being static (i.e., known during compilation). +Here are some examples of constant indexing: + +### Extracting a single element + +```python +import concrete.numpy as hnp +import numpy as np + +def f(x): + return x[1] + +inputset = [np.random.randint(0, 2 ** 3, size=(3,), dtype=np.uint8) for _ in range(10)] + +compiler = hnp.NPFHECompiler(f, {"x": "encrypted"}) +compiler.eval_on_inputset(inputset) +circuit = compiler.get_compiled_fhe_circuit() + +test_input = np.array([4, 2, 6], dtype=np.uint8) +expected_output = 2 + +assert np.array_equal(circuit.run(test_input), expected_output) +``` + +You can use negative indexing. + +```python +import concrete.numpy as hnp +import numpy as np + +def f(x): + return x[-1] + +inputset = [np.random.randint(0, 2 ** 3, size=(3,), dtype=np.uint8) for _ in range(10)] + +compiler = hnp.NPFHECompiler(f, {"x": "encrypted"}) +compiler.eval_on_inputset(inputset) +circuit = compiler.get_compiled_fhe_circuit() + +test_input = np.array([4, 2, 6], dtype=np.uint8) +expected_output = 6 + +assert np.array_equal(circuit.run(test_input), expected_output) +``` + +You can use multidimensional indexing as well. + +```python +import concrete.numpy as hnp +import numpy as np + +def f(x): + return x[-1, 1] + +inputset = [np.random.randint(0, 2 ** 3, size=(3, 2), dtype=np.uint8) for _ in range(10)] + +compiler = hnp.NPFHECompiler(f, {"x": "encrypted"}) +compiler.eval_on_inputset(inputset) +circuit = compiler.get_compiled_fhe_circuit() + +test_input = np.array([[4, 2], [1, 5], [7, 6]], dtype=np.uint8) +expected_output = 6 + +assert np.array_equal(circuit.run(test_input), expected_output) +``` + +### Extracting a slice + +```python +import concrete.numpy as hnp +import numpy as np + +def f(x): + return x[1:4] + +inputset = [np.random.randint(0, 2 ** 3, size=(5,), dtype=np.uint8) for _ in range(10)] + +compiler = hnp.NPFHECompiler(f, {"x": "encrypted"}) +compiler.eval_on_inputset(inputset) +circuit = compiler.get_compiled_fhe_circuit() + +test_input = np.array([4, 2, 6, 1, 7], dtype=np.uint8) +expected_output = np.array([2, 6, 1], dtype=np.uint8) + +assert np.array_equal(circuit.run(test_input), expected_output) +``` + +You can use multidimensional slicing as well. + +#### Note + +There are certain limitations of slicing due to MLIR. So if you stumple into `RuntimeError: Compilation failed: Failed to lower to LLVM dialect`, know that we are aware of it, and we are trying to make such cases compilable. + +## Dynamic Indexing + +Dynamic indexing refers to the index being dynamic (i.e., can change during runtime). +Such indexing is especially useful for things like decision trees. +Unfortunately, we don't support dynamic indexing for the time being. diff --git a/docs/user/tutorial/TABLE_LOOKUP.md b/docs/user/tutorial/TABLE_LOOKUP.md index 30074e43a..4ccaa4312 100644 --- a/docs/user/tutorial/TABLE_LOOKUP.md +++ b/docs/user/tutorial/TABLE_LOOKUP.md @@ -1,20 +1,15 @@ -```{warning} -FIXME(Umut): update a bit, with the new API -FIXME(Umut): add the multiTLU case -``` - # Table Lookup -In this tutorial, we are going to go over the ways to perform table lookups in **Concrete**. Please read [Compiling and Executing](../howto/COMPILING_AND_EXECUTING.md) before reading further to see how you can compile the functions below. +In this tutorial, we are going to go over the ways to perform direct table lookups in **Concrete Framework**. Please read [Compiling and Executing](../howto/COMPILING_AND_EXECUTING.md) before reading further to see how you can compile the functions below. ## Direct table lookup -**Concrete** provides a special class to allow direct table lookups. Here is how to import and use it: +**Concrete Framework** provides a special class to allow direct table lookups. Here is how to use it: ```python -from concrete.common.extensions.table import LookupTable +import concrete.numpy as hnp -table = LookupTable([2, 1, 3, 0]) +table = hnp.LookupTable([2, 1, 3, 0]) def f(x): return table[x] @@ -22,7 +17,7 @@ def f(x): where -- `x = EncryptedScalar(UnsignedInteger(2))` +- `x = "encrypted"` scalar results in @@ -34,9 +29,56 @@ circuit.run(2) == 3 circuit.run(3) == 0 ``` +Moreover, direct lookup tables can be used with tensors where the same table lookup is applied to each value in the tensor, so + +- `x = "encrypted"` tensor of shape `(2, 3)` + +results in + + +```python +input = np.array([[0, 1, 3], [2, 3, 1]], dtype=np.uint8) +circuit.run(input) == [[2, 1, 0], [3, 0, 1]] +``` + +## Direct Multi Table Lookup + +Sometimes you may want to apply a different lookup table to each value in a tensor. That's where direct multi lookup table becomes handy. Here is how to use it: + + +```python +import concrete.numpy as hnp + +squared = hnp.LookupTable([i ** 2 for i in range(4)]) +cubed = hnp.LookupTable([i ** 3 for i in range(4)]) + +table = hnp.MultiLookupTable([ + [squared, cubed], + [squared, cubed], + [squared, cubed], +]) + +def f(x): + return table[x] +``` + +where + +- `x = "encrypted"` tensor of shape `(3, 2)` + +results in + + +```python +input = np.array([[2, 3], [1, 2], [3, 0]], dtype=np.uint8) +circuit.run(input) == [[4, 27], [1, 8], [9, 0]] +``` + +Basically, we applied `squared` table to the first column and `cubed` to the second one. + ## Fused table lookup -Direct tables are tedious to prepare by hand. When possible, **Concrete** fuses the floating point operations into a single table lookup automatically. There are some limitations on fusing operations, which you can learn more about on the next tutorial, [Working With Floating Points](./WORKING_WITH_FLOATING_POINTS.md). +Direct tables are tedious to prepare by hand. When possible, **Concrete Framework** fuses the floating point operations into table lookups automatically. There are some limitations on fusing operations, which you can learn more about on the next tutorial, [Working With Floating Points](./WORKING_WITH_FLOATING_POINTS.md). Here is an example function that results in fused table lookup: @@ -48,7 +90,7 @@ def f(x): where -- `x = EncryptedScalar(UnsignedInteger(3))` +- `x = "encrypted"` scalar results in @@ -76,7 +118,7 @@ Internally, it uses the following lookup table ```python -table = LookupTable([50, 92, 95, 57, 12, 2, 36, 82]) +table = hnp.LookupTable([50, 92, 95, 57, 12, 2, 36, 82]) ``` which is calculated by: