查看原文
其他

Piranha: 用于安全计算的GPU平台(A GPU Platform for Secure Computation)

董业 隐私计算研习社 2023-04-07

本次介绍的是发表在Usenix Security'22上的论文Piranha,该论文来利用GPU加速MPC协议,提升了多个现有协议的性能,并支持隐私保护机器学习模型训练和预测。论文链接:https://eprint.iacr.org/2022/892代码链接:https://github.com/ucbrise/piranha
1

Introduction
利用GPU加速安全计算的效率是当前的一个主要研究方向,不仅仅是基于秘密分享的MPC协议,在同态加密领域,GPU加速也有很多工作。至于本文涉及的基于秘密分享的MPC协议,近年来的比较有影响力的工作主要有Delphi和CryptGPU,不过前者只是用GPU加速卷积计算,后者则将整数分解,然后利用Pytorch中的浮点数Kernel加速分解的子模块的安全三方计算,然后合并得到结果。这两篇论文的详细介绍可以参考我们之前的博客:Delphi博客,CryptGPU博客。
目前,还没有直接在GPU上实现整数Kernel,以支持MPC协议的工作。Piranha面向的则是这个问题。Challenges & Insights: 为了支持GPU加速的MPC协议,本文总结了三个挑战:1. Protrocol-independent acceleration. 不同的MPC协议对于同样的功能模块计算流程是不同的,例如两方和三方的乘法计算协议就完全不同。如果加速技术依赖于协议本身的性质,那么每次希望在GPU加速基础上设计新协议的时候,就必须重新构建关于GPU加速的底层模块。另一方面,不同的计算协议都可以分解为 本地计算+通信。Piranha以vector shares为基本的处理单元来计算local operations,然后结合参与方之间的通信来实现计算。通过对local data的秘密分享抽象,Piranha能够将所有的数据和计算保持在GPU上,最大化GPU的加速效率并尽可能减少通过CPU的各个参与方之间的数据传输; 2. Enabling integer-basec GPU ComputationMPC协议是操作在整数上的,可惜的是GPU只关注在明文浮点数计算。为了填补这个空白,Piranha提供了一个integer-based Kernel并以此为基础表示integer-based shares、加速基本算子计算; 3. Supporting large MPC problems in limited GPU memory由于GPU的存储(e.g., 12、16GB)比内存(e.g., 64GB)小很多,因此会限制应用的规模。进一步,秘密分享会成倍的增加内存占用,因此会加剧存储的问题。为了缓解这个问题,本文:1)首先利用in-place operations 来进行本地份额的计算,当且仅当明显需要额外存储的时候才分配GPU内存;2)第二点,MPC协议可能会需要与整数Kernel不兼容的非标准访存模式。简单的将数据拷贝然后组织成预期的布局会需要额外的存储空间。Piranha针对这个问题基于GPU内存视图提出了内存-高效的计算以支持in-place computation,从而避免申请临时内存或者数据传输。 为了验证Piranha的性能,本文实现了三种协议:1)SecureML(两方),2)Falcon(三方),和3)FantasticFour(四方)。和之前的CPU版本的协议相比,Piranha对于模型训练方面能够提升训练时间。更重要的,Piranha是第一次实现能力能够大约一天时间完成一个实用化神经网络(比如VGG)的完整训练。2

System Architecture如上图所示,Piranha采用模块化设计,分为三层:Device Layer该层提供了目前GPU库缺少的整数Kernel,能够协议无关的加入任意基于秘密分享的MPC协议。具体来说,该层提供了对于GPU-based 整数向量的一个抽象,能够表示向量的多方分享的份额,这些份额保存在GPU上支持计算,而通信交互则通过 GPU<-->CPU<-->GPU 来进行;另一方面,本文提出的整数Kernel支持对local分享份额的常见功能函数,比如对位相加、矩阵乘法等;Protocol Layer:该层实现了多个协议,包括两方、三方和四方计算协议与黑盒模式下设计的算子。并且,为了最大利用GPU有限的存储并弥补Device Layer的不足,该层对非标准化访存模式提供了针对GPU上local份额的iterator-based视图以支持in-place computation从而满足GPU的存储约束;Application Layer:该层使得上层应用(机器学习模型训练和预测)和底层协议完全独立。以PPML为例,其核心逻辑是将上层应用的函数转化为Protocol Layer对应的MPC协议,然后进一步调用Device Layer的基本本地运算和通信,从而实现需要的应用。Threat Model: 虽然Falcon和FantasticFour支持恶意模型安全,但是本文还是只面向半诚实安全。3

Device Layer

