ICML 2024 论文解析:解读量化感知的 Transformer 模型密态推理

news2024/9/21 18:35:40

导语:ICML 国际机器学习大会(International Conference on Machine Learning,简称 ICML)是机器学习领域最重要和最有影响力的学术会议之一。《Ditto: Quantization-aware Secure Inference of Transformers upon MPC(量化感知的 Transformer 模型密态推理)》,在本次投稿中的 9,473 篇有效论文且接收率为27.5%中脱颖而出,顺利中选。本文将详细解读该论文提出的具体技术原理与实现。

Ditto 是针对大模型密态推理场景展开的一个研究工作:

“Ditto can transform to different quantization settings.”

该论文基于 Secretflow-SPU 框架实现了量化感知的 Transformer 模型密态推理,基于安全多方计算技术对大模型推理中的模型参数以及用户输入提供可证安全保护。本文在先前隐语和蚂蚁技术研究院合作的工作 PUMA 基础之上,受到明文场景中常用的量化技术的启发,Ditto 尝试将不同精度的量化运算应用在密态计算领域。然而,由于 cost model 的不同,简单地套用明文量化并不能带来显著的性能提升,甚至是负收益。

针对此问题,Ditto 采用了 layer-wise 静态对偶量化方案,设计并实现了量化感知的编译器,能够自动地根据前端数据类型,执行不同精度的后端密态运算。此外,为了支持密态计算下的数据类型切换,Ditto 提出了新的安全多方计算协议实现相关算子,能够以更高的效率实现密态数据类型的切换,进而带来更优的密态推理性能

一、背景

近年来,预训练的 Transformer 模型技术在视觉识别和自然语言处理等领域的飞速发展,促使它们在机器学习(ML)推理服务中的广泛应用。随着其研究热度不断上升,涉及到的数据安全问题更是一个主要关注点。以 ChatGPT 为例,在基于大模型的在线服务中,模型所有者提供的 API 接收用户提示(Prompt)作为输入并生成相应的回答,作为输出返回给用户。在这一过程需要将用户输入以明文形式发送到服务器,就存在泄露用户敏感信息的风险。一种可行的解决方法是采用密码学的安全多方计算(MPC)对输入进行加密,提供可证安全。

然而,MPC 技术会引入巨大的计算和通信开销,阻碍了基于 MPC 的 Transformer 安全推理的应用。这其中主要有如下几个瓶颈:

  1. 非线性函数(如 GeLU)被频繁调用,但它们在 MPC 中计算代价高昂。

  2. 通常,Transformer 模型包含数百万到数十亿个参数,由于 Transformer 模型的规模巨大,这些开销在 Transformer 中被放大。

针对前一个问题,可以参考相关工作[1][2][3][4],这些研究用对 MPC 更友好的近似函数替代了这些非线性函数。针对后一个问题,已有的一些在明文推理中的实践[5][6]通过量化模型为低位数并采用低位整数运算,从而加速了推理。

然而,明文量化无法简单地结合到 MPC 安全推理中。举例来说,对于 Transformers 中的一个线性层 ,其中,,,是批量大小,和是特征维度。

MPC 上的标准浮点矩阵乘法通常在统一的64位定点数上操作,表示为,而量化矩阵乘法表示为,其中的乘加运算是在32位整数上进行的,是一个量化参数,表示clip操作。如下图所示,在 MPC 中,虽然量化确实减少了位宽,从而降低了点积的通信量,但额外的步骤,如缩放和 clip 操作,会带来较大的额外开销,甚至超过了量化带来的性能提升。

因此,机器学习(ML)和安全多方计算(MPC)两个领域之间存在 cross-domain gaps:

  1. 机器学习专家主要专注于设计精细的量化方法以提高效率,但这些方法可能并不适用于 MPC。在明文量化中,涉及缩放和 clip 操作的数据类型转换(比如和之间的转换)在 MPC 中并不是可以本地直接执行的简单操作。此外,直接应用量化可能会导致显著的模型精度下降。

  2. MPC 专家主要专注于构建高效的底层密码学算法原语,可能并未注意到结合 ML 的视角,使用混合精度量化来提升端到端的安全推理效率。

那么,是否能在不影响模型表现的情况下进行量化感知的高效安全推理呢

