隐私计算实训营第二期笔记|密态引擎SPU框架介绍

梁同学们 2024-06-18 15:02:55

一、为何做SPU

1.1 隐私计算是什么?

(1)大规模模型预测的场景

  1. 模型是公司的资产:公司开发的预测模型代表了宝贵的知识产权。
  2. 提示词包含用户的隐私:用户输入的数据或提示词可能包含敏感的个人信息。

(2)利用隐私计算技术

  1. 模型对用户是加密的:预测模型受保护,模型的敏感信息对用户保密。
  2. 提示词对公司是加密的:用户的提示词是加密的,以保护个人数据和隐私。

(3)好处

这种方法确保了模型和用户提示词的双重保护。

 

 

1.2 为什么需要隐私计算?

(1)数据敏感性

  1. 生物识别信息:包括人脸识别、声音和基因数据。
  2. 金融信息:包括收入、消费和贷款数据。
  3. 法律法规:各国有相应的数据隐私法律,如PISS、GDPR等。

(2)数据的重要性

  1. 核心资产:数据是互联网公司最有价值的资产。
  2. 数据联合价值:多个来源的数据聚合产生巨大价值。

 

1.3 隐私计算的技术路线

(1)隐私保护技术分类

  1. 多方安全计算:确保多个参与方可以共同计算一个函数,而不泄露各自的输入。
  2. 同态加密:允许在加密数据上进行计算,无需先解密数据。
  3. 差分隐私:通过在数据中加入噪声来保护个人隐私,同时保持整体数据的实用性。
  4. 可信硬件:利用安全硬件组件来保护数据。

(2)计算模型

图示展示了一个安全计算函数 f(x, y),接受多个输入(例如来自不同方的输入),并产生一个安全输出 z。

 

 

1.4 加密计算的问题和挑战

(1)加密计算的挑战

  1. 易用性差异:不同加密类型(简单类型 vs. 复杂算法)的易用性存在差异。
  2. 性能差异:使用不同加密方法时性能差异显著。

(2)需要 SPU 的原因

  1. 易用性:SPU 支持原生 AI 框架,便于集成和使用。
  2. 更好的性能:SPU 的编译器在运行时进行优化,提高整体性能。

 

二、SPU简介

2.1 SPU简介 - 前端

(1)编程语言

原生支持主流AI前端:支持TensorFlow、JAX、PyTorch等主流AI框架,降低了学习成本,并能复用AI前端的能力,例如自动求导。

(2)编译器

负责将高层次的AI框架代码转化为低层次的中间表示(Intermediate Representation, IR),再进行优化和生成机器可执行的代码。

(3)运行时

MPC(多方计算)协议:支持多种协议如Semi2k、ABY3、Cheetah,用于不同的安全计算需求。

 

2.2 SPU简介 - 编译器

(1)编程语言和编译器

支持隐私保护领域的IR,优化和降低特定领域的计算复杂度。复用AI编译器的部分优化,提升隐私计算的性能。

(2)隐私保护域 IR(PPHLO和PPLLO)

  1. PPHLO(Privacy-Preserving High-Level Optimizer):高层次优化器,进行平台无关的优化。
  2. PPLLO(Privacy-Preserving Low-Level Optimizer):低层次优化器,进行特定域和MPC协议相关的优化。

(3)编译过程

从高层次IR(PPHLO)到低层次IR(PPLLO)的转换过程,包含特定领域优化和MPC依赖的优化。混合可见性乘法操作数重排序:优化公有和私有数据之间的乘法顺序,提高计算效率。选择谓词重用:优化选择操作,减少不必要的计算。

 

2.3 SPU简介 - 运行时

(1)并行模型支持

  1. 指令并行:同时执行多条指令。
  2. 数据并行:同时处理大量数据。
  3. 多种协议支持:支持多方协议,如两方、三方和多方协议,包括半诚实和恶意模型,以及安全协议的扩展。

(2)优化技术

张量分块:通过将张量划分成小块进行并行处理,提高MPC操作的性能。

(3)多部署模式支持

支持面向虚拟设备编程和一次书写多处执行的部署模式。通过物理布局和虚拟布局的结合,实现数据节点和计算节点的高效分配和管理。

 

2.4 SPU简介 - 一个虚拟加密处理设备

(1)CPU

  1. 特点: 物理存在,通用处理,速度快
  2. 工作方式: 处理数据和代码,直接返回数据

(2)GPU

  1. 特点: 物理存在,支持并行处理,速度非常快
  2. 工作方式: 并行处理数据和代码,返回处理后的数据

(3)SPU

  1. 特点: 虚拟存在,安全处理,速度较慢
  2. 工作方式: 接受多方数据和代码,进行加密处理,返回加密后的数据
  3. 总结: SPU 是一个虚拟设备,强调数据的安全处理。

2.5 SPU简介 - 编程界面

