SecretFlow & SecretNote 完整安装指南

1. 安装 Conda 环境

1.1 准备工作

复制代码
# 创建安装目录
mkdir -p ~/secretflow-install
cd ~/secretflow-install

# 创建 conda 目录
mkdir conda
cd conda

1.2 下载并安装 Miniconda

复制代码
# 下载 Miniconda 安装脚本(国内用户可使用镜像源)
# 官方源
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

# 或使用清华镜像(国内更快)
# wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh

# 给予执行权限
chmod +x Miniconda3-latest-Linux-x86_64.sh

# 执行安装(交互式安装)
bash Miniconda3-latest-Linux-x86_64.sh

# 或静默安装(自动同意所有选项)
# bash Miniconda3-latest-Linux-x86_64.sh -b -p $HOME/miniconda3

# 安装完成后,激活 conda
source ~/.bashrc  # 或 source ~/.zshrc

# 验证安装
conda --version

1.3 配置 Conda 镜像源(国内用户)

复制代码
# 配置清华镜像源,加速下载
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
conda config --set show_channel_urls yes

# 可选:配置阿里云镜像源
# conda config --add channels https://mirrors.aliyun.com/anaconda/pkgs/main
# conda config --add channels https://mirrors.aliyun.com/anaconda/pkgs/free
# conda config --add channels https://mirrors.aliyun.com/anaconda/cloud/conda-forge

# 更新 conda
conda update conda -y

2. 从源码编译安装 SecretFlow

2.1 创建 Conda 环境

复制代码
# 创建名为 sf 的 Python 3.9 环境
conda create -n sf python=3.9 -y

# 激活环境
conda activate sf

# 验证环境
python --version  # 应该显示 Python 3.8.x
which python      # 应该显示在 conda 环境中

2.2 安装编译依赖

复制代码
# 安装系统依赖(Ubuntu/Debian)
sudo apt-get update
sudo apt-get install -y g++ gcc make cmake git curl wget

# CentOS/RHEL
# sudo yum install -y gcc-c++ make cmake git curl wget

# 安装 Python 构建工具
pip install --upgrade pip
pip install wheel setuptools build

2.3 克隆 SecretFlow 仓库

复制代码
# 返回安装目录
cd ~/secretflow-install

# 克隆 SecretFlow 源码
git clone https://github.com/secretflow/secretflow.git

# 或使用国内镜像(如果 GitHub 访问慢)
# git clone https://gitee.com/secretflow/secretflow.git

cd secretflow

# 查看最新版本(可选)
git tag | sort -V | tail -5
# 如果需要特定版本,可以切换
# git checkout v1.3.0

2.4 编译和构建

复制代码
# 方式1:使用现代 Python 构建工具(推荐)
pip install -e .

# 或方式2:构建 wheel 包
python -m build --wheel

# 或方式3:传统构建方式(如果上面失败)
python setup.py bdist_wheel

# 构建成功后,会在 dist/ 目录生成 wheel 文件
ls dist/
# 输出类似:secretflow-1.3.0-py3-none-any.whl

2.5 安装 SecretFlow

