profiler icon indicating copy to clipboard operation
profiler copied to clipboard

Inference profiling

Open ghjeong12 opened this issue 4 years ago • 25 comments

Hi, I would like to ask you is there any way to use profiler for inference. I was able to run for training, but it didn't work for inference (putting a callback function in predict function).

ghjeong12 avatar May 25 '20 20:05 ghjeong12

Hi,

We don't support the callback function in predict function yet. However, you should be able to use other methods to profiler inference workloads:

Please refer to https://www.tensorflow.org/guide/profiler for how to use these modes.

-ck

On Mon, May 25, 2020 at 1:44 PM Geonhwa [email protected] wrote:

Hi, I would like to ask you is there any way to use profiler for inference. I was able to run for training, but it didn't work for inference (putting a callback function in predict function).

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/tensorflow/profiler/issues/24, or unsubscribe https://github.com/notifications/unsubscribe-auth/AE33L3LSYGHUTA7GEQGOHATRTLKEDANCNFSM4NJYTXXQ .

ckluk avatar May 26 '20 17:05 ckluk

Hi, thank you for your quick answer.

From the guide document you suggested, I can see the following codes for programmatic code.

tf.profiler.experimental.start('logdir') #Train the model here tf.profiler.experimental.stop()

Instead of train section in the comment, is it enough to put predict function there for profiling inference? Or, do you have any sample code for profiling inference? Also, could you tell me which tf version I should be using?

ghjeong12 avatar May 27 '20 01:05 ghjeong12

Yes, it should work if you put the profiler start and stop around the predict function. Unfortunately, I don't have any sample code for profiling inference yet. Please use tf 2.2.

On Tue, May 26, 2020 at 6:11 PM Geonhwa [email protected] wrote:

Hi, thank you for your quick answer.

From the guide document you suggested, I can see the following codes for programmatic code.

tf.profiler.experimental.start('logdir') Train the model here

tf.profiler.experimental.stop()

Instead of train section in the comment, is it enough to put predict function there for profiling inference? Or, do you have any sample code for profiling inference? Also, could you tell me which tf version I should be using?

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/tensorflow/profiler/issues/24#issuecomment-634364607, or unsubscribe https://github.com/notifications/unsubscribe-auth/AE33L3PUZXO2HFF3XFAOGR3RTRSEXANCNFSM4NJYTXXQ .

ckluk avatar May 27 '20 01:05 ckluk

I appreciate it, and I was able to profile the inference.

Another quick question is, could you tell me what _FusedConv2D operation type is?

It takes 70% of my inference time (for tensorflow.keras.applications.resnet50, ResNet50), but I couldn't find any documentation explaining the operation.

Another interesting point was that I couldn't find any conv2d in operation name. Instead, BiasAdd operation (also marked as _FusedConv2D type) took the longest time. Do you think this is reasonable? I'd like to ask you where Conv2D / MatMul operation time is shown at.

ghjeong12 avatar May 27 '20 03:05 ghjeong12

Are you using a GPU?

_FusedConv2D: Conv2D means it is a 2D convolution op. Fused probably means this Op is fused with other Ops (a compiler optimization to reduce device memory usage).

On Tue, May 26, 2020 at 8:14 PM Geonhwa [email protected] wrote:

I appreciate it, and I was able to profile the inference.

Another quick question is, could you tell me what _FusedConv2D operation is?

It takes 70% of my inference time (for tensorflow.keras.applications.resnet50, ResNet50), but I couldn't find any documentation explaining the operation.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/tensorflow/profiler/issues/24#issuecomment-634402008, or unsubscribe https://github.com/notifications/unsubscribe-auth/AE33L3OMC556PKERMW7ZTGLRTSASBANCNFSM4NJYTXXQ .

ckluk avatar May 27 '20 16:05 ckluk

Hi @ckluk ,

I have a similar question. I want to profile not the inference of a model but simply a single op. How can I do that?

I basically want to do something like:

import tensorflow as tf

with tf.device('/GPU:0'):
  a = tf.constant([7] * 100000)

with tf.profiler.experimental.Profile("logs"):
  with tf.device('/device:GPU:0'):
    b = tf.math.floormod(a, 3)

