Centos8下源码编译安装运行Primihub
参考文献
- 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 --enablerepo=PowerTools 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 --version
redis环境安装
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 redis
2. 编译
cd primihub
./pre_build.shmake linux_x86_64
编译过程中问题总结
问题1:提示 WORKSPACE_CN 找不到
解决方法是直接将WORKSPACE_CN中的内容贴到WORKSPACE中。
问题2:github无法访问的问题
解决方法:
- 使用代理
- 或将
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拷贝到该机器上。
问题4:cannot 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
问题5: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(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
编译完成之后,重新编译primihub:make 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_0"model: "csv"source: "data/train_party_0.csv"- description: "test_party_0"model: "csv"source: "data/test_party_0.csv"- description: "breast_0"model: "csv"source: "data/FL/wisconsin.data"# MNIST test case datasets- description: "test_party_0_self"model: "csv"source: "data/falcon/dataset/MNIST/input_0"- description: "test_party_0_next"model: "csv"source: "data/falcon/dataset/MNIST/input_1"# FL homo lr test case datasets- description: "homo_lr_data"model: "csv"source: "data/FL/homo_lr/breast_cancer.csv"- description: "train_homo_lr"model: "csv"source: "data/FL/homo_lr/train_breast_cancer.csv"# PSI test case datasets for sqlite database- description: "psi_client_data_db"model: "sqlite"table_name: "psi_client_data"source: "data/client_e.db3"# Dataset authorization# authorization:# - node:# task:# PSI test caset datasets- description: "psi_client_data"model: "csv"source: "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)任务
相关文章:
Centos8下源码编译安装运行Primihub
参考文献 PrimiHub 本地编译启动How to install Bazel on CentOS 8 Linux or Redhat 8/7 编译启动步骤 由于历史原因,服务器是Centos8操作系统,所以源码编译异常的麻烦。特此记录如下。 采用源码编译方式可以在一步步的运行过程中对整个流程进行深刻…...
嘉兴桐乡考证培训-23年教资认定注意事项你知道吗?
又到了新的一年了,去年错过认定的同学们可以竖起耳朵啦~ 每年认定机会有两次,大部分省份一般上半年下半年各一次。 问:在校生可以认定么? 答:可以,但有年级限制:本科生大四最后一学期…...
oracle客户端的安装教程
文章目录 一、安装前的准备工作 1.1、百度网盘安装包的连接 1.2、百度网盘oracle11g软件包 二、oracle数据库客户端的安装与数据的准备 安装步骤 前言 本文主要讲解oracle客户端的安装与简单使用过程 一、安装前的准备工作 1.1、百度网盘安装包的连接 客户端的软件包 …...
python 文件操作 , 异常处理 , 模块和包
文件操作 1.写数据 # open(name, mode) # name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。 # mode:设置打开文件的模式(访问模式):只读、写入、追加等。 #1.打开文件---通道建立--申请资源 # w 模式会清空之前的内…...
AIGC技术研究与应用 ---- 下一代人工智能:新范式!新生产力!(1-简介)
文章大纲 AI GC简介决策式/分析式AI(Discriminant/Analytical AI)和生成式AI (Generative AI)参考文献与学习路径模型进化券商研报陆奇演讲AI GC 《我,机器人》中所演绎的一样,主角曾与机器人展开了激烈的辩论,面对“机器人能写出交响乐吗?”“机器人能把画布变成美丽…...
Flask restful分页接口实现
1.先定义一个工作信息表: 指定一些相关的字段:工作名称、年限、级别等 class Work(db.Model):__tablename__ = workid = db.Column(db.Integer, primary_key=True)workName = db.Column(db.String(5),nullable=False)year = db.Column(db.String(20), nullable=False)level = …...
27事务管理AOP
一、MySQL事务回顾 二、Spring事务管理 Spring框架的第一大核心:IOC控制反转 在DeptServiceImpl下删除部门方法下新加一个删除员工信息的操作,注意:此时的id是部门id。 1、问题分析 2、Transactional-Spring事务管理 一般是在Service实现类的…...
煤矿电子封条实施方案 yolov7
煤矿电子封条实施方案采用YOLOv7网络模型算法技术,煤矿电子封条实施算法模型过将全国各省矿山实时监测数据,实现对全国各矿山及时有效的处理及分析。YOLOv7 的发展方向与当前主流的实时目标检测器不同,研究团队希望它能够同时支持移动 GPU 和…...
Linux-inode和block概述
操作系统的文件数据除了实际内容之外,通常含有非常多的属性,例如Linux操作系统的文件权限与文件属性。文件系统通常会将这两部分内容分别存放在inode和block中。 inode 和 block 概述 文件是存储在硬盘上的,硬盘的最小存储单位叫做扇区sect…...
安卓开发投屏反控实现方式
在安卓开发中,可以通过MediaProjection API来实现屏幕投屏的功能,同时也可以通过Socket通信实现反控功能。下面将详细介绍实现步骤和注意事项。 1. 创建MediaProjectionManager对象 首先,我们需要创建一个MediaProjectionManager对象&#…...
外网SSH远程连接linux服务器「cpolar内网穿透」
✨个人主页:bit me👇 目 录 视频教程🌴1. Linux CentOS安装cpolar☘️2. 创建TCP隧道🎍3. 随机地址公网远程连接🎋4. 固定TCP地址🎄5. 使用固定公网TCP地址SSH远程 转载自内网穿透工具的文章:无…...
Deferred Components-实现Flutter运行时动态下发Dart代码 | 京东云技术团队
导读 Deferred Components,官方实现的Flutter代码动态下发的方案。本文主要介绍官方方案的实现细节,探索在国内环境下使用Deferred Components,并且实现了最小验证demo。读罢本文,你就可以实现Dart文件级别代码的动态下发。 一、…...
08 集合框架1
什么是数据结构? 存储数据,组织数据的方法,就是对数据做增删改查的操作 常见的数据结构有哪些?各自的优缺点是什么? 数组:擅长修改 查找操作,不擅长增加 删除操作 链表:有单项链表和双向链表,擅长增加和删除操作,不擅长修改和查找的操作 队列:擅长操作头和尾,先进先出,…...
内卷把同事逼成了“扫地僧”,把Git上所有面试题整理成足足24W字测试八股文
互联网大厂更多的是看重学历还是技术? 毫无疑问,是技术,技术水平相近的情况下,肯定学历高/好的会优先一点,这点大家肯定都理解。 说实话,学弟学妹们找工作难,作为面试官招人也难呀!…...
10-jQuery-遍历children、parent、for、each、for...of等
1、for 循环:可以用来遍历数组或类数组对象,但不能用来遍历普通对象。 <ul><li>John</li><li>Doe</li><li>Jane</li><li>Doe</li> </ul><script>var lis $(li);for (var i 0; i &…...
联想集团财报:收入持续下滑,联想集团财务前景已恶化
来源:猛兽财经 作者:猛兽财经 联想集团2023财年第三季度财务业绩回顾 联想集团(00992)于2023年2月16日盘后公布了该公司2023财年第三季度的财报。 财报显示,联想集团的收入已经从2022财年第三季度的201.27亿美元下降到…...
GPT4限制被破解!ChatGPT实现超长文本处理的新方法
目录 前言 使用chat-gpt过程中有哪些痛点 1.无法理解人类情感和主观性 2.上下文丢失 3.约定被打断 那如何去解决这个痛点 Transformer(RMT)怎么去实现的 1.Transformer 模型 2.RMT模型 3.计算推理速率 4.渐进学习能力 总结 写到最后 大家好…...
奋斗,然后成功:我的架构狮之梦
与代码结缘 2018年,当时听说了一个很厉害的人——吴瀚清老师,也就是大家所熟知的“道哥”。关于他的事情有很多传说,于是我也很快成为了他的小迷弟,把吴瀚清老师当成了自己的偶像。 也是那一年,我买了人生中第一本关…...
自定义属性,v-bind computed的使用
0.0 自定义组件的使用 【掌握】 先自定义自己的组件 引入组件 import 组件名 from 路径/文件名 注册组件 <script> export default {components:{ // 组件注册组件名:组件名,组件名1},data(){ // 数据return {}},methods:{ // 方法} } </script&…...
解决城市内涝的措施有哪些?需要用到哪些监测设备?
随着城市化的不断推进,城市内涝问题日益凸显。极端天气事件如暴雨、台风等对城市基础设施和居民生活造成了严重影响。那么,解决城市内涝的措施有哪些?需要用到哪些监测设备?针对上述问题,本文会为大家一一进行讲解。 解决城市内涝的措施有哪…...
图像滤波实战:理想、巴特沃斯与高斯滤波器的低通/高通实现与性能对比
1. 图像滤波基础与核心概念 第一次接触图像滤波时,我完全被各种专业术语搞晕了。直到自己动手写代码调试,才发现原来这些滤波器就像不同类型的"美颜滤镜"——有的擅长磨皮(低通滤波),有的擅长锐化࿰…...
扩展你的 RAG:基于 Rust 的 LanceDB 和 Candle 索引管道
原文:towardsdatascience.com/scale-up-your-rag-a-rust-powered-indexing-pipeline-with-lancedb-and-candle-cc681c6162e8?sourcecollection_archive---------2-----------------------#2024-07-11 构建大规模文档处理的高性能嵌入和索引系统 https://medium.co…...
SDMatte商业级抠图案例展示:电商平台海量商品图处理实录
SDMatte商业级抠图案例展示:电商平台海量商品图处理实录 1. 开篇:当AI抠图遇上电商实战 电商平台每天要处理成千上万的商品图片,从服装模特到珠宝首饰,每张图都需要完美的展示效果。传统人工抠图不仅成本高,面对促销…...
AnimateDiff超分辨率展示:SD到HD视频质量提升
AnimateDiff超分辨率展示:SD到HD视频质量提升 1. 引言 当你用AnimateDiff生成了一段视频,却发现画面有些模糊、细节不够清晰时,是不是总觉得有些遗憾?这就是超分辨率技术大显身手的时候了。今天我们来聊聊如何通过超分辨率处理&…...
【NOIP】1998真题解析 luogu-P1011 车站 | GESP四、五级以上可练习
NOIP 1998 提高组真题,主要考察递推与斐波那契数列规律应用。题目需要对上下车人数的状态进行合理地抽象模拟并求解未知变量。GESP四、五级以上可练习。题目难度⭐⭐☆☆☆,洛谷难度等级普及−。 luogu-P1011 [NOIP 1998 提高组] 车站 题目要求 题目题…...
Ubuntu 20.04 手动升级 OpenSSL 3.x 的完整指南
1. 为什么需要手动升级OpenSSL? Ubuntu 20.04默认安装的是OpenSSL 1.1.1版本,虽然这个版本仍然在维护周期内,但新发布的OpenSSL 3.x系列带来了许多重要改进。我在实际项目中遇到过这样的情况:某个新开发的加密功能必须依赖OpenSSL…...
python py2exe
# 把Python脚本变成Windows可执行文件:聊聊py2exe 如果你写过一些Python脚本,可能会遇到这样的场景:写了个挺实用的小工具,想分享给同事或朋友用,但他们电脑上可能没装Python环境。这时候就需要把.py文件变成.exe可执行…...
从内存寻址到游戏操控:CE逆向分析扫雷核心机制的完整实践
1. 逆向工程入门:为什么选择扫雷作为CE分析对象 逆向工程听起来高大上,但入门其实可以从经典小游戏开始。扫雷作为Windows系统自带游戏,结构简单但机制完整,是学习内存分析的绝佳标本。我第一次用Cheat Engine(CE&…...
NCM音乐格式转换完全指南:从加密困境到自由播放的解决方案
NCM音乐格式转换完全指南:从加密困境到自由播放的解决方案 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 一、问题解析:NCM格式的技术困境与用户痛点 当你下载了喜爱的音乐却发现只能在特定应用中播放&…...
降AI后格式乱了怎么修:Word格式修复操作指南
降AI后格式乱了怎么修:Word格式修复操作指南 上周室友第一次用降AI工具,操作错了好几步,差点浪费机会。觉得有必要写一篇详细教程。 我用的是嘎嘎降AI(www.aigcleaner.com),4.8元一篇,达标率9…...
