0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样使用FHE实现加密大语言模型?

OSC开源社区 来源:Hugging Face 2023-10-19 09:13 次阅读

近来,大语言模型 (LLM) 已被证明是提高编程、内容生成、文本分析、网络搜索及远程学习等诸多领域生产力的可靠工具。

大语言模型对用户隐私的影响

尽管 LLM 很有吸引力,但如何保护好 输入给这些模型的用户查询中的隐私 这一问题仍然存在。一方面,我们想充分利用 LLM 的力量,但另一方面,存在向 LLM 服务提供商泄露敏感信息的风险。在某些领域,例如医疗保健、金融或法律,这种隐私风险甚至有一票否决权。

一种备选解决方案是本地化部署,LLM 所有者将其模型部署在客户的计算机上。然而,这不是最佳解决方案,因为构建 LLM 可能需要花费数百万美元 (GPT3 为 460 万美元),而本地部署有泄露模型知识产权 (intellectual property, IP) 的风险。

Zama 相信有两全其美之法: 我们的目标是同时保护用户的隐私和模型的 IP。通过本文,你将了解如何利用 Hugging Face transformers 库并让这些模型的某些部分在加密数据上运行。完整代码见 此处。

全同态加密 (Fully Homomorphic Encryption,FHE) 可以解决 LLM 隐私挑战

针对 LLM 部署的隐私挑战,Zama 的解决方案是使用全同态加密 (FHE),在加密数据上执行函数。这种做法可以实现两难自解,既可以保护模型所有者知识产权,同时又能维护用户的数据隐私。我们的演示表明,在 FHE 中实现的 LLM 模型保持了原始模型的预测质量。为此,我们需要调整 Hugging Face transformers 库 中的 GPT2 实现,使用 Concrete-Python 对推理部分进行改造,这样就可以将 Python 函数转换为其 FHE 等效函数。

4fbc59ec-6daa-11ee-939d-92fbcf53809c.png

图 1. GPT2 架构;

图 1 展示了由多个 transformer block 堆叠而成的 GPT2 架构: 其中最主要的是多头注意力 (multi-head attention,MHA) 层。每个 MHA 层使用模型权重来对输入进行投影,然后各自计算注意力,并将注意力的输出重新投影到新的张量中。

TFHE 中,模型权重和激活均用整数表示。非线性函数必须通过可编程自举 (Programmable Bootstrapping,PBS) 操作来实现。PBS 对加密数据实施查表 (table lookup,TLU) 操作,同时刷新密文以支持 任意计算。不好的一面是,此时 PBS 的计算时间在线性运算中占主导地位。利用这两种类型的运算,你可以在 FHE 中表达任何子模型的计算,甚至完整的 LLM 计算。

使用 FHE 实现 LLM 的一层

接下来,你将了解如何加密多头注意力 (MHA) 中的一个注意力头。你可以在 此处 找到完整的 MHA 实现代码。

4fc0e372-6daa-11ee-939d-92fbcf53809c.svg

图 2. 在 FHE 中运行 LLM 模型的某些部分

图 2 概述了一个简化的底层实现。在这个方案中,模型权重会被分成两个部分,分别存储在客户端和服务端。首先,客户端在本地开始推理,直至遇到已第一个不在本地的层。用户将中间结果加密并发送给服务端。服务端对其执行相应的注意力机制计算,然后将结果返回给客户端,客户端对结果进行解密并继续在本地推理。

量化

首先,为了对加密值进行模型推理,模型的权重和激活必须被量化并转换为整数。理想情况是使用 训练后量化,这样就不需要重新训练模型了。这里,我们使用整数和 PBS 来实现 FHE 兼容的注意力机制,并检查其对 LLM 准确率的影响。

要评估量化的影响,我们运行完整的 GPT2 模型,并让其中的一个 LLM 头进行密态计算。然后我们基于此评估权重和激活的量化比特数对准确率的影响。

4fd07206-6daa-11ee-939d-92fbcf53809c.png

单注意力头量化的平均 top-k 准确率

上图表明 4 比特量化保持了原始精度的 96%。该实验基于含有约 80 个句子的数据集,并通过将原始模型的 logits 预测与带有量化注意力头的模型的 logits 预测进行比较来计算最终指标。

在 Hugging Face GPT2 模型中使用 FHE

