TensorFlow 分布式實踐


此wiki主要介紹分布式環境使用的一些條件,一直所要注意的內容;

確保在此之前閱讀過TensorFlow for distributed

 

1.集群描述

   當前tensorflow 的版本(0.8.0),並沒有提供統一的資源管理器,所以若要啟動處理節點需要手動完成,並且要每個節點一份完整的集群描述,目的是讓該節點能夠找到其他的節點

   例如:啟動Server的命令如下

   python ./tensorflow/tools/dist_test/server/grpc_tensorflow_server.py  --cluster_spec='ps|10.100.208.23:22222,worker|10.100.208.23:22223;10.100.208.23:22224'  --job_name=ps --task_index=0

   --cluster_spec:描述集群的所有Server的ip:port,並形成一個dictionary,上邊的命令最后形成

                             "ps":[0.100.208.23:22222]

                             "worker":[10.100.208.23:22223;10.100.208.23:22224]

 

   --job_name --task_index  : 通過這兩個參數能夠確定,這個當前進程使用dictionary里的哪個ip:port.

 

  NOTE:實際上"ps","worker"並不含有什么實際意義,在啟動server時可以自行指定名稱,以便后續業務代碼識別即可。

 

2.進行計算:

   進行分布式計算可以將某些計算分派給某個Server的某個資源(cpu,gpu)來執行。

   例如

 

1
2
3
4
5
6
7
8
9
10
11
12
13
import  tensorflow as tf
 
def  main() :
         with tf.device( "/job:ps/task:0/cpu:0" ):
                 =  tf.Variable( 1 )
                 =  tf.Variable( 1 )
         with tf.device( "/job:worker/task:0/gpu:1" ):
                 =  +  b
         with tf.Session( "grpc://localhost:22223" ,config = tf.ConfigProto(allow_soft_placement = True ,log_device_placement = True )) as sess:
                 result  =  sess.run(c)
                 print (result)
if  __name__  = =  '__main__' :
     main()

  

其中 兩個變量a,b的聲明工作在ps進程的cpu0上完成; a+b的操作在worker進程的gpu1上完成

 

NOTE:若要指定運行的device,必須使用源碼編譯后的啟動方式

bazel-bin/tensorflow/core/distributed_runtime/rpc/grpc_tensorflow_server 

 

 

NOTE:如果在不同的進程里生命的變量進行運算可能會報錯

 

             tensorflow.python.framework.errors.FailedPreconditionError: Attempting to use uninitialized value

 

             需要先初始化變量

 

             sess.run(tf.initialize_all_variables())

 

            具體可參考 https://www.tensorflow.org/versions/r0.8/how_tos/variable_scope/index.html#sharing-variables

 

 

NOTE:創建tf.Session時,需要制定到worker地址否則會報錯

             tensorflow.python.framework.errors.InternalError: Blas SGEMM launch failed 

             並且導致進程退出

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM