-
Notifications
You must be signed in to change notification settings - Fork 440
Tensorflow环境搭建及应用规范
EasyML1.2.0及以上版本目前能够支持Tensorflow的单机、模型并行、数据并行三种模式的程序运行。
在Docker的EasyML部署安装包中,我们已经提供了Tersorflow环境部署的脚本,大家只需要在容器启动之后,运行hadoop-master容器根目录下的config-tensorflow.sh
脚本即可自动进行tensorflow环境的搭建。
本文将针对自行搭建集群的用户介绍EasyML的Tensorflow的环境搭建以及Tensorflow单机、模型并行、数据并行三种模式程序的应用规范
- 保证Tensorflow集群的每台机器安装
Python2.7
(目前的仅支持python2.7语言规范)、Tensorflow环境 - 配置Tensorflow账户(可以为root账户,也可以为其他任意账户,保证每台Tensorflow集群机器都包含该账户)
- 保证Tensorflow集群的每台机器在Tensorflow账户下两两ssh互通(若账户为root,则保证root账户互通,EasyML docker环境默认为root账户),保证在ssh的过程中不能存在warning或者要求用户输入yes的情况
- 保证每台机器Tensorflow账户能够支持sudo命令
- 每台机器的shell命令都必须为bash shell,若不是bash shell的按照以下命令进行转换(以Red hat 默认的dash shell为例)
#查看默认 shell ls -al /bin/sh #若为Dash则将其切换回bash sudo ln -fs /bin/bash /bin/sh
-
Tensorflow并行模式所需脚本在EasyML github tensorflow目录中,各脚本含义如下:
-
check.sh
:获得每台机器上的闲置端口 -
check_port.sh
:在 Tensorflow 集群的每台机器上运行check.sh
,拿到所有的可用端口。为了保证只有一个check_port.sh
在运行,运行时会添加文件锁 -
start.py
:模型并行时启动 worker 的python 文件 -
start.sh
: 启动start.py
脚本
-
-
在每台Tensorflow集群上创建
/usr/bda/port
目录 -
将
check_port.sh
文件拷贝到每台Tensorflow集群配置Tensorflow账户的根目录下,且配置的账号需要有sudo权限 -
将
start.py
和start.sh
文件拷贝到每台Tensorflow集群配置Tensorflow账户的根目录下 -
指定Tensorflow集群中的任意一台机器为Tensorflow Master,将
check.sh
拷贝到该机器配置Tensorflow账户的根目录下。
-
server-config.xml
:该文件位于EasyML工程的resources目录下,针对Tensorflow环境,需要根据环境配置修改如下属性:
#Tensorflow集群所有机器的ip,用逗号分隔 <TENSORFLOW CLUSTER>cluster_ip1,cluster_ip2_cluster_ip3...</TENSORFLOW_CLUSTER> #任选Tensorflow集群中的一台机器作为tensorflow_master <TENSORFLOW_MASTER>cluster_ip1</TENSORFLOW_MASTER> #创建Tensorflow集群账户,可直接用root或yarn账户 <TENSORFLOW_USER>user</TENSORFLOW_USER>
EasyML对于单机的Tensorflow程序没有限制,只需要满足集群搭建的python版本以及保证集群中的所有集群都安装Tensorflow即可,程序的编写规范与EasyML普通程序上传规范一致
数据分布的代码中除了用户规定之外的输入,需要加入两个额外参数,tensorflow集群的 ip 列表以及本机的逻辑标识。这两个参数的位置在最后 例如用户需要接受输入文件和模型保存的位置,则 python 文件接受参数的部分可以表示为:
#数据输入与模型保存参数(即EML中的input和output参数)
input_path = sys.argv[1]
model_path = sys.argv[2]
# tensorflow集群ip列表
ip_list = sys.argv[3].split(",")
index = int(sys.argv[4])
index 的具体含义可以参考 tensorflow 数据并行 中 index 的定义。tensorflow 数据并行的具体写法,可以参考 这份代码
模型分布的代码中除了用户规定之外的输入,需要加入一个额外参数** commit_ip 表示该任务提交的 ip 节点**,该参数的位置同样在最后 例如用户需要接受输入文件和模型保存的位置,则 python 文件接受参数的部分可以表示为:
input_path = sys.argv[1]
model_path = sys.argv[2]
# 最后一个参数表示提交 ip,该参数的格式为ip:port 如:172.0.0.0:65535
commit_ip = sys.argv[3]
该参数会由 EasyML系统产生,用户不需要输入该参数。
为了让 tensorflow 可以接受提交任务,在初始化 tensorflow 的 session 时,我们需要指定为 grpc 的形式:
with tf.Session(target="grpc://" + commit_ip) as sess:
# your code here
-
Installation And Introduction
-
Sample Description
-
Tips For Developers
-
Problem Summary