做图形的网站,成都网站建设scdzks,高端公司网站,广西传导网络科技有限公司参考文献
PrimiHub 本地编译启动How to install Bazel on CentOS 8 Linux or Redhat 8/7
编译启动步骤
由于历史原因#xff0c;服务器是Centos8操作系统#xff0c;所以源码编译异常的麻烦。特此记录如下。
采用源码编译方式可以在一步步的运行过程中对整个流程进行深刻…参考文献
PrimiHub 本地编译启动How to install Bazel on CentOS 8 Linux or Redhat 8/7
编译启动步骤
由于历史原因服务器是Centos8操作系统所以源码编译异常的麻烦。特此记录如下。
采用源码编译方式可以在一步步的运行过程中对整个流程进行深刻的理解。
1. 编译环境安装
注意Centos8和Centos7有许多区别部分库在centos8上不支持所以安装过程与官方文档有不同地方。
基本环境
需要 python3.8假设python3.8已经安装成功执行下面的安装。
sudo dnf -y install epel-release
sudo dnf -y group install Development Tools
sudo dnf -y install python38-devel gmp-devel libtool ninja-build git npm gcc make
sudo dnf -y --enablerepoPowerTools install ninja-build// 查看libstdc.so.6链接的版本,如果是默认的6.0.19则需要升级版本
ls -l /usr/lib64/libstdc.so.6
wget https://primihub.oss-cn-beijing.aliyuncs.com/tools/libstdc.so_.6.0.26.zip
unzip libstdc.so_.6.0.26.zip
sudo mv libstdc.so.6.0.26 /usr/lib64
sudo rm -f /usr/lib64/libstdc.so.6
sudo ln -s /usr/lib64/libstdc.so.6.0.26 /usr/lib64/libstdc.so.6// Bazel 环境
sudo dnf config-manager --add-repo https://copr.fedorainfracloud.org/coprs/vbatts/bazel/repo/epel-8/vbatts-bazel-epel-8.reposudo dnf -y install bazel5cd /usr/bin sudo curl -fLO https://releases.bazel.build/5.0.0/release/bazel-5.0.0-linux-x86_64 sudo chmod x bazel-5.0.0-linux-x86_64bazel --versionredis环境安装
sudo dnf install redis -y然后修改 /etc/redis/redis.conf 文件中的 requirepass 字段设置 redis 密码该密码需要和 ./config/node*.yaml 文件 redis_password 字段的设置相同。
sudo sed -i s/# requirepass foobared/requirepass primihub/ /etc/redis.conf
// 替换默认端口
sudo sed -i s/port 6379/port 8391/ /etc/redis.conf 启动redis
sudo systemctl start redis2. 编译
cd primihub
./pre_build.shmake linux_x86_64编译过程中问题总结
问题1提示 WORKSPACE_CN 找不到
解决方法是直接将WORKSPACE_CN中的内容贴到WORKSPACE中。
问题2github无法访问的问题
解决方法:
使用代理或将WORKSPACE中的github.com替换为镜像地址比如替换为 gitclone.com/github.com。该方法由于地址不断再更新测试后使用。
方法2设置完之后记得清理bazel的临时文件:
bazel clean --expunge问题3提示某个包下载timeout
重新编译多次尝试执行 make linux_x86_64。实在无法下载在可以FQ的PC端下载好之后上传至错误提示的地方/home/baas/.cache/bazel/_bazel_baas/c4c8cad6a1643b7f6bba3835e75e462e/external/rules_java/temp2465207077681073091/
ERROR: /home/baas/codes/mpc/primihub/BUILD.bazel:69:10: While resolving toolchains for target //:py_main: invalid registered toolchain local_jdk//:runtime_toolchain_definition: no such package rules_java//java: java.io.IOException: Error downloading [https://github.com/bazelbuild/rules_java/archive/981f06c3d2bd10225e85209904090eb7b5fb26bd.tar.gz] to /home/baas/.cache/bazel/_bazel_baas/c4c8cad6a1643b7f6bba3835e75e462e/external/rules_java/temp2465207077681073091/981f06c3d2bd10225e85209904090eb7b5fb26bd.tar.gz: connect timed out如果有许多包都无法下载网络问题可以将另外机器上的临时目录/home/baas/.cache/bazel/_bazel_baas/c4c8cad6a1643b7f6bba3835e75e462e/external拷贝到该机器上。
问题4cannot find -lpython3.7
具体问题
ERROR: /home/baas/codes/mpc/primihub/src/primihub/pybind_warpper/BUILD:23:17: Linking src/primihub/pybind_warpper/opt_paillier_c2py.so failed: (Exit 1): gcc failed: error executing command /usr/bin/gcc bazel-out/k8-fastbuild/bin/src/primihub/pybind_warpper/opt_paillier_c2py.so-2.params问题原因 之前使用python3.7编译过一次结果导致BUILD.bazel文件中LACEHOLDER-PYTHON3.X-CONFIG被替换为了python3.7的参数。 替换脚本参考pre_build.sh的 47 行sed -e s|PLACEHOLDER-PYTHON3.X-CONFIG|${NEWLINE}|g BUILD.bazel BUILD.bazel.tmp mv BUILD.bazel.tmp BUILD.bazel
解决方法
重新替换原始的BUILD.bazel或将BUILD.bazel文件中 LINK_PYTHON_OPTS xxxxxx替换为原始的LINK_PYTHON_OPTS PLACEHOLDER-PYTHON3.X-CONFIG完成步骤1或步骤2之后重新执行 ./pre_build.sh
问题5requires dynamic R_X86_64_32 reloc which may overflow at runtime; recompile with -fPIC
具体问题列表
/usr/bin/ld.gold: error: /usr/local/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.a(abstract.o): requires dynamic R_X86_64_32 reloc which may overflow at runtime; recompile with -fPIC
/usr/bin/ld.gold: error: /usr/local/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.a(boolobject.o): requires unsupported dynamic reloc 11; recompile with -fPIC
/usr/bin/ld.gold: error: /usr/local/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.a(bytearrayobject.o): requires dynamic R_X86_64_32 reloc against _Py_NoneStruct which may overflow at runtime; recompile with -fPIC
......解决方法使用-fPIC重新编译Python3.8后安装
cd /opt/Python-3.8.16 // 我的安装路径
sudo ./configure --enable-optimizations CFLAGS-fPIC
sudo make clean
sudo make altinstall编译完成之后重新编译primihubmake linux_x86_64
3. 接入数据
查看start_server.sh文件中启动各个节点的配置文件在config目录下
- config
|-- node0.yaml
|-- node1.yaml
|-- node2.yaml配置文件中datasets字段设置了其对应的数据集datasets 的字段定义如下
description数据集的唯一可读性名称model: 数据源类型例子中是 csvsource: 数据源在 Node 运行机器上的绝对路径
node0.yaml配置如下
# load datasets
datasets:# ABY3 LR test case datasets- description: train_party_0model: csvsource: data/train_party_0.csv- description: test_party_0model: csvsource: data/test_party_0.csv- description: breast_0model: csvsource: data/FL/wisconsin.data# MNIST test case datasets- description: test_party_0_selfmodel: csvsource: data/falcon/dataset/MNIST/input_0- description: test_party_0_nextmodel: csvsource: data/falcon/dataset/MNIST/input_1# FL homo lr test case datasets- description: homo_lr_datamodel: csvsource: data/FL/homo_lr/breast_cancer.csv- description: train_homo_lrmodel: csvsource: data/FL/homo_lr/train_breast_cancer.csv# PSI test case datasets for sqlite database- description: psi_client_data_dbmodel: sqlitetable_name: psi_client_datasource: data/client_e.db3# Dataset authorization# authorization:# - node:# task:# PSI test caset datasets- description: psi_client_datamodel: csvsource: data/client_e.csv# use mysql table as dataset#- description: psi_client# model: mysql# host: 172.21.1.62# port: 3306# username: root# password: primihub# database: default# dbName: psi# tableName: psi_client# query_index: ID ## [[optional]]4. 运行服务节点
其他配置信息修改见 config/node*.yaml文件。
在代码根目录下执行如下命令
sed -i /PYTHONPATH/d start_server.sh
bash start_server.sh将启动三个服务节点其相关日志分别保存在log_node0, log_node1, log_node2中
5. 创建任务
任务运行参考官方文档即可。
模板任务包括
联邦学习FL任务隐私求教PSI任务匿踪查询PIR任务可信执行环境TEE任务