TensorFlow做為深度學習領(lǐng)域最火的框架之一,一直被廣大深度學習和機器學習應用者及愛好者推崇。但是做為不斷快速更新迭代的框架因俐,每個版本較之前版本榴嗅,都有較大改動妄呕。往往苦了使用TensorFlow的廣大擁躉,經(jīng)常出現(xiàn)升級了版本或者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的使用里面葵硕,尷尬了眉抬,因為從接口的參數(shù)里面,沒有顯式的傳入ClusterSpec的參數(shù)懈凹。
通讀DNNLinearCombinedClassifier源碼發(fā)現(xiàn)蜀变,分布式的實現(xiàn)方式,是通過其config參數(shù)傳進去的配置來實現(xiàn)的介评。
具體方式如下:
首先創(chuàng)建一個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)
然后在創(chuàng)建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
)
如此配置寒瓦,然并卵,因為還是沒有發(fā)現(xiàn)如何傳入worker和ps的信息坪仇。于是通讀tf.contrib.learn.RunConfig代碼杂腰,發(fā)現(xiàn)在其父類ClusterConfig中有線索,worker和ps的信息椅文,是通過讀取系統(tǒng)環(huán)境變量里面的TF_CONFIG值獲取到的喂很,如下代碼:
config=json.loads(os.environ.get('TF_CONFIG')or'{}'),
于是終于get到解決該問題的最后一步皆刺,需要在系統(tǒng)環(huán)境變量里面設(shè)置TF_CONFIG參數(shù)少辣,python代碼實現(xiàn)配置方式如下:
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,問題解決羡蛾,如果有問題漓帅,歡迎留言~