Concrete v2.6:近似PBS、输入压缩、扩展的组合函数、速度提升

  • ZamaFHE
  • 发布于 2024-04-09 21:43
  • 阅读 64

Concrete v2.6 版本发布,引入了近似可编程引导启动(PBS)、输入压缩、增强的函数组合以及更快的模拟,以及 ternary-if, Relu, 和 Sign 函数。近似 PBS 通过不精确的舍入加速 TLU 运算;输入压缩通过种子加密进一步优化带宽和磁盘空间;增强的函数组合通过模块实现更灵活的加密数据处理。此外,仿真速度也得到了显著提升。

Concrete v2.6 引入了近似可编程自举 (programmable bootstrapping, PBS)、输入压缩、增强的函数组合以及更快的模拟、三元 if、Relu 和 Sign 函数。这些改进通过增强 Concrete 的性能、效率和功能,为用户带来显著价值。

近似 PBS

在 Concrete Python 中,非线性操作被转换为查找表 (table-lookup, TLU),然后在 TFHE 框架中使用 PBS 执行。

PBS 是 TFHE 中最昂贵的操作。PBS 的计算复杂度取决于密码参数的大小,而这些参数的大小随着要自举的加密消息的位数而增长。随着消息大小的增加,自举的计算成本呈指数级增长。为了减轻这种影响,roundtruncate 运算符在之前的版本中被引入。在自举之前应用这些运算符可以通过忽略消息的最低有效位 (least significant bits, LSB) 中的信息来减少消息的位宽,从而大大提高 TLU 的速度。

Concrete v2.6 引入了一种更激进的舍入模式,可以使 TLU 的速度提高 2 到 3 倍,但代价是不精确的舍入。此功能可以大大提高对不精确舍入具有容忍度的应用程序的性能。例如,它在 Concrete ML 中对于深度学习任务非常有益。

有关更多详细信息,请查看我们关于近似舍入的文档。

输入压缩

之前的 Concrete v2.5 引入了压缩,它将评估密钥的大小减少了 4 倍。在此版本中,Concrete v2.6 通过新的输入密文压缩增强了压缩功能,以进一步优化带宽和磁盘空间利用率。输入密文压缩在底层使用种子密文。虽然压缩因子取决于各种因素,但压缩后的输入密文通常比未压缩的版本小数百到数千倍。

启用输入密文压缩只需设置选项即可,如下面的代码示例所示:

from concrete import fhe

@fhe.compiler({"x": "encrypted"})
def f(x):
  return x // 2

circuit = f.compile(fhe.inputset(fhe.tensor[fhe.uint8, 1000]),
                       compress_input_ciphertexts=True)

扩展的函数可组合性

在 Concrete v2.5 中,自组合函数 允许你使用函数的加密输出作为其输入之一。这非常酷,但存在局限性。在此版本中,我们在函数可组合性方面更进一步,并引入了函数集组合的 beta 版本,称为 模块 - 你可以在你的 FHE 模块中定义一组函数,并按照你想要的任何顺序调用它们。

此功能通过使开发人员能够在纯 Python 中编写任何非加密控制流,并让不同的参与方处理加密数据,从而扩展了 Concrete 的更多可能性。

from concrete import fhe

@fhe.module()
class MyModule:
   @fhe.function({"x": "encrypted"})
   def inc(x):
       return x + 1 % 20

   @fhe.function({"x": "encrypted"})
   def dec(x):
       return x - 1 % 20

inputset = list(range(20))
my_module = MyModule.compile(
   {"inc": inputset, "dec": inputset},
)

x = 5
x_enc = my_module.inc.encrypt(x)
x_inc_enc = my_module.inc.run(x_enc)
x_inc = my_module.inc.decrypt(x_inc_enc)
assert x_inc == 6

x_inc_dec_enc = my_module.dec.run(x_inc_enc)
x_inc_dec = my_module.dec.decrypt(x_inc_dec_enc)
assert x_inc_dec == 5

for _ in range(10):
   x_enc = my_module.inc.run(x_enc)
x_dec = my_module.inc.decrypt(x_enc)
assert x_dec == 15

⚠️ 请注意,此功能目前处于 beta 阶段。密码参数的优化受到一定的限制,可能会导致编译失败或执行时间变慢。此外,可能存在 API 崩溃的可能性。

对于下一个版本,该团队将致力于改进优化、更精细的函数关系规范以及稳定的 API。非常欢迎你的反馈和建议,它们将帮助我们塑造 Concrete 的未来。点击此处参与我们的开发者调查。

更快的模拟

借助模拟,开发人员可以在开发阶段快速微调他们的函数或模型,而无需 FHE 的计算限制。例如,Concrete 模拟在 Concrete ML 中被大量使用。在 Concrete v2.6 中,Zama 团队已将模拟速度提高了高达 100 倍。无需从用户端更改 API 或用法,你已经可以利用更快的模拟,而无需在代码中进行任何更改。如果你还没有使用过模拟,现在是时候查看文档并尝试一下了。

更快的运算符

最后,我们显著提高了这些函数的速度

  • If-then-else 操作: 通常用于编写 y = condition ? value_if_true : value_if_false C-operator,它也可以定义为 y = value_if_false + condition * (value_if_true - value_if_false),其中 condition 是一个布尔值。
  • Relu: 我们加速了 ML Relu 激活,这是最常用的激活函数 Relu(x) = max(0, x)
  • Sign: 我们加速了 Sign 函数,Sign(x) = 1 if x>=0 else -1。

此外,Concrete v2.6 还包括一些其他的细微改进,你可以在 GitHub发行说明 中找到。这些改进不需要更改 API,因此我们鼓励你测试我们的最新版本,并在无需任何额外努力的情况下享受这些改进带来的好处。

附加链接

  • 原文链接: zama.ai/post/concrete-v2...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
ZamaFHE
ZamaFHE
Zama是一家开源密码学公司,专注于为区块链和人工智能构建最先进的完全同态加密(FHE)解决方案。