TFHE-rs v1.3:CPU 除法加速、密钥升级器和 GPU 内存跟踪

  • ZamaFHE
  • 发布于 1天前
  • 阅读 107

TFHE-rs v1.3 版本在 CPU、GPU 和 HPU 后端带来了多项重大改进和新功能,主要包括:GPU 性能提升(整数对数运算速度提升 4 倍,其他操作速度提升高达 20%)、GPU 内存跟踪、CPU 除法加速(速度提升 36%)、零知识证明 v2、密钥升级器等,这些改进提高了全同态加密 (FHE) 工作负载的性能、可用性和安全性。

TFHE-rs v1.3: CPU 上更快的除法,密钥升级器 & GPU 上的内存跟踪

Jean-Baptiste Orfila, Arthur Meyre, Agnes Leroy

TFHE-rs v1.3 带来了 CPU、GPU 和 HPU 后端的几项重大改进和新功能,从而增强了全同态加密 (FHE) 工作负载的性能、可用性和安全性。

亮点

  • GPU 性能提升: 整数对数现在快了 4 倍,其他一些操作也快了高达 20%。
  • GPU 内存跟踪: 实用函数可帮助你预测内存使用情况并避免内存不足错误。
  • CPU 除法加速: 速度提升 36%。
  • 零知识证明 v2: 新的哈希模式将验证速度提高了 34-38%,但证明时间略有增加。
  • 噪声抑制压缩: 压缩 MPC 中生成的大型密文。
  • 密钥升级器: 将旧密文更新为新的加密参数,以提高性能和安全性
  • HPU 安全性对齐: 默认加密参数现在与 CPU 和 GPU 标准匹配,从而将误差概率降低到 < 2 -128,同时对性能的影响最小。
  • HPU 后端改进: 更多支持的操作和更快的 FPGA 重新加载。

GPU:内存跟踪和性能改进

内存跟踪

GPU 内存用于存储输入和输出密文、服务器密钥以及 FHE 操作期间所需的临时缓冲区。这些缓冲区的大小取决于操作,例如,64 位加法需要的内存相对较少,而 128 位乘法则消耗的内存多得多。

在 v1.3 之前,当使用 TFHE-rs 的高级 API 时,开发人员无法在执行操作之前知道该操作需要多少 GPU 内存。这使得在不冒内存不足的风险的情况下调度大型计算或并行工作负载非常具有挑战性。

TFHE-rs v1.3 引入了实用函数,这些函数返回每个操作所需的 GPU 内存量,并允许用户检查 GPU 是否有足够的可用内存来执行它。

这是一个最小的示例,展示了如何跟踪 GPU 内存使用情况:

use rand::Rng;
use tfhe::prelude::*;
use tfhe::{
    set_server_key, ClientKey, CompressedServerKey, ConfigBuilder,
    FheInt32, GpuIndex,
};
fn main() {

    let config = ConfigBuilder::default();
    let client_key = ClientKey::generate(config);
    let csks = CompressedServerKey::new(&client_key);
    let server_key = csks.decompress_to_gpu();
    set_server_key(server_key);
    let mut rng = rand::thread_rng();
    let clear_a = rng.gen_range(1..=i32::MAX);
    let clear_b = rng.gen_range(1..=i32::MAX);
    let mut a = FheInt32::try_encrypt(clear_a, &client_key).unwrap();
    let mut b = FheInt32::try_encrypt(clear_b, &client_key).unwrap();

    // 确定 a 和 b 将使用多少内存
    let ciphertexts_size = a.get_size_on_gpu() + b.get_size_on_gpu();

    // 检查 GPU 内存中是否有足够的空间来存储 a 和 b
    check_valid_cuda_malloc_assert_oom(ciphertexts_size, GpuIndex::new(0));

    // 将 a 和 b 移动到 GPU 内存
    a.move_to_current_device();
    b.move_to_current_device();

    // 确定将使用多少 GPU 内存来添加 a 和 b
    let add_size = a.get_add_size_on_gpu(&b);

    // 检查 GPU 是否有足够的内存来执行加法
    check_valid_cuda_malloc_assert_oom(add_size, GpuIndex::new(0));

    // 执行加法
    a += &b;
}

在此示例中,你首先计算存储密文所需的 GPU 内存:

    // 确定 a 和 b 将使用多少内存
    let ciphertexts_size = a.get_size_on_gpu() + b.get_size_on_gpu();

