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

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

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

博客

/

公告

TFHE-rs

TFHE-rs v0.8:加密数组和改进的多 GPU 支持

2024 年 10 月 8 日

  -

Jean-Baptiste Orfila, Arthur Meyre, Agnes Leroy


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 社区论坛中与我们的团队一起参与对话!我们创建了一个专门的帖子来讨论与此主题相关的所有内容——欢迎你的参与。

阅读更多相关帖子

[视频教程] 使用 TFHE-rs 对加密数据执行数组和张量运算 \ 在本教程中,Zama 团队成员 Arthur Meyre 将向你展示如何在 TFHE-rs 中对加密数据执行数组和张量运算。 2024 年 10 月 24 日\ \ Arthur Meyre

TFHE-rs

教程

Concrete ML v1.7:Transformer 模型微调和 DNA 血统应用 \ Concrete ML v1.7 引入了对加密数据进行微调模型、GPU 加速和 DNA 血统应用。 2024 年 10 月 8 日\ \ Andrei Stoian

公告

Concrete ML

Concrete v2.8:与 TFHE-rs 的互操作性和自动模块跟踪 \ Concrete v2.8 引入了 TFHE-rs 和 Concrete 之间的互操作性、自动模块跟踪和新的用例教程。 2024 年 10 月 8 日\ \ Quentin Bourgerie

公告

Concrete

Zama 产品发布 - 2024 年 10 月 \ 随时了解 Zama 2024 年 10 月的产品发布,包括 TFHE-rs、Concrete 的新版本... 2024 年 10 月 8 日\ \ The Zama Team

公告

Concrete Concrete ML FHEVM TFHE-rs

产品与服务

保护隐私的机器学习 机密区块链 阈值密钥管理系统

开发者

博客 文档 GITHUB FHE 资源 研究论文 赏金计划 FHE STATE OS

公司

关于 FHE 介绍 活动 媒体 职业 法律声明

联系方式

与专家交谈 联系我们 X Discord Telegram 所有社区频道

在电子时代,隐私对于一个开放的社会是必要的。隐私不是秘密。隐私是不想让全世界知道的事情,而秘密是不想让任何人知道的事情。隐私是有选择地向世界展示自己的力量。如果双方有某种交易,那么每一方都会记住他们的互动。每一方都可以谈论他们自己对这件事的记忆;谁能阻止它呢?人们可以制定法律来反对它,但是言论自由,甚至比隐私更重要,对于一个开放的社会来说是至关重要的;我们不寻求限制任何言论。如果许多方在同一个论坛中一起发言,每个人都可以向所有其他人发言,并将关于个人和其他方的知识汇总在一起。电子通信的力量已经实现了这种群体发言,它不会仅仅因为我们可能希望它消失而消失。既然我们渴望隐私,我们必须确保交易的每一方只了解该交易直接需要的知识。既然任何信息都可以被谈论,我们必须确保我们尽可能少地透露。在大多数情况下,个人身份并不重要。当我在商店购买杂志并向店员递交现金时,没有必要知道我是谁。当我要求我的电子邮件提供商发送和接收消息时,我的提供商不需要知道我在与谁交谈或我在说什么,或者他人对我说什么;我的提供商只需要知道如何传递消息以及我欠他们多少费用。当我的身份被交易的底层机制泄露时,我就没有隐私。我不能在这里有选择地展示自己;我必须总是展示自己。因此,开放社会中的隐私需要匿名交易系统。到目前为止,现金一直是主要的此类系统。匿名交易系统不是秘密交易系统。匿名系统使个人能够在需要时并且仅在需要时透露自己的身份;这就是隐私的本质。开放社会中的隐私也需要密码学。如果我说些什么,我希望只有我打算让其听到的人才能听到。如果我的言论内容对全世界都可用,我就没有隐私。加密是表明对隐私的渴望,而使用弱密码学加密则表明对隐私没有太大的渴望。此外,当默认设置为匿名时,要确保地透露自己的身份,需要密码签名。我们不能指望政府、公司或其他大型、不露面的组织出于善意而给予我们隐私。谈论我们对他们有利,我们应该预料到他们会谈论。试图阻止他们的言论就是与信息的现实作斗争。信息不仅仅是想自由,它渴望自由。信息会扩展以填满可用的存储空间。信息是谣言的年轻、更强壮的表弟;信息比谣言跑得更快,有更多的眼睛,知道得更多,但理解得更少。如果我们希望拥有隐私,我们必须捍卫自己的隐私。我们必须走到一起,创建允许匿名交易发生的系统。几个世纪以来,人们一直在用耳语、黑暗、信封、关着的门、秘密握手和信使来捍卫自己的隐私。过去的技术不允许强大的隐私,但电子技术可以。我们,密码朋克,致力于构建匿名系统。我们正在用密码学、匿名邮件转发系统、数字签名和电子货币来捍卫我们的隐私。密码朋克编写代码。我们知道必须有人编写软件来捍卫隐私,而且由于除非我们都这样做,否则我们无法获得隐私,因此我们将编写它。我们发布我们的代码,以便我们的密码朋克同伴可以练习和使用它。我们的代码供所有人免费使用,全世界范围内。我们不太关心你是否不赞成我们编写的软件。我们知道软件无法被销毁,并且广泛分散的系统无法被关闭。密码朋克谴责对密码学的监管,因为加密本质上是一种私人行为。事实上,加密行为将信息从公共领域中移除。即使是反对密码学的法律也只能触及一个国家的边界及其暴力手臂。密码学将不可避免地遍布全球,随之而来的是它使之成为可能的匿名交易系统。为了使隐私得到广泛传播,它必须成为社会契约的一部分。人们必须走到一起并部署这些系统,以实现共同利益。隐私只能延伸到社会中同伴的合作为止。我们,密码朋克,寻求你的问题和你的担忧,并希望我们可以与你互动,以便我们不会欺骗自己。但是,我们不会因为某些人可能不同意我们的目标而改变我们的方向。密码朋克正在积极致力于使网络对于隐私更加安全。让我们一起快速前进。前进。 作者:Eric Hughes。 1993 年 3 月 9 日。

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

0 条评论

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