为解决上述问题,我们提出了 Ditto,主要提出以下几个技术方案:

  1. MPC 友好的量化机制:提出引入 layer-wise static dyadic quantization(即 layer-wise 定点表示),以避免 CPU 上便宜但在 MPC 中代价高昂的动态量化操作,如 clip 操作。通过按层设置不同量化精度,所需的整体位宽减少,从而降低安全推理的总体开销。

  2. 量化感知的模型蒸馏:利用知识蒸馏对训练好的模型进行量化感知的蒸馏,以对齐安全推理中的行为,保证模型的精度。

  3. 量化感知的安全推理框架:据我们所知,Ditto 是第一个支持量化的安全推理框架。具体来说,逐层量化计算会自动映射到不同数据类型(在 MPC 中则是不同大小的环)上的安全计算。为此,我们提出了优化的 MPC 原语,支持高效的类型转换。

  4. 性能评估:我们在经典 Transformer 模型(Bert 和 GPT2)上评估了 Ditto 执行安全推理的表现。性能从两个指标进行评估:模型精度和效率。实验结果表明,在不显著降低模型精度的情况下可以实现效率提升。与先前的工作相比, Ditto 的速度比 MPCFormer[2] 快3.14 ∼ 4.40倍,比 PUMA[7] 快1.44 ∼ 2.35倍。

接下来,我们详细给出 Ditto 的核心设计与实现。

二、核心设计与实现

1.场景设置 & 安全模型

在此工作中,我们考虑大模型推理场景,其中模型所有者提供训练好的模型,客户端提供推理任务的输入数据。推理计算可以表述为,其中表示模型的参数。

安全目标在于参数和输入数据对除了持有方以外的参与方以及潜在攻击者MPCFormer[2], PUMA[7])类似,我们考虑三方安全外包计算场景。也就是说,我们将模型推理外包给由三个计算方组成的 MPC 系统(模型提供方、客户端也可以充当计算方的角色)。客户端使用 Replicated Secret Sharing(RSS[8])加密并将这些份额发送给相应的计算方。同样,模型所有者加密模型参数并发送给。计算方随后执行安全推理,并获得结果,接着把的所有份额发送给客户端,客户端可以解密得到的明文。

在上述场景中,我们考虑半诚实诚实多数敌手模型。其中不超过一半的计算方可能勾结,并且各个计算方严格遵循协议执行计算,但可能试图通过分析他们接收的消息来窃取敏感信息。

2.整体流程

考虑上述场景以及安全模型,Ditto 的架构如下图所示,核心是机器学习量化和高效的 MPC 计算两者协同设计的两步方案:

  • 第一步(图中左上部分):将模型量化并蒸馏为更 MPC 友好的版本。这一步由模型所有者在本地使用明文计算执行,包括对模型非线性部分的高效近似以及线性部分的 layer-wise 定点数量化。

  • 第二步(图中底部部分):对从第一步中获得的 MPC 友好的模型进行量化感知的安全推理。我们设计了优化的 MPC 原语,以支持量化中的高效基本类型转换。此外,我们对 Secure Processing Unit(SPU)框架进行了改进,能够自动地根据前端定义的数据类型映射到对应的后端 MPC 环表示,并自动添加密态数据类型转换算子,支持不同参数量化计算的转换。

Ditto 整体框架

3.MPC 友好的模型

针对非线性比较运算在 MPC 下是主要的性能瓶颈这一观察,此部分的模型调整主要从三个角度进行:

  1. 避免使用明文中的动态量化:不同于明文中将浮点数量化到 int8,甚至是 int2,int1。在 MPC 中,采用 32 位或 64 位的定点数来进行计算,对于可以量化到低精度的网络层(比如部分线性层),我们使用 32 位的定点数进行计算。不同于 int8,int32 可以提供较大的整数空间,因此可以极大程度上减少出现溢出的情况,进而可以避免执行 clip 操作。

  2. 尽量减少频繁的量化类型转换:明文的量化矩阵乘通常使用 int8 作为输入,中间计算结果 promote 到 int32 进行累加,这在 MPC 下存在一定开销,因此我们避免使用极致的量化表示来避免这部分输入输出的 type conversion。举例来说,对于模型的中间线性层,我们使用统一的 32 位定点数计算,避免频繁的层内类型转换。

  3. 非线性激活函数采用混合精度量化:考虑到部分非线性函数如 Softmax 函数是复合操作,可以拆解为多个子运算,对于 Softmax 的第一步 normalize 输入的子运算,其涉及到比较计算,相对大小关系不会受到精度太大影响,因此可以针对其使用较小位宽的定点数执行,减少整体的开销。