然后,你计算加法本身所需的内存:

    // 确定将使用多少 GPU 内存来添加 a 和 b
    let add_size = a.get_add_size_on_gpu(&b);

最后,你检查 GPU 是否有足够的可用内存来安全地执行加法:

    // 检查 GPU 是否有足够的内存来进行加法
    check_valid_cuda_malloc_assert_oom(add_size, GpuIndex::new(0));

这些新的实用函数有助于避免执行期间出现内存不足错误。

性能提升

TFHE-rs v1.3 带来了显着的 GPU 性能改进,特别是:

  • 将密文乘以或除以明文值现在快了约 20%。
  • 与以前的版本相比,整数对数运算的速度提高了 4 倍。

由于 TFHE-rs 是 Zama Confidential Blockchain Protocol 的底层库,为了说明实际性能,请考虑需要执行以下操作序列的 ERC20 转账:

    fn erc20_transfer(
        from_amount: &FheUint64,
        to_amount: &FheUint64,
        amount: &FheUint64,
    ) -> (FheUint64, FheUint64)
        let (new_from, did_not_have_enough) = (from_amount).overflowing_sub(amount);
        let did_not_have_enough = &did_not_have_enough;
        let had_enough_funds = !did_not_have_enough;

        let (new_from_amount, new_to_amount) = rayon::join(
            || did_not_have_enough.if_then_else(from_amount, &new_from),
            || to_amount + (amount * FheType::cast_from(had_enough_funds)),
        );
        (new_from_amount, new_to_amount)
    }

在 8xH100 GPU 上,此 ERC20 转账的延迟和吞吐量如下所示:

TFHE-rs 保证 FHE 操作的失败概率低于 2 -128,从而确保生产场景中的计算正确性和安全性。

新功能

从 TFHE-rs v1.3 开始,用户可以在 ProvenCompactCiphertextList 及其非证明对应物上调用函数 expand_and_verify。在此工作流程中,零知识证明验证在 CPU 上执行,而扩展(此类型密文上 FHE 计算所必需的预处理步骤)在 GPU 上运行。

此外,阈值解密协议中使用的噪声抑制现在可以在 GPU 上执行,以获得更好的性能。

CPU:更快的除法和 ZK 证明增强

TFHE-rs v1.3 带来了 CPU 端性能和加密功能的几项改进。

除法算法得到了改进,当使用 FheUint64 输入时,运行时从 8.6 秒减少到 5.5 秒。零知识证明也看到了重要的增强。ZK v2 中的一种新的哈希方案以少量增加证明生成时间为代价,使验证过程加快了 34-38%,从而显着提高了证明效率。

在 MPC 设置中,TFHE-rs 1.1.0 中首次引入的噪声抑制原语可以实现噪声泛洪,以防止泄漏。但是,这些操作可能会产生大型密文。为了解决这个问题,v1.3 添加了压缩原语,可以减少噪声抑制密文的大小,从而提高存储和传输效率。有关更多详细信息,请参阅文档

为了简化使用不断发展的加密参数,此版本引入了一种密钥升级器机制。它允许使用旧密钥或参数集加密的密文更新为较新的配置。此过程要求正确标记密钥和密文,以便可以使用提供的升级密钥识别和应用升级路径。

此外,TFHE-rs v1.3 为二进制密钥分配引入了一种新的模数切换技术变体。与以前的方法不同,此变体允许在不使用额外密钥材料的情况下实现相同的 2-128 失败概率。

最后,TFHE-rs v1.3 现在支持具有较小密钥切换模数的参数集,当密钥切换正确性不需要大模数(如 264)时,这可以提高性能。

HPU:增强的后端

TFHE-rs v1.3 扩展了 HPU 后端:

  • 通过高级 API 增加了对除法、移位、旋转、最大运算、位计数等的支持。
  • 借助基于 PCIe 的“串联模式”,FPGA 重新加载现在速度显着提高,从而消除了 V80 板上缓慢的闪存写入过程。

HPU 的默认加密参数现在与 CPU 和 GPU 对齐,以最小的性能影响实现 <2 -128 的误差概率。

附加链接

相关博客文章

使用 TFHE-rs 提高多 GPU 吞吐量

构建者呼唤:使用机密贷款加入 DeFi 的下一个万亿

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

0 条评论

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