Concrete v2.8版本发布,主要更新包括: Concrete与TFHE-rs的互操作性,允许开发者在两者之间转换整数,利用各自的优势;自动模块追踪功能,简化了模块编译的流程;以及新增了多个教程,展示了FHE和Concrete在实际应用中的用例。此外,新版本还包括各种优化和错误修复,尤其是在Concrete GPU运行时,提高了FHE评估的速度。
我们很高兴地宣布 Concrete v2.8 的发布,其中包含强大的新功能和改进。此更新引入了两项主要增强功能:TFHE-rs 和 Concrete 之间的互操作性 以及自动模块追踪,从而可以更轻松地微调模块编译。此外,我们还对文档进行了许多改进,包括展示真实世界用例的新教程。Concrete v2.8 还包括各种优化和错误修复,尤其是在 Concrete GPU 运行时中,这使得全同态加密 (FHE) 评估更快。与往常一样,你可以在完整的发行说明中找到所有详细信息、性能改进和错误修复。
Zama 拥有两个领先的 FHE 技术平台:Concrete 和 TFHE-rs,每个平台满足不同的需求。Concrete 针对小整数(约 8 位)进行了优化,并采用了高级优化技术,例如降低位宽、划分计算图和微调密码参数。相比之下,TFHE-rs 使用静态密码参数集处理较大的整数(最多 128 位)。
这两个平台都具有独特的优势,通过 Concrete v2.8,我们引入了 TFHE-rs 和 Concrete 之间的互操作性,允许开发人员在 Concrete 和 TFHE-rs 之间转换整数,从而充分利用这两种工具。
以下示例展示了如何使用此互操作性,你可以在互操作性文档中找到完整的说明。
## A function which take two TFHE-rs integer convert into concrete representation, make a computation then convert the result inro TFHE-rs integer
# 一个函数,它接受两个 TFHE-rs 整数,转换为 concrete 表示,进行计算,然后将结果转换成 TFHE-rs 整数
def compute(tfhers_x, tfhers_y):
####### TFHE-rs to Concrete #########
# TFHE-rs 转换为 Concrete
x = tfhers.to_native(tfhers_x)
y = tfhers.to_native(tfhers_y)
####### Concrete Computation ########
# Concrete 计算
res = your_function_optimized_by_co(x, y)
####### Concrete to TFHE-rs #########
# Concrete 转换为 TFHE-rs
tfhers_res = tfhers.from_native(res, tfhers_type)
####### Concrete to TFHE-rs #########
# Concrete 转换为 TFHE-rs
return tfhers_res
你可以像在 Concrete 中一样编译此函数,使用 TFHE-rs 整数作为输入集:
compiler = fhe.Compiler(compute, {"tfhers_x": "encrypted", "tfhers_y": "encrypted"})
inputset = [(tfhers_int(randint(128)), tfhers_int(randint(128))) for _ in range(100)]
circuit = compiler.compile(inputset)
此功能目前处于 beta 版,虽然我们不断改进它,但随着我们扩展其功能,预计 API 会发生变化。请注意,Concrete ML 尚不兼容 TFHE-rs,但我们正在努力解决此问题,预计在第四季度末之前会发布更新。
在 Concrete v2.7 中,我们引入了模块,允许你同时编译多个函数。但是,为每个函数手动定义组合规则和输入集可能很复杂且容易出错。为了解决这个问题,Concrete v2.8 引入了自动模块追踪,从而可以更轻松地根据 Python 代码的自然流程定义和微调模块。
在以下代码段中,你可以看到模块的定义和管道的定义,该管道允许编译器了解模块的使用方式,然后计算每个函数的组合规则和输入集。
from concrete import fhe
from fhe import Wired
## Module declaration without composition rules
# 没有组合规则的模块声明
@fhe.module()
class MyModule:
@fhe.function({"x": "encrypted"})
def increment(x):
return (x + 1) % 100
@fhe.function({"x": "encrypted"})
def decrement(x):
return (x - 1) % 100
@fhe.function({"x": "encrypted"})
def decimate(x):
return (x / 10) % 100
## Define a unique inpuset for the whole module
# 为整个模块定义一个唯一的输入集
inputset = [np.random.randint(1, 100, size=()) for _ in range(100)]
## Iterate over the inpuset and write a natural Python code with composition
# 迭代输入集并编写具有组合的自然 Python 代码
with MyModule.wire_pipeline(inputset) as samples:
for s in samples:
MyModule.increment(MyModule.decimate(MyModule.decrement(s)))
## Compile without providing inputset for each function
# 编译时无需为每个函数提供输入集
module = MyModule.compile()
在此版本中,我们还添加了一些新的教程,展示了 FHE 和 Concrete 的有趣用例:
我们鼓励你浏览这些教程。如果你使用 Concrete 开发了自己的用例,请告诉我们,我们很乐意在未来的版本中介绍它们。
Concrete v2.8 还包括各种优化和错误修复,尤其是在 Concrete GPU 运行时中,这使得 FHE 评估更快。这些改进不需要任何 API 更改,因此你可以无需额外努力即可享受这些好处。有关更多详细信息,请参阅我们的 GitHub 或完整的发行说明。
感谢你的持续支持和反馈。我们努力使 FHE 对每个人都更易于访问和高效。
- 原文链接: zama.ai/post/concrete-v2...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!