Eggroll 用于机器学习的高性能计算框架开源项目

我要开发同款
匿名用户2021年09月09日
55阅读
开发技术Java
所属分类人工智能、机器学习/深度学习
授权协议Apache-2.0

作品详情

Eggroll是用于机器学习的简单高性能计算框架。

构建和部署Eggroll1.环境初始化1.1.环境要求操作系统CentOS7.2工具依赖安装yum源工具:gccgcc-c++makeautoconfigopenssl-develsupervisorgmp-develmpfr-devellibmpc-devellibaionumactlautoconfautomakelibtoollibffi-devsnappysnappy-develzlibzlib-develbzip2bzip2-devellz4-devellibasan操作用户用户名: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

gitclone-bv2.xhttps://github.com/WeBankFinTech/Eggroll.gitcdEggrollshdeploy/auto-packaging.sh

方式二:从webank-ai云直接拉取

wgethttps://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/eggroll-v2.x-init.tar.gzmveggroll-v2.x-init.tar.gzeggroll.tar.gz3.部署发送3.1.解压

将eggroll.tar.gz移到或发送到Eggroll的安装目录下,然后执行:

tar-xzfeggroll.tar.gz

将eggroll.tar.gz解压后,其目录结构如下:

|--bin--存放eggroll自带启动脚本|--conf--存放eggroll配置文件(包含部署需要修改文件)|--data--存放数据库初始化及缓存文件|--deploy--存放部署相关文件|--lib--存放eggroll所有jar包|--python--存放eggrollpython代码部分3.2.修改配置文件

配置文件一共有三个需要修改:

|--conf|----eggroll.properties|----route_tabe.json|----create-eggroll-meta-tables.sql

各配置文件修改说明如下:

修改eggroll.properties配置文件viconf/eggroll.properties<--数据库配置选项说明:eggroll提供两种数据库连接方式:1、项目自带h2数据库,适用于单节点部署,使用此方式则以下几项jdbc配置无需修改,使用原有默认配置即可;2、安装的mysql8.0数据库,建议集群版多节点使用,若使用此方式则需要按如下方式进行修改配置。-->eggroll.resourcemanager.clustermanager.jdbc.driver.class.name=com.mysql.cj.jdbc.Drivereggroll.resourcemanager.clustermanager.jdbc.url=jdbc:mysql://数据库服务器ip:端口/数据库名称?useSSL=false&serverTimezone=UTC&characterEncoding=utf8&allowPublicKeyRetrieval=trueeggroll.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路由信息viconf/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.sql3.3.多节点部署

按上述说明修改完配置文件后,若集群内需多节点部署,由于各节点的配置文件完全相同,将其打包发送到集群各个节点的Eggroll安装目录下即可。

4.添加元信息

集群多节点之间的服务之间是通过查询数据库存储的元信息来感知的,因此需要登录数据库服务器对数据库初始化并插入节点信息,在数据库中执行以下sql步骤:

登录数据库执行:<--此处注意使用create-eggroll-meta-tables.sql文件的绝对路径-->>>sourceEggroll安装目录/conf/create-eggroll-meta-tables.sql;<--将集群内所有节点clustermanager和nodemanager服务信息插入server_node表中-->>>INSERTINTOserver_node(host,port,node_type,status)values('clustermanager服务ip','clustermanager服务端口','CLUSTER_MANAGER','HEALTHY');>>INSERTINTOserver_node(host,port,node_type,status)values('nodemanager服务ip','nodemanager服务port','NODE_MANAGER','HEALTHY');

执行完成执行查询server_node表检查数据是否准确:

>>select*fromserver_node;>>exit5.服务启动

Eggroll的bin目录中附带启动脚本bin/eggroll.sh使用说明:

shbin/eggroll.sh$1$2<--$1:需要执行操作的服务名称,例如clustermanager,nodemanager,rollsite,all(表示所有服务);$2:需要执行的操作,例如start(启动),status(查看状态),stop(关闭),restart(重启)-->

使用例子:

<--启动所有服务-->shbin/eggroll.shallstart<--查看clustermanager服务状态-->shbin/eggroll.shclustermanagerstatus<--重启rollsite服务-->shbin/eggroll.shrollsiterestart<--关闭nodemanager服务-->shbin/eggroll.shnodemanagerstop

将各节点对应的服务启动成功后,部署完成,进入测试步骤。

6.测试6.1.初始化环境变量

登录服务器进行测试时需要执行以下语句进行环境变量初始化

exportEGGROLL_HOME=Eggroll安装绝对路径--例如/data/projects/eggrollexportPYTHONPATH=${EGGROLL_HOME}/pythonsourcevirtualenv/bin/activate--进入virtualenv独立环境6.2.roll_pair测试cd${EGGROLL_HOME}/python/eggroll/roll_pair/testpython-munittesttest_roll_pair.TestRollPairStandalone--单机模式python-munittesttest_roll_pair.TestRollPairCluster--集群模式

等待执行完成出现"OK"字段为成功。

6.3.roll_site测试通信测试

(a).guest方执行

cd${EGGROLL_HOME}/python/eggroll/roll_site/testpython-munittesttest_roll_site.TestRollSiteCluster.test_remote

等待执行完成出现"OK"字段为guest方发送成功。

(b).host方执行

cd${EGGROLL_HOME}/python/eggroll/roll_site/testpython-munittesttest_roll_site.TestRollSiteCluster.test_get

等待执行完成出现"OK"字段为host方接收成功。

多partition通信测试

(a).guest方执行

cd${EGGROLL_HOME}/python/eggroll/roll_site/testpython-munittesttest_roll_site.TestRollSiteCluster.test_remote_rollpair_big

等待执行完成出现"OK"字段为guest方发送成功。

(b).host方执行

cd${EGGROLL_HOME}/python/eggroll/roll_site/testpython-munittesttest_roll_site.TestRollSiteCluster.test_get_rollpair_big

等待执行完成出现"OK"字段为host方接收成功。

rollpair通信测试

(a).guest方执行

cd${EGGROLL_HOME}/python/eggroll/roll_site/testpython-munittesttest_roll_site.TestRollSiteCluster.test_remote_rollpair

等待执行完成出现"OK"字段为guest方发送成功。

(b).host方执行

cd${EGGROLL_HOME}/python/eggroll/roll_site/testpython-munittesttest_roll_site.TestRollSiteCluster.test_get_rollpair

等待执行完成出现"OK"字段为host方接收成功。

至此测试完成。

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论