【隐私计算】tf-encrypted隐私计算框架/库基础

tf-encrypted介绍

在这里插入图片描述

TF Encrypted是TensorFlow中一个用于加密机器学习的框架,它看起来和感觉上都很像TensorFlow,利用了Keras API 的易用性,同时通过安全多方计算和同态加密实现了对加密数据的训练和预测。TF Encrypted的目标是使保护隐私的机器学习变得可用,而不需要密码学、分布式系统或高性能计算方面的专业知识。
同时,现在TF Encrypted已经完全支持tensorflow2,使代码更加清晰明了。

tf-encrypted隐私计算库的安装

tf-encrypted最直接的安装方式:

pip install tf-encrypted

但是这个方式已经不能用了,会出现报错,比如:

'NoneType' object has no attribute 'secure_seed'

取而代之的方式是直接git clone这个仓库,流程如下:

安装python版本为3.8的conda环境

conda create -n tfe python=3.8

激活环境

conda activate tfe

下载tf-encrypted仓库

git clone https://github.com/tf-encrypted/tf-encrypted.git

进入tf-encrypted仓库

cd tf-encrypted

安装所需依赖包

pip install -e .

需要注意:tensorflow版本必须>=2.9.1,否则可能出现如下报错:

ImportError: cannot import name 'glob_stateful_parallelism' from 'tensorflow.python.ops.while_v2'

编译tf-encrypted仓库

make build

执行后会先下载一个压缩包,如果执行太慢,可以尝试手动执行下载:

curl -ol https://github.com/jedisct1/libsodium/archive/1.0.17.tar.gz

编译到最后可能出现如下问题:
在这里插入图片描述
原因就是系统中g++的版本过低,需要升级,以至少支持g++14版本。

tf-encrypted使用示例

加载tf-encrypted库
由于此时我们没有在Python环境中安装tf-encrypted,因此需要手动载入这个库:

sys.path.append('/home/zwx/tf-encrypted')
import tf_encrypted as tfe

官网提供的矩阵乘法示例

import tensorflow as tf
import sys
sys.path.append('/home/zwx/tf-encrypted')
import tf_encrypted as tfe@tfe.local_computation('input-provider')
def provide_input():# normal TensorFlow operations can be run locally# as part of defining a private input, in this# case on the machine of the input providerreturn tf.ones(shape=(2, 5))# provide inputs
w = tfe.define_private_variable(tf.ones(shape=(5, 3)))
print('w:', w)
print('w_plaintext:', w.reveal(), '\n', w.reveal().to_native())
x = provide_input()
print('x:', x)
print('x_plaintext:', x.reveal(), '\n', x.reveal().to_native())# eager execution
y = tfe.matmul(x, w)
res = y.reveal().to_native()# build graph and run graph
@tfe.function
def matmul_func(x, w):y = tfe.matmul(x, w)print('y_ciphertext:', y)return y.reveal().to_native()res = matmul_func(x, w)
print('res:\n', res)

在这里插入图片描述

代码重点:

  • 使用修饰器@tfe.local_computation(‘input-provider’)将输入封装成private类型
  • 使用tfe.define_private_variable()定义private类型的变量
  • 对于private类型的x,使用x.reveal()将其解密得到public类型数据,使用x.reveal().to_native()可以提取具体的明文值
  • 当直接打印private类型的数据时,share_type中显示了秘密分享的类型,比如上图中的arithmetic,即算术秘密分享
  • 现在tf-encrypted均基于tensorflow2,无需考虑和tensorflow1不兼容的问题

官网提供的简单神经网络示例

import tensorflow as tf
import sys
sys.path.append('/home/zwx/tf-encrypted')
import tf_encrypted as tfe@tfe.local_computation('prediction-client')
def provide_input():# normal TensorFlow operations can be run locally# as part of defining a private input, in this# case on the machine of the input providerreturn tf.ones(shape=(5, 10))x = provide_input()model = tfe.keras.Sequential([tfe.keras.layers.Dense(512, batch_input_shape=x.shape),tfe.keras.layers.Activation('relu'),tfe.keras.layers.Dense(10),
])# get prediction input from client
logits = model(x)result = logits.reveal()
print('result:', result, '\n', result.to_native())

在这里插入图片描述

神经网络推理

