【SecretFlow——SPU进阶】

1. 姚氏百万富翁问题

除了三方协议ABY3之外,我们还可以通过配置cluster_def中的protocol更换不同的协议。

import spu
import secretflow as sfsf.shutdown()
sf.init(['alice', 'bob', 'carol', 'dave'], address='local')
# 生成一个环境
cheetah_config = sf.utils.testing.cluster_def(parties=['alice', 'bob'],runtime_config={'protocol': spu.spu_pb2.CHEETAH,'field': spu.spu_pb2.FM64,},
)
# 创建一个基于alice和bob的SPU设备
spu_device2 = sf.SPU(cheetah_config)
# 获取carol的资产,只要最后可以返回一个值即可
def get_carol_assets():return 1000000
# 获取dave的资产,只要最后可以返回一个值即可
def get_dave_assets():return 1000002
# 创建两个PYU设备
carol, dave = sf.PYU('carol'), sf.PYU('dave')
# 生成两个PYUObject
carol_assets = carol(get_carol_assets)()
dave_assets = dave(get_dave_assets)()
# 设置比较函数
def get_winner(carol, dave):return carol > dave
# 将函数和相应的参数放入SPU设备执行
winner = spu_device2(get_winner)(carol_assets, dave_assets)
sf.reveal(winner)

2.从SPU计算得到多个返回值

在大多数情况下,我们从 SPU 设备执行的函数中获得多个返回值。
博主个人比较喜欢第二种

def get_multiple_outputs(x, y):return x + y, x - y
# 方式一:默认情况下会将其包装成元组的形式
# (array(2000002, dtype=int32), array(-2, dtype=int32))
single_output = spu_device2(get_multiple_outputs)(carol_assets, dave_assets)# 方式二:指示 SPU 为我们根据编译结果决定返回值数量。(推荐这一种)
# 返回对象的列表
multiple_outputs = spu_device2(get_multiple_outputs, num_returns_policy=SPUCompilerNumReturnsPolicy.FROM_COMPILER
)(carol_assets, dave_assets)
# 方式三:手动确定返回值数量
user_multiple_outputs = spu_device2(get_multiple_outputs,num_returns_policy=SPUCompilerNumReturnsPolicy.FROM_USER,user_specified_num_returns=2,
)(carol_assets, dave_assets)user_multiple_outputs

3. 总结一下

  • 默认情况下,SPU 将所有返回值视为单个返回值。
  • 由于 SPU 编译器生成 SPU 可执行文件,它可以计算出返回值数量。 但是,这个选项会导致一些延迟,因为我们必须使编译工作阻塞。
  • 如果您想避免延迟,我们可以手动提供返回值数量。 但是你必须确保你提供了正确的数字,否则程序会报错!

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

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

相关文章

奇富科技推出新一代全自研智能语音模型,打破沟通壁垒

“您好!请问是李先生噻?” 李先生刚接起电话,就被这熟悉的乡音逗乐了。这不是他所预料的常规客服,而是奇富科技新一代全自研智能语音模型——QI语精灵。这款模型不仅能用方言与人自然交流,还能在智能营销、贷后提醒、风…

NodeJS 在Windows / Mac 上实现多版本控制

NodeJS 的多版本控制 本文介绍一下在 windows/MacOS 上 如何 切换和使用多个版本的 NodeJS。 Windows 本小节介绍一下在windows上管理不同版本的NodeJS。 nvm-windows 工具 nvm-windows 是在 windows 上管理 NodeJS 版本的一个工具。 它可以很方便的 下载、移除、查看、切…

【数据结构与算法】力扣 24. 两两交换链表中的节点

题目描述 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入: head [1,2,3,4] 输出&#…

二维相位解包裹理论算法和软件【全文翻译- 相位数据、质量地图、掩码和滤波器:引言 (3.1)】

3.1 引言 在本章中,我们将介绍七个示例,说明相位解包的性质和挑战。这些示例将在第 4 章和第 5 章中用于评估一些相位解缠算法。在本章中,我们还将研究可以从相位数据中提取的信息(相位导数和残差除外),以改进相位解包过程。这些信息将用于定义 "质量图",即表…

在 HTML 中禁用 Chrome 浏览器的 Google 翻译功能

方法1 在 html 标签中添加 translate“no” 属性&#xff0c;浏览器将不会翻译整个页面。 <!DOCTYPE html> <!-- 添加以下 html 标签中添加 translate"no" 属性 --> <html translate"no"> <head><meta charset"UTF-8&qu…

IDEA2023创建SpringMVC项目

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 开发环境篇 ✨特色专栏&#xff1a; M…

Android 全局配置Gradle依赖及插件仓库

全局配置gradle依赖及插件仓库之后就不需要每个项目来一次国内仓库替换了。 直接在.gradle文件夹下添加文件init.gradle / init.gradle.kt for kotlin dsl. 如果同时存在init.gradle和init.gradle.kt&#xff0c;则优先按照init.gradle中的配置 除非手动指定初始化脚本 --in…

java.awt.FontFormatException: java.nio.BufferUnderflowException

