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.]
這個裝置可以是本地的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.]
–'''
相關文章
- javascript實現的對陣列每一個元素都執行一個函式JavaScript陣列函式
- 痞子衡嵌入式:可通過USB Device Path來唯一指定i.MXRT裝置進行ROM/Flashloader通訊dev
- disruptor如何實現每CPU執行一個執行緒?執行緒
- 執行建構函式中指定的任務函式
- 編譯通過的 foo函式返回一個int編譯函式
- js封裝函式來 解釋jQuery的執行原理JS封裝函式jQuery
- golang封裝一個bash函式,用於執行bash命令Golang封裝函式
- 通過 7 個 python 函式來了解區塊鏈Python函式區塊鏈
- js函式執行過程的探究JS函式
- 通過7個Python函式來解釋區塊鏈Python函式區塊鏈
- 教你如何檢查一個函式是否為JavaScript執行時環境內建函式函式JavaScript
- 通過一道面試題來學習原型/原型鏈-函式宣告/函式表示式面試題原型函式
- Java的通過管道來實現執行緒通訊Java執行緒
- 一個回撥函式不能操作Qt主執行緒設定Gui的問題函式QT執行緒GUI
- 通過API執行AutoCAD命令來…API
- javascript如何終止函式的執行JavaScript函式
- js如何實現一定時間後去執行一個函式JS函式
- C++建構函式解構函式的執行過程C++函式
- 如何實現通過JAVA遠端執行重啟tomcat操作?JavaTomcat
- 裝置樹解析函式函式
- 關於執行緒的幾個函式執行緒函式
- 通過一個簡單的例子,瞭解 Cypress 的執行原理
- 通過3個 Hello World 應用來了解 ASP.NET 5 應用是如何執行的(1)ASP.NET
- 通過3個 Hello World 應用來了解 ASP.NET 5 應用是如何執行的(2)ASP.NET
- 通過3個 Hello World 應用來了解 ASP.NET 5 應用是如何執行的(3)ASP.NET
- [求指導] 如何通過程式碼分析一個查詢語句的執行效率
- 通過一個模擬程式讓你明白ASP.NET MVC是如何執行的ASP.NETMVC
- 通過內部的hint來控制執行計劃
- 通過資料庫鏈執行TEXT操作的小bug資料庫
- python函式每日一講 - exec執行函式Python函式
- 寫了一個分段函式,引數是單個數字,執行函式 畫圖函式
- 通過執行一個tomcat容器來記錄下初學docker常用的幾個命令---映象篇TomcatDocker
- 通過執行一個tomcat容器來記錄下初學docker常用的幾個命令---容器篇TomcatDocker
- python3 筆記15.通過range()函式來了解函式的作用Python筆記函式
- 通過MMIO的方式實現VIRTIO-BLK裝置(一)
- 寫一個判斷裝置來源的方法
- C++ 獲取指定的過載函式地址C++函式
- 如何僅用遞迴函式和棧操作逆序一個棧遞迴函式