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

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

2025-07-01 10:35:44作者:凤尚柏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任务执行。

登录后查看全文

项目优选

收起
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
471
465
kernelkernel
deepin linux kernel
C
32
16
atomcodeatomcode
Claude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get Started
Rust
2.09 K
218
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
700
1.4 K
docsdocs
暂无描述
Dockerfile
780
5.08 K
pytorchpytorch
Ascend Extension for PyTorch
Python
758
968
flutter_flutterflutter_flutter
本仓库是 Flutter SDK 与 Flutter Engine 的 OpenHarmony 适配版本,由 CPF-Flutter 团队维护。开发者可使用熟悉的 Flutter 技术栈开发 OpenHarmony 应用,3.35.7 及以后的适配版本可基于本仓库源码构建支持 OpenHarmony 的 Flutter Engine。
Dart
1.04 K
271
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
880
2.03 K
mindquantummindquantum
MindQuantum is a general software library supporting the development of applications for quantum computation.
Python
183
111
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
1.11 K
682