Eggroll是用于机器学习的简单高性能计算框架。
构建和部署Eggroll1.环境初始化1.1.环境要求操作系统CetOS7.2工具依赖安装yum源工具:gccgcc-c++makeautocofigopessl-develsupervisorgmp-develmpfr-devellibmpc-devellibaioumactlautocofautomakelibtoollibffi-devsappysappy-develzlibzlib-develbzip2bzip2-devellz4-devellibasa操作用户用户名:app组:apps系统配置1.挂载300G可用磁盘空间到/data目录2.创建/data/projects目录,属主app用户1.2.安装软件包集群所有节点都需要安装:jdk1.8、virtualev独立运行环境(可进入pytho3.6版本)
数据库节点:mysql8.0
2.项目拉取及打包方式一:从github拉取Eggroll项目,通过执行auto-packagig.sh自动打包脚本在同目录下生成eggroll.tar.gz
gitcloe-bv2.xhttps://github.com/WeBakFiTech/Eggroll.gitcdEggrollshdeploy/auto-packagig.sh方式二:从webak-ai云直接拉取
wgethttps://webak-ai-1251170195.cos.ap-guagzhou.myqcloud.com/eggroll-v2.x-iit.tar.gzmveggroll-v2.x-iit.tar.gzeggroll.tar.gz3.部署发送3.1.解压将eggroll.tar.gz移到或发送到Eggroll的安装目录下,然后执行:
tar-xzfeggroll.tar.gz将eggroll.tar.gz解压后,其目录结构如下:
|--bi--存放eggroll自带启动脚本|--cof--存放eggroll配置文件(包含部署需要修改文件)|--data--存放数据库初始化及缓存文件|--deploy--存放部署相关文件|--lib--存放eggroll所有jar包|--pytho--存放eggrollpytho代码部分3.2.修改配置文件配置文件一共有三个需要修改:
|--cof|----eggroll.properties|----route_tabe.jso|----create-eggroll-meta-tables.sql各配置文件修改说明如下:
修改eggroll.properties配置文件vicof/eggroll.properties<--数据库配置选项说明:eggroll提供两种数据库连接方式:1、项目自带h2数据库,适用于单节点部署,使用此方式则以下几项jdbc配置无需修改,使用原有默认配置即可;2、安装的mysql8.0数据库,建议集群版多节点使用,若使用此方式则需要按如下方式进行修改配置。-->eggroll.resourcemaager.clustermaager.jdbc.driver.class.ame=com.mysql.cj.jdbc.Drivereggroll.resourcemaager.clustermaager.jdbc.url=jdbc:mysql://数据库服务器ip:端口/数据库名称?useSSL=false&serverTimezoe=UTC&characterEcodig=utf8&allowPublicKeyRetrieval=trueeggroll.resourcemaager.clustermaager.jdbc.userame=数据库用户名eggroll.resourcemaager.clustermaager.jdbc.password=数据库密码<--eggroll相关配置参数说明:1、以下包含的路径都是相对Eggroll的实际部署目录之下的相对路径,若不在Eggroll的实际部署目录之下,可用系统绝对路径;2、根据部署方法分为三个修改级别:需要修改、建议默认、默认即可,其中端口为建议默认但需要根据实际服务器端口是否可用或部署方式来考虑是否修改,以避免端口冲突。-->eggroll.data.dir=data/<--存放缓存数据目录,默认即可-->eggroll.logs.dir=logs/<--存放eggroll生成日志目录,默认即可-->eggroll.resourcemaager.clustermaager.host=127.0.0.1<--clustermaager服务ip地址,需要修改-->eggroll.resourcemaager.clustermaager.port=4670<--clustermaager服务端口,建议默认-->eggroll.resourcemaager.odemaager.port=9394<--odemaager服务端口:1、部署单机版与clustermaager相同,建议默认;2、部署集群版需修改为其他可用端口,需要修改-->eggroll.resourcemaager.process.tag=<--集群服务标签,对不同集群需要单独指,例如EGGROLL_TAG,需要修改-->eggroll.bootstrap.root.script=bi/eggroll_boot.sh<--eggroll_boot.sh启动脚本路径,默认即可-->eggroll.resourcemaager.bootstrap.egg_pair.exepath=bi/roll_pair/egg_pair_bootstrap.sh<--egg_pair启动脚本路径,默认即可-->eggroll.resourcemaager.bootstrap.egg_pair.vev=<--virtualev安装路径,需要修改-->eggroll.resourcemaager.bootstrap.egg_pair.pythopath=pytho<--pytho文件路径,也作PYTHONPATH,默认即可-->eggroll.resourcemaager.bootstrap.egg_pair.filepath=pytho/eggroll/roll_pair/egg_pair.py<--egg_pair.py文件路径,默认即可--><--以下几项默认即可-->eggroll.resourcemaager.bootstrap.roll_pair_master.exepath=bi/roll_pair/roll_pair_master_bootstrap.sh<--roll_pair_master_bootstrap.sh文件路径-->eggroll.resourcemaager.bootstrap.roll_pair_master.javahome=<--java环境变量,系统安装jdk1.8-->eggroll.resourcemaager.bootstrap.roll_pair_master.classpath=cof/:lib/*<--eggroll启动时读取classpath文件路径-->eggroll.resourcemaager.bootstrap.roll_pair_master.maiclass=com.webak.eggroll.rollpair.RollPairMasterBootstrap<--roll_pair_master主类-->eggroll.resourcemaager.bootstrap.roll_pair_master.jvm.optios=<--jvm启动参数--><--以上几项默认即可--><--rollsite配置说明:其服务ip、端口与partyId需要与route_table.jso配置文件中对应一致-->eggroll.rollsite.coordiator=webak<--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=cof/route_table.jso<--route_table.jso路由配置文件路径,默认即可-->修改route_table.jso路由信息vicof/route_table.jso{"route_table":{"集群一partyId":<--此处需要修改-->{"default":[{"port":集群一rollsite服务端口,<--此处需要修改-->"ip":"集群一rollsite服务ip"<--此处需要修改-->}]},"集群二partyId":<--此处需要修改-->{"default":[{"port":集群二rollsite服务端口,<--此处需要修改-->"ip":"集群二rollsite服务ip"<--此处需要修改-->}]}},"permissio":{"default_allow":true}}修改数据库初始化sql脚本<--修改说明:此文件为初始化mysql数据库建表及建库使用的sql脚本,若使用默认数据库名为eggroll_meta则跳过此步骤,若实际需要使用其他库名,可使用以下语句替换为实际的数据库名称,此处数据库名称应与eggroll.properties中所填数据库名称一致-->sed-i"s/eggroll_meta/数据库名称/"cof/create-eggroll-meta-tables.sql3.3.多节点部署按上述说明修改完配置文件后,若集群内需多节点部署,由于各节点的配置文件完全相同,将其打包发送到集群各个节点的Eggroll安装目录下即可。
4.添加元信息集群多节点之间的服务之间是通过查询数据库存储的元信息来感知的,因此需要登录数据库服务器对数据库初始化并插入节点信息,在数据库中执行以下sql步骤:
登录数据库执行:<--此处注意使用create-eggroll-meta-tables.sql文件的绝对路径-->>>sourceEggroll安装目录/cof/create-eggroll-meta-tables.sql;<--将集群内所有节点clustermaager和odemaager服务信息插入server_ode表中-->>>INSERTINTOserver_ode(host,port,ode_type,status)values('clustermaager服务ip','clustermaager服务端口','CLUSTER_MANAGER','HEALTHY');>>INSERTINTOserver_ode(host,port,ode_type,status)values('odemaager服务ip','odemaager服务port','NODE_MANAGER','HEALTHY');执行完成执行查询server_ode表检查数据是否准确:
>>select*fromserver_ode;>>exit5.服务启动Eggroll的bi目录中附带启动脚本bi/eggroll.sh使用说明:
shbi/eggroll.sh$1$2<--$1:需要执行操作的服务名称,例如clustermaager,odemaager,rollsite,all(表示所有服务);$2:需要执行的操作,例如start(启动),status(查看状态),stop(关闭),restart(重启)-->使用例子:
<--启动所有服务-->shbi/eggroll.shallstart<--查看clustermaager服务状态-->shbi/eggroll.shclustermaagerstatus<--重启rollsite服务-->shbi/eggroll.shrollsiterestart<--关闭odemaager服务-->shbi/eggroll.shodemaagerstop将各节点对应的服务启动成功后,部署完成,进入测试步骤。
6.测试6.1.初始化环境变量登录服务器进行测试时需要执行以下语句进行环境变量初始化
exportEGGROLL_HOME=Eggroll安装绝对路径--例如/data/projects/eggrollexportPYTHONPATH=${EGGROLL_HOME}/pythosourcevirtualev/bi/activate--进入virtualev独立环境6.2.roll_pair测试cd${EGGROLL_HOME}/pytho/eggroll/roll_pair/testpytho-muittesttest_roll_pair.TestRollPairStadaloe--单机模式pytho-muittesttest_roll_pair.TestRollPairCluster--集群模式等待执行完成出现"OK"字段为成功。
6.3.roll_site测试通信测试(a).guest方执行
cd${EGGROLL_HOME}/pytho/eggroll/roll_site/testpytho-muittesttest_roll_site.TestRollSiteCluster.test_remote等待执行完成出现"OK"字段为guest方发送成功。
(b).host方执行
cd${EGGROLL_HOME}/pytho/eggroll/roll_site/testpytho-muittesttest_roll_site.TestRollSiteCluster.test_get等待执行完成出现"OK"字段为host方接收成功。
多partitio通信测试(a).guest方执行
cd${EGGROLL_HOME}/pytho/eggroll/roll_site/testpytho-muittesttest_roll_site.TestRollSiteCluster.test_remote_rollpair_big等待执行完成出现"OK"字段为guest方发送成功。
(b).host方执行
cd${EGGROLL_HOME}/pytho/eggroll/roll_site/testpytho-muittesttest_roll_site.TestRollSiteCluster.test_get_rollpair_big等待执行完成出现"OK"字段为host方接收成功。
rollpair通信测试(a).guest方执行
cd${EGGROLL_HOME}/pytho/eggroll/roll_site/testpytho-muittesttest_roll_site.TestRollSiteCluster.test_remote_rollpair等待执行完成出现"OK"字段为guest方发送成功。
(b).host方执行
cd${EGGROLL_HOME}/pytho/eggroll/roll_site/testpytho-muittesttest_roll_site.TestRollSiteCluster.test_get_rollpair等待执行完成出现"OK"字段为host方接收成功。
至此测试完成。
评论