在执行了上述几步的模型改动之后,为了对齐模型表现,我们引入知识蒸馏。如下图所示,模型的前向传播从左边的浮点运算,改造为右边定点数运算逻辑,实现 layer-wise 的量化,同时针对权重 weight 和激活值 activation。采用了经典的蒸馏方法,对齐左右两个模型的 layer-wise 输出以及最后一层输出,确保量化模型的精度。

4. 基于 SPU 的量化感知 MPC 推理

在得到上述量化模型之后,MPC 侧还需要有两个卡点问题解决:

  1. 高效的量化类型转换协议

  2. 编译器自动翻译动态量化类型

针对第一点,我们在论文中给出了详细的 MPC 协议,以及正确性和安全性的推导,感兴趣的同学推荐看下原文,这里就不展开赘述了。

针对第二点,得益于底层的 Secretflow-SPU 框架[9] ,Ditto 能够轻松地从 Huggingface 导入训练好的模型,无缝地由明文推理切换到安全推理。此外,能够将前端的数据类型透传到后端 MPC 协议测。基于此,我们定义了一个前端数据类型和后端 MPC 定点数的映射,如 16 位浮点数对应 32 位定点数,32 位浮点数对应 64 位定点数。SPU 会自动地根据前端类型翻译程序,并采用不同大小的环来执行后端 MPC 计算。此外,在涉及到不同大小的环转换时,会自动调用第一步中的优化的 MPC 类型转换协议,从而打通整体链路,实现量化感知的 MPC 推理。

如下图所示,以 Softmax 函数计算为例,左侧为前端定义的浮点数计算图,Ditto 将其翻译成右侧的定点数计算图,根据前端数据类型,使用不同的定点数表示,比如使用 32 位定点数计算 ,接着使用 64 位定点数计算后续和除法运算,这中间 Ditto 自动调用密态类型转换算子(此例子中为从 FXP32 到 FXP64 的 up cast)进行桥接。

三、实验结果

论文中的实验在一台配备有一个 AMD Ryzen CPU(32核,3.60GHz)和 256GB RAM 的 CentOS 8 机器上进行。我们考虑了两种网络环境:

1)局域网设置,带宽为 5Gbps,RTT 为 0.4ms;

2)广域网设置,带宽为 400Mbps,RTT 为 40ms。

我们使用 Linux 的 tc 工具来模拟上述网络环境。主要的实验指标为:模型精度、模型推理效率和一些扩展性实验。我们选取了 Bert-{base, large} 和 GPT2-{base, medium} 作为实验模型,针对 Bert 测试了在 RTE,CoLA,QQP 和 QNLI 数据集上的表现,针对 GPT2 上测试了在 Wikitext-103 数据集上的 perplexity。

下图分别为模型精度以及模型推理效率的实验结果,看到 Ditto 可以在不显著降低模型可用性的情况下实现密态推理效率的提升,效率相较最新工作提升约 2~4 倍。

更多详细数据可以查看论文原文,以了解更多细节。

四、结论

在本论文中,我们提出了 Ditto,通过结合 MPC 友好的机器学习量化机制和量化感知的 MPC 编译器执行,针对大模型的安全推理,Ditto 减少了整体的通信开销,提高了推理的效率,同时能够保证模型的精度不受太大影响。目前本文的相关代码正在整理中,预计在 SPU 的 GitHub 仓库中开源一个 PoC 分支,相关能力后续将持续集成到 SPU 框架中,敬请期待。

  • 学习文档:欢迎参考《SPU二次开发指北》进行尝试:

    https://github.com/secretflow/spu/blob/main/docs/SPU_gudience.pdf

  • SPU GitHub 指路:

    https://github.com/secretflow/spu

如何系统的去学习大模型LLM ?

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料 包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来

所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包》,扫码获取~

👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享]👈

在这里插入图片描述

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

在这里插入图片描述

四、AI大模型商业化落地方案

img

阶段1:AI大模型时代的基础理解
  • 目标:了解AI大模型的基本概念、发展历程和核心原理。
  • 内容
    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
      - L1.4.1 知识大模型
      - L1.4.2 生产大模型
      - L1.4.3 模型工程方法论
      - L1.4.4 模型工程实践
    • L1.5 GPT应用案例