复制代码
# 安装构建好的 wheel 包
pip install dist/*.whl

# 或直接安装(如果上面步骤成功)
# pip install .

# 验证安装
python -c "import secretflow as sf; print(f'SecretFlow version: {sf.__version__}')"

2.6 安装依赖库

复制代码
# 如果安装过程中有依赖问题,可以手动安装
pip install -r requirements.txt

# 安装常用依赖
pip install numpy pandas scikit-learn matplotlib jupyter
pip install ray[default] grpcio protobuf

# 安装 JAX(如果需要 GPU 支持)
# CPU 版本
pip install "jax[cpu]"

# GPU 版本(需要 CUDA)
# pip install "jax[cuda11_cudnn82]" -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html

3. 验证 SecretFlow 安装

3.1 基本验证

复制代码
# 创建测试脚本
cat > test_secretflow.py << 'EOF'
import secretflow as sf
import numpy as np

print("=" * 50)
print("SecretFlow 安装验证")
print("=" * 50)

# 初始化
sf.init(parties=['alice', 'bob'], address='local')
print("✅ SecretFlow 初始化成功")

# 创建设备
alice = sf.PYU('alice')
bob = sf.PYU('bob')
print(f"✅ 设备创建成功: alice={alice}, bob={bob}")

# 测试计算
x = alice(lambda: np.array([1, 2, 3]))()
y = bob(lambda: np.array([4, 5, 6]))()
z = x + y
result = sf.reveal(z)

print(f"✅ 安全计算测试: {result}")
print(f"✅ 预期结果: [5 7 9]")

if np.array_equal(result, np.array([5, 7, 9])):
    print("🎉 SecretFlow 安装验证成功!")
else:
    print("❌ 计算结果不符合预期")

print("=" * 50)
EOF

# 运行测试
python test_secretflow.py

3.2 运行示例

复制代码
# 查看示例
ls examples/

# 运行简单示例
python examples/tutorial/1_hello_world.py

4. 安装 SecretNote

4.1 准备工作

复制代码
# 返回安装目录
cd ~/secretflow-install

# 创建 SecretNote 目录
mkdir secretnote
cd secretnote

4.2 创建 docker-compose.yml

复制代码
version: '2.4' # 如果docker-compose版本较低可以换成2.4
networks:
  test_network:
    external: true

services:
  alice:
    image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/secretflow/secretnote:1.11.0b1
    environment:
      - SELF_PARTY=alice
      - ALL_PARTIES=alice,bob
      - JUPYTER_TOKEN=alice123
          - JUPYTER_PASSWORD=RsdyxjH@2026
    ports:
      - "8090:8888"
    volumes:
      - ./workspace/alice:/home/secretnote/workspace
    command: >
      bash -c "
      echo '当前节点: alice' &&
      echo '等待网络就绪...' &&
      sleep 2 &&
      exec jupyter server \
        --ip=0.0.0.0 \
        --port=8888 \
        --no-browser \
        --ServerApp.token='alice123' \
        --ServerApp.base_url='/alice' \
        --ServerApp.root_dir='/home/secretnote/workspace'
      "
    networks:
      - test_network

  bob:
    image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/secretflow/secretnote:1.11.0b1
    environment:
      - SELF_PARTY=bob
      - ALL_PARTIES=alice,bob
      - JUPYTER_TOKEN=bob456
          - JUPYTER_PASSWORD=RsdyxjH@2026
    ports:
      - "8092:8888"
    volumes:
      - ./workspace/bob:/home/secretnote/workspace
    command: >
      bash -c "
      echo '当前节点: bob' &&
      echo '等待网络就绪...' &&
      sleep 2 &&
      exec jupyter server \
        --ip=0.0.0.0 \
        --port=8888 \
        --no-browser \
        --ServerApp.token='bob456' \
        --ServerApp.base_url='/bob' \
        --ServerApp.root_dir='/home/secretnote/workspace'
      "
    networks:
      - test_network

4.3 创建目录结构和启动脚本

复制代码
#!/bin/bash
echo "启动节点: ${SELF_PARTY}"

# 直接启动 Jupyter,不使用复杂配置
jupyter lab \
    --ip=0.0.0.0 \
    --port=8888 \
    --no-browser \
    --allow-root \
    --NotebookApp.token="${JUPYTER_TOKEN:-''}" \
    --NotebookApp.password='' \
    --NotebookApp.notebook_dir='/workspace'

4.4 启动 SecretNote 集群

复制代码
# 拉取镜像(如果需要)
docker-compose pull

# 启动服务
docker-compose up -d

# 查看状态
docker-compose ps

# 查看日志
docker-compose logs -f alice

# 测试访问
curl -s "http://localhost:8090/secretnote/api?token=alice123"

# 使用命令查看启动情况
 docker-compose logs -f bob
 启动成功后如下图:

4.6 访问信息

复制代码
# 创建访问信息脚本
cat > access_info.sh << 'EOF'
#!/bin/bash
echo "========================================"
echo "SecretNote 集群访问信息"
echo "========================================"

echo -e "\n🔧 服务状态:"
docker-compose ps

echo -e "\n🌐 Alice 节点:"
echo "   地址: http://localhost:8090/secretnote/"
echo "   Token: alice123"
echo "   完整URL: http://localhost:8090/secretnote/?token=alice123"

echo -e "\n🌐 Bob 节点:"
echo "   地址: http://localhost:8092/secretnote/"
echo "   Token: bob456"
echo "   完整URL: http://localhost:8092/secretnote/?token=bob456"

echo -e "\n📁 工作空间:"
echo "   Alice: $(pwd)/workspace/alice"
echo "   Bob:   $(pwd)/workspace/bob"

echo -e "\n🔍 测试连接:"
echo -n "Alice: "
curl -s -o /dev/null -w "%{http_code}" "http://localhost:8090/secretnote/api?token=alice123" && echo " 正常" || echo " 异常"
echo -n "Bob:   "
curl -s -o /dev/null -w "%{http_code}" "http://localhost:8092/secretnote/api?token=bob456" && echo " 正常" || echo " 异常"

echo -e "\n========================================"
EOF

chmod +x access_info.sh
./access_info.sh

5. 管理脚本

5.1 创建管理脚本

bash

复制代码
cat > manage.sh << 'EOF'
#!/bin/bash
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

case "$1" in
    "start")
        echo "启动 SecretNote 集群..."
        cd "$SCRIPT_DIR/secretnote" && docker-compose up -d
        ;;
    "stop")
        echo "停止 SecretNote 集群..."
        cd "$SCRIPT_DIR/secretnote" && docker-compose stop
        ;;
    "restart")
        echo "重启 SecretNote 集群..."
        cd "$SCRIPT_DIR/secretnote" && docker-compose restart
        ;;
    "status")
        echo "集群状态:"
        cd "$SCRIPT_DIR/secretnote" && docker-compose ps
        ;;
    "logs")
        echo "查看日志..."
        if [ -z "$2" ]; then
            cd "$SCRIPT_DIR/secretnote" && docker-compose logs -f
        else
            cd "$SCRIPT_DIR/secretnote" && docker-compose logs -f $2
        fi
        ;;
    "clean")
        echo "清理集群..."
        cd "$SCRIPT_DIR/secretnote" && docker-compose down -v
        echo "清理完成"
        ;;
    "update")
        echo "更新镜像..."
        cd "$SCRIPT_DIR/secretnote" && docker-compose pull
        cd "$SCRIPT_DIR/secretnote" && docker-compose up -d
        ;;
    "access")
        echo "访问信息:"
        cd "$SCRIPT_DIR/secretnote" && ./access_info.sh
        ;;
    *)
        echo "使用方法: $0 {start|stop|restart|status|logs|clean|update|access}"
        echo "  start   启动集群"
        echo "  stop    停止集群"
        echo "  restart 重启集群"
        echo "  status  查看状态"
        echo "  logs    查看日志"
        echo "  clean   清理集群"
        echo "  update  更新镜像"
        echo "  access  查看访问信息"
        exit 1
        ;;
esac
EOF

chmod +x manage.sh

6. 完整安装验证

6.1 验证 SecretFlow

复制代码
# 在 Conda 环境中
conda activate sf
python -c "
import secretflow as sf
print(f'SecretFlow 版本: {sf.__version__}')
print(f'Python 版本: {sf.__version__.python_version if hasattr(sf.__version__, \"python_version\") else \"N/A\"}')
"
正常情况下会返回:
[info] [bigint_spi.cc:79] The default library used for BigInt operations is openssl
SecretFlow 版本: 1.15.0.dev$$DATE$$
Python 版本: N/A
# 运行完整测试
cd ~/secretflow-install/secretflow
python -m pytest tests/ -v -k "test_pyu"

6.2 验证 SecretNote

复制代码
# 打开浏览器访问
echo "请在浏览器中访问:"
echo "1. Alice: http://localhost:8090/secretnote/?token=alice123"
echo "2. Bob:   http://localhost:8092/secretnote/?token=bob456"

# 或在终端测试
curl -s "http://localhost:8090/secretnote/api?token=alice123" | python -m json.tool

7. 故障排除

7.1 常见问题

复制代码
# 1. Conda 环境问题
conda deactivate
conda remove -n sf --all
conda create -n sf python=3.8 -y
conda activate sf

# 2. SecretFlow 编译问题
cd ~/secretflow-install/secretflow
pip install -e . --no-cache-dir

# 3. Docker 权限问题
sudo usermod -aG docker $USER
newgrp docker

# 4. 端口冲突
# 修改 docker-compose.yml 中的端口映射

7.2 卸载和清理

复制代码
# 清理所有
cd ~/secretflow-install
./manage.sh clean
conda deactivate
conda remove -n sf --all -y
rm -rf ~/secretflow-install

总结

安装完成后,您将拥有:

  1. SecretFlow:源码编译安装的隐私计算框架
  2. SecretNote:基于 Docker 的多节点 Jupyter 环境
  3. 两个节点:Alice 和 Bob,可进行隐私计算实验
  4. 完整的管理脚本:方便启动、停止和管理集群
相关推荐
友莘居士5 天前
SecretFlow 2.0 中安全执行计划SEP原理
安全·隐私计算·secretflow
belldeep16 天前
隐私计算技术有哪些?
量化交易·隐私计算
云淡风轻~~2 个月前
对于多方安全计算的中止安全的理解
隐私计算
隐语SecretFlow3 个月前
【隐语SecretFlow用户案例】亚信科技构建统一隐私计算框架探索实践
科技·算法·安全·隐私计算·隐私求交·开源隐私计算
青云交3 个月前
Java 大视界 -- 基于 Java 的大数据隐私计算在医疗影像数据共享中的实践探索
数据加密·数据共享·联邦学习·隐私计算·多方安全计算·java 大数据·医疗影像数据
胡耀超3 个月前
隐私计算技术全景:从联邦学习到可信执行环境的实战指南—数据安全——隐私计算 联邦学习 多方安全计算 可信执行环境 差分隐私
人工智能·安全·数据安全·tee·联邦学习·差分隐私·隐私计算
Nicolas8934 个月前
【数据保护】一种安全高效的全匿踪纵向联邦学习方法
联邦学习·数据保护·隐私计算·全流程加密·全匿踪·anonymfl
云手机周伯通10 个月前
Web3.0隐私计算与云手机的结合
web3.0·隐私计算·云手机·云手机推荐·亚矩阵云手机·亚矩阵·web3.0隐私计算
?Anita Zhang1 年前
蓝象智联携手西电发布GaiaGPT,夯实数据安全底座
数据库·语言模型·隐私计算·数据基础设施·公共数据流通运营平台·蓝象智联·数据冷链