宣布在 FPGA 上推出 HPU:首个用于 FHE 的开源硬件加速器

  • ZamaFHE
  • 发布于 14小时前
  • 阅读 42

Zama 团队发布了首个完全开源的 FHE 硬件加速器 HPU,以及 TFHE-rs v1.2,该版本包含一个新的后端,用于支持在 FPGA 上运行的 HPU。

Pierre Gardrat

本月,Zama 的硬件团队发布了首个完全开源的 FHE 硬件加速器,以及 TFHE-rs v1.2,其中包括一个新的后端,以支持在现场可编程门阵列 (FPGA) 上运行的此同态处理单元 (HPU)。

经过两年多的开发,我们在 Zama 的团队很高兴分享这一里程碑,并收集来自应用程序开发人员和 FHE 硬件加速社区的反馈。

HPU 的完整 systemVerilog 实现可在此存储库中找到。

什么是 HPU?

HPU 是一种设计用于直接在加密数据上进行计算的处理器。与仅加速引导或重新线性化等密码原语的硬件不同,HPU 是一个完整的片上处理器。它包括一个寄存器文件、控制逻辑和一个算术单元,该单元在加密操作数上执行一系列指令。

FHE 硬件加速器 HPU 目前在 FPGA 上运行,包含在各种大小的加密操作数上执行布尔和整数运算所需的所有逻辑。

HPU 通过新的 tfhe-hpu-backend 驱动,该后端在 TFHE-rs v1.2 中可用。这个新的 TFHE-rs 后端初始化 HPU 的密钥、LUT 和数字操作 (DOp) 固件——与每个输入指令关联的微代码,名为整数操作 (IOp)。

例如,当应用程序需要执行加密加法 a + b 时,其中 a 和 b 是 FheUint,a 和 b 会与 ADD IOp 命令一起发送到 HPU 的大内存中。然后,ADD IOp 通过嵌入式控制器转换为一系列 DOp 指令。每个 DOp 都由 HPU 的一个处理单元处理。

HPU 不仅限于运行加法和乘法。它被设计成一个通用的 FHE 处理器,因此 HPU IOp 指令集是完全可定制的。开发人员不仅可以修改现有操作,还可以创建新的 IOp 并编写自己的相应 DOp 固件以在芯片上执行。

HPU 包含在芯片上运行所有 TFHE 操作所需的所有处理单元。它仅在运行应用程序需要时才与主机内存和 CPU 交互。对于那些熟悉 TFHE 密码方案的人来说,它包括一个实现完整可编程引导 (PBS) 的模块——快速且可扩展的 FHE 执行的核心要求。要了解有关 TFHE 方案的更多信息,请查看我们的博客文章系列 TFHE 深度探索,以了解为什么 PBS 模块是此加速器的必备组件。

如何使用 HPU?

Zama 的 HPU 集成到 TFHE-rs 库中。启用 HPU 后端后,它会从 TFHE-rs 接收其加密的操作数和指令。

使用 HPU 很简单——它使用与 TFHE-rs 用于在 CPU 或 GPU 上运行加密操作相同的高级 API。只需选择一个 HPU 设备,你 ciphertext 上的所有操作都将在 HPU 上执行。

此处提供了全面的文档。

 // 实例化 HpuDevice --------------------------------------------------
    let hpu_device = HpuDevice::from_config(&args.config.expand());

    // 生成密钥 ----------------------------------------------------------
    let config = Config::from_hpu_device(&hpu_device);

    let client_secret_key = ClientKey::generate(config);
    let server_key = CompressedServerKey::new(&client_secret_key);

    set_server_key((hpu_device, server_key));

    // 产品 ---------------------------------------------------------
    // 生成随机输入值并计算预期结果
    let in_a = rng.gen_range(0..u64::max_value());
    let in_b = rng.gen_range(0..u64::max_value());

    let clear_mul_ab = in_a.wrapping_mul(in_b);

    // 加密输入值
    let fhe_a = FheUint64::encrypt(in_a, &client_secret_key);
    let fhe_b = FheUint64::encrypt(in_b, &client_secret_key);

    // 通过 hl_api 触发 HPU 上的操作
    let fhe_mul_ab = fhe_a * fhe_b;

    // 解密值
    let dec_mul_ab: u64 = fhe_mul_ab.decrypt(&client_secret_key);

    // 显示结果并检查
    println!(" {} *  {} = fhe({}), clear({})", in_a, in_b, dec_mul_ab, clear_mul_ab);
    assert_eq!(dec_mul_ab, clear_mul_ab,
         "Error with * operation get {}, expect {}",dec_mul_ab, clear_mul_ab);

让我们谈谈性能

HPU 有多快?嗯,它非常快! 今天,它在配备 x2 HBM2e 的 AMD/Xilinx V80 板的 7nm FPGA 上以 350Mhz 的频率运行。它可以处理大约 13k PBS/s,功耗约为 200W。一些 FHE 操作仍在优化中,但你已经可以在文档中找到我们发布的第一个基准测试结果。

为什么要使用 HPU?以及何时使用?

HPU 是一种专为 FHE 设计的专用机器。对于相同的任务,它比 CPU 或 GPU 更快、更节能。与 CPU 和 GPU 相比,由于 FPGA 的经济性和能源效率,HPU 的每单位成本也更低。

虽然 Zama 在 FPGA 上的 HPU 尚未完全投入生产,但 Zama 的团队正在积极改进它。我们的目标是在 2025 年底之前将其集成到 Zama 产品线中。与此同时,我们正在开发多 HPU 服务器,这将进一步减少 FHE 操作的延迟,并增加每美元和每小时的操作次数。

最酷的是,整个 HPU 堆栈是完全开源的——从 systemVerilog 硬件设计和固件到 TFHE-rs 集成后端。开发人员和研究人员不仅可以使用 HPU 加速器,还可以审计、扩展和重新利用它来用于他们自己的原型。如果你现在渴望对其进行测试,这很简单:

  • 购买 V80 板
  • 加载提供的 HPU 比特流
  • 或从以下位置编译你自己的版本:zama-ai/hpu_fpga

我们很高兴看到社区用它构建什么。

附加链接

阅读更多相关帖子

未找到项目。

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

0 条评论

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