This is what I try to do in this colab, where I also switch on tensorboard for visualization.

You can see that the main problem is that the function is executed eagerly and therefore no GPU use is recorded. This is kind of related to this SO question I wrote.

Basically I want to be able to compare ops between PyTorch and Tensorflow, so as to have benchmarks like this one, which currently suffer from eager execution.

I guess I could always put the op in a model on its own and use that with predict but that seems overcomplicated.

zaccharieramzi avatar Jul 02 '20 13:07 zaccharieramzi

As a matter of fact, for a model not using keras layers, it seems that it doesn't even record GPU activity. See for example this colab.

In essence, I am doing the following:

import tensorflow as tf
from tensorflow.keras.models import Model

a = tf.constant([7] * 100000)
a = a[None, :]

class MyModel(Model):
  def call(self, inputs):
    with tf.device('/GPU:0'):
      return inputs + 3

model = MyModel()

with tf.profiler.experimental.Profile("logs"):
  for i in range(1):
    model.predict(a)

EDIT

Actually it's not even a question of using a keras layer or not, because if I use a lambda layer containing the op, it also doesn't work.

zaccharieramzi avatar Jul 02 '20 14:07 zaccharieramzi

Actually, it's just a matter of dtype...

If I set the type of the constant a to be tf.float32, I have the GPU computations as expected without needing a model.

Maybe I can write another issue for that particular matter.

Anyway I would love to know how to profile without eager execution if possible.

EDIT

Actually for floormod even with dtype tf.float32 it doesn't work so I don't understand what's going on for this op in particular. It might be because tf.math.floormod doesn't have a GPU implementation yet (see this).

zaccharieramzi avatar Jul 02 '20 14:07 zaccharieramzi

The Profiler works with both eager and non-eager execution.

On Thu, Jul 2, 2020 at 7:47 AM Zaccharie Ramzi [email protected] wrote:

Actually, it's just a matter of dtype...

If I set the type of the constant a to be tf.float32, I have the GPU computations as expected.

Maybe I can write another issue for that particular matter.

Anyway I would love to know how to profile without eager execution if possible.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/tensorflow/profiler/issues/24#issuecomment-653050539, or unsubscribe https://github.com/notifications/unsubscribe-auth/AE33L3JK73MMI5TSEUJUB3TRZSMZ3ANCNFSM4NJYTXXQ .

ckluk avatar Jul 08 '20 02:07 ckluk

Hi @ghjeong12 I was trying to do similar thing you mentioned above I tried to add

tf.profiler.experimental.start('logdir')
#inference part
tf.profiler.experimental.stop()

but I got

2020-07-21 07:44:50.141421: I tensorflow/core/profiler/internal/gpu/device_tracer.cc:223]  GpuTracer has collected 0 callback api events and 0 activity events.

May I ask how did you get it working?

edwardpwtsoi avatar Jul 21 '20 07:07 edwardpwtsoi

Hi,

I don't see anything wrong with how you invoke the profiler. It should work. Are you sure that your inference code is using GPU? Do you see CPU activities in the profile that you collected?

-ck

On Tue, Jul 21, 2020 at 12:46 AM edwardpwtsoi [email protected] wrote:

Hi @ghjeong12 https://github.com/ghjeong12 I was trying to do similar thing you mentioned above I tried to add

tf.profiler.experimental.start('logdir')#inference parttf.profiler.experimental.stop()

but I got

2020-07-21 07:44:50.141421: I tensorflow/core/profiler/internal/gpu/device_tracer.cc:223] GpuTracer has collected 0 callback api events and 0 activity events.

May I ask how did you get it working?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/tensorflow/profiler/issues/24#issuecomment-661694164, or unsubscribe https://github.com/notifications/unsubscribe-auth/AE33L3MZDRUIDDFQHDRRLE3R4VBWLANCNFSM4NJYTXXQ .

ckluk avatar Jul 21 '20 17:07 ckluk

Hi, I don't see anything wrong with how you invoke the profiler. It should work. Are you sure that your inference code is using GPU? Do you see CPU activities in the profile that you collected?

Thank you so much for your reply.

I was using tensorflow:2.2.0-gpu, 2.3.0rc1-gpu, nightly-gpu docker images, but turns out they have the same result.