该层主要解决两个问题:1)处理向量化的GPU数据;2)支持加速基于整数的计算。3.1 Data management on the GPU Piranha提供了DeviceData抽象以访问GPU内存(Listing 1),其可以用C++的整数类型实现,例如 uint32_t, uint64_t。逻辑上,DeviceData对应秘密分享的本地份额。其操作的基本单元是份额向量(share vectors)而不是单个的数。因此,其对应的是C++中的 std::vector<>,初始化如 Line 1-4。对位计算(element-wsie operations)可以直接进行,底层会调用GPU的多个线程进行 (Line 7-8),对于矩阵乘法,在DeviceData的支持下,安全矩阵乘法的效率比CPU版本的提升了 (Line 11)。而通信,则是借助CPU实现。DeviceData也提供了简单的接口(Line 14-15)。3.2 Iterator-based operations 为了缓解GPU内存有限的问题,Piranha是用基于迭代器的抽象来尽可能减少冗余临时内存申请。Piranha的迭代器支持开发者对于数据向量构建基于视图(view)并基于视图遍历操作数据,而不是改变物理内存布局。例如,对于成对乘法,简单的方案是将索引为奇数和偶数的数据分别拷贝到两块临时内存,然后进行乘法。但是这需要申请额外的存储空间。Piranha中基于迭代器的方法允许开发者定义奇数、偶数视图,并根据视图进行in-place element-wise操作,不需要额外的存储(Line 18-21,令offset=0, 1可以定义偶数和奇数视图)。3.3 Integer kernels 之前面向GPU的整数Kernel解决方案(CryptGPU)是将整数分解为若干个小整数的组合(x=x3248+x2232+x1216+x0),然后利用浮点数Kernel的尾数部分计算小整数,然后根据小整数计算结果组合成最终结果。这种方法需要多次调用浮点数Kernel。本文直接在CUTLASS的一般性矩阵乘法和卷积Kernel的模板上开发整数Kernel,从而使得一次Kernel调用就可以满足整数计算。另外,本文的模块化设计方便在今后嵌入更加高效的Kernel实现。4

Protocol Layer

本文实现了SecureML,Falcon,和FantasticFour协议的GPU版本,并且还提出了Memory-efficient协议来进一步减少内存开销。
4.1 MPC protocol implementation 利用DeviceData可以实现local shares的本地化操作。以三方replicated secret sharing为例,加法和数乘可以本地计算得到。乘法则需要resharing。更一般,乘法可以推广为矩阵乘法。矩阵乘法的代码示意如下:除此之外,Piranha利用GPU生成大量随机数用于MPC协议。4.2 Memory-efficient protocols 在比较协议中,最重要的是提取最高有效位。进一步,最高有效位提取中最关键的是进位计算:CarryOut, 本节简述如何利用3.2节介绍的iterator-based抽象视图来优化CarryOut。给定  和  的比特分解  和 ,CarryOut计算得到 。基本思路是利用进位加法器计算  轮实现进位。对于第轮,最关键的是计算邻接传播比特的AND门:简单的方法是将是每一轮将所有分为偶数、奇数两部分,然后进行对位乘法。但是这样会需要申请额外的内存(次额外的数据拷贝)。计算示意图如下所示:本文则是基于iterator的视图,构建了访问偶数索引和奇数索引下数据的两个视图,以两个视图为基础使用GPU Kernel计算得到传播比特。并且得到的计算结果可以放在第一个视图对应的已申请内存中,不需要额外的数据拷贝和内存申请。示意图如下所示:
4.3 Reusable protocol components 
其他重要的模块包括比较函数和近似计算。比较函数: 比较函数本文使用edaBits: 其中  且  来实现。利用edaBits可以将算数分享的比较问题转化为布尔分享的转化问题,而布尔分享的比较可以通过CarryOut实现。近似计算: 对于平方根计算和倒数计算,本文首先求其输入的最近二次幂(和Falcon类似),然后将输入转化到0.5到1之间。进而使用如下的泰勒级数多项式近似:
5

Application Layer

该层提供了面向神经网络模型训练的接口,具体来说是神经网络函数的实现。本文支持的面向NN的函数如下:这些实现独立于协议的实现。因此,可以在未来很方便的按照统一的接口嵌入新的协议。简单的调用如下所示:对于反向传播,假设NN最后一层的输出是,则最后一层的logits计算:。本文发现其中 由于现在的输入,本文用多项式近似计算 ,并加入了  的偏置。从而兼顾效率和保证激活函数的幅度(不增加)。该方法之前在CryptGPU中详细介绍过,可以参考之前的博客。6

Evaluation

本文关注在线计算性能和通信,和基于MP-SPDZ的实现相比,大大提升了算子和整体训练的性能。矩阵乘法、卷积和ReU算子的提升如下:在线训练的时间和通信开销如下:三方协议下,和Falcon、CryptGPU做了训练和预测开销的对比。本文还做了其他关于精度、计算-通信平衡、和内存方面的实现,该部分请参考原文。
译者简介:董业,本科毕业于山东大学计算机科学与技术专业,目前在中国科学院信息工程研究所攻读博士学位。主要研究兴趣包括隐私保护、安全多方计算、同态加密和机器学习。知乎:酸菜鱼。
END

往期推荐


机器学习隐私保护相关文献整理
FedGEN:面向异质联邦学习的无数据知识蒸馏框架
阿里、浙大顶会论文:联邦环境下,基于元学习的图谱知识外推
本地差分隐私 VS 全局差分隐私

欢迎投稿邮箱:pet@openmpc.com参与更多讨论,请添加小编微信加入交流群

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存