Font awardFont Font.createFont(Font.TRUETYPE_FONT, awardFontFile).deriveFont(120f).deriveFont(Font.BOLD);使用如上语句创建字体时出现问题。java.awt.FontFormatException: java.nio.BufferUnderflowException异常表明在处理字体数据时出现了缓冲区下溢&#xff08;Buf…

Spring Boot实现Filter解决跨域问题

Filter&#xff08;过滤器&#xff09;是 Java Web 开发中的一种重要组件&#xff0c;用于在 Servlet 容器中对请求进行预处理或后处理&#xff0c;以及对响应进行处理。Filter 通常用于实现一些与请求和响应相关的功能&#xff0c;如身份验证、日志记录、字符编码转换、跨域请…

Linux使用docker集群部署

目录 一&#xff0c;环境准备 1.1.安装docker 1.2.配置镜像就加速器 二&#xff0c;docker部署 2.1.创建网络 ​编辑 2.2.安装redis 2.3.安装MySQL 2.4.安装JDK,TomCat及部署后台项目 2.5.安装Nginx及配置静态资源 一&#xff0c;环境准备 1.1.安装docker 安装yum-u…

windows访问wsl中的docker

1、启动windows路由转发功能&#xff1a; 找到任务管理器 --》服务–》打开服务–》 ROUTing and Remote Access 2、关闭wsl中linux的防火墙 3、查看docker系统和linux系统的ip和网关 以下面为例 # docker系统 eth0: flags4163<UP,BROADCAST,RUNNING,MULTICAST> mtu…

Spring Boot-01-通过一个项目快速入门

官方参考文档&#xff1a;Spring Boot Reference Documentation 0. 概述 Spring的缺点&#xff1a; 1. 配置繁琐&#xff1a;虽然Spring的组件代码是轻量级&#xff0c;但它的配置却是重量级的。 2. 依赖繁琐&#xff1a;项目的依赖管理也是一件耗时耗力的事情。分析要导入哪…

qt MVC软件设计模式

在Qt中使用MVC&#xff08;Model-View-Controller&#xff09;软件设计模式可以帮助你将数据模型、用户界面和控制逻辑有效地分离&#xff0c;从而使得代码更清晰&#xff0c;更易于维护和扩展。以下是在Qt中使用MVC模式的一般思路&#xff1a; Model&#xff08;模型&#xff…

动手学深度学习 | Jupyter Notebook 打开指定目录

目录 1 下载课件代码 2 在目录中打开 3 展示目录失败 3.1 问题分析 3.2 问题解决 ⚠️ 写在前面&#xff1a; 无语子&#xff0c;打开个目录花了我一天时间下文中提到的 “d2l-zh” 和 “pytorch” 均为目录名jupyter notebook 的安装请参考其它博客 1 下载课件代码…

传入标签 sql按标签筛选数据 数据必须符合标签

可以使用 SQL 的 WHERE 子句来按标签筛选数据。以下是一个示例 SQL 查询语句&#xff1a; SELECT * FROM 表名 WHERE 标签字段 要筛选的标签;其中&#xff0c;表名是要从中筛选数据的表的名称&#xff0c;标签字段是包含标签值的字段的名称&#xff0c;要筛选的标签是希望筛选…

计算机出现msvcr110.dll丢失是什么意思?七种方法解决msvcr110.dll丢失

msvcr110.dll文件是一个动态链接库&#xff08;DLL&#xff09;文件&#xff0c;由Microsoft Corporation开发。它是Visual C Redistributable for Visual Studio 2012的必要部分&#xff0c;包含了C运行时库函数的代码&#xff0c;这些函数为执行C/C应用程序提供了基础服务。这…

基于Socket简单的TCP网络程序

⭐小白苦学IT的博客主页 ⭐初学者必看&#xff1a;Linux操作系统入门 ⭐代码仓库&#xff1a;Linux代码仓库 ❤关注我一起讨论和学习Linux系统 TCP单例模式的多线程版本的英汉互译服务器 我们先来认识一下与udp服务器实现的不同的接口&#xff1a; TCP服务器端 socket()&…

设置你的第一个React应用

目录 一、React入门 1.1 你好React 1.2 创建React 1.3 应用结构 二、总结 2.1 定义组件 2.2 组件源码 三、组件详解 注意事项 3.1 组件三部曲 3.2 组件通信 —— props 3.3 对象数组迭代 —— map() 3.4 事件处理 3.5 钩子函数 —— useState() 初次学习最终效果…

最长上升子序列2

最长上升子序列2 时间限制&#xff1a;1秒 内存限制&#xff1a;64M 题目描述 给定一个长度为 N 的数列&#xff0c;求数值严格单调递增的子序列的长度最长是多少。 输入描述 第一行包含整数 N。 第二行包含 N 个整数&#xff0c;表示完整序列。 输出描述 输出一…

wireshark数据流分析学习日记day3-从 Pcap 导出对象

从 HTTP 流量导出文件 过滤http请求 发现get请求上传了两个文件 保存即可 也可以保存网页 点击保存 改文件名为html结尾以便于访问 请谨慎使用此方法。如果从 pcap 中提取恶意 HTML 代码并在 Web 浏览器中查看它&#xff0c;则 HTML 可能会调用恶意域&#xff0c;这就是为什么…