Eggroll —— 用于机器学习的高性能计算框架
Eggroll 是用于机器学习的简单高性能计算框架。
构建和部署 Eggroll
1. 环境初始化
1.1. 环境要求
操作系统 | CentOS 7.2 |
---|---|
工具依赖 | 安装 yum 源工具:gcc gcc-c++ make autoconfig openssl-devel supervisor gmp-devel mpfr-devel libmpc-devel libaio numactl autoconf automake libtool libffi-dev snappy snappy-devel zlib zlib-devel bzip2 bzip2-devel lz4-devel libasan |
操作用户 | 用户名: app 组:apps |
系统配置 | 1. 挂载300G可用磁盘空间到/data目录 2. 创建/data/projects目录,属主app用户 |
1.2. 安装软件包
集群所有节点都需要安装:jdk1.8、virtualenv独立运行环境(可进入python3.6版本)
数据库节点:mysql8.0
2. 项目拉取及打包
方式一:从github拉取Eggroll项目,通过执行auto-packaging.sh自动打包脚本在同目录下生成eggroll.tar.gz
git clone -b v2.x https://github.com/WeBankFinTech/Eggroll.git cd Eggroll sh deploy/auto-packaging.sh
方式二:从webank-ai云直接拉取
wget https://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/eggroll-v2.x-init.tar.gz mv eggroll-v2.x-init.tar.gz eggroll.tar.gz
3. 部署发送
3.1. 解压
将eggroll.tar.gz移到或发送到Eggroll的安装目录下,然后执行:
tar -xzf eggroll.tar.gz
将eggroll.tar.gz解压后,其目录结构如下:
|--bin --存放eggroll自带启动脚本 |--conf --存放eggroll配置文件(包含部署需要修改文件) |--data --存放数据库初始化及缓存文件 |--deploy --存放部署相关文件 |--lib --存放eggroll所有jar包 |--python --存放eggroll python代码部分
3.2. 修改配置文件
配置文件一共有三个需要修改:
|--conf |----eggroll.properties |----route_tabe.json |----create-eggroll-meta-tables.sql
各配置文件修改说明如下:
- 修改eggroll.properties配置文件
vi conf/eggroll.properties
<--数据库配置选项说明: eggroll提供两种数据库连接方式: 1、项目自带h2数据库,适用于单节点部署,使用此方式则以下几项jdbc配置无需修改,使用原有默认配置即可; 2、安装的mysql8.0数据库,建议集群版多节点使用,若使用此方式则需要按如下方式进行修改配置。--> eggroll.resourcemanager.clustermanager.jdbc.driver.class.name=com.mysql.cj.jdbc.Driver eggroll.resourcemanager.clustermanager.jdbc.url=jdbc:mysql://数据库服务器ip:端口/数据库名称?useSSL=false&serverTimezone=UTC&characterEncoding=utf8&allowPublicKeyRetrieval=true eggroll.resourcemanager.clustermanager.jdbc.username=数据库用户名 eggroll.resourcemanager.clustermanager.jdbc.password=数据库密码 <--eggroll相关配置参数说明: 1、以下包含的路径都是相对Eggroll的实际部署目录之下的相对路径,若不在Eggroll的实际部署目录之下,可用系统绝对路径; 2、根据部署方法分为三个修改级别:需要修改、建议默认、默认即可,其中端口为建议默认但需要根据实际服务器端口是否可用或部署方式来考虑是否修改,以避免端口冲突。--> eggroll.data.dir=data/ <--存放缓存数据目录,默认即可--> eggroll.logs.dir=logs/ <--存放eggroll生成日志目录,默认即可--> eggroll.resourcemanager.clustermanager.host=127.0.0.1 <--clustermanager服务ip地址,需要修改--> eggroll.resourcemanager.clustermanager.port=4670 <--clustermanager服务端口,建议默认--> eggroll.resourcemanager.nodemanager.port=9394 <--nodemanager服务端口:1、部署单机版与clustermanager相同,建议默认;2、部署集群版需修改为其他可用端口,需要修改--> eggroll.resourcemanager.process.tag= <--集群服务标签,对不同集群需要单独指,例如EGGROLL_TAG,需要修改--> eggroll.bootstrap.root.script=bin/eggroll_boot.sh <--eggroll_boot.sh启动脚本路径,默认即可--> eggroll.resourcemanager.bootstrap.egg_pair.exepath=bin/roll_pair/egg_pair_bootstrap.sh <--egg_pair启动脚本路径,默认即可--> eggroll.resourcemanager.bootstrap.egg_pair.venv= <--virtualenv安装路径,需要修改--> eggroll.resourcemanager.bootstrap.egg_pair.pythonpath=python <--python文件路径,也作PYTHONPATH,默认即可--> eggroll.resourcemanager.bootstrap.egg_pair.filepath=python/eggroll/roll_pair/egg_pair.py <--egg_pair.py文件路径,默认即可--> <--以下几项默认即可--> eggroll.resourcemanager.bootstrap.roll_pair_master.exepath=bin/roll_pair/roll_pair_master_bootstrap.sh <--roll_pair_master_bootstrap.sh文件路径--> eggroll.resourcemanager.bootstrap.roll_pair_master.javahome= <--java环境变量,系统安装jdk1.8--> eggroll.resourcemanager.bootstrap.roll_pair_master.classpath=conf/:lib/* <--eggroll启动时读取classpath文件路径--> eggroll.resourcemanager.bootstrap.roll_pair_master.mainclass=com.webank.eggroll.rollpair.RollPairMasterBootstrap <--roll_pair_master主类--> eggroll.resourcemanager.bootstrap.roll_pair_master.jvm.options= <--jvm启动参数--> <--以上几项默认即可--> <--rollsite配置说明:其服务ip、端口与partyId需要与route_table.json配置文件中对应一致--> eggroll.rollsite.coordinator=webank <--rollsite服务标签,默认即可--> eggroll.rollsite.host=127.0.0.1 <--rollsite服务ip,需要修改--> eggroll.rollsite.port=9370 <--rollsite服务端口,建议默认--> eggroll.rollsite.party.id=10001 <--集群partyId,不同集群需要使用不同的partyId,需要修改--> eggroll.rollsite.route.table.path=conf/route_table.json <--route_table.json路由配置文件路径,默认即可-->
- 修改route_table.json路由信息
vi conf/route_table.json
{ "route_table": { "集群一partyId": <--此处需要修改--> { "default":[ { "port": 集群一rollsite服务端口, <--此处需要修改--> "ip": "集群一rollsite服务ip" <--此处需要修改--> } ] }, "集群二partyId": <--此处需要修改--> { "default":[ { "port": 集群二rollsite服务端口, <--此处需要修改--> "ip": "集群二rollsite服务ip" <--此处需要修改--> } ] } }, "permission": { "default_allow": true } }
- 修改数据库初始化sql脚本
<--修改说明:此文件为初始化mysql数据库建表及建库使用的sql脚本,若使用默认数据库名为eggroll_meta则跳过此步骤,若实际需要使用其他库名,可使用以下语句替换为实际的数据库名称,此处数据库名称应与eggroll.properties中所填数据库名称一致--> sed -i "s/eggroll_meta/数据库名称/" conf/create-eggroll-meta-tables.sql
3.3. 多节点部署
按上述说明修改完配置文件后,若集群内需多节点部署,由于各节点的配置文件完全相同,将其打包发送到集群各个节点的Eggroll安装目录下即可。
4. 添加元信息
集群多节点之间的服务之间是通过查询数据库存储的元信息来感知的,因此需要登录数据库服务器对数据库初始化并插入节点信息,在数据库中执行以下sql步骤:
登录数据库执行: <--此处注意使用create-eggroll-meta-tables.sql文件的绝对路径--> >>source Eggroll安装目录/conf/create-eggroll-meta-tables.sql; <--将集群内所有节点clustermanager和nodemanager服务信息插入server_node表中--> >>INSERT INTO server_node (host, port, node_type, status) values ('clustermanager服务ip', 'clustermanager服务端口', 'CLUSTER_MANAGER', 'HEALTHY'); >>INSERT INTO server_node (host, port, node_type, status) values ('nodemanager服务ip', 'nodemanager服务port', 'NODE_MANAGER', 'HEALTHY');
执行完成执行查询server_node表检查数据是否准确:
>>select * from server_node; >>exit
5. 服务启动
Eggroll的bin目录中附带启动脚本bin/eggroll.sh使用说明:
sh bin/eggroll.sh $1 $2 <-- $1:需要执行操作的服务名称,例如clustermanager,nodemanager,rollsite,all(表示所有服务); $2:需要执行的操作,例如start(启动),status(查看状态),stop(关闭),restart(重启) -->
使用例子:
<--启动所有服务--> sh bin/eggroll.sh all start <--查看clustermanager服务状态--> sh bin/eggroll.sh clustermanager status <--重启rollsite服务--> sh bin/eggroll.sh rollsite restart <--关闭nodemanager服务--> sh bin/eggroll.sh nodemanager stop
将各节点对应的服务启动成功后,部署完成,进入测试步骤。
6. 测试
6.1. 初始化环境变量
登录服务器进行测试时需要执行以下语句进行环境变量初始化
export EGGROLL_HOME=Eggroll安装绝对路径 --例如/data/projects/eggroll export PYTHONPATH=${EGGROLL_HOME}/python source virtualenv/bin/activate --进入virtualenv独立环境
6.2. roll_pair测试
cd ${EGGROLL_HOME}/python/eggroll/roll_pair/test python -m unittest test_roll_pair.TestRollPairStandalone --单机模式 python -m unittest test_roll_pair.TestRollPairCluster --集群模式
等待执行完成出现"OK"字段为成功。
6.3. roll_site测试
- 通信测试
(a). guest方执行
cd ${EGGROLL_HOME}/python/eggroll/roll_site/test python -m unittest test_roll_site.TestRollSiteCluster.test_remote
等待执行完成出现"OK"字段为guest方发送成功。
(b). host方执行
cd ${EGGROLL_HOME}/python/eggroll/roll_site/test python -m unittest test_roll_site.TestRollSiteCluster.test_get
等待执行完成出现"OK"字段为host方接收成功。
- 多partition通信测试
(a). guest方执行
cd ${EGGROLL_HOME}/python/eggroll/roll_site/test python -m unittest test_roll_site.TestRollSiteCluster.test_remote_rollpair_big
等待执行完成出现"OK"字段为guest方发送成功。
(b). host方执行
cd ${EGGROLL_HOME}/python/eggroll/roll_site/test python -m unittest test_roll_site.TestRollSiteCluster.test_get_rollpair_big
等待执行完成出现"OK"字段为host方接收成功。
- rollpair通信测试
(a). guest方执行
cd ${EGGROLL_HOME}/python/eggroll/roll_site/test python -m unittest test_roll_site.TestRollSiteCluster.test_remote_rollpair
等待执行完成出现"OK"字段为guest方发送成功。
(b). host方执行
cd ${EGGROLL_HOME}/python/eggroll/roll_site/test python -m unittest test_roll_site.TestRollSiteCluster.test_get_rollpair
等待执行完成出现"OK"字段为host方接收成功。
至此测试完成。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
每日一博 | 基于 Pytorch 的动态卷积复现
【GaintPandaCV导语】 最近动态卷积开始有人进行了研究,也有不少的论文发表(动态卷积论文合集https://github.com/kaijieshi7/awesome-dynamic-convolution),但是动态卷积具体的实现代码却很少有文章给出。本文以微软发表在CVPR2020上面的文章为例,详细的讲解了动态卷积实现的难点以及如何动分组卷积巧妙的解决。希望能给大家以启发。 这篇文章也同步到知乎平台,链接为:https://zhuanlan.zhihu.com/p/208519425 论文的题目为《Dynamic Convolution: Attention over Convolution Kernels》 paper的地址arxiv.org/pdf/1912.0345 代码实现地址,其中包含一维,二维,三维的动态卷积;分别可以用于实现eeg的处理,正常图像的处理,医疗图像中三维脑部的处理等等(水漫金山)。github.com/kaijieshi7/D,大家觉得有帮助的话,可以点个星星。 一句话描述下文的内容:将的大小视为分组卷积里面的组的大小进行动态卷积。如,那么就...
- 下一篇
社区动态|Apache Doris 迎来第 200 位 Contributor !
亲爱的各位 Apache Doris 社区的小伙伴们,我们很高兴地告诉大家,Apache Doris Contributor 数量已经达到 200 了!这是 Apache Doris 发展过程中的一个重要里程碑,感谢每一个让 Apache Doris 更好的你! 从 Apache Doris 开源到现在,我们一直对每一位为 Apache Doris 作出过贡献的社区小伙伴心存感激,正是因为有你的付出,才让 Apache Doris 一步一步成长到今天,成为国内分析型数据库领域的佼佼者之一。也感激每一位 Apache Doris 的用户,有你们才有 Apache Doris 成长的动力,你们是空气、是养分、是照亮 Apache Doris 前进路上的星光。 展望未来,我们将持续努力、致力于把 Apache Doris 打造成世界顶级的分析型数据库产品,希望能帮助更多的社区用户解决数据分析的痛点,希望每一位小伙伴都能从社区中有所收获。 与此同时,我们也希望有更多的小伙伴们与我们一同成长,不论是提交 Issue 或参与讨论、帮助我们打磨产品和丰富功能,或者是修改和完善系统文档,或者是贡献应用...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16