我们需要在 Hugging Face 的 transformers 库的基础上重写加密模块的前向传播,以使其包含量化算子。首先通过加载 GPT2LMHeadModel 构建一个 SingleHeadQGPT2Model 实例,然后手动使用 QGPT2SingleHeadAttention 替换第一个多头注意力模块,代码如下。你可以在 这里 找到模型的完整实现。

self.transformer.h[0].attn=QGPT2SingleHeadAttention(config,n_bits=n_bits)

至此,前向传播已被重载成用 FHE 算子去执行多头注意力的第一个头,包括构建查询、键和值矩阵的投影。以下代码中的 QGPT2 模块的代码见 此处。

classSingleHeadAttention(QGPT2):
"""Classrepresentingasingleattentionheadimplementedwithquantizationmethods."""


defrun_numpy(self,q_hidden_states:np.ndarray):

#ConverttheinputtoaDualArrayinstance
q_x=DualArray(
float_array=self.x_calib,
int_array=q_hidden_states,
quantizer=self.quantizer
)

#Extracttheattentionbasemodulename
mha_weights_name=f"transformer.h.{self.layer}.attn."

#Extractthequery,keyandvalueweightandbiasvaluesusingtheproperindices
head_0_indices=[
list(range(i*self.n_embd,i*self.n_embd+self.head_dim))
foriinrange(3)
]
q_qkv_weights=...
q_qkv_bias=...

#ApplythefirstprojectioninordertoextractQ,KandVasasinglearray
q_qkv=q_x.linear(
weight=q_qkv_weights,
bias=q_qkv_bias,
key=f"attention_qkv_proj_layer_{self.layer}",
)

#Extractthequeries,keysandvales
q_qkv=q_qkv.expand_dims(axis=1,key=f"unsqueeze_{self.layer}")
q_q,q_k,q_v=q_qkv.enc_split(
3,
axis=-1,
key=f"qkv_split_layer_{self.layer}"
)

#Computeattentionmechanism
q_y=self.attention(q_q,q_k,q_v)

returnself.finalize(q_y)

模型中的其他计算仍以浮点形式进行,未加密,并由客户端在本地执行。

将预训练的权重加载到修改后的 GPT2 模型中,然后调用 generate 方法:

qgpt2_model=SingleHeadQGPT2Model.from_pretrained(
"gpt2_model",n_bits=4,use_cache=False
)

output_ids=qgpt2_model.generate(input_ids)

举个例子,你可以要求量化模型补全短语 “Cryptography is a” 。在 FHE 中运行模型时,如果量化精度足够,生成的输出为:

“Cryptography is a very important part of the security of your computer”

当量化精度太低时,您会得到:

“Cryptography is a great way to learn about the world around you”

编译为 FHE

现在,你可以使用以下 Concrete-ML 代码编译注意力头:

circuit_head=qgpt2_model.compile(input_ids)

运行此代码,你将看到以下打印输出: “Circuit compiled with 8 bit-width”。该配置与 FHE 兼容,显示了在 FHE 中执行的操作所需的最大位宽。

复杂度

在 transformer 模型中,计算量最大的操作是注意力机制,它将查询、键和值相乘。在 FHE 中,加密域中乘法的特殊性加剧了成本。此外,随着序列长度的增加,这些乘法的数量还会呈二次方增长。

而就加密注意力头而言,长度为 6 的序列需要 11622 次 PBS 操作。我们目前的实验还很初步,尚未对性能进行优化。虽然可以在几秒钟内运行,但不可否认它需要相当多的计算能力。幸运的是,我们预期,几年后,硬件会将延迟提高 1000 倍到 10000 倍,使原来在 CPU 上需要几分钟的操作缩短到 ASIC 上的低于 100 毫秒。有关这些估算的更多信息,请参阅 此博文。

总结

大语言模型有望使能大量应用场景,但其实现引发了用户隐私的重大关切。在本文中,我们朝着密态 LLM 迈出了第一步,我们的最终愿景是让整个模型完全在云上运行,同时用户的隐私还能得到充分尊重。

当前的做法包括将 GPT2 等模型中的特定部分转换至 FHE 域。我们的实现利用了 transformers 库,用户还能评估模型的一部分在加密数据上运行时对准确率的影响。除了保护用户隐私之外,这种方法还允许模型所有者对其模型的主要部分保密。你可在 此处 找到完整代码。

