美文网首页DL&NN大数据devops
TensorFlow高层Api如何使用分布式

TensorFlow高层Api如何使用分布式

作者: 老雕_Ai_微博 | 来源:发表于2017-10-12 17:43 被阅读435次

TensorFlow做为深度学习领域最火的框架之一,一直被广大深度学习和机器学习应用者及爱好者推崇。但是做为不断快速更新迭代的框架,每个版本较之前版本,都有较大改动。往往苦了使用TensorFlow的广大拥趸,经常出现升级了版本或者api后,不知道如何使用。本文讨论的是困惑很多程序员的——如何在TensorFlow 1.3版本高层Api使用分布式的问题。

一、低层api里面,分布式使用方式

TensorFlow给出的低层api,分布式的使用方式比较清楚,具体如下:

# Create a cluster from the parameter server and worker hosts.

cluster=tf.train.ClusterSpec({"ps":ps_hosts,"worker":worker_hosts})

# Create and start a server for the local task.

server=tf.train.Server(cluster,

job_name=FLAGS.job_name,

task_index=FLAGS.task_index)

二、高层api,例如:DNNLinearCombinedClassifier。到了高层api的使用里面,尴尬了,因为从接口的参数里面,没有显式的传入ClusterSpec的参数。

通读DNNLinearCombinedClassifier源码发现,分布式的实现方式,是通过其config参数传进去的配置来实现的。

具体方式如下:

首先创建一个tf.contrib.learn.RunConfig的实例,具体如下:

run_config = tf.contrib.learn.RunConfig(model_dir=FLAGS.output,

save_summary_steps=20,

save_checkpoints_steps=100,

gpu_memory_fraction=0.3)

然后在创建DNNLinearCombinedClassifier的实例的时候,传入RunConfig实例,具体如下:

estimator = tf.estimator.DNNLinearCombinedClassifier(

linear_feature_columns=base_columns + crossed_columns,

dnn_feature_columns=deep_columns,

dnn_hidden_units=[128, 64],

linear_optimizer=tf.train.FtrlOptimizer(

learning_rate=0.1,

l1_regularization_strength=0.01,

l2_regularization_strength=0.0

),

dnn_optimizer=tf.train.AdamOptimizer(

learning_rate=0.01

),

config=run_config

)

如此配置,然并卵,因为还是没有发现如何传入worker和ps的信息。于是通读tf.contrib.learn.RunConfig代码,发现在其父类ClusterConfig中有线索,worker和ps的信息,是通过读取系统环境变量里面的TF_CONFIG值获取到的,如下代码:

config=json.loads(os.environ.get('TF_CONFIG')or'{}'),

于是终于get到解决该问题的最后一步,需要在系统环境变量里面设置TF_CONFIG参数,python代码实现配置方式如下:

os.environ["TF_CONFIG"] = json.dumps({

'environment': 'cloud',  # tf.contrib.learn.Environment.CLOUD

'cluster': {

'master': hosts,

'ps': ps_hosts,

'worker': worker_hosts,

},

'task': {

'type': job_name,

'index': FLAGS.task_index,

},

})

Bingo,问题解决,如果有问题,欢迎留言~

相关文章

网友评论

    本文标题:TensorFlow高层Api如何使用分布式

    本文链接:https://www.haomeiwen.com/subject/yudwyxtx.html