Concrete v2.7:GPU Wheel、扩展的函数组合及其他改进

  • ZamaFHE
  • 发布于 2024-07-06 22:57
  • 阅读 132

Concrete v2.7版本发布,引入了GPU加速功能,通过安装GPU wheel并设置use_gpu选项即可利用GPU进行FHE计算加速,最多可提速2.5倍。同时,新版本还扩展了函数组合的支持,通过分区优化和指定函数依赖关系,进一步提升模块的性能。此外,v2.7还包含其他一些小的改进。

我们很高兴地宣布,Concrete v2.7 引入了第一个可以加速 GPU 计算的 wheel!在这个新版本中,我们还扩展了对函数组合的支持,并在 Python 前端为用户添加了几个新功能。

GPU 加速

对于那些一直在关注我们 GitHub 仓库的人来说,你知道在 GPU 上加速全同态加密(FHE)是一项具有挑战性的任务。经过数月努力和重大进展,我们很高兴地宣布 FHE 的 GPU 加速现已正式提供给最终用户。

Concrete 旨在使 FHE 易于使用,因此开发人员可以利用其强大功能,而无需广泛了解 FHE 或 GPU 加速。要使用 GPU 加速,只需安装支持 GPU 加速的 Concrete wheel,并在编译时添加 use_gpu 选项。你可以在我们的 Zama 公共 PyPI 中找到 GPU。有两个仓库:一个用于 CPU wheel(包括 nightly 版本),一个用于 GPU wheel。要安装 GPU wheel,你只需在安装命令中指定我们的 GPU 仓库即可。

pip install concrete-python --index-url https://pypi.zama.ai/gpu

安装 GPU wheel 后,你需要将编译函数的 use_gpu 选项设置为 True,Concrete 编译器/运行时将在后台执行其余操作,以利用主机的所有可用 CPU 和 GPU。

from concrete import fhe

@fhe.compiler({"x": "encrypted"})
def myfunction(x):
   ...

myfhefunction = myfunction.compile(inputset, use_gpu=True)

重要的是要注意,配备 GPU 的主机并不总是比只有 CPU 的机器快。性能提升取决于硬件和工作负载。一个关键因素是可并行化工作量及其粒度,因此,例如,在线性代数方面工作量大的工作负载往往会受益于 GPU。

我们已经对在三个不同系统上运行 CIFAR-10 的此功能进行了基准测试:

  • AWS hpc7a.96xlarge,具有 192 个 CPU 硬件线程
  • Hyperstack n3-H100x4,具有 124 个硬件线程和 4 个 GPU H100
  • Hyperstack n3-H100x8,具有 252 个硬件线程和 8 个 GPU H100

此基准测试的执行时间(无论是在精确模式还是近似 PBS 模式下)如下:

正如我们所看到的,在这种使用案例中,GPU wheel 比 CPU wheel 快 2.5 倍。

增强的函数组合

在我们之前的版本 Concrete v2.7 中,引入了 模块,它允许组合多个函数。但是,由于它依赖于可用的最简单的算法来选择密码学参数,因此支持非常有限,这意味着整个模块都使用同一组参数。根据你的模块,这种方法可能会严重影响性能。

Concrete v2.7 通过使用基于分区的方案改进了模块优化。此方法允许为模块的不同部分使用不同的加密参数。通过基于子部分的精度要求对图进行分区,你可以独立优化不同的分区并产生更严格的加密参数。

与往常一样,此复杂性完全由 Concrete 处理。如果你已经在使用模块,只需更新 Concrete 即可享受性能提升。

如果你想要更严格的加密参数,Concrete v2.7 现在允许你指定模块中函数之间的实际依赖关系。这使编译器能够应用更积极的分区,从而加快执行速度。

以下代码段显示了如何指定输入和输出之间的依赖关系。你可以在此处找到有关 wiring API 的更多信息。

from concrete import fhe
from fhe import Wired, Wire, Output, Input

@fhe.module()
class Collatz:

   @fhe.function({"x": "encrypted"})
   def collatz(x):
       y = x // 2
       z = 3 * x + 1
       is_x_odd = fhe.bits(x)[0]
       ans = fhe.multivariate(lambda b, x: b * x)(is_x_odd, z - y) + y
       is_one = ans == 1
       return ans, is_one

   composition = Wired(
       [\
           Wire(Output(collatz, 0), Input(collatz, 0)\
       ]
   )

其他改进

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

感谢你一直以来的支持和反馈,我们将努力使 FHE 对每个人都更易于访问和高效。

附加链接

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

0 条评论

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