簡體   English   中英

如何顯示TensorBoard的Keras CPU /內存使用情況(RunMetadata)

[英]How to show TensorBoard's CPU/memory usage (RunMetadata) for Keras

我想用Keras查看TensorBoard中的CPU /內存使用情況。 為此,我需要執行add_run_metadata的方法。 但我找不到在Keras的TensorBoard回調中傳遞add_run_metadata方法的方法。 這是為Keras實現CPU /內存使用的好方法嗎?

參考


編輯 :我遇到了同樣的問題。 我正在編輯分享我試圖解決這個問題的方法。

我更改了keras源:callbacks.py,並用on_epoch_end()替換了這一 -

run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)
run_metadata = tf.RunMetadata()
result = self.sess.run([self.merged], feed_dict=feed_dict, options=run_options, run_metadata=run_metadata)
self.writer.add_run_metadata(run_metadata, 'epoch%d_step%d' % (epoch, i))

但是我最終得到以下錯誤:

...\tensorflow\stream_executor\dso_loader.cc:141] Couldn't open CUDA library cupti64_90.dll
...\tensorflow/stream_executor/lib/statusor.h:212] Non-OK-status: status_ status: Failed precondition: could not dlopen DSO: cupti64_90.dll; dlerror: cupti64_90.dll not found

這對我來說很困惑,因為它似乎與 cuda的正確安裝有關,並且與我所做的改變沒有任何明顯(對我而言)相關。

我正在使用keras版本2.1.6和tensorflow版本1.6.0

解決方案是在TF會話中運行Keras模型,並基於博客文章: keras-as-a-simplified-interface-to-tensorflow#calling-keras-layers-on-tensorflow-tensors 貝婁是一個詳細的完整和最小的工作示例。

首先,虛擬生成數據:

data.py

import numpy as np
def load_data(n = 1000):
    x = np.random.rand(n, 100)
    y = np.sum(x, axis=1, keepdims=True)
    return x, y

核心思想是在TF會話中運行模型,因此主代碼是純TF,只有模型本身是用Keras定義的。 為此工作(遵循上述教程):

  1. 該模型需要構建在tf.placeholder之上,而不是keras.layers.Input。
  2. 保留為張量,而不是編譯成keras.models.Model。

來自keras.layers導入密集

model.py

def load_network(input_tensor):    
    x = Dense(100, activation='relu')(input_tensor)
    x = Dense(100, activation='relu')(x)
    x = Dense(1, activation='sigmoid')(x)    
    return x

以及運行keras模型的TF會話( TensorBoard教程的一個干凈但完整的版本):

run_runtime_stats.py

import tensorflow as tf
sess = tf.Session()    
from keras import backend as K
from keras.objectives import mean_squared_error
K.set_session(sess)    
from model import load_network
from data import load_data

# load your keras model as a tf.Tensor
input = tf.placeholder(tf.float32, shape=(None, 100))  # is passed as input to our keras layers  
labels = tf.placeholder(tf.float32, shape=(None, 1))
net = load_network(input)  # type(net) == tf.Tensor

loss = tf.reduce_mean(mean_squared_error(labels, net))
opt = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

writer = tf.summary.FileWriter(r'./logs', sess.graph)

sess.run(tf.global_variables_initializer())
with sess.as_default():    
    x, y = load_data(64)

    run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)
    run_metadata = tf.RunMetadata()

    sess.run([opt], 
         feed_dict={input: x, labels: y},
         options=run_options,
         run_metadata=run_metadata)

    writer.add_run_metadata(run_metadata, 'runtime-statistics')
    writer.close()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM