TensorFlow學習筆記2 效能分析工具

2022-07-25 21:33:09 字數 2755 閱讀 2258

在spyder中執行以下**:

import tensorflow as tf

from tensorflow.python.client import timeline

#構造計算圖

x = tf.random_normal([1000, 1000])

y = tf.random_normal([1000, 1000])

res = tf.matmul(x, y)

#執行計算圖, 同時進行跟蹤

with tf.session() as sess:

run_options = tf.runoptions(trace_level=tf.runoptions.full_trace)

run_metadata = tf.runmetadata()

sess.run(res, options=run_options, run_metadata=run_metadata)

#建立timeline物件,並將其寫入到乙個json檔案

tl = timeline.timeline(run_metadata.step_stats)

ctf = tl.generate_chrome_trace_format()

with open('timeline.json', 'w') as f:

f.write(ctf)

使用with tf.session() as sess進行處理,運算完成後會自動關閉session,不需要再顯示地sess.close()上述**將session的運**況寫入到timeline.json檔案。

注意:如果上述**在spyder中報錯,報錯內容為couldn't open cuda library cupti64_92.dll

解決辦法: 用everything搜尋cupti64_92.dll,並把它複製到你的cuda環境變數對應的目錄:如\cuda\v9.2\bin\cupti64_92.dll

開啟你的原始檔路徑,可以看到已經有了timeline.json檔案。在chrome瀏覽器中開啟chrome://tracing/,然後load上述timeline.json檔案,可以看到時序圖。

進行分析:

左下角的args中:

以pid 3為例,是gpu:0的程序:點選noop,這意味著沒有op操作;然後是const操作,它沒有輸入,輸出是random_normal/shape;然後randomstandardnormal操作,它輸入是random_normal/shape,輸出是random_normal/randomstandardnormal;緊接著仍然是randomstandardnormal操作,它輸入也是random_normal/shape,輸出是random_normal_1/randomstandardnormal;最後是matmul操作,輸入是random_normal/randomstandardnormalrandom_normal_1/randomstandardnormal,輸出是matmul

指派裝置

上述**是預設指派到gpu0進行運算的,你也可以用with tf.device('/cpu:0')將運算指派到你想要的裝置:例如,你可以將上述**更改為:

import tensorflow as tf

from tensorflow.python.client import timeline

#構造計算圖

with tf.device('/cpu:0'):

x = tf.random_normal([1000, 1000])

y = tf.random_normal([1000, 1000])

res = tf.matmul(x, y)

#執行計算圖, 同時進行跟蹤

with tf.session() as sess:

run_options = tf.runoptions(trace_level=tf.runoptions.full_trace)

run_metadata = tf.runmetadata()

sess.run(res, options=run_options, run_metadata=run_metadata)

#建立timeline物件,並將其寫入到乙個json檔案

tl = timeline.timeline(run_metadata.step_stats)

ctf = tl.generate_chrome_trace_format()

with open('timeline.json', 'w') as f:

f.write(ctf)

在瀏覽器中開啟timeline.json後,可以看到

當你每次呼叫sess.run時,一定要確保好,不要設定full_trace,否則會降低訓練的速度。可以每100-1k 次訓練設定1次full_trace.

Tensorflow學習筆記2

參考 1 classification分類學習 from tensorflow.examples.tutorials.mnist import input data mnist input data.read data sets mnist data one hot true mnist庫是手寫體數...

tensorflow學習筆記2

1.np.asarray array和asarray都可將結構資料轉換為ndarray型別。舉例 data1 1,1,1 1,1,1 1,1,1 arr2 np.array data1 arr3 np.asarray data1 輸出 arr2 1 1 1 1 1 1 1 1 1 arr3 1 1 ...

Tensorflow學習筆記No 2

函式式api相比於keras.sequential 具有更加靈活多變的特點。函式式api主要應用於多輸入多輸出的網路模型。利用函式式api構建神經網路主要分為3步,1.構建輸入層,2.構建中間層與輸出層並連線神經層,3.生成神經網路模型。輸入層的構建較為簡單,呼叫keras.input 方法來構建輸...