阶段2:AI大模型API应用开发工程
  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
  • 内容
    • L2.1 API接口
      - L2.1.1 OpenAI API接口
      - L2.1.2 Python接口接入
      - L2.1.3 BOT工具类框架
      - L2.1.4 代码示例
    • L2.2 Prompt框架
      - L2.2.1 什么是Prompt
      - L2.2.2 Prompt框架应用现状
      - L2.2.3 基于GPTAS的Prompt框架
      - L2.2.4 Prompt框架与Thought
      - L2.2.5 Prompt框架与提示词
    • L2.3 流水线工程
      - L2.3.1 流水线工程的概念
      - L2.3.2 流水线工程的优点
      - L2.3.3 流水线工程的应用
    • L2.4 总结与展望
阶段3:AI大模型应用架构实践
  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
  • 内容
    • L3.1 Agent模型框架
      - L3.1.1 Agent模型框架的设计理念
      - L3.1.2 Agent模型框架的核心组件
      - L3.1.3 Agent模型框架的实现细节
    • L3.2 MetaGPT
      - L3.2.1 MetaGPT的基本概念
      - L3.2.2 MetaGPT的工作原理
      - L3.2.3 MetaGPT的应用场景
    • L3.3 ChatGLM
      - L3.3.1 ChatGLM的特点
      - L3.3.2 ChatGLM的开发环境
      - L3.3.3 ChatGLM的使用示例
    • L3.4 LLAMA
      - L3.4.1 LLAMA的特点
      - L3.4.2 LLAMA的开发环境
      - L3.4.3 LLAMA的使用示例
    • L3.5 其他大模型介绍
阶段4:AI大模型私有化部署
  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
  • 内容
    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景
学习计划:
  • 阶段1:1-2个月,建立AI大模型的基础知识体系。
  • 阶段2:2-3个月,专注于API应用开发能力的提升。
  • 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
  • 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的所有 ⚡️ 大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

全套 《LLM大模型入门+进阶学习资源包↓↓↓ 获取~

👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享👈

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1984619.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【中项】系统集成项目管理工程师-第10章 项目整合管理-10.2制订项目管理计划

前言:系统集成项目管理工程师专业,现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试,全称为“全国计算机与软件专业技术资格(水平)考试”&…

【YashanDB数据库】大事务回滚导致其他操作无法执行,报错YAS-02016 no free undo blocks

问题现象 客户将一个100G的表的数据插入到另一个表中,使用insert into select插入数据。从第一天下午2点开始执行,到第二天上午10点,一直未执行完毕。 由于需要实施下一步操作,客户kill重启了数据库,之后数据库一直回…

《清远折叠》,数智广东第一个SPN政务专网故事

今天,越来越多物理世界中的产业,正在与数字世界完成交汇,改变着我们习以为常的生活方式。 比如政务专网,就通过一张专用网络,将物理世界的政府部门与城市居民,在数字世界中“折叠”到一起,让人们…

Weblogic 漏洞

1.弱口令 访问默认用户名:weblogic 密码: Oracle123 点击安装 点击上载文件 将jsp木马打包,改为war,上传,一直下一步,最后点完成,访问99/99.jsp 使用工具连接 2.CVE-2017-3506 使用工具检测&#xff0c…

static的注意事项