2020-07-21 08:57:12.514005: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1858] Adding visible gpu devices: 0, 1
2020-07-21 08:57:12.514097: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
2020-07-21 08:57:13.635530: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1257] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-07-21 08:57:13.635584: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1263]      0 1 
2020-07-21 08:57:13.635594: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1276] 0:   N Y 
2020-07-21 08:57:13.635601: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1276] 1:   Y N 

I don't see any CPU as well, I got a blank page for the profile tag on the tensorboard.

The inference part that I modified is function the predict_dataset in calamari_ocr/ocr/predictor.py from Calamari OCR

 def predict_dataset(self, dataset, progress_bar=True, tf_profiler=None):
        start_time = time.time()
        with StreamingInputDataset(dataset, self.predictors[0].data_preproc, self.predictors[0].text_postproc, None,
                                   processes=self.processes,
                                   ) as input_dataset:
            def progress_bar_wrapper(l):
                if progress_bar:
                    return tqdm(l, total=int(np.ceil(len(dataset) / self.batch_size)), desc="Prediction")
                else:
                    return l

            def batched_data_params():
                batch = []
                for data_idx, (image, _, params) in enumerate(input_dataset.generator(epochs=1)):
                    batch.append((data_idx, image, params))
                    if len(batch) == self.batch_size:
                        yield batch
                        batch = []

                if len(batch) > 0:
                    yield batch

            def process_one_batch(one_batch):
                sample_ids, batch_images, batch_params = zip(*one_batch)
                batch_samples = [dataset.samples()[i] for i in sample_ids]
                batch_prediction = self.predict_raw(batch_images, params=batch_params, progress_bar=False,
                                                    apply_preproc=False)
                return batch_prediction, batch_samples

            for batch in progress_bar_wrapper(batched_data_params()):
                if tf_profiler:
                    tf.profiler.experimental.start(tf_profiler) # WHERE PROFILER START
                    prediction, samples = process_one_batch(batch)
                    tf.profiler.experimental.stop()
                else:
                    prediction, samples = process_one_batch(batch)
                for result, sample in zip(prediction, samples):
                    yield result, sample

        print("Prediction of {} models took {}s".format(len(self.predictors), time.time() - start_time))

edwardpwtsoi avatar Jul 22 '20 01:07 edwardpwtsoi

Where is your GPU located? Is it on the same machine that you launch the tensorboard?

On Tue, Jul 21, 2020 at 6:27 PM edwardpwtsoi [email protected] wrote:

Hi, I don't see anything wrong with how you invoke the profiler. It should work. Are you sure that your inference code is using GPU? Do you see CPU activities in the profile that you collected? … <#m_2690062719312052181_>

Thank you so much for your reply.

I was using tensorflow:2.2.0-gpu, 2.3.0rc1-gpu, nightly-gpu docker images, but turns out they have the same result.

2020-07-21 08:57:12.514005: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1858] Adding visible gpu devices: 0, 1

2020-07-21 08:57:12.514097: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1

2020-07-21 08:57:13.635530: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1257] Device interconnect StreamExecutor with strength 1 edge matrix:

2020-07-21 08:57:13.635584: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1263] 0 1

2020-07-21 08:57:13.635594: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1276] 0: N Y

2020-07-21 08:57:13.635601: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1276] 1: Y N

I don't see any CPU as well, I got a blank page for the profile tag on the tensorboard.

The inference part that I modified is function the predict_dataset in calamari_ocr/ocr/predictor.py from Calamari OCR https://github.com/Calamari-OCR/calamari/blob/master/calamari_ocr/ocr/predictor.py