在/examples/benchmark/inference文件中给出了隐私推理的示例。
首先进入tf-encrypted的根目录下(因为跑推理的脚本里需要tf_encrypted.player):

cd /tf-encrypted

然后执行命令跑基于协议的模型推理:

./examples/benchmark/inference/run-remote.sh resnet50  --protocol ABY3 --config ./examples/benchmark/inference/config.json

注意路径要正确,不然是跑不通的!
参数选择:

model_name: resnet50, densenet121, vgg19
protocol: ABY3, Pond, SecureNN
precision: 64-bit by default (可以改成high使用128-bit)
config: IP的配置(感觉暂时不用管)

执行命令,可以得到这6个文件:

在这里插入图片描述

不过,可能会遇到如下的报错:

attr {key: "explicit_paddings"value {list {}}
}
raise ValueError(
ValueError: Could not infer attribute explicit_paddings type from empty iterator

不用着急,这个问题是框架在转tf模型时出现的onnx库错误,通过查阅tensorflow-onnx官方文档,知道了这个问题的原因是onnx版本过高的问题。

在这里插入图片描述

解决方案:将onnx版本降级到1.14.1即可:pip install onnx==1.14.1

再次执行推理命令,可以在log_master.txt中看到如下的输出日志信息:

在这里插入图片描述

从这个日志文件中能得到什么信息?

  • Plain model predcited和predicted中各个类别的概率分布是接近的
  • 应该能分别看出构建graph和推理的时间(暂时还不太清楚怎么看)

在这里插入图片描述

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

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

相关文章

关东升老师从小白到大牛系列丛书(由清华大学出版社出版)

助力技术成长,成就大牛之路 在这个科技日新月异的时代,掌握一门编程语言或专业技能已是必备,不再是奢侈。清华大学出版社出版的“从小白到大牛”的系列丛书,涵盖Python、Java、Kotlin、Android和SQL,助你快速在技术之…

严世芸龟法养生经

文章目录 严世芸理念荤素搭配,不偏嗜动静结合心平气和 龟息法 严世芸 严世芸,出生于1940年,现任上海中医药大学的主任医师,教授。他父亲是近代上海有名的中医,他又是著名医家张伯臾的亲传弟子。 从小就在父亲诊室里长…

PO 对象被锁定

问题描述 在创建PO对象的时候,由于上次电脑断网导致PO连接中断,但服务器中登录用户还在占用PO对象,需要手动在POD中删除锁对象才可编辑 解决方案 登录到POD页面,点击右上角Administration 点击Lock Overview,查看…

营销投放下半场,游戏行业如何寻觅进化空间?

摘要:微博,游戏行业突围市场新利器 游戏行业,格局永远在变。 从2017年互联网大厂集体盯上游戏大蛋糕,到2021年行业收缩,再到今年上半年实际销售收入继去年首次出现同比下滑…几经过山车式行情的游戏行业,…

加密友好不意味容易!亚洲地区实施了世界上最严格的加密规定!

2023年的一大主题是亚洲作为加密货币世界中至关重要的地区的持续崛起。这在很大程度上要归功于新加坡等著名的数字资产中心,以及香港和日本的重新崛起。 虽然这些司法管辖区确实欢迎数字资产,但围绕它们的炒作可能会有些误导,加密友好并非意味…

【AI】如何准备mac开发vue项目的环境

为了在Mac上开发Vue项目,你需要准备一些工具和环境。以下是主要的步骤: 安装Node.js和npm: Vue.js是一个基于JavaScript的框架,因此你需要Node.js环境。访问Node.js官网下载并安装Node.js,这也会自动安装npm&#xff0…

玩转大数据18:大规模数据处理与分布式任务调度

引言 在数字化时代,数据成为了一种宝贵的资源,对于企业和组织来说,如何有效地处理和分析这些数据成为了关键的竞争力。大规模数据处理与分布式任务调度作为大数据处理的核心技术,为解决这一问题提供了有效的解决方案。 随着数据…

赛宁网安多领域亮相第三届网络空间内生安全发展大会

2023年12月8日,第三届网络空间内生安全发展大会在宁开幕。两院院士、杰出专家学者和知名企业家相聚南京,围绕数字经济新生态、网络安全新范式进行广泛研讨,为筑牢数字安全底座贡献智慧和力量。 大会围绕“一会、一赛、一展”举办了丰富多彩的…

vue实现滑动验证

效果图: 源码地址:github文档地址: https://github.com/monoplasty/vue-monoplasty-slide-verify 使用步骤:1,安装插件: npm install --save vue-monoplasty-slide-verify 在main.js中使用一下&#xff…

wgcloud访问页面如何加前缀/wgcloud

nginx配置实现加/wgcloud - WGCLOUD

网络层--TCP/UDP协议

目录 一、TCP/UDP协议介绍 1、UDP(User Datagram Protocol)--用户数据报协议 1.1 UDP报文格式 1.2 UDP协议的特性 2、TCP(Transmission Control Protocol )--传输控制协议 2.1 TCP报文格式 2.2 TCP协议的特性 2.3 TCP三次握手 2.4 四次挥手 三、TCP和UDP的区别 四、t…

Vue3-17-ref 模板引用的基本使用

什么是模板引用 简单来说,就是在 js 代码中 获取到 html 中的dom元素的完整信息, 从而实现直接操作dom元素的效果。模板引用的语法 1、给 dom 元素添加 ref名称 属性,指定一个独有的名称; 2、js 中 声明一个 与 dom 元素的 ref 同…

Find My钥匙扣|苹果Find My技术与钥匙扣结合,智能防丢,全球定位

钥匙扣,又称锁匙扣,钥匙圈,钥匙链,钥匙挂等。制作钥匙扣的材料一般为金属、皮革、塑料、木头等。此物精致小巧、造型千变万化是人们每天随身携带的日常用品。钥匙扣是挂在钥匙圈上的一种装饰物品。最新的智能钥匙扣还具有防丢查找…

如何做好企业数据管理

国际数据管理协会(DAMA)将数据管理定义为“管理数据生命周期的体系结构、策略、实践和程序的开发”。 简言之,数据管理就是以经济、安全和高效的方式收集、保存和使用数据的过程。 数据管理可帮助人员、企业和互联事物优化数据使用&#xff…

在线双目测宽仪 实时监测 在线分析

板材轧制生产中不可缺少宽度在线检测设备,有很多种类型,如光电平行光测宽、光电广角测头测宽、光电平行光广角测宽、激光测宽、机器视觉测宽、机器视觉双目测宽等。根据产线、价格及需求不同,进行不同类型的测宽仪定制,本文主要介…

蓝凌EIS智慧协同平台 SQL注入漏洞复现

0x01 产品简介 蓝凌EIS智慧协同平台是一款专为企业提供高效协同办公和团队合作的产品。该平台集成了各种协同工具和功能,旨在提升企业内部沟通、协作和信息共享的效率。 0x02 漏洞概述 由于蓝凌EIS智慧协同平台 UniformEntry.asp接口处未对用户输入的SQL语句进行…

广州华锐互动:VR煤矿安全操作规程实训提升矿工安全意识与技能

随着科技的不断发展,虚拟现实(VR)技术已经逐渐渗透到各个领域,为人们的生活带来了极大的便利。在煤矿行业,VR技术的应用也日益受到重视,尤其是在煤矿安全检查方面。为了提高矿工的安全意识和技能&#xff0…

Unity中实现ShaderToy卡通火(原理实现篇)

文章目录 前言一、我们在片元着色器中,实现卡通火的大体框架1、使用 noise 和 _CUTOFF 判断作为显示火焰的区域2、_CUTOFF : 用于裁剪噪波范围的三角形3、noise getNoise(uv, t); : 噪波函数 二、顺着大体框架依次解析具体实现的功能1、 uv.x * 4.0; : …

yolov8实战第二天——yolov8训练结果分析(保姆式解读)

yolov8实战第一天——yolov8部署并训练自己的数据集(保姆式教程)-CSDN博客 我们在上一篇文章训练了一个老鼠的yolov8检测模型,训练结果如下图,接下来我们就详细解析下面几张图。 一、混淆矩阵 正确挑选(正确&#…

C#串口通讯

在C#写串口通讯小程序时,可以使用System.IO.Ports命名空间提供的SerialPort类。下面是一个简单的例子,包含了一个基本的UI,用于设置串口参数和进行通讯。这里使用了Windows Forms(WinForms)来创建UI。 步骤&#xff1…