TFHE-rs v0.8:加密数组与增强的多GPU支持

  • ZamaFHE
  • 发布于 2024-10-09 10:35
  • 阅读 95

TFHE-rs v0.8版本发布,引入了加密数组类型,并增强了多GPU计算能力,开发者可以更轻松地处理向量和张量,同时大幅缩短GPU上算术运算的计算时间,此外,新版本还引入了诸多新特性,包括后同态计算密文压缩、更多基于GPU的同态运算、以及CPU运算的改进等。

TFHE-rs v0.8 引入了数组类型并增强了多 GPU 计算。通过此版本,开发人员现在可以更轻松地使用向量和张量。此外,增强的多 GPU 大大减少了 GPU 上算术运算的计算时间。例如,在 8xH100 上,将两个加密的 64 位整数相乘现在大约需要 100 毫秒,而在高端 CPU 上则需要 366 毫秒,从而实现了 3.5 倍的加速。这篇博文将通过一个使用同态数组的示例,并提供额外的计时结果。与往常一样,此版本还引入了许多新功能,如最后一节所述。

对加密数组进行计算

TFHE-rs v0.8 引入了用于加密数据的 n 维数组(或张量)。这使得定义向量或矩阵同态运算变得容易。支持的运算包括:

  • 逐元素相加
  • 逐元素相减
  • 逐元素相乘
  • 逐元素相除
  • 逐元素求余
  • 逐元素 BitAnd
  • 逐元素 BitOr
  • 逐元素 BitXor

以下示例演示了新数组类型的一些功能:它展示了如何从两个 4x4 矩阵中提取大小为 2x2 的子矩阵,执行加法,然后将一个明文矩阵添加到先前的结果中。你可以在文档中找到有关如何使用同态数组的更多详细信息。

use tfhe::{ConfigBuilder, generate_keys, set_server_key, CpuFheUint32Array, ClearArray};
use tfhe::prelude::*;

fn main() {
    let config = ConfigBuilder::default().build();
    let (cks, sks) = generate_keys(config);

    set_server_key(sks);

    let num_elems = 4 * 4;
    let clear_xs = (0..num_elems as u32).collect::<Vec<_>>();
    let clear_ys = vec![1u32; num_elems];

    // Encrypted 2D array with values
    // [[  0,  1,  2,  3]\
    //  [  4,  5,  6,  7]\
    //  [  8,  9, 10, 11]\
    //  [ 12, 13, 14, 15]]
    // and shape 4x4
    let xs = CpuFheUint32Array::try_encrypt((clear_xs.as_slice(), vec![4, 4]), &cks).unwrap();
    // Encrypted 2D array with values
    // [[  1,  1,  1,  1]\
    //  [  1,  1,  1,  1]\
    //  [  1,  1,  1,  1]\
    //  [  1,  1,  1,  1]]
    // and shape 4x4
    let ys = CpuFheUint32Array::try_encrypt((clear_ys.as_slice(), vec![4, 4]), &cks).unwrap();

    assert_eq!(xs.num_dim(), 2);
    assert_eq!(xs.shape(), &[4, 4]);
    assert_eq!(ys.num_dim(), 2);
    assert_eq!(ys.shape(), &[4, 4]);

    // Take a sub slice
    //  [[ 10, 11]\
    //   [ 14, 15]]
    let xss = xs.slice(&[2..4, 2..4]);
    // Take a sub slice
    //  [[  1,  1]\
    //   [  1,  1]]
    let yss = ys.slice(&[2..4, 2..4]);

    assert_eq!(xss.num_dim(), 2);
    assert_eq!(xss.shape(), &[2, 2]);
    assert_eq!(yss.num_dim(), 2);
    assert_eq!(yss.shape(), &[2, 2]);

    let r = &xss + &yss;

    // Result is
    //  [[ 11, 12]\
    //   [ 15, 16]]
    let result: Vec<u32> = r.decrypt(&cks);
    assert_eq!(result, vec![11, 12, 15, 16]);

    // Clear 2D array with values
    //  [[  10,  20]\
    //   [  30,  40]]
    let clear_array = ClearArray::new(vec![10u32, 20u32, 30u32, 40u32], vec![2, 2]);
    let r = &xss + &clear_array;

    // Result is
    //  [[ 20, 31]\
    //   [ 44, 55]]
    let r: Vec<u32> = r.decrypt(&cks);
    assert_eq!(r, vec![20, 31, 44, 55]);
}

增强的多 GPU 支持

在 TFHE-rs v0.7 中,引入了多 GPU 支持,利用 NVLink 来处理 GPU 之间的数据共享。但是,此功能仅限于具有 NVLink 的平台,从而限制了其可扩展性。TFHE-rs v0.8 消除了这些限制,并提供了以下改进:

  • 所有 Nvidia GPU,包括通过 PCIe 连接的 GPU,现在都可以在计算中使用。
  • GPU 之间的 NVLink 连接用于在可用时进行内存传输。已经优化了整数乘法的 GPU 间通信,从而提高了扩展性。

由于可编程引导和快速傅里叶变换 CUDA 实现中的优化,单 GPU 性能也提高了约 20%。

图 1:64 位乘法(左)和加法(右)的计时,其中两个输入已加密,在 CPU(来自 AWS 的 hpc7a.96xlarge)与一个、两个和八个 H100 GPU 上运行。这些参数对应于两条消息位和两条进位位,对 GPU 使用分组因子等于 3 的多位 PBS,对 CPU 使用经典 PBS。

每个操作的最佳 GPU 数量因操作本身和用户指定的整数精度而异。有关所有指定精度的单 GPU 和多 GPU 的综合基准测试结果数组可在文档中找到。

请注意,可以通过以下环境变量选择要用于多 GPU 平台上计算的 GPU:

export CUDA_SET_DEVICES=0,1,2

这将限制计算仅限于指定的 GPU,即使系统有更多的 GPU 可用。例如,这里 GPU 0、1 和 2 被标记为在平台上可见,这意味着即使平台有 8 个 GPU,也只有 CUDA_SET_DEVICES 中选择的那些 GPU 将用于计算。这对于在同一台机器上的不同 GPU 上执行计算非常有用。

最后,请注意,不再需要手动指定 GPU 特定的参数,即可在 GPU 上获得最佳性能,它们会在调用时自动配置:

let config = ConfigBuilder::default().build();

附加功能和改进

TFHE-rs v0.8 引入了其他几个功能:

  • GPU 上同态计算后的密文压缩:这减少了内存使用,并提高了较大工作负载的性能。
  • 更多基于 GPU 的同态运算: 现在可以使用新的运算,例如标量和加密值之间的除法、整数对数以及尾随/前导零或一。
  • 引导改进: H100 上 GPU 上的引导已改进了 22%。现在在 4 位输入上计算一个引导需要 3 毫秒。可以在 GPU 基准测试文档中找到更完整的基准测试。
  • CPU 运算改进: 一些运算(如加法、减法、比较)已在 CPU 上得到改进。64 位乘法的延迟已降低 16%。更多详细信息可在 CPU 基准测试文档 中找到。
  • 奇偶校验检测: 还可以使用允许你同态确定整数奇偶校验的新运算。
  • 加密的随机 FheBool: 现在可以生成随机加密的 FheBool 值。

随着 TFHE-rs v0.8 的发布,该团队致力于提高整体代码稳定性,并添加了许多新功能。请参阅发行说明以查看完整列表。TFHE-rs 的下一个版本将侧重于引入新的数据类型并继续提高整体性能。敬请关注即将到来的更新!

其他链接

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

0 条评论

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