Comments (19)
看上去你的网络环境已经跑起来了。
SPU需要单独分配ip和端口,sf.utils.testing.cluster_def
是给单机测试用的,里面默认ip是127.0.0.1,你需要自己提供实际的ip,cluster_def的构造可以参考SPU init
from secretflow.
另外还想咨询下:
1、我如何证明运算是B处理的?(例如能否看到一些log)
2、如何保证最终结果只有C能看到?
- 你可以看ray的日志,默认最新的ray日志通常在/tmp/ray/session_latest/logs/raylet.out。比如在bob的机器上,日志里应该可以看到计算任务被调度到bob执行。
- 你的问题是想让B执行,然后只有C能使用计算结果?
- 首先,B、C都是python明文设备,本身结果对计算方是不加密的,所以B肯定能看到计算结果(就存储在B本地)
- 其次,data只是对B计算结果的一个引用,在不执行reveal的情况下,无论alice/carol都无法看到计算结果。所以非必要的情况下不建议使用reveal。
- 最后,如果想让C拿到结果进行后续计算,举一个例子:
c = sf.PYU('carol') # 将data transfer到c data_c = data.to(c) # 示例:c对data执行计算 c(lambda x: x + 1)(data_c)
from secretflow.
ray集群是需要网络双向互通,从ray.status来看,bob/carol节点无法被alice访问。如果网络都是通的,应该可以看到类似下面的信息:
...
0.0/8.0 alice
0.0/8.0 bob
0.0/8.0 carol
...
建议检查下三个节点的网络互通情况。另外,启动bob/carol节点时,如果没有指定--node-ip-address,则ray会默认选择汇报一个ip(猜测大概率是127.0.0.1或者某个内部ip)给alice,alice是无法访通的,可以在启动bob/carol的时候添加参数--node-ip-address=bob/carol的对外ip
from secretflow.
提醒一下,测试时,如果重新启动ray,请记得先执行ray stop命令停止已有的ray集群/节点,避免出现残留的ray进程。
from secretflow.
ray集群是需要网络双向互通,从ray.status来看,bob/carol节点无法被alice访问。如果网络都是通的,应该可以看到类似下面的信息:
... 0.0/8.0 alice 0.0/8.0 bob 0.0/8.0 carol ...建议检查下三个节点的网络互通情况。另外,启动bob/carol节点时,如果没有指定--node-ip-address,则ray会默认选择汇报一个ip(猜测大概率是127.0.0.1或者某个内部ip)给alice,alice是无法访通的,可以在启动bob/carol的时候添加参数
--node-ip-address=bob/carol的对外ip
添加了参数--node-ip-address=bob/carol,但依然是同样的问题(bob/carol上ray start能连接成功,但ray status看不到),bob/carol公网ip都是通的,是需要开通某个端口么?
from secretflow.
另外还想咨询下:
1、我如何证明运算是B处理的?(例如能否看到一些log)
2、如何保证最终结果只有C能看到?
你可以看ray的日志,默认最新的ray日志通常在/tmp/ray/session_latest/logs/raylet.out。比如在bob的机器上,日志里应该可以看到计算任务被调度到bob执行。
你的问题是想让B执行,然后只有C能使用计算结果?
- 首先,B、C都是python明文设备,本身结果对计算方是不加密的,所以B肯定能看到计算结果(就存储在B本地)
- 其次,data只是对B计算结果的一个引用,在不执行reveal的情况下,无论alice/carol都无法看到计算结果。所以非必要的情况下不建议使用reveal。
- 最后,如果想让C拿到结果进行后续计算,举一个例子:
c = sf.PYU('carol') # 将data transfer到c data_c = data.to(c) # 示例:c对data执行计算 c(lambda x: x + 1)(data_c)
感谢,这个data.to学习了
from secretflow.
ray集群是需要网络双向互通,从ray.status来看,bob/carol节点无法被alice访问。如果网络都是通的,应该可以看到类似下面的信息:
... 0.0/8.0 alice 0.0/8.0 bob 0.0/8.0 carol ...建议检查下三个节点的网络互通情况。另外,启动bob/carol节点时,如果没有指定--node-ip-address,则ray会默认选择汇报一个ip(猜测大概率是127.0.0.1或者某个内部ip)给alice,alice是无法访通的,可以在启动bob/carol的时候添加参数
--node-ip-address=bob/carol的对外ip
添加了参数--node-ip-address=bob/carol,但依然是同样的问题(bob/carol上ray start能连接成功,但ray status看不到),bob/carol公网ip都是通的,是需要开通某个端口么?
如果你的网络环境是限定ip + port,则会比较麻烦。ray本身会拉起1个或多个worker进程用来执行计算任务,worker的节点监听端口默认是随机选择一个未使用的端口。比如B的某一个worker使用了端口10000,则A也会去访问这个端口号。
如果要在这种网络环境下跑起来,则需要先限定ray使用的端口号(包括worker进程的端口号),再对每一个端口号开通访问权限。
指定端口号的方法可以查看ray start --help
,示例:
节点A:
下列命令将限定ray使用端口号1,2,3以及4~10。(请自行修改为实际端口)
ray start --head --node-ip-address="ip of a" --port=1 --resources='{"alice": 8}' --object-manager-port=2 --node-manager-port=3 --min-worker-port=4 --max-worker-port=10 --include-dashboard=false --disable-usage-stats
同理节点B会使用端口号2,3以及4~10。
ray start --address="ip:port" --resources='{"bob": 8}' --node-ip-address="ip of b" --object-manager-port=2 --node-manager-port=3 --min-worker-port=4 --max-worker-port=10
from secretflow.
ray集群是需要网络双向互通,从ray.status来看,bob/carol节点无法被alice访问。如果网络都是通的,应该可以看到类似下面的信息:
... 0.0/8.0 alice 0.0/8.0 bob 0.0/8.0 carol ...建议检查下三个节点的网络互通情况。另外,启动bob/carol节点时,如果没有指定--node-ip-address,则ray会默认选择汇报一个ip(猜测大概率是127.0.0.1或者某个内部ip)给alice,alice是无法访通的,可以在启动bob/carol的时候添加参数
--node-ip-address=bob/carol的对外ip
添加了参数--node-ip-address=bob/carol,但依然是同样的问题(bob/carol上ray start能连接成功,但ray status看不到),bob/carol公网ip都是通的,是需要开通某个端口么?
如果你的网络环境是限定ip + port,则会比较麻烦。ray本身会拉起1个或多个worker进程用来执行计算任务,worker的节点监听端口默认是随机选择一个未使用的端口。比如B的某一个worker使用了端口10000,则A也会去访问这个端口号。
如果要在这种网络环境下跑起来,则需要先限定ray使用的端口号(包括worker进程的端口号),再对每一个端口号开通访问权限。
指定端口号的方法可以查看
ray start --help
,示例:节点A: 下列命令将限定ray使用端口号1,2,3以及4~10。(请自行修改为实际端口)
ray start --head --node-ip-address="ip of a" --port=1 --resources='{"alice": 8}' --object-manager-port=2 --node-manager-port=3 --min-worker-port=4 --max-worker-port=10 --include-dashboard=false --disable-usage-stats同理节点B会使用端口号2,3以及4~10。
ray start --address="ip:port" --resources='{"bob": 8}' --node-ip-address="ip of b" --object-manager-port=2 --node-manager-port=3 --min-worker-port=4 --max-worker-port=10
from secretflow.
看上去你的网络环境已经跑起来了。
SPU需要单独分配ip和端口,
sf.utils.testing.cluster_def
是给单机测试用的,里面默认ip是127.0.0.1,你需要自己提供实际的ip,cluster_def的构造可以参考SPU init
明白了,已ok,多谢指教
from secretflow.
看上去你的网络环境已经跑起来了。
SPU需要单独分配ip和端口,
sf.utils.testing.cluster_def
是给单机测试用的,里面默认ip是127.0.0.1,你需要自己提供实际的ip,cluster_def的构造可以参考SPU init
请问有为spu分配IP与端口的示例吗,SPU init
我在启动bob节点时并没有为其设置端口,在上述中需要填写bob节点的address,应该如何填写?
我目前使用的address是bob的ip和alice的端口,具体如下:
import secretflow as sf
import spu
sf.shutdown()
sf.init(address='alice's ip:8881')
alice = sf.PYU('alice')
bob = sf.PYU('bob')
device = sf.SPU({
'nodes': [
{
'party': 'alice',
'id': 'local:0',
# The address for other peers.
'address': 'alice's ip:8881',
# The listen address of this node.
# Optional. Address will be used if listen_address is empty.
'listen_address': ''
},
{
'party': 'bob',
'id': 'local:1',
'address': 'bob's ip:8881',
'listen_address': ''
},
],
'runtime_config': {
'protocol': spu.spu_pb2.SEMI2K,
'field': spu.spu_pb2.FM128,
'sigmoid_mode': spu.spu_pb2.RuntimeConfig.SIGMOID_REAL,
}
})
data1 = alice(lambda x : x)(2).to(device)
data2 = bob(lambda x : x)(2).to(device)
def add(a,b):
return a+b
data = device(add)(data1,data2)
sf.reveal(data)
在reveal时报错:
RayActorError Traceback (most recent call last)
Input In [7], in <cell line: 2>()
1 data = device(add)(data1,data2)
----> 2 sf.reveal(data)
File ~/.pyenv/versions/3.8.12/envs/secretflow/lib/python3.8/site-packages/secretflow/device/driver.py:158, in reveal(func_or_object)
155 value_ref.append(value.device.sk_keeper.decrypt.remote(value.data))
156 value_idx.append(i)
--> 158 value_obj = ray.get(value_ref)
159 idx = 0
160 for i in value_idx:
File ~/.pyenv/versions/3.8.12/envs/secretflow/lib/python3.8/site-packages/ray/_private/client_mode_hook.py:105, in client_mode_hook..wrapper(*args, **kwargs)
103 if func.name != "init" or is_client_mode_enabled_by_default:
104 return getattr(ray, func.name)(*args, **kwargs)
--> 105 return func(*args, **kwargs)
File ~/.pyenv/versions/3.8.12/envs/secretflow/lib/python3.8/site-packages/ray/worker.py:1845, in get(object_refs, timeout)
1843 raise value.as_instanceof_cause()
1844 else:
-> 1845 raise value
1847 if is_individual_id:
1848 values = values[0]
RayActorError: The actor died because of an error raised in its creation task, ray::SPURuntime.init() (pid=21797, ip=172.22.56.85, repr=<secretflow.device.device.spu.SPURuntime object at 0x7fc6d3326c10>)
File "/root/.pyenv/versions/3.8.12/envs/secretflow/lib/python3.8/site-packages/secretflow/device/device/spu.py", line 125, in init
self.link = link.create_brpc(desc, rank)
RuntimeError: what:
[external/yasl/yasl/link/context.cc:140] connect to mesh failed, failed to setup connection to rank=0
stacktrace:
#0 pybind11::cpp_function::initialize<>()::{lambda()#3}::_FUN()+0x7fc728c28ed7
#1 pybind11::cpp_function::dispatcher()+0x7fc728c150cb
#2 PyCFunction_Call+0x43be5a
from secretflow.
看你的代码,8881是给ray使用的端口,spu请使用其他未占用的端口。
from secretflow.
意思是我的两个address应该分别选两个机器上从未被使用过的端口对吗
from secretflow.
对的
意思是我的两个address应该分别选两个机器上从未被使用过的端口对吗
from secretflow.
我按照您所说的进行了修改,现在他卡在reveal出不来结果了
from secretflow.
ray status
======== Autoscaler status: 2022-07-27 15:09:37.487134 ========
Node status
Healthy:
1 node_3ea8b7c406b1f9f8184e262c920e76fafdb953f5544ac32d93b4166c
1 node_ca8f97e020bc3fc6c7833790279f8c9117d5a650f267017150c2c587
Pending:
(no pending nodes)
Recent failures:
(no failures)
Resources
Usage:
2.0/24.0 CPU
1.0/8.0 alice
1.0/8.0 bob
0.00/26.939 GiB memory
0.00/12.732 GiB object_store_memory
这是我的ray status
我两个节点address的ip填写的是各自所在服务器的ip,这是否正确呢
from secretflow.
from secretflow.
只要确保两个ip是互通的应该就没问题。
你的代码我们没法复现你的错误,你那边有错误日志吗?
另外可以检查下ray的日志,通常最新的ray的日志在/tmp/ray/session_latest/logs/目录下,raylet.out和gcs_server.out会可能有用。
from secretflow.
这个问题我解决了 确实是启动ray的时候ip设置的有问题 多谢~
from secretflow.
这个问题我解决了 确实是启动ray的时候ip设置的有问题 多谢~
HI @962209699 我也遇到同样的问题,不知道您是怎么解决的 #112
from secretflow.
Related Issues (20)
- 关于Secretflow进行安全多方计算的疑问 HOT 4
- 基于生产模式部署时,关于“每个机构都需要同时执行代码”的疑问 HOT 2
- 关于隐私求交“ECDH-PSI (3P)”算法的疑问 HOT 4
- 【文档】SPU基础的一个问题: 如何防止另外一个参与方调用sf.reveal HOT 1
- 【文档】真是部署中,数据是怎么传输的 HOT 1
- 【特性】关于秘密共享实现以及数据类型的一些疑问 HOT 2
- 在单机仿真模式中,如何将某一方的输出 到控制台? HOT 2
- 关于TEEU 上手指南仿真模式中的TEEU 安全聚合示例的疑问 HOT 7
- 关于ECDH-PSI (3P)的UML时序图,请老师帮忙审核一下看看是否有问题 HOT 3
- 自定义构建模型中关于forward函数的问题 HOT 1
- SSRegression在两方情况下,每一方有多个物理计算节点,如何提高运行速度 HOT 1
- 有关TEEU硬件支持的问题 HOT 1
- 关于TEEU仿真模式下安全聚合示例的疑问 HOT 1
- 关于向secretpad中集成自定义Component组件前测试的问题 HOT 2
- 关于使用联邦学习框架定义模型时加入批量归一化层(BN)层会报错 HOT 5
- Does secretflow support secret indexing now? HOT 4
- 关于单服务器PIR匿踪查询的疑问 HOT 2
- Why secret indexing doesn't work in this case? HOT 2
- 关于trustflow步骤四使用TrustedFlow复现breast cancer建模中第4步执行可信APP的疑问 HOT 2
- 对于星核杯隐匿查询案例代码运行有关Ray报错 HOT 19
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from secretflow.