91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

分布式TensorFlow運行環境的示例分析

發布時間:2021-08-23 10:30:50 來源:億速云 閱讀:168 作者:小新 欄目:開發技術

小編給大家分享一下分布式TensorFlow運行環境的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

1.分布式TensorFlow的角色與原理

在分布式的TensorFlow中的角色分配如下:

PS:作為分布式訓練的服務端,等待各個終端(supervisors)來連接。

worker:在TensorFlow的代碼注釋中被稱為終端(supervisors),作為分布式訓練的計算資源終端。

chief supervisors:在眾多的運算終端中必須選擇一個作為主要的運算終端。該終端在運算終端中最先啟動,它的功能是合并各個終端運算后的學習參數,將其保存或者載入。

每個具體的網絡標識都是唯一的,即分布在不同IP的機器上(或者同一個機器的不同端口)。在實際的運行中,各個角色的網絡構建部分代碼必須100%的相同。三者的分工如下:

服務端作為一個多方協調者,等待各個運算終端來連接。

chief supervisors會在啟動時同一管理全局的學習參數,進行初始化或者從模型載入。

其他的運算終端只是負責得到其對應的任務并進行計算,并不會保存檢查點,用于TensorBoard可視化中的summary日志等任何參數信息。

在整個過程都是通過RPC協議來進行通信的。

2.分布部署TensorFlow的具體方法

配置過程中,首先建立一個server,在server中會將ps及所有worker的IP端口準備好。接著,使用tf.train.Supervisor中的managed_ssion來管理一個打開的session。session中只是負責運算,而通信協調的事情就都交給supervisor來管理了。

3.部署訓練實例

下面開始實現一個分布式訓練的網絡模型,以線性回歸為例,通過3個端口來建立3個終端,分別是一個ps,兩個worker,實現TensorFlow的分布式運算。

1. 為每個角色添加IP地址和端口,創建sever,在一臺機器上開3個不同的端口,分別代表PS,chief supervisor和worker。角色的名稱用strjob_name表示,以ps為例,代碼如下:

# 定義IP和端口
strps_hosts = 'localhost:1681'
strworker_hosts = 'localhost:1682,localhost:1683'
# 定義角色名稱
strjob_name = 'ps'
task_index = 0
# 將字符串轉數組
ps_hosts = strps_hosts.split(',')
worker_hosts = strps_hosts.split(',')
cluster_spec = tf.train.ClusterSpec({'ps': ps_hosts, 'worker': worker_hosts})
# 創建server
server = tf.train.Server({'ps':ps_hosts, 'worker':worker_hosts}, job_name=strjob_name, task_index=task_index)

2為ps角色添加等待函數

ps角色使用server.join函數進行線程掛起,開始接受連續消息。

# ps角色使用join進行等待
if strjob_name == 'ps':
  print("wait")
  server.join()

3.創建網絡的結構

與正常的程序不同,在創建網絡結構時,使用tf.device函數將全部的節點都放在當前任務下。在tf.device函數中的任務是通過tf.train.replica_device_setter來指定的。在tf.train.replica_device_setter中使用worker_device來定義具體任務名稱;使用cluster的配置來指定角色及對應的IP地址,從而實現管理整個任務下的圖節點。代碼如下:

with tf.device(tf.train.replica_device_setter(worker_device='/job:worker/task:%d'%task_index,
                       cluster=cluster_spec)):
  X = tf.placeholder('float')
  Y = tf.placeholder('float')
  # 模型參數
  w = tf.Variable(tf.random_normal([1]), name='weight')
  b = tf.Variable(tf.zeros([1]), name='bias')
  global_step = tf.train.get_or_create_global_step()  # 獲取迭代次數
  z = tf.multiply(X, w) + b
  tf.summary('z', z)
  cost = tf.reduce_mean(tf.square(Y - z))
  tf.summary.scalar('loss_function', cost)
  learning_rate = 0.001
  optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost, global_step=global_step)
  saver = tf.train.Saver(max_to_keep=1)
  merged_summary_op = tf.summary.merge_all() # 合并所有summary
  init = tf.global_variables_initializer()

4.創建Supercisor,管理session

在tf.train.Supervisor函數中,is_chief表明為是否為chief Supervisor角色,這里將task_index=0的worker設置成chief Supervisor。saver需要將保存檢查點的saver對象傳入。init_op表示使用初始化變量的函數。

training_epochs = 2000
display_step = 2
sv = tf.train.Supervisor(is_chief=(task_index == 0),# 0號為chief
             logdir='log/spuer/',
             init_op=init,
             summary_op=None,
             saver=saver,
             global_step=global_step,
             save_model_secs=5)
# 連接目標角色創建session
with sv.managed_session(saver.target) as sess:

5迭代訓練

session中的內容與以前一樣,直接迭代訓練即可。由于使用了supervisor管理session,將使用sv.summary_computed函數來保存summary文件。

print('sess ok')
  print(global_step.eval(session=sess))
  for epoch in range(global_step.eval(session=sess), training_epochs*len(train_x)):
    for (x, y) in zip(train_x, train_y):
      _, epoch = sess.run([optimizer, global_step], feed_dict={X: x, Y: y})
      summary_str = sess.run(merged_summary_op, feed_dict={X: x, Y: y})
      sv.summary_computed(sess, summary_str, global_step=epoch)
      if epoch % display_step == 0:
        loss = sess.run(cost, feed_dict={X:train_x, Y:train_y})
        print("Epoch:", epoch+1, 'loss:', loss, 'W=', sess.run(w), w, 'b=', sess.run(b))
  print(' finished ')
  sv.saver.save(sess, 'log/linear/' + "sv.cpk", global_step=epoch)
sv.stop()

(1)在設置自動保存檢查點文件后,手動保存仍然有效,

(2)在運行一半后,在運行supervisor時會自動載入模型的參數,不需要手動調用restore。

(3)在session中不需要進行初始化的操作。

6.建立worker文件

新建兩個py文件,設置task_index分別為0和1,其他的部分和上述的代碼相一致。

strjob_name = 'worker'
task_index = 1
strjob_name = 'worker'
task_index = 0

7.運行

我們分別啟動寫好的三個文件,在運行結果中,我們可以看到循環的次數不是連續的,顯示結果中會有警告,這是因為在構建supervisor時沒有填寫local_init_op參數,該參數的含義是在創建worker實例時,初始化本地變量,上述代碼中沒有設置,系統會自動初始化,并給出警告提示。

分布運算的目的是為了提高整體運算速度,如果同步epoch的準確率需要犧牲總體運行速度為代價,自然很不合適。

在ps的文件中,它只是負責連接,并不參與運算。

以上是“分布式TensorFlow運行環境的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

漠河县| 华蓥市| 喜德县| 雷波县| 共和县| 黔西| 马尔康县| 湘潭县| 宝山区| 英吉沙县| 宜昌市| 长治市| 西充县| 黑河市| 丰顺县| 社会| 固安县| 连平县| 白沙| 石狮市| 五华县| 北海市| 金沙县| 兴文县| 大厂| 天峻县| 海晏县| 轮台县| 于田县| 洛扎县| 武陟县| 永康市| 南安市| 特克斯县| 上思县| 远安县| 连城县| 阿瓦提县| 大荔县| 淮南市| 德钦县|