TensorFlow如何通過tf.device函數來指定運行每一個操作的設備?
TensorFlow程序可以通過tf.device函數來指定運行每一個操作的設備。
這個設備可以是本地的CPU或者GPU,也可以是某一台遠程的伺服器。
TensorFlow會給每一個可用的設備一個名稱,tf.device函數可以通過設備的名稱,來指定執行運算的設備。比如CPU在TensorFlow中的名稱為/cpu:0。
在默認情況下,即使機器有多個CPU,TensorFlow也不會區分它們,所有的CPU都使用/cpu:0作為名稱。
–而一台機器上不同GPU的名稱是不同的,第n個GPU在TensorFlow中的名稱為/gpu:n。
–比如第一個GPU的名稱為/gpu:0,第二個GPU名稱為/gpu:1,以此類推。
–TensorFlow提供了一個快捷的方式,來查看運行每一個運算的設備。
–在生成會話時,可以通過設置log_device_placement參數來列印運行每一個運算的設備。
請看下面例子:
下面程序展示了log_device_placement參數的使用,在機器上直接運行代碼:
–import tensorflowas tf
–a = tf.constant([1.0, 2.0, 3.0], shape=[3], name='a')
–b = tf.constant([1.0, 2.0, 3.0], shape=[3], name='b')
–c = a + b
–# 通過log_device_placement參數來輸出運行每一個運算的設備。
–sess= tf.Session(config=tf.ConfigProto(log_device_placement=True))
–print sess.run(c)
在以上代碼中,TensorFlow程序生成會話時加入了參數log_device_placement=True,所以程序會將運行每一個操作的設備輸出到屏幕。
–除了可以看到最後的計算結果之外,還可以看到類似「add: /job:localhost/replica:0/task:0/cpu:0」這樣的輸出
–這些輸出顯示了執行每一個運算的設備。比如加法操作add是通過CPU來運行的,因為它的設備名稱中包含了/cpu:0。
–在配置好GPU環境的TensorFlow中,如果操作沒有明確地指定運行設備,那麼TensorFlow會優先選擇GPU。
在沒有GPU的機器上運行,以上代碼得到以下輸出:
–Device mapping: no known devices.
–add: /job:localhost/replica:0/task:0/cpu:0
–b: /job:localhost/replica:0/task:0/cpu:0
–a: /job:localhost/replica:0/task:0/cpu:0
–[ 2. 4. 6.]
–'''
點擊展開全文
TAG:中科院計算所職業學校 |