TensorFlow如何通過tf.device函式來指定執行每一個操作的裝置?

shenmanli發表於2017-09-04
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.]

–'''




相關文章