Releases: zama-ai/concrete
v2.8.1
Summary
Concrete 2.8.1 introduces a major new feature the interoperability between Concrete and TFHE-rs, combining the strengths and features of both libraries. While Concrete is optimized for fast computation on small integer DAGs, TFHE-rs supports integers of arbitrary size but with slower performance. This release provides a bridge between the two, allowing developers to benefit from both libraries' capabilities.
Additionally, Concrete modules has been improved. Previous versions of modules required complex setup of the optimal composition rules and input-sets, in Concrete 2.8.1, an automatic module tracing feature allows the compiler to automatically compute the right input-sets for each functions and compositions rules, simplifying the user experience
What's Changed
New features
- Add a use-case for Levenshtein distance by @bcm-at-zama in #902
- Add a levelled case for XOR distance between one encrypted and one clear vectors by @bcm-at-zama in #928
- Add a use-case for fuzzy encrypted name comparison by @bcm-at-zama in #995
- Add Inventory Matching System tutorial by @aquint-zama in #938
- Add performance tips section by @umut-sahin in #919
- Add a tutorial with floats by @bcm-at-zama in #971
- Add a use-case for private information retrieval by @bcm-at-zama in #1040
*Introduce interoperability between TFHE-rs and Concrete by @youben11 in #1036, #915, #858, #945 - Accept clear arguments in server.run by @umut-sahin in #989
- Wire tracing by @aPere3 in #946
- Add support for np.min and np.max by @umut-sahin in #1025
- Provide an API to reset the compiler state by @umut-sahin in #1048
- Provide trivial encryption by @aPere3 in #1027
Improvements
- Documentation fixes and improvement, @yuxizama, @bcm-at-zama, @aPere3, @youben11, @umut-sahin, @BourgerieQuentin in #906, #907, #897, #901, #910, #83, #917, #930, #942, #952, #944, #948, #958, #950, #973, #986, #954, #982, #998, #1006, #1011, #1012, #1013, #1015, #1018, #1017, #1008, #1014, #1019, #1022, #1029
- Refactor test and benchmark of examples @umut-sahin in #1034, #1046, #913, #914, #975
- Improve sha1 example by @umut-sahin in #911
- Benchmark infrastructure by @umut-sahin in #937, #1053, #939
- Add sanity checks when GPU is requested by @antoniupop in #903
- Bump version of tfhe-rs and rust compiler and fixed… by @BourgerieQuentin in #927
- Add notebook tests by @bcm-at-zama in #1056
- GPU runtime optimisation by @antoniupop in #896, #943
- Release GIL on run, encrypt, decrypt for better concurrency of client applications by @rudy-6-4 in #962
- Improve errors for non-composable functions by @aPere3 in #955, #960, #1010
- Decompress ciphertext at decryption by @BourgerieQuentin in #999
- Support configuration overrides for Server.load when via_mlir is used by @umut-sahin in #985
Fixes
- Fix simulation that lead to wrong error rate in some cases by @rudy-6-4 in #1002
- Remove unnecessary signed conversions by @umut-sahin in #1047
- Handle tracing.trace_ciphertext operations in SimulateTFHEPass by @andidr in #904
- Bump MLIR fork to version including extended canonicalization of tensor.insert_slice by @andidr in #836
fix(optimizer): fix leveled noise propagation that may lead to parameters that not satisfy the p-error in modules by @aPere3, @rudy-6-4 in #933, #965 - Convert scf.for to scf.parallel only if parallel attribute is true by @andidr in #964
- Bad signed input tlu padding with extra bitwidth by @rudy-6-4 in #908
- Enable simultaneous execution and simulation in mod… by @aPere3 in #1016
Other changes
Full changelog: v2.7.0...v2.8.1
Resources
-
Documentation:
-
Tutorials:
-
Blog Post:
v2.7.0
Summary
Concrete v2.7.0 includes several key enhancements and new features:
-
GPU backend: Concrete comes for the first time with a GPU wheel! To facilitate this, we have set up a public Zama PyPI repository at https://pypi.zama.ai/. Here, you can find stable, release candidate (rc), and nightly wheels for both CPU and GPU.
-
Module optimizations: FHE modules have been improved. Users can now describe the wiring between module functions, allowing for better compilation and optimization of complex programs.
-
New features and fixes: As with all new Concrete releases, this version introduces several new features, including fancy indexing, dynamic assignement/indexing, overflow detection in simulation and some bug fixes.
What's Changed
New features
- Create and improve GPU backend and runtime, deliver GPU wheels by @antoniupop in #786, @youben11 in #855 #877 #879 #878 #882, @andidr in #748
- Introduce wiring API for FHE modules by @aPere3 in #771 #803 #826 #828 #845 #890 #895
- New python operators by @umut-sahin, fancy indexing and assignment in #814, dynamic indexing in #847, dynamic assignment in #867
- Overflow detection in simulation by @youben11 in #777 #846 #850
- Release concrete-python stable, rc and nightlies to new zama public pypi by @youben11 in #818 #833 #837 #838
Improvements
- Optimize extract bits by @rudy-6-4 in #769
- Improve documentation by @bcm-at-zama, @yuxizama, @aquint-zama, @youben11, @sukrucildirr and @miles-six in #780 #756 #781 #704 @bcm-at-zama in #784 #782 #794 #793 #795 #799 #791 #811 #816 #876 #834 #839 #840 #830 #835 #863 #864
- Add a new options to run in simulation mode with standard FHE flow #892
- Add option to configure tlu on original bit width by @umut-sahin in #785
- Allow concat with only one operand by @BourgerieQuentin in #805
- Add memory usage per location in statistics by @umut-sahin in #808
- Allow uncompressed ciphertext in compressed gate by @BourgerieQuentin in #860
Fixes
- Fix maxpool operator by @umut-sahin in #875
- Fix compress ciphertext + simulation in #778
- Fix key size statistics by @BourgerieQuentin in #783
- Catch-all for exceptions for error reporting by @aPere3 in #776
- Increases deserialization limit for values by @aPere3 in #789
- Decompression of evaluation keys was done several times by @BourgerieQuentin in #809
- Change input bit-width only when tlu is optimized based on original bit-width during table generation by @umut-sahin in #849
- Fix input parameter deserialization by @antoniupop in #857
- Ensures the numpy version is inferior to 2.0 by @aPere3 in #898
Resources
-
Documentation:
-
Demo & Examples:
- Adding a SHA1 tutorial with modules
-
Full Changelog: v2.6.0...v2.7.0
Concrete v2.6.2
Fixes
- fix(compiler): Type inference rewriter: Fix use-after-free in function renaming by @andidr
- fix(compiler): increases deserialization limit for values by @aPere3
Full Changelog: v2.6.0...v2.6.2
v2.6.0
Summary
Concrete v2.6 introduces support of faster operators (approximate rounding, ternary operator, relu and sign), compression features, extended support of function composition, and as well bug fixes.
What's Changed
New features
- feat(frontend-python): Introduces fhe.identity and fix scalar squeeze by @umut-sahin in #696
- feat(frontend-python): Additional Pre and Post Processors by @umut-sahin in #721, #727
- feat(frontend-python): approximate for round_bit_pattern by @rudy-6-4 in #710
- feat(compiler): support multi-circuit compilation by @aPere3 in #705
- feat(frontend-python): Beta version of multi circuits by @aPere3 in #724
- feat(frontend-python): random inputset generator by @umut-sahin in #730
Improvements
- refactor(compiler): Re-implement multi-parameter parametrization pass using type inference, can fix segfault or accuracy issue in dag-multi optimization by @andidr in #674, #702
- feat(compiler): Fuse table lookups to optimize dag with sequences of TLUs by @umut-sahin in #709, #749
- feat(compiler): Upgrade HPX library version to 1.9.1. by @antoniupop in #718, #719
- feat(compiler): Distributed execution, on-demand key transfer to remote notes by @antoniupop in #720
- feat(compiler): Parallel decompression of evaluation keys by @BourgerieQuentin in #736
- fix(compiler): Speedup simulation by not reinstantiate csprng each time in the simulation by @BourgerieQuentin in #744
- feat(frontend): Optimize TLU based on bounds instead of bitwidth by @umut-sahin in #733
- feat(compiler): Remove p+1 requirement for clear values for tighter optimization by @umut-sahin in #752, #761
- docs(frontend): Add a tutorial about XOR distance by @bcm-at-zama in #714
- docs(frontend): Improve documentation by @bcm-at-zama, @yuxizama, @RafLaf in #723, #725, #735, #738, #728, #747, #742, #763, #700, #746
Fixes
- fix(compiler): fix mac arm exception propagation by @aPere3 in #697
- fix(compiler): fix double free on aliased outputs by @aPere3 in #711
- fix(compiler): Guard decompression of seeded keys by @rudy-6-4 in #691
- fix(compiler): Do not omit assignment of optimizer ID to FHE.reinterpret_precision by @andidr in #729
- fix(compiler): Preserve explicit optimizer partition frontiers for TFHE circuit parametrization by @andidr in
- fix(compiler): Handle tensor.empty in the pass that lower tfhe to the simulation code by @BourgerieQuentin in #760
- fix(frontend-python): Keep negative values inside tlus as is. by @umut-sahin in #765
- fix(frontend-python): round_bit_pattern, prevent exactness argument misuse by @rudy-6-4 in #759
Other changes
- chore(ci): Fixing and improving CI by @umut-sahin, @BourgerieQuentin, @rudy-6-4 in #698, #706, #713, #712, #715, #739, #716, #717, #743, #754
- chore(frontend-python): converter, getattr call with default by @rudy-6-4 in #688
- feat(optimizer): accept high precision weight by @rudy-6-4 in #687
- fix(frontend-python): failure to display invalid input set value by @rudy-6-4 in #682
- chore(frontend-python): Improve bitwise tests coverage by @rudy-6-4 in #680
- feat(compiler): Add support for tiling of linalg.generic operations by @andidr in #609
- chore(ci): Distributed CI by @antoniupop in #740
- chore(ci): bump tj-actions/changed-files from 41 to 43 by @dependabot in #751
Full Changelog: v2.5.1...v2.6.0-rc2
Resources
v2.5.0
New features
- Support for multiple outputs for circuits (
return x, y, z
) - Support for composition
- Truncation operator (documentation)
- Bit extraction operator (documentation)
- Min/Max operators (documentation)
Refactors
- TFHE-rs integration
- HPX integration
Bug fixes
- Memory usage of table generation is improved
Commit log
- Fix/compiler optimizer bad signed dot by @rudy-6-4 in #578
- fix(optimizer): multi-parameters, shorter_dump for the compiler --dis… by @rudy-6-4 in #579
- docs: adding a Game of Life example by @bcm-at-zama in #569
- fix(optimizer): multi-parameters, DEBUG, display reason for lower bound by @rudy-6-4 in #583
- feat(optimizer): multi-parameters, direct variance and cost operation… by @rudy-6-4 in #581
- woppbs simulation by @youben11 in #580
- refactor(frontend-python): reduce memory usage for table construction of non-multi table lookups by @umut-sahin in #584
- Docs: Statistics by @umut-sahin in #586
- fix(backend): fix boolean rounding in woppbs simulation by @youben11 in #589
- Support
linalg.generic
in the MANP analysis by @youben11 in #571 - feat(frontend-python): implement dumping/loading of auto rounders by @umut-sahin in #596
- docs(frontend): add FHE workarounds by @aquint-zama in #588
- Fix: Key Value Database Example by @umut-sahin in #599
- fix(frontend-python): convert rounding to tlu when necessary by @umut-sahin in #595
- chore(frontend-python): push docker images on releases by @umut-sahin in #597
- chore(ci): add markdown link check by @aquint-zama in #398
- chore(ci): markdown link check by @rudy-6-4 in #600
- chore(deps): bump actions/checkout from 2 to 4 by @dependabot in #559
- feat(frontend-python): create multivariate extension by @umut-sahin in #594
- feat(optimizer): multi-parameters, variance and cost value and coeffi… by @rudy-6-4 in #585
- fix(concrete-cpu): fix rust lint error by @aPere3 in #602
- fix(front-end-python): ci, duplicated shared lib by @rudy-6-4 in #604
- Integrates
concrete-protocol
in compiler and client/server lib by @aPere3 in #493 - test(frontend-python): add tests of assigning circuit.keys by @umut-sahin in #610
- feat(compiler): Support multi-output by @BourgerieQuentin in #470
- fix(compiler): Force linking of libomp with libstdc++ in debug builds by @andidr in #615
- Feat: np.minimum & np.maximum by @umut-sahin in #613
- test(compiler): Add retry for fixing some flaky tests by @BourgerieQuentin in #611
- refactor(frontend/python): improve basic implementation of game of life example by @umut-sahin in #617
- fix noise in woppbs by @samcrx in #592
- test(frontend/python): use hinting instead of multiple outputs to test semi-optimized min/max by @umut-sahin in #620
- feat(frontend/python): process graph in place before MLIR conversion by @umut-sahin in #619
- fix(frontend-python): hint correct node when it's used after assignment by @umut-sahin in #622
- fix(compiler): print parameters correctly in the bindings by @umut-sahin in #623
- feat(frontend-python): make it possible to query maximum bit-width of… by @umut-sahin in #624
- chore(ci): Update m6i to m7i by @BourgerieQuentin in #625
- chore(frontend-python): typo in fhe_basics.md by @bcm-at-zama in #626
- Feat/new ops compiler by @rudy-6-4 in #614
- fix(frontend-python): assigning signed values to unsigned tensors by @umut-sahin in #627
- feat(frontend-python): add truncate bit pattern extension by @umut-sahin in #628
- chore(compiler): fix capnp build step requiring network by @aPere3 in #631
- Main bench fix by @BourgerieQuentin in #634
- fix(frontend-python): use more strict inputset to fix a flanky test by @umut-sahin in #636
- chore(compiler): fix broken retry for flaky tests by @aPere3 in #632
- feat(frontend-python): fancy indexing by @umut-sahin in #640
- docs(compiler): update the readme by @bcm-at-zama in #641
- feat(compiler): Input compression bis by @mkmks in #605
- Feat: Bit Extraction by @umut-sahin in #635
- feat(frontend-python): printing assignment by @umut-sahin in #643
- fix(frontend-python): generate correct MLIR for signed integer rounding to 1-bit by @umut-sahin in #644
- chore(deps): bump rustix from 0.37.21 to 0.37.27 in /compilers/concrete-optimizer by @dependabot in #645
- chore(deps): bump rustix from 0.37.21 to 0.37.27 in /backends/concrete-cpu/noise-model by @dependabot in #646
- chore(deps): bump rustix from 0.37.21 to 0.37.27 in /backends/concrete-cpu/implementation by @dependabot in #648
- chore(ci): bump actions/setup-python from 4 to 5 by @dependabot in #630
- chore(ci): bump actions/download-artifact from 3 to 4 by @dependabot in #637
- chore(ci): bump actions/upload-artifact from 3 to 4 by @dependabot in #638
- chore(ci): bump dawidd6/action-download-artifact from 2 to 3 by @dependabot in #639
- chore(ci): bump tj-actions/changed-files from 32 to 41 by @dependabot in #649
- Fix flaky python test by @BourgerieQuentin in #651
- fix(backend/cpu): Fix the size of the expanded lut in woppbs case of … by @BourgerieQuentin in #650
- chore(backend/frontend): Fixing formatting... by @BourgerieQuentin in #652
- feat(frontend-python): activate local env using make by @rudy-6-4 in #647
- chore(concrete_cpu): fix nightly feature which was not forwarded to TFHE-rs by @IceTDrinker in #654
- feat(optimizer): add support for weak function composition by @aPere3 in #629
- Support for [Multi-]GPU in CP by @antoniupop in #544
- Antoniu/fix distributed by @antoniupop in #633
- chore: using fhe.bits() feature in Game of Life example by @bcm-at-zama in #655
- fix(optimizer): accept composable for v0-no-dag and woppbs by @rudy-6-4 in #660
- fix(frontend-python): some tests are broken due to compiler bug by @rudy-6-4 in #618
- fix(frontend-python): ensure shift strategies coverage by @rudy-6-4 in #658
- refactor(compiler/frontend): Rename option to compress_evaluation_keys by @BourgerieQuentin in #659
- fix(compiler/benchmark): Use default compiler options for default com… by @BourgerieQuentin in #661
- docs(compiler): fix readme by @aquint-zama in #662
New Contributors
- @dependabot made their first contribution in #559
Full Changelog: v2.4.0...v2.5.0
Concrete v2.4.0
What's Changed
- feat: Multi Precision Bitwise by @umut-sahin in #558
- feat(frontend-python): support dynamic table lookups by @umut-sahin in #566
- feat: various performance improvements up to 5x in some cases
- docs(frontend-python): update outdated warning in simulation docs by @umut-sahin in #565
- fix: Uncaught error on building statistics make the compilation crash by @umut-sahin in #568
Internal
- feat/optimizer/key sharing by @rudy-6-4 in #555
- chore(frontend-python): remove optimization goal from z3 by @umut-sahin in #567
- feat(compiler): adds support for dynamic luts in fhelinalg by @aPere3 in #563
- chore(ci): Tag nightly on the public githut repository by @BourgerieQuentin in #543
- fix(frontend-python): update bad static indexing tests to use a constant inputset for consistent errors by @umut-sahin in #576
- fix(frontend-python): Makefile, default value for COMPILER_BUILD_DIRE… by @rudy-6-4 in #573
- fix(frontend-python): Makefile, portability 'source' by @rudy-6-4 in #572
Full Changelog: v2.3.0...v2.4.0
Concrete v2.3.0
What's Changed
-
feat(frontend-python): Introduce fhe.hint to allows the end user to specify the operation bit width by @umut-sahin in #542
-
feat(frontend-python): Improve performance on comparison operators by using multi-precision by @umut-sahin in #549
-
docs(frontend-python): Improve comparisons tutorial by @umut-sahin in #556
-
feat(compiler): Add to the compiler feedback the estimated memory footprint per location by @youben11 in #538
-
feat(compiler): Expose more compilation options to the python bindings by @youben11 in #552
-
feat(optimizer): Improve optimization of levelled only circuit by removing the power of two constraint on lwe size by @rudy-6-4 in #541
-
fix(compiler): Fixing the lowering of fhe.zero to tfhe with crt encoding by @youben11 in #548
-
fix(optimizer): Fixing woppbs cost model by @rudy-6-4 in #540
-
fix(compiler): Disable high error warning when an explicit global_p_error is set by @rudy-6-4 in #511
-
fix(compiler): do not optimize llvm twice by @rudy-6-4 in #502
-
feat(compiler): Allow arbitrary integer bit width of the apply lookup table operator by @aPere3 in #554
Internal
- feat(concrete-cuda): Add multiplication of radix encoded integers by @bbarbakadze in #547
- refactor(compiler): clean statistic passes by @youben11 in #551
- chore(compiler/benchmark): Activate levelled + cifar-16 benchmark by @rudy-6-4 in #553
- fix(compiler): ci, format_cpp.sh, bug + better message by @rudy-6-4 in #557
- fix(compiler): Use FHE.zero_tensor instead of bufferization.alloc_ten… by @BourgerieQuentin in #561
- refactor(compiler): Interfaces to generalize noise calculation in FHE/FHELinalg ops by @mkmks in #416
New Contributors
Full Changelog: v2.2.0...v2.3.0
Concrete v2.2.0
What's Changed
Features
- feat(frontend-python): Support of len by @umut-sahin in #534
- feat(frontend-python/compiler): Enable multi precision for encrypted multiplication in order to have a finer optimization in multi parameters by @umut-sahin in #535
- feat(frontend-python): Enable multi precision and multi parameters by default by @umut-sahin in #483
Internal changes
- test: Add a workflow to validate Concrete using Concrete ML tests #531 in #537 #539
- chore(optimizer): Update for nightly rust linting by @rudy-6-4 in #533
- test(frontend-python): Remove the high p_error in graph evaluation tests to avoid Concrete Python flaky tests by @BourgerieQuentin in #532
- chore(backend-gpu): changes the mutability of cuda streams in the rust api by @pdroalves in #536
New Contributors
- @RomanBredehoft made their first contribution in #537
Full Changelog: v2.1.0...v2.2.0
Concrete v2.1.0
Summary
Concrete v2.1.0 brings some important fixes, along with a couple of features improving its usability
Features
- Report Python line causing compilation erros #509 #514
- New options to enable verbose/debug mode in the Compiler #525
- Statistics about the compiled circuit #526
Fixes
- Simulation when using simple assignment #516
- Simulation when using multi parameters #518
- Compilation of full encrypted dot and matmul operators in multi parameters #522
Full Changelog: v2.0.0...v2.1.0
Concrete v2.0.0
Summary
Concrete v2.0.0 brings significant enhancements and new features, along with a few minor yet essential changes
Features
- More accurate simulation
- Separate arguments
- Multi parameters optimization
- Rounding operator
- Progressbar
You can read more about it in the release blog post