Tensorflow - Профиль Custom Op - PullRequest
       44

Tensorflow - Профиль Custom Op

0 голосов
/ 04 декабря 2018

Мне интересен способ измерения детальной производительности пользовательского Tensorflow Op при работе на GPU.

До сих пор я пробовал подход в этом посте с использованием временной шкалы, а также внутреннего Tensorflow Profiler (tf.profiler.Profiler).Оба дают очень похожие результаты, что хорошо, если я хочу исследовать сеть, но для профилирования одного операционного вывода вывод слишком грубый и не включает внутриоперационные вычисления (по крайней мере, я не мог найти способ для этого),Моей следующей попыткой было использование профилировщика CUDA nvprof (или nvvp в этом отношении), который более направлен в правильном направлении и отображает отдельные вызовы для ядер CUDA и распределения памяти.Но теперь, вычисления процессора не включены.Я попытался запустить nvprof --cpu-profiling on, но теперь профилировщик никогда не завершает работу (см. здесь )

Мой сценарий следующий: я написал пользовательский операционный инструмент, который очень похож на свертку в 2D ине должно занимать гораздо больше времени для расчета.В сети производительность моей пользовательской операции примерно в 3 раза хуже, чем tf.nn.conv2d.Используя tf.profiler.Profiler, я получаю следующее:

Profile:
node name                    | requested bytes             | total execution time          | accelerator execution time    | cpu execution time
CustomConv2DBackpropInput     72.09MB (100.00%, 7.04%),     194.36ms (100.00%, 38.05%),     49.82ms (100.00%, 17.61%),      144.54ms (100.00%, 63.44%)
CustomConv2D                  65.54MB (92.96%, 6.40%),      95.41ms (61.95%, 18.68%),       45.16ms (82.39%, 15.96%),       50.25ms (36.56%, 22.06%)
CustomConv2DBackpropFilter    134.48MB (86.55%, 13.14%),    72.39ms (43.27%, 14.17%),       41.22ms (66.44%, 14.56%),       31.17ms (14.50%, 13.68%)
Conv2DBackpropFilter          294.68MB (73.41%, 28.79%),    63.39ms (29.10%, 12.41%),       62.80ms (51.87%, 22.19%),       594us (0.82%, 0.26%)
Conv2DBackpropInput           230.97MB (44.62%, 22.57%),    48.77ms (16.69%, 9.55%),        48.16ms (29.68%, 17.02%),       610us (0.56%, 0.27%)
Conv2D                        225.74MB (22.06%, 22.06%),    36.50ms (7.15%, 7.15%),         35.84ms (12.66%, 12.66%),       664us (0.29%, 0.29%)

Так что мне кажется, что мои пользовательские операции занимают примерно столько же времени на графическом процессоре, но более чем на порядок больше времени на процессоре.Для операции с графическим процессором это неприемлемо, и я хотел бы выяснить, где мои сотрудники проводят это время на процессоре.Что меня еще больше поразило, так это то, что мои Ops, кажется, выделяют только одну треть памяти GPU, как это делают оригинальные Conv Ops.

Есть ли способ получить подробный профиль моей пользовательской операции (которая включает в себя CPU иИспользование графического процессора), который может объяснить мне, что я сделал неправильно, и помочь мне исправить мои ошибки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...