Zama 库 Concrete 和 Concrete-ML (别忘了给我们的 github 代码库点个星星 ) 允许直接构建 ML 模型并将其转换至等价的 FHE 域,从而使之能够对加密数据进行计算和预测。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计算机
    +关注

    关注

    19

    文章

    6652

    浏览量

    84572
  • python
    +关注

    关注

    51

    文章

    4678

    浏览量

    83476
  • GPT
    GPT
    +关注

    关注

    0

    文章

    302

    浏览量

    14872
  • pbs
    pbs
    +关注

    关注

    0

    文章

    10

    浏览量

    14876

原文标题:使用FHE实现加密大语言模型

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    怎样给文件加密码 #电脑小技巧

    电脑加密加密系统
    学习硬声知识
    发布于 :2022年11月02日 02:23:52

    请问怎样去设计硬件加密系统?

    硬件加密系统的结构是怎样构成的?怎样去设计硬件加密系统?如何对硬件加密系统进行调试?
    发表于 04-30 06:05

    基于CycloneII和MSP430的网络数据加密怎样实现

    加密解密原理及算法是什么?基于CycloneII和MSP430的网络数据加密怎样实现
    发表于 05-08 07:36

    C语言如何实现Hmacsha1的加密

    C语言如何实现Hmacsha1的加密
    发表于 12-02 06:18

    数据加密步骤是怎样的?

    数据加密步骤是怎样的?
    发表于 12-23 08:13

    saber中如何实现template加密

    有关saber中template加密功能的问题,部分原文如下: domono兄,官方网站上说saber有template加密功能,不知如何实现?需要特殊的软件模块支持吗? 关于模型
    发表于 06-18 16:27 29次下载

    Saber中的模型加密工具

    关于模型加密,Saber软件一直都有这个功能,只不过以前需要用户自己手动修改模型代码,并利用软件提供的加密命令实现
    发表于 06-21 09:56 32次下载

    c语言实现des加密算法详细过程

     摘要:DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算。它将64位输入经过一系列变换得到64位的输出。下面我们来看看c
    发表于 12-10 11:28 3.5w次阅读
    c<b class='flag-5'>语言实现</b>des<b class='flag-5'>加密</b>算法详细过程

    IBM正在为企业推出完全同态加密测试服务

    计算巨头IBM正在为企业推出完全同态加密FHE)测试服务。
    的头像 发表于 12-18 10:44 1636次阅读

    IBM正帮助企业提升数据加密能力

    IBM Security 正在启动一项新服务,以将该公司的完全同态加密FHE)技术推广到云端或第三方环境中。FHE 支持在处理或分析时保持加密状态,且 IBM 将为客户提供相应的培训
    的头像 发表于 12-18 11:46 1406次阅读

    IBM打造完全同态加密服务,弥合当前加密解决方案这一关键差距

    2020年 12月,IBM(NYSE:IBM)Security 宣布推出了一项新服务:可为企业提供完全同态加密FHE) 服务,这一新兴技术能够让数据始终保持加密状态,即使在云端或第三方环境中进
    的头像 发表于 12-28 15:59 1305次阅读

    英特尔与DARPA签署了一项以完全同态加密为核心的项目

    英特尔公司(Intel)已作为美国国防高级研究计划局(DARPA)的研究合作伙伴,签署了一项以完全同态加密(fully homomorphic encryption,简称FHE)为核心的项目
    的头像 发表于 03-30 18:13 2202次阅读

    IBM Research 开源加密工具包

    。在某些情况下,一旦它们到达接收者,它们就会被加密到安全受到威胁的程度。正是在这种背景下,全同态加密FHE)技术开始发挥作用。IBM 旨在促进开发人员访问 FHE。 IBM宣布了一个
    的头像 发表于 07-28 11:54 682次阅读
    IBM Research 开源<b class='flag-5'>加密</b>工具包

    腾讯发布混元大语言模型

    腾讯发布混元大语言模型 腾讯全球数字生态大会上腾讯正式发布了混元大语言模型,参数规模超千亿,预训练语料超2万亿tokens。 作为腾讯自研的通用大
    的头像 发表于 09-07 10:23 854次阅读

    语言模型简介:基于大语言模型模型全家桶Amazon Bedrock

    本文基于亚马逊云科技推出的大语言模型与生成式AI的全家桶:Bedrock对大语言模型进行介绍。大语言模型
    的头像 发表于 12-04 15:51 411次阅读