总结 /*** ClassName Student* author gyf* Date 2024/8/5 23:48* Version V1.0* Description : */ public class Student {String name;int age;static String tecname;// 这个this 是虚拟机默认的public void show(Student this){System.out.println(this);System.out.prin…

ASP.NET Core 基础 - Razor Pages Web 应用

目录 一. 创建项目 二. 检查项目文件 三. 添加模型 四. 添加数据 五. 基架 六. 使用数据库 七. 总结 一. 创建项目 新建项目 点击运行 二. 检查项目文件 Pages 文件夹 包含 Razor 页面和支持文件。 每个 Razor 页面都是一对文件: 一个 .cshtml 文件&#xf…

如何白手起家?

作者:明王 日期:2016-07-1121:19 白手起家第一步,不是开公司,是脱离原生家庭,白手起家第二步,不是开公司,是挑个上升行业。白手起家第三步,不是开公司,是攒启动资金,白手起家笔四步&…

php反序列靶场serial

1.安装环境 2.使用kali扫描nat端口 3.使用物理机首先访问80端口,提示这里是新cookie进行程序测试,那我们查看cookie 4.f12查看,是一段base64编码 5.进行目录扫描 6.进入backup子目录发现有压缩包 7.下载bak.zip里面有三个源代码&#xff0…

单机部署ELK + Filebeat 收集应用日志

目录 前言一、ELK是什么?二、系统环境(CentOS 7)(2C4G的机器。。。)三、安装步骤3.1 安装ElasticSearch3.1.1 解压到/usr/local3.1.2 修改jvm堆配置(可选,测试服务器内存低)3.1.3 修…

C++初阶:类和对象(下)

✨✨小新课堂开课了,欢迎欢迎~✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C:由浅入深篇 小新的主页:编程版小新-CSDN博客 1.再探构造函数 1.1构造函数体内赋值 之前…

Parsing error: The keyword ‘interface‘ is reserved配置优化

当我们在创建Vue项目时,Vue默认是配置了eslint代码规范检查的,不过我们在项目中Typescript来编写代码时,却报了标题的错误,对应的代码如下: <script lang="ts"> export default{name: "DlHeader" } </script><script setup lang=&quo…

利用OpenCvSharp进行图像相关操作

前言 程序设计过程&#xff0c;有时也需要对图像进行一些简单操作&#xff0c;C#没有现成的图像处理库&#xff0c;但有人对OpenCV进行了包装&#xff0c;我们可以很方便的使用OpenCvSharp对图像进行操作。当然了&#xff0c;这也需要使用的人员进行一些研究&#xff0c;但相对…

【C语言篇】猜数字游戏(赋源码)

文章目录 猜数字游戏前言随机数生成randsrandtime设置随机数生成范围 猜数字游戏的实现 猜数字游戏 前言 在前两篇博客对于分支和循环语句进行了详细的介绍&#xff1a; 分支语句详解 循环语句详解 我们就可以写一写稍微有趣的代码了&#xff0c;比如&#xff1a; 写一个…

用uniapp 及socket.io做一个简单聊天app 撤回聊天及保留聊天记录 6

撤回的设计 通过聊天&#xff0c;发送一个信息&#xff0c;界面自动将信息撤回&#xff0c; 当时要有时间的限制。同时也要将撤回记录到数据库中。async sendMessage(message, type text) {this.$refs.popup.close();const messageData {sn: uuidv4(),group_name: this.gro…

【MySQL】MySQL9.0发布,有点小失望

前言 &#x1f34a;缘由 MySQL一更新&#xff0c;实在有点闹心 &#x1f3c0;事情起因&#xff1a; 大家好&#xff0c;我是JavaDog程序狗 今天跟大家聊一下MySQL9.0新版本发布&#xff0c;仅代表个人观点&#xff0c;大佬DBA轻喷 &#x1f4d8;『你想听的故事 』 本狗在…

【python】Python中实现定时任务常见的几种方式原理分析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

安全主机软件是如何有效应对暴力破解的?

在网络安全日益严峻的今天&#xff0c;暴力破解作为一种常见的攻击手段&#xff0c;时刻威胁着企业和个人的账户安全。为了有效抵御这一威胁&#xff0c;主机安全作为一款集实时监测、智能分析、风险预警于一体的主机安全软件&#xff0c;通过多维度、智能化的防护策略&#xf…

便携式气象监测系统的功能与应用

在科技日新月异的今天&#xff0c;气象监测作为农业生产、城市规划、环境保护及灾害预防等领域不可或缺的一环&#xff0c;正经历着前所未有的变革。其中&#xff0c;便携式气象监测系统的出现&#xff0c;如同一股清新的风&#xff0c;吹散了传统气象观测的种种限制&#xff0…

3.达梦数据库基础运维管理

文章目录 前言一、基础数据库管理权限角色管理1.1 DM 系统管理员的类型1.2 角色责则分类 DM 数据库2.1 数据库评估2.2 状态和模式 参考内容 前言 本篇博客为上一篇博客的进阶版&#xff0c;主要针对常规达梦数据库的基本管理上面 一、基础数据库管理 权限角色管理 1.1 DM 系…

【Git企业级开发实战指南②】分支管理、远程操作

目录 一、分支管理1.1理解分支1.2创建分支1.3切换分支1.4合并分支1.5删除分支1.6合并冲突1.7 分支管理策略1.7.1分支策略 1.8bug分支1.9删除临时分支 二、远程操作2.1理解分布式版本控制系统2.2 远程仓库2.2.1 新建远程仓库2.2.2 克隆远程仓库2.2.3向远端仓库推送2.2.4拉取远端…