TFHE-rs v0.8版本发布,引入了加密数组类型,并增强了多GPU计算能力,开发者可以更轻松地处理向量和张量,同时大幅缩短GPU上算术运算的计算时间,此外,新版本还引入了诸多新特性,包括后同态计算密文压缩、更多基于GPU的同态运算、以及CPU运算的改进等。
/
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 维数组(或张量)。这使得定义向量或矩阵同态运算变得容易。支持的运算包括:
以下示例演示了新数组类型的一些功能:它展示了如何从两个 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]);
}
在 TFHE-rs v0.7 中,引入了多 GPU 支持,利用 NVLink 来处理 GPU 之间的数据共享。但是,此功能仅限于具有 NVLink 的平台,从而限制了其可扩展性。TFHE-rs v0.8 消除了这些限制,并提供了以下改进:
由于可编程引导和快速傅里叶变换 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 引入了其他几个功能:
随着 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
与专家交谈 联系我们 X Discord Telegram 所有社区频道
在电子时代,隐私对于一个开放的社会是必要的。隐私不是秘密。隐私是不想让全世界知道的事情,而秘密是不想让任何人知道的事情。隐私是有选择地向世界展示自己的力量。如果双方有某种交易,那么每一方都会记住他们的互动。每一方都可以谈论他们自己对这件事的记忆;谁能阻止它呢?人们可以制定法律来反对它,但是言论自由,甚至比隐私更重要,对于一个开放的社会来说是至关重要的;我们不寻求限制任何言论。如果许多方在同一个论坛中一起发言,每个人都可以向所有其他人发言,并将关于个人和其他方的知识汇总在一起。电子通信的力量已经实现了这种群体发言,它不会仅仅因为我们可能希望它消失而消失。既然我们渴望隐私,我们必须确保交易的每一方只了解该交易直接需要的知识。既然任何信息都可以被谈论,我们必须确保我们尽可能少地透露。在大多数情况下,个人身份并不重要。当我在商店购买杂志并向店员递交现金时,没有必要知道我是谁。当我要求我的电子邮件提供商发送和接收消息时,我的提供商不需要知道我在与谁交谈或我在说什么,或者他人对我说什么;我的提供商只需要知道如何传递消息以及我欠他们多少费用。当我的身份被交易的底层机制泄露时,我就没有隐私。我不能在这里有选择地展示自己;我必须总是展示自己。因此,开放社会中的隐私需要匿名交易系统。到目前为止,现金一直是主要的此类系统。匿名交易系统不是秘密交易系统。匿名系统使个人能够在需要时并且仅在需要时透露自己的身份;这就是隐私的本质。开放社会中的隐私也需要密码学。如果我说些什么,我希望只有我打算让其听到的人才能听到。如果我的言论内容对全世界都可用,我就没有隐私。加密是表明对隐私的渴望,而使用弱密码学加密则表明对隐私没有太大的渴望。此外,当默认设置为匿名时,要确保地透露自己的身份,需要密码签名。我们不能指望政府、公司或其他大型、不露面的组织出于善意而给予我们隐私。谈论我们对他们有利,我们应该预料到他们会谈论。试图阻止他们的言论就是与信息的现实作斗争。信息不仅仅是想自由,它渴望自由。信息会扩展以填满可用的存储空间。信息是谣言的年轻、更强壮的表弟;信息比谣言跑得更快,有更多的眼睛,知道得更多,但理解得更少。如果我们希望拥有隐私,我们必须捍卫自己的隐私。我们必须走到一起,创建允许匿名交易发生的系统。几个世纪以来,人们一直在用耳语、黑暗、信封、关着的门、秘密握手和信使来捍卫自己的隐私。过去的技术不允许强大的隐私,但电子技术可以。我们,密码朋克,致力于构建匿名系统。我们正在用密码学、匿名邮件转发系统、数字签名和电子货币来捍卫我们的隐私。密码朋克编写代码。我们知道必须有人编写软件来捍卫隐私,而且由于除非我们都这样做,否则我们无法获得隐私,因此我们将编写它。我们发布我们的代码,以便我们的密码朋克同伴可以练习和使用它。我们的代码供所有人免费使用,全世界范围内。我们不太关心你是否不赞成我们编写的软件。我们知道软件无法被销毁,并且广泛分散的系统无法被关闭。密码朋克谴责对密码学的监管,因为加密本质上是一种私人行为。事实上,加密行为将信息从公共领域中移除。即使是反对密码学的法律也只能触及一个国家的边界及其暴力手臂。密码学将不可避免地遍布全球,随之而来的是它使之成为可能的匿名交易系统。为了使隐私得到广泛传播,它必须成为社会契约的一部分。人们必须走到一起并部署这些系统,以实现共同利益。隐私只能延伸到社会中同伴的合作为止。我们,密码朋克,寻求你的问题和你的担忧,并希望我们可以与你互动,以便我们不会欺骗自己。但是,我们不会因为某些人可能不同意我们的目标而改变我们的方向。密码朋克正在积极致力于使网络对于隐私更加安全。让我们一起快速前进。前进。 作者:Eric Hughes。 1993 年 3 月 9 日。
- 原文链接: zama.ai/post/tfhe-rs-v0-...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!