机器学习实践:模型推理加速与数据安全

1、什么是隐私计算,技术路径有哪些
2、密码学简介,密码学与ML的结合
3、基于TensorFlow的隐私计算框架—Rosetta
4、案例介绍

展开查看详情

1.隐私计算与机器学习 --以开源隐私 AI 框架 Rosetta 为例 矩阵元 谢翔 1

2.Outline • 隐私计算的兴起 • 隐私计算的主要技术路线 • 安全多方计算 • 秘密分享 • Rosetta 的使用:一个例子 • Rosetta 基于 TF 的架构设计 • 数据流图的自动化构建 • 数据流图的执行时优化 • Rosetta 的下一步

3.从数据滥用到 responsible AI 数据是支撑 AI 发展的“能源”,但原始数据的滥用带来一系列问题 • 隐私泄露事件层出不穷,不断引起大众对于 AI 侵犯隐私的担忧 • 各国政府纷纷出台法律法规,AI 在实际场景落地时需要合规

4.从数据滥用到 responsible AI 隐私计算*旨在从技术的角度解决 AI 对数据使用中的隐私的问题 • 契合旨在构建更加以人为本的 responsible AI 潮流方向 • 未来市场潜力巨大, 促进数据作为价值要素的自由流动 * 在不同的场景下,隐私计算也被称作PPML(Privacy-Preserving Machine Learning)、隐私AI技术等别的名称

5.隐私计算的主要技术路线 技术方向 主要特点 主要优势 主要劣势 可信执行环境 需要信任硬件厂商; 硬件安全“飞地” 性能高效,容易切换 (TEE) 目前计算、存储能力有限 联邦学习 相对高效,分布式机器 安全性没有得到充分研究; “数据不动模型动” (Federated Learning) 学习的延伸 一般仍需结合加密技术 密码学 相对高效,能够适配各 具有一定性能瓶颈,使用 可证明安全 (Cryptography) 类场景以及安全需求 和理解门槛较高

6.安全多方计算(MPC)技术 • 由图灵奖获得者、中国科学院院⼠姚期智先⽣于1982年首先提出 • 算法经严格理论证明, 有强安全性保障 • 近年来,在效率上不断取得很大突破 • 多个参与⽅在不泄露隐私数据的前提下,对等的进⾏协同计算 私有输入 z MPC 协议 私有输入 x f(x, y, z) 私有输入 y

7.安全多方计算技术:秘密分享(secret sharing) 基本思想:计算过程中所有中间值都是分享在参与方之间的 随机数 随机数 share share share share

8.安全多方计算技术:秘密分享(secret sharing) 不同的操作都是以 share 为输入,以 share 为输出 加法:由x,y的 share 为输入,如何得到 z = x+y 的 share?

9.安全多方计算技术:秘密分享(secret sharing) 不同的操作都是以 share 为输入,以 share 为输出 乘法: 由x,y的 share 为输入,如何得到 z = x*y 的share? 引入Beaver's Triple : 满足一定关系的随机数

10.隐私计算的落地:隐私AI开源框架 • 工程技术挑战 • 系统易用性:面向AI,不需要了解密码学等技术 • 系统高效性:优化密码算法的计算和通讯 • 系统可扩展性:快速集成新的隐私计算协议 • 现有框架都还处于早期探索阶段 • Rosetta 的特色: • 使用上:修改几行代码完成切换 • 架构上:前端 Python 和后端 C++ 都进行改造

11.一个 Matmul demo • 三方协同计算私有矩阵的乘积,同时不希望别人 知道自己的明文数据

12.一个Matmul demo 三方运行同一份代码: 1. Import rosetta, 选择MPC协议 2. 处理私有数据 3. 复⽤TF中API表达计算逻辑

13.一个Matmul demo 部署执行: • 进行网络拓扑等的配置 • 多方本地启动程序运行

14.一个Matmul demo • 计算过程中本地可见的都是密文随机数:

15.一个Matmul demo 如同设定的那样,仅 P0方和 P2获取到明文结果,而 P1方不会得到明文:

16.背后发生了什么?

17. TF 快速回顾: 核心概念 • Tensor 封装同一类型数据的高维数组,承载数据的流动 • Operation 封装对 Tensor 进行计算的逻辑,如矩阵乘法 matmul • Graph 以 Operation 等为 Node,Tensor 等为 Edge 构成的 有向无环图(DAG) • Session Graph 运行时的上下文控制 *Rosetta 目前基于 TF 1.14版本,以下介绍均基于此版本

18.TF 快速回顾: 宏观处理过程 • 前向图 用户调用算子API(或更上层API)时自动构建 z = tf.matmul(x, y) + b • 反向(梯度)图 在训练中调用优化器(Optimizer)的minimize接口 时,TF 找到前向图中各算子对应的梯度算子,根据链 式求导法则则自动的添加反向梯度子图 • 图的并行化执行 在调动 tf.Session.run 时进一步分析图、优化图,并 最终在当前上下文的控制下在多设备上有序并发执行

19.TF 快速回顾:对自定义算子的扩展支持 使用 Custom C++ op 扩展方式的好处: • 表达更加复杂的逻辑 • 更高效的进行内部实现

20.TF 快速回顾:对自定义算子的扩展支持 使用 Custom C++ op 扩展方式的步骤: 1. 在 C++中注册新 Op 2. 用 C++实现 Op 的内部逻辑,即“kernel” 3. 将两者映射关系绑定到具体某一种设备上 4. Python 层通过接口引入此动态库

21.Rosetta 整体架构设计思路 以自定义算子(Operation) SecureOp 为核心抽象 • 连接起对于 TF 前后端的改造 • 实现后端隐私协议开发和AI框架的解耦 借鉴程序编译器领域中 Pass 的概念 • 将原生 TF API 构建的数据流图自动、动态的 转换为多方协同运行的MPC程序

22.Rosetta 整体处理过程 替换原生算子,构建支持密文Tensor的前向图 tf.matmul 以算子为核心对象,结合Pass分阶段转换 import包 rtt.rtt_matmul Session.run入口 HelixOps.Matmul rtt.SecureMatMul Kernel 执行时 rtt.SecureMatMulGrad SnnOps.Matmul 构建完整的前向图和反向图 根据上下文选择对应的隐私协议算子进行多方协同计算

23.处理过程详解: 基于 Static Pass 构建图 • import rosetta时 替换原生算子为对应的 RttOp,以构建支持密文 Tensor 的前向图 RttOp: 与后端MPC隐私计算完全无关的辅助中间层, 一系列的“浮标”置位算子,支持自定义Tensor类型 静态 hook 原生TF算子到 RttOp Tensor 替换为自定义 RttTensor

24.处理过程详解: 基于 Static Pass 构建图 • 调用 session.run 时 SecureOp: > 前向图:将 RttOp 进一步替换为对应的 SecureOp 完整的前后端算子库,具有对应的梯度算子;在内部实 现中调用隐私协议层的抽象算子接口实现和 TF 的对接 替换规则: 只要 Op 输入的 Tensor 不全是本地 const 明文值时就进行替换 Static pass

25.处理过程详解: 基于 Static Pass 构建图 • 调用 session.run 时 SecureOp: > 前向图:将 RttOp 进一步替换为对应的 SecureOp 完整的前后端算子库,具有对应的梯度 算子;在内部实现中调用隐私协议层的 > 反向图:如果程序中调用了优化器 Optimizer,通过 抽象算子接口实现和 TF 的对接 我们对 TF 中自动求导机制的改造,仍可自动得到梯度 反向图 自动求导改造方案: 在 tf.python.ops.gradients_util 等入口处 hook 原生 函数,使得支持 tf.string 类型的自动求导

26.处理过程详解: 基于 Dynamic Pass 执行图 • 初始化 在Session.run 前调用 activate 接口选择后端隐 私计算协议,以完成多方网络连接等的初始化 # 调用activate接口会根据配置参数或配置文件建立起网络 rtt.activate(protocol_name="SecureNN")

27.处理过程详解: 基于 Dynamic Pass 执行图 • 动态后端协议执行 执行图时,SecureOp 内部根据上下文调用此时 的隐私协议的后端接口,实际的进行分布式多方 运行 动态隐私协议绑定的实现方案: SecureOp 的 kernel 实现中调用统一协议 层的基类接口,不依赖具体协议内部实现 *X 表⽰⽤户选定的MPC协议

28.处理过程详解: 基于 Dynamic Pass 执行图 • 多方协同的分布式执行 从整体视角看,各方同步执行相同的图 > 本地:“密文”数据在 DAG 图上从前向后流动 > 协同:“密文”数据在多方之间按协议进行通信 *X 表⽰⽤户选定的MPC协议

29.Rosetta的实际应用场景:多数据源融合训练  智慧金融 - 联合的用户信用评分卡 - 金融行为数据 + 电商数据 - 提高风控模型准确性