使用 GPflow 获取 FLOPS
Get FLOPS using GPflow
是否有可能在 GPflow
中获得 FLOPS?我找到了一个使用 Tensorflow
的示例,但不知道如何在 GPflow
上下文中使用它:
g = tf.Graph()
run_meta = tf.RunMetadata()
with g.as_default():
A = tf.Variable(tf.random_normal( [25,16] ))
B = tf.Variable(tf.random_normal( [16,9] ))
C = tf.matmul(A,B)
opts = tf.profiler.ProfileOptionBuilder.float_operation()
flops = tf.profiler.profile(g, run_meta=run_meta, cmd='op', options=opts)
if flops is not None:
print('TF stats gives',flops.total_float_ops)
我深入研究了 GPFlow 的源代码。使其工作的关键是在 GPFlow 的 AutoFlows 创建新图形之前拦截您想要分析的 Tensorflow 操作。
就我而言,我想分析 predict()
函数。您需要的函数是 model._build_predict()
(对数似然有一个等价函数)。
运作方式如下:
gpflow.reset_default_graph_and_session()
kernel = gpflow.kernels.RBF(1)
model = gpflow.models.GPR(X, Y, kernel)
run_metadata = tf.RunMetadata()
with model.enquire_session(session=None) as tf_session:
predict_op = model._build_predict(X)
tf_session.run(predict_op, options=tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE),
run_metadata=run_metadata)
opts = tf.profiler.ProfileOptionBuilder.float_operation()
prof = tf.profiler.profile(tf_session.graph, run_meta=run_metadata,
cmd='op', options=opts)
print('FOps: ', prof.total_float_ops)
是否有可能在 GPflow
中获得 FLOPS?我找到了一个使用 Tensorflow
的示例,但不知道如何在 GPflow
上下文中使用它:
g = tf.Graph()
run_meta = tf.RunMetadata()
with g.as_default():
A = tf.Variable(tf.random_normal( [25,16] ))
B = tf.Variable(tf.random_normal( [16,9] ))
C = tf.matmul(A,B)
opts = tf.profiler.ProfileOptionBuilder.float_operation()
flops = tf.profiler.profile(g, run_meta=run_meta, cmd='op', options=opts)
if flops is not None:
print('TF stats gives',flops.total_float_ops)
我深入研究了 GPFlow 的源代码。使其工作的关键是在 GPFlow 的 AutoFlows 创建新图形之前拦截您想要分析的 Tensorflow 操作。
就我而言,我想分析 predict()
函数。您需要的函数是 model._build_predict()
(对数似然有一个等价函数)。
运作方式如下:
gpflow.reset_default_graph_and_session()
kernel = gpflow.kernels.RBF(1)
model = gpflow.models.GPR(X, Y, kernel)
run_metadata = tf.RunMetadata()
with model.enquire_session(session=None) as tf_session:
predict_op = model._build_predict(X)
tf_session.run(predict_op, options=tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE),
run_metadata=run_metadata)
opts = tf.profiler.ProfileOptionBuilder.float_operation()
prof = tf.profiler.profile(tf_session.graph, run_meta=run_metadata,
cmd='op', options=opts)
print('FOps: ', prof.total_float_ops)