首页
/ SecretFlow生产模式下PSI任务执行问题分析与解决方案

SecretFlow生产模式下PSI任务执行问题分析与解决方案

2025-07-01 18:24:34作者:凤尚柏Louis

背景介绍

SecretFlow作为一款隐私计算框架,在生产环境部署时可能会遇到各种配置问题。本文针对用户在使用SecretFlow-lite 1.5.0b0版本执行生产模式PSI任务时遇到的"Error: No available node types can fulfill resource request"错误进行深入分析,并提供完整的解决方案。

问题现象

用户在两台机器(机器A和机器B)上部署SecretFlow生产环境时,执行PSI任务出现以下错误提示:

Error: No available node types can fulfill resource request {'CPU': 1.0, 'bob': 1.0}

同时,用户还提出了三个具体疑问:

  1. 如何解决上述资源请求错误
  2. Ray集群启动流程的正确顺序
  3. 生产模式下多机协同执行的时序要求

问题根因分析

经过技术分析,该问题主要由以下几个因素导致:

  1. 资源配置不当:SecretFlow在生产模式下需要明确指定各参与方的计算资源,而用户配置中缺少必要的资源声明。

  2. 初始化流程错误:用户混淆了模拟模式(local)和生产模式的初始化方式,错误使用了'local'作为address参数。

  3. 网络连接问题:日志显示节点间存在连接问题,表明网络配置可能存在问题。

解决方案

1. 正确的Ray集群启动方式

生产模式下,必须先在每台机器上独立启动Ray服务,然后再初始化SecretFlow。

机器A执行命令

ray start --head --node-ip-address="53.192.24.15" --port="65343" \
--include-dashboard=False --disable-usage-stats \
--resources='{"alice": 8}'

机器B执行命令

ray start --head --node-ip-address="12.244.69.40" --port="60106" \
--include-dashboard=False --disable-usage-stats \
--resources='{"bob": 8}'

关键点说明:

  • --resources参数必须明确指定各方的资源配额
  • 端口号需与后续配置保持一致
  • IP地址需使用机器真实IP

2. 正确的SecretFlow初始化方式

机器A初始化代码

cluster_config = {
    'parties': {
        'alice': {
            'address': '53.192.24.15:65343',
            'listen_addr': '0.0.0.0:65343'
        },
        'bob': {
            'address': '12.244.69.40:60106',
            'listen_addr': '0.0.0.0:60106'
        }
    },
    'self_party': 'alice'
}

sf.init(address='53.192.24.15:65343', cluster_config=cluster_config)

机器B初始化代码

cluster_config = {
    'parties': {
        'alice': {
            'address': '53.192.24.15:65343',
            'listen_addr': '0.0.0.0:65343'
        },
        'bob': {
            'address': '12.244.69.40:60106',
            'listen_addr': '0.0.0.0:60106'
        }
    },
    'self_party': 'bob'
}

sf.init(address='12.244.69.40:60106', cluster_config=cluster_config)

关键点说明:

  • address参数必须使用Ray服务的真实地址,不能使用'local'
  • 配置中的端口号必须与Ray启动命令一致

3. 执行时序要求

生产模式下,多机协同执行的时序要求如下:

  1. Ray服务启动:各机器可独立启动Ray服务,无严格时序要求。

  2. SecretFlow初始化:各方的sf.init()调用应当尽可能同步执行,允许有30秒左右的误差。若一方长时间未启动,另一方会持续重试(默认3600次)。

  3. PSI任务执行:必须在所有参与方都成功初始化SPU后才能执行,需要严格同步。

完整PSI任务示例

import spu
import secretflow as sf
from pathlib import Path

# SPU配置
cluster_def = {
    "nodes": [
        {
            "party": "alice",
            "address": "53.192.24.15:37267",  # 注意使用SPU专用端口
        },
        {
            "party": "bob",
            "address": "12.244.69.40:58817",  # 注意使用SPU专用端口
        }
    ],
    "runtime_config": {
        "protocol": spu.spu_pb2.SEMI2K,
        "field": spu.spu_pb2.FM128,
    },
}

# 初始化SPU
spu = sf.SPU(
    cluster_def,
    link_desc={
        "connect_retry_times": 60,
        "connect_retry_interval_ms": 1000,
    }
)

# 执行PSI
spu.psi(
    keys={"alice": ["name"], "bob": ["name"]},
    input_path={
        "alice": f"{str(Path.home())}/alice_psi_input.csv", 
        "bob": f"{str(Path.home())}/bob_psi_input.csv"
    },
    output_path={
        "alice": f"{str(Path.home())}/alice_psi_output.csv", 
        "bob": f"{str(Path.home())}/bob_psi_output.csv"
    },
    receiver="alice",
    broadcast_result=True,
    protocol="PROTOCOL_ECDH",
    ecdh_curve="CURVE_25519"
)

总结

SecretFlow生产环境部署需要注意以下关键点:

  1. 必须预先在各节点独立启动Ray服务,并正确配置资源
  2. 初始化时必须使用真实网络地址,不能使用'local'
  3. 网络配置中的端口必须与实际使用端口一致
  4. 多机协同执行允许有一定时间误差,但关键步骤需要保持同步
  5. SPU配置需要使用专用通信端口,不能与Ray服务端口冲突

通过以上配置调整,可以成功解决"Error: No available node types can fulfill resource request"错误,并顺利完成生产环境下的PSI任务执行。

登录后查看全文
热门项目推荐

热门内容推荐

最新内容推荐

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
178
262
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
868
514
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
130
183
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
272
311
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
398
373
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.07 K
0
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
93
15
note-gennote-gen
一款跨平台的 Markdown AI 笔记软件,致力于使用 AI 建立记录和写作的桥梁。
TSX
83
4
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
599
58
GitNextGitNext
基于可以运行在OpenHarmony的git,提供git客户端操作能力
ArkTS
10
3