def predict_dataset(self, dataset, progress_bar=True, tf_profiler=None):

    start_time = time.time()

    with StreamingInputDataset(dataset, self.predictors[0].data_preproc, self.predictors[0].text_postproc, None,

                               processes=self.processes,

                               ) as input_dataset:

        def progress_bar_wrapper(l):

            if progress_bar:

                return tqdm(l, total=int(np.ceil(len(dataset) / self.batch_size)), desc="Prediction")

            else:

                return l



        def batched_data_params():

            batch = []

            for data_idx, (image, _, params) in enumerate(input_dataset.generator(epochs=1)):

                batch.append((data_idx, image, params))

                if len(batch) == self.batch_size:

                    yield batch

                    batch = []



            if len(batch) > 0:

                yield batch



        def process_one_batch(one_batch):

            sample_ids, batch_images, batch_params = zip(*one_batch)

            batch_samples = [dataset.samples()[i] for i in sample_ids]

            batch_prediction = self.predict_raw(batch_images, params=batch_params, progress_bar=False,

                                                apply_preproc=False)

            return batch_prediction, batch_samples



        for batch in progress_bar_wrapper(batched_data_params()):

            if tf_profiler:

                tf.profiler.experimental.start(tf_profiler) # WHERE PROFILER START

                prediction, samples = process_one_batch(batch)

                tf.profiler.experimental.stop()

            else:

                prediction, samples = process_one_batch(batch)

            for result, sample in zip(prediction, samples):

                yield result, sample



    print("Prediction of {} models took {}s".format(len(self.predictors), time.time() - start_time))

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/tensorflow/profiler/issues/24#issuecomment-662188988, or unsubscribe https://github.com/notifications/unsubscribe-auth/AE33L3IA6MAOILEN7T26T6DR4Y6A7ANCNFSM4NJYTXXQ .

ckluk avatar Jul 22 '20 01:07 ckluk

Where is your GPU located? Is it on the same machine that you launch the tensorboard?

Yes, they are in the same machine. It is an instance on GCP with 2 Tesla T4.

edwardpwtsoi avatar Jul 23 '20 00:07 edwardpwtsoi

Hmm ... you are using GCP. It may need some extra work.

Qiumin: What is your advice to this user? Thanks.

On Wed, Jul 22, 2020 at 5:55 PM edwardpwtsoi [email protected] wrote:

Where is your GPU located? Is it on the same machine that you launch the tensorboard? … <#m_7824133682833382793_>

Yes, they are in the same machine. It is an instance on GCP with 2 Tesla T4.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/tensorflow/profiler/issues/24#issuecomment-662769489, or unsubscribe https://github.com/notifications/unsubscribe-auth/AE33L3PK5NO3BLNMJ74L57LR46DAFANCNFSM4NJYTXXQ .

ckluk avatar Jul 23 '20 01:07 ckluk

Your usage looks fine. It would be helpful if you post the log of your model running. Any interesting log related to profiling?

qiuminxu avatar Jul 23 '20 03:07 qiuminxu

Hi Qiuminxu,

Thanks for your reply. I checked again in the log while running the profiling.

Here is the complete log

For output that related to profiler and seem related, I found the following lines. There is an error called CUPTI_ERROR_INSUFFICIENT_PRIVILEGES. I checked a little bit from nvidia Since, I am running the profiling inside a docker container. I think I could consider I have the admin privilege(please correct me If this statement is wrong). So, according to the CUDA 10.2 version, I should be able to get CUPTI_SUCCESS.

2020-07-23 10:58:42.644930: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
2020-07-23 10:58:44.165413: I tensorflow/core/profiler/lib/profiler_session.cc:164] Profiler session started.
2020-07-23 10:58:44.167708: I tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1391] Profiler found 2 GPUs
2020-07-23 10:58:44.197236: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcupti.so.10.1
2020-07-23 10:58:44.299258: E tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1441] function cupti_interface_->Subscribe( &subscriber_, (CUpti_CallbackFunc)ApiCallback, this)failed with error CUPTI_ERROR_INSUFFICIENT_PRIVILEGES
2020-07-23 10:58:44.299437: I tensorflow/core/profiler/internal/gpu/device_tracer.cc:223]  GpuTracer has collected 0 callback api events and 0 activity events. 
2020-07-23 10:58:44.314346: I tensorflow/python/profiler/internal/profiler_wrapper.cc:111] Creating directory: logs/profiler2/plugins/profile/2020_07_23_10_58_44Dumped tool data for xplane.pb to logs/profiler2/plugins/profile/2020_07_23_10_58_44/f8b4d99f5406.xplane.pb
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.100      Driver Version: 440.100      CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla T4            Off  | 00000000:00:04.0 Off |                    0 |
| N/A   60C    P0    29W /  70W |      0MiB / 15109MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  Tesla T4            Off  | 00000000:00:05.0 Off |                    0 |
| N/A   63C    P0    19W /  70W |      0MiB / 15109MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

edwardpwtsoi avatar Jul 23 '20 11:07 edwardpwtsoi

This line is causing error: 2020-07-23 10:58:44.299258: E tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1441] function cupti_interface_->Subscribe( &subscriber_, (CUpti_CallbackFunc)ApiCallback, this)failed with error CUPTI_ERROR_INSUFFICIENT_PRIVILEGES

This error occurs because cupti 10.1 requires root permission to profile. You can try the possible solutions here or https://www.tensorflow.org/guide/profiler#resolve_privilege_issues

qiuminxu avatar Jul 23 '20 18:07 qiuminxu

Hi Qiumin,

Thank you so much for your help. After I added the docker run option --privileged=true, the error gone. but unfortunately I still couldn't see anything on the profile page.

2020-07-24 10:13:41.001116: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
2020-07-24 10:13:42.340081: I tensorflow/core/profiler/lib/profiler_session.cc:164] Profiler session started.
2020-07-24 10:13:42.340176: I tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1391] Profiler found 2 GPUs
2020-07-24 10:13:42.341347: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcupti.so.10.1
2020-07-24 10:13:42.723911: I tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1513] CUPTI activity buffer flushed
2020-07-24 10:13:42.724007: I tensorflow/core/profiler/internal/gpu/device_tracer.cc:223]  GpuTracer has collected 0 callback api events and 0 activity events. 
2020-07-24 10:13:42.728144: I tensorflow/python/profiler/internal/profiler_wrapper.cc:111] Creating directory: logs/profiler6/plugins/profile/2020_07_24_10_13_42Dumped tool data for xplane.pb to logs/profiler6/plugins/profile/2020_07_24_10_13_42/44f687585eb8.xplane.pb

The log changed to buffer flushed, but as the following line said. GpuTracer has collected 0 callback api events and 0 activity events. I think that's the reason why I didn't do not see anything on Tensorboard.

edwardpwtsoi avatar Jul 24 '20 10:07 edwardpwtsoi

@edwardpwtsoi did you ever get this resolved? I have similar issue with simple code

  1 import tensorflow as tf
  2
  3 def main():
  4     with tf.compat.v1.Session() as sess:
  5         with tf.device("/GPU:0"):
  6             a = tf.random.uniform((4,4))
  7             b = tf.random.uniform((4,4))
  8             c = tf.matmul(a,b)
  9
 10             tf.profiler.experimental.start("./logs")
 11             sess.run(c)
 12             tf.profiler.experimental.stop()
 13
 14 if __name__ == '__main__':
 15     main()

I get following output, which seems fine but I get nothing on tensorboard

2021-01-07 17:08:55.627734: I tensorflow/core/profiler/lib/profiler_session.cc:164] Profiler session started.
2021-01-07 17:08:55.627795: I tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1391] Profiler found 4 GPUs
2021-01-07 17:08:55.628709: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcupti.so.10.1
2021-01-07 17:08:56.372003: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcublas.so.10
2021-01-07 17:08:56.901856: I tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1513] CUPTI activity buffer flushed
2021-01-07 17:08:56.902300: I tensorflow/core/profiler/internal/gpu/device_tracer.cc:223]  GpuTracer has collected 5 callback api events and 5 activity events.
2021-01-07 17:08:56.912179: I tensorflow/core/profiler/rpc/client/save_profile.cc:176] Creating directory: ./logs/plugins/profile/2021_01_07_17_08_56
2021-01-07 17:08:56.912569: I tensorflow/core/profiler/rpc/client/save_profile.cc:182] Dumped gzipped tool data for trace.json.gz to ./logs/plugins/profile/2021_01_07_17_08_56/moxli001.trace.json.gz
2021-01-07 17:08:56.915778: I tensorflow/core/profiler/rpc/client/save_profile.cc:176] Creating directory: ./logs/plugins/profile/2021_01_07_17_08_56
2021-01-07 17:08:56.916089: I tensorflow/core/profiler/rpc/client/save_profile.cc:182] Dumped gzipped tool data for memory_profile.json.gz to ./logs/plugins/profile/2021_01_07_17_08_56/moxli001.memory_profile.json.gz
2021-01-07 17:08:56.916256: I tensorflow/python/profiler/internal/profiler_wrapper.cc:111] Creating directory: ./logs/plugins/profile/2021_01_07_17_08_56Dumped tool data for xplane.pb to ./logs/plugins/profile/2021_01_07_17_08_56/moxli001.xplane.pb
Dumped tool data for overview_page.pb to ./logs/plugins/profile/2021_01_07_17_08_56/moxli001.overview_page.pb
Dumped tool data for input_pipeline.pb to ./logs/plugins/profile/2021_01_07_17_08_56/moxli001.input_pipeline.pb
Dumped tool data for tensorflow_stats.pb to ./logs/plugins/profile/2021_01_07_17_08_56/moxli001.tensorflow_stats.pb
Dumped tool data for kernel_stats.pb to ./logs/plugins/profile/2021_01_07_17_08_56/moxli001.kernel_stats.pb

nishitnshah avatar Jan 08 '21 01:01 nishitnshah

Hi @qiuminxu @ckluk I think I'm the third who met "nothing show up in profile page".

Here's my code and logs:

import tensorflow as tf
import pandas as pd
import numpy as np


mo = tf.keras.models.load_model('/home/allxu/Desktop/tensorflow/model_1')
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

x_train_2d = x_train.reshape(x_train.shape[0], x_train.shape[1]* x_train.shape[2])
x_train_2d_60k = x_train_2d


from datetime import datetime
logs = "logs/" + datetime.now().strftime("%Y%m%d-%H%M%S")

#  Straight and Naive
tf.profiler.experimental.start(logs)
out_60k = mo(x_train_2d_60k)
tf.profiler.experimental.stop()

logs

2021-04-05 23:53:30.102056: I tensorflow/core/profiler/lib/profiler_session.cc:136] Profiler session initializing.
2021-04-05 23:53:30.102078: I tensorflow/core/profiler/lib/profiler_session.cc:155] Profiler session started.
2021-04-05 23:53:30.102103: I tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1365] Profiler found 1 GPUs
2021-04-05 23:53:30.102712: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcupti.so.11.0
2021-04-05 23:53:30.403486: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcublas.so.11
2021-04-05 23:53:30.672671: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcublasLt.so.11
2021-04-05 23:53:30.686260: I tensorflow/core/profiler/lib/profiler_session.cc:71] Profiler session collecting data.
2021-04-05 23:53:30.686424: I tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1487] CUPTI activity buffer flushed
2021-04-05 23:53:30.839188: I tensorflow/core/profiler/internal/gpu/cupti_collector.cc:228]  GpuTracer has collected 9 callback api events and 9 activity events.
2021-04-05 23:53:30.840027: I tensorflow/core/profiler/lib/profiler_session.cc:172] Profiler session tear down.
2021-04-05 23:53:30.841110: I tensorflow/core/profiler/rpc/client/save_profile.cc:137] Creating directory: logs/20210405-235328/plugins/profile/2021_04_05_23_53_30
2021-04-05 23:53:30.841501: I tensorflow/core/profiler/rpc/client/save_profile.cc:143] Dumped gzipped tool data for trace.json.gz to logs/20210405-235328/plugins/profile/2021_04_05_23_53_30/allxu-pc.trace.json.gz
2021-04-05 23:53:30.843534: I tensorflow/core/profiler/rpc/client/save_profile.cc:137] Creating directory: logs/20210405-235328/plugins/profile/2021_04_05_23_53_30
2021-04-05 23:53:30.843732: I tensorflow/core/profiler/rpc/client/save_profile.cc:143] Dumped gzipped tool data for memory_profile.json.gz to logs/20210405-235328/plugins/profile/2021_04_05_23_53_30/allxu-pc.memory_profile.json.gz
2021-04-05 23:53:30.843874: I tensorflow/core/profiler/rpc/client/capture_profile.cc:251] Creating directory: logs/20210405-235328/plugins/profile/2021_04_05_23_53_30Dumped tool data for xplane.pb to logs/20210405-235328/plugins/profile/2021_04_05_23_53_30/allxu-pc.xplane.pb
Dumped tool data for overview_page.pb to logs/20210405-235328/plugins/profile/2021_04_05_23_53_30/allxu-pc.overview_page.pb
Dumped tool data for input_pipeline.pb to logs/20210405-235328/plugins/profile/2021_04_05_23_53_30/allxu-pc.input_pipeline.pb
Dumped tool data for tensorflow_stats.pb to logs/20210405-235328/plugins/profile/2021_04_05_23_53_30/allxu-pc.tensorflow_stats.pb
Dumped tool data for kernel_stats.pb to logs/20210405-235328/plugins/profile/2021_04_05_23_53_30/allxu-pc.kernel_stats.pb

wjxiz1992 avatar Apr 05 '21 15:04 wjxiz1992

I encountered the same issue. Are there any workarounds?

The logs show some events being collected, but there is no "profile" tab in tensorboard, it says "No dashboards are active for the current data set."

Code:

root=tf.saved_model.load(...)
infer = root.signatures['serving_default']
tf.profiler.experimental.start('/tmp/tensorboard')
infer(...)
tf.profiler.experimental.stop()

Tensorboard command:

tensorboard --logdir /tmp/tensorboard --port 6006 --bind_all

Logs:

2021-09-23 16:46:29.486077: I tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1513] CUPTI activity buffer flushed
2021-09-23 16:46:29.552133: I tensorflow/core/profiler/internal/gpu/device_tracer.cc:223]  GpuTracer has collected 1245 callback api events and 1245 activity events.
2021-09-23 16:46:29.699533: I tensorflow/core/profiler/rpc/client/save_profile.cc:176] Creating directory: /tmp/tensorboard/plugins/profile/2021_09_23_16_46_29
2021-09-23 16:46:29.748353: I tensorflow/core/profiler/rpc/client/save_profile.cc:182] Dumped gzipped tool data for trace.json.gz to /tmp/tensorboard/plugins/profile/2021_09_23_16_46_29/nvidia-desktop.trace.json.gz
2021-09-23 16:46:29.916101: I tensorflow/core/profiler/rpc/client/save_profile.cc:176] Creating directory: /tmp/tensorboard/plugins/profile/2021_09_23_16_46_29
2021-09-23 16:46:29.927338: I tensorflow/core/profiler/rpc/client/save_profile.cc:182] Dumped gzipped tool data for memory_profile.json.gz to /tmp/tensorboard/plugins/profile/2021_09_23_16_46_29/nvidia-desktop.memory_profile.json.gz
2021-09-23 16:46:29.933658: I tensorflow/python/profiler/internal/profiler_wrapper.cc:111] Creating directory: /tmp/tensorboard/plugins/profile/2021_09_23_16_46_29Dumped tool data for xplane.pb to /tmp/tensorboard/plugins/profile/2021_09_23_16_46_29/nvidia-desktop.xplane.pb
Dumped tool data for overview_page.pb to /tmp/tensorboard/plugins/profile/2021_09_23_16_46_29/nvidia-desktop.overview_page.pb
Dumped tool data for input_pipeline.pb to /tmp/tensorboard/plugins/profile/2021_09_23_16_46_29/nvidia-desktop.input_pipeline.pb
Dumped tool data for tensorflow_stats.pb to /tmp/tensorboard/plugins/profile/2021_09_23_16_46_29/nvidia-desktop.tensorflow_stats.pb
Dumped tool data for kernel_stats.pb to /tmp/tensorboard/plugins/profile/2021_09_23_16_46_29/nvidia-desktop.kernel_stats.pb

mcellis33 avatar Sep 23 '21 23:09 mcellis33

Hi,

Is it possible for you to send us your log directory that contains the profile files?

On Thu, Sep 23, 2021 at 4:58 PM mcellis33 @.***> wrote:

I encountered the same issue. Are there any workarounds?

The logs show some events being collected, but there is no "profile" tab in tensorboard, it says "No dashboards are active for the current data set."

Code:

root=tf.saved_model.load(...) infer = root.signatures['serving_default'] tf.profiler.experimental.start('/tmp/tensorboard') infer(...) tf.profiler.experimental.stop()

Tensorboard command:

tensorboard --logdir /tmp/tensorboard --port 6006 --bind_all

Logs:

2021-09-23 16:46:29.486077: I tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1513] CUPTI activity buffer flushed 2021-09-23 16:46:29.552133: I tensorflow/core/profiler/internal/gpu/device_tracer.cc:223] GpuTracer has collected 1245 callback api events and 1245 activity events. 2021-09-23 16:46:29.699533: I tensorflow/core/profiler/rpc/client/save_profile.cc:176] Creating directory: /tmp/tensorboard/plugins/profile/2021_09_23_16_46_29 2021-09-23 16:46:29.748353: I tensorflow/core/profiler/rpc/client/save_profile.cc:182] Dumped gzipped tool data for trace.json.gz to /tmp/tensorboard/plugins/profile/2021_09_23_16_46_29/nvidia-desktop.trace.json.gz 2021-09-23 16:46:29.916101: I tensorflow/core/profiler/rpc/client/save_profile.cc:176] Creating directory: /tmp/tensorboard/plugins/profile/2021_09_23_16_46_29 2021-09-23 16:46:29.927338: I tensorflow/core/profiler/rpc/client/save_profile.cc:182] Dumped gzipped tool data for memory_profile.json.gz to /tmp/tensorboard/plugins/profile/2021_09_23_16_46_29/nvidia-desktop.memory_profile.json.gz 2021-09-23 16:46:29.933658: I tensorflow/python/profiler/internal/profiler_wrapper.cc:111] Creating directory: /tmp/tensorboard/plugins/profile/2021_09_23_16_46_29Dumped tool data for xplane.pb to /tmp/tensorboard/plugins/profile/2021_09_23_16_46_29/nvidia-desktop.xplane.pb Dumped tool data for overview_page.pb to /tmp/tensorboard/plugins/profile/2021_09_23_16_46_29/nvidia-desktop.overview_page.pb Dumped tool data for input_pipeline.pb to /tmp/tensorboard/plugins/profile/2021_09_23_16_46_29/nvidia-desktop.input_pipeline.pb Dumped tool data for tensorflow_stats.pb to /tmp/tensorboard/plugins/profile/2021_09_23_16_46_29/nvidia-desktop.tensorflow_stats.pb Dumped tool data for kernel_stats.pb to /tmp/tensorboard/plugins/profile/2021_09_23_16_46_29/nvidia-desktop.kernel_stats.pb

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/tensorflow/profiler/issues/24#issuecomment-926246574, or unsubscribe https://github.com/notifications/unsubscribe-auth/AE33L3LEEKKIBAAWZXCBICLUDO5JJANCNFSM4NJYTXXQ . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

ckluk avatar Sep 24 '21 00:09 ckluk

@ckluk Hi, I met with this 'No dashboards are active for the current data set.' as well. my inference & profiling code:

tf.profiler.experimental.start('logdir')
result = session.run(output_data, feed_dict={input_t1: input_data})
tf.profiler.experimental.stop()

open tensorboard tensorboard --logdir=./logdir

logdir.zip

shawnxhong avatar Jul 15 '22 09:07 shawnxhong

@shawnxhong , @ghjeong12 , I have created inference model for VIT:I want to profile for tensorflow stats, but with below code I am getting no ops list in the profiler. Is something I am missing here or is there any other way to profile model inference

import tensorflow as tf

from transformers import AutoImageProcessor, TFViTForImageClassification
from datasets import load_dataset

dataset = load_dataset("huggingface/cats-image")
image = dataset["test"]["image"][0]

image_processor = AutoImageProcessor.from_pretrained("google/vit-base-patch16-224")
model = TFViTForImageClassification.from_pretrained("google/vit-base-patch16-224")

inputs = image_processor(image, return_tensors="tf")
from time import time
start_time = time()
tf.profiler.experimental.start('logdir')
logits = model(**inputs).logits
tf.profiler.experimental.stop()
end_time = time()
time_taken = end_time - start_time
print("average time (seconds) for VIT Inference: ", time_taken)

predicted_label = int(tf.math.argmax(logits, axis=-1))
print(model.config.id2label[predicted_label])
```
`


akote123 avatar Aug 07 '23 12:08 akote123