(1)基本使用

  1. 原生AI框架编程: 支持主流AI框架,方便用户上手。
  2. 使用JIT编译执行: 采用即时编译,提高执行效率。
  3. 生态无缝衔接: 与现有生态系统紧密结合,便于集成。

(2)改进安全协议

  1. 优化和错误排查: 提供安全协议的优化方案,并支持错误排查和调试功能。

(3)编程界面示例

代码示例1: 随机数生成和比较函数

功能: 在不同设备上生成随机数,并在SPU上进行比较。

示例代码:

import numpy as np
import jax.numpy as jnp
import spu.utils.distributed as ppd

def rand():
    return np.random.randint(100, size=(1,))

def compare(x, y):
    return jnp.maximum(x, y)

# 生成随机数
x = ppd.device("P0")(rand)()
y = ppd.device("P1")(rand)()

# 在SPU上进行比较
z = ppd.device("SPU")(compare)(x, y)

# 显示结果
print(f"reveal {ppd.get(z)}")

代码示例2: GPT2密态预测

功能: 使用GPT2模型进行文本生成,并在SPU上执行。

示例代码:

def text_generation(input_ids, params, token_num=10):
    config = GPT2Config()
    model = FlaxGPT2LMHeadModel(config=config)
    for _ in range(token_num):
        outputs = model(input_ids=input_ids, params=params)
        next_token_logits = outputs[0][0, -1, :]
        next_token = jnp.argmax(next_token_logits)
        input_ids = jnp.concatenate([input_ids, jnp.array([[next_token]])], axis=1)
    return input_ids

def run_on_spu():
    input_ids = tokenizer.encode("I enjoy walking with my cute dog", return_tensors='jax')
    input_ids = ppd.device("P1")(lambda x: x)(input_ids)
    params = ppd.device("P2")(lambda x: x)(pretrained_model.params)
    output_ids = ppd.device("SPU")(text_generation)(input_ids, params)
return ppd.get(output_ids)

(4)修改SPU配置文件

基本使用:通过修改SPU配置文件,无需代码改动即可更改安全协议。

配置示例:

"SPU": {
    "kind": "SPU",
    "config": {
        "node_ids": ["node:0", "node:1", "node:2"],
        "runtime_config": {
            "protocol": "ABY3",
            "field": "FM64"
        }
    }
}

(5)Profiling与调试

多层级Profiling: 提供详细的函数执行时间和次数,帮助优化性能。

全栈追踪: 支持全栈追踪,便于问题定位。

明文运行调试: 提供明文运行模式,方便调试和测试。

Profiling示例:

[Profiling] function predict, execution took 0.423396238s ...
Detailed pphlo profiling data:
- pphlo.multiply, executed 1 times, duration 0.053121456s
- pphlo.broadcast, executed 1 times, duration 2.485e-06s
- pphlo.dot, executed 1 times, duration 0.35661242s
- ...

三、现状和展望

3.1 开源共建

(1)隐语开源生态

  1. SPU 支持 PPML: 支持隐私保护的机器学习。
  2. SPU 支持联邦学习: 支持分布式机器学习,保护数据隐私。
  3. SPU 支持 SCQL: 支持安全计算查询语言。

(2)重要链接

  1. SecretFlow 项目:一个统一的隐私计算框架,支持多种主流隐私计算技术,包括MPC、FL、TEE、HE和DP等。
  2. https://github.com/secretflow

3.2学术支持

(1)计算机系统

  1. 支持在顶级学术会议上发表关于SPU的研究论文。
  2. 例如,2023年USENIX年度技术会议接收了关于SPU的论文《SecretFlow-SPU: A Performant and User-Friendly Framework for Privacy-Preserving Machine Learning》。

(2)隐私保护机器学习

  1. 北大师生基于SPU实现了针对MPC的Vision Transformers算法优化,论文《MPCViT: Searching for Accurate and Efficient MPC-Friendly Vision Transformer with Heterogeneous Attention》被ICCV2023录用。
  2. 研究项目《Puma: Secure Inference of LLaMA-7B in Five Minutes》展示了7B级大模型的MPC推理。

(3)密码协议创新

  1. 持续探索和创新新的密码协议,以提高隐私计算的效率和安全性。

3.3 构建加密计算生态

(1)SPU的功能

  1. 屏蔽了密码学协议,支持numpy原生编程。
  2. 构建安全的sklearn-like机器学习库。
  3. 构建安全的pandas-like数据分析库。
  4. 支持更多的安全后端,包括SS、GC和FHE。

(2)架构图

  1. 前端:支持numpy。
  2. 系统:编译器和运行时。
  3. 后端:密码学相关组件。

...全文
146 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

558

社区成员

发帖
与我相关
我的任务
社区描述
隐语开源社区,隐私计算开发者交流和讨论的平台。
密码学可信计算技术安全 企业社区
社区管理员
  • 隐语SecretFlow
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

【最新活动】

3月18日:隐私计算实训营第一期

试试用AI创作助手写篇文章吧