Интерпретация результатов инструмента оценки tenorflow - PullRequest
0 голосов
/ 20 марта 2019

Tensorflow имеет несколько инструментов для тестирования:

Для .pb модель и для .tflite модель

У меня есть несколько вопросов относительно параметров.pb benchmark tool:

  1. Связано ли num_threads с числом параллельных прогонов однопоточных экспериментов или с внутренними потоками, используемыми tenorflow?
  2. Возможно ли использовать графический процессор при сборке инструментадля рабочего стола, то есть не для мобильного?если это так, как убедиться, что графический процессор не используется?

Также несколько вопросов относительно интерпретации результатов:

  1. Что такое count в выводе результатов?Как Timings (microseconds): count= относится к параметру --max_num_runs?

Пример:

Run --num_threads=-1 --max_num_runs=1000:
    2019-03-20 14:30:33.253584: I tensorflow/core/util/stat_summarizer.cc:85] Timings (microseconds): count=1000 first=3608 curr=3873 min=3566 max=8009 avg=3766.49 std=202
    2019-03-20 14:30:33.253584: I tensorflow/core/util/stat_summarizer.cc:85] Memory (bytes): count=1000 curr=3301344(all same)
    2019-03-20 14:30:33.253591: I tensorflow/core/util/stat_summarizer.cc:85] 207 nodes observed
    2019-03-20 14:30:33.253597: I tensorflow/core/util/stat_summarizer.cc:85]
    2019-03-20 14:30:33.378352: I tensorflow/tools/benchmark/benchmark_model.cc:636] FLOPs estimate: 116.65M
    2019-03-20 14:30:33.378390: I tensorflow/tools/benchmark/benchmark_model.cc:638] FLOPs/second: 46.30B

Run --num_threads=1 --max_num_runs=1000:
    2019-03-20 14:32:25.591915: I tensorflow/core/util/stat_summarizer.cc:85] Timings (microseconds): count=1000 first=7502 curr=7543 min=7495 max=7716 avg=7607.22 std=34
    2019-03-20 14:32:25.591934: I tensorflow/core/util/stat_summarizer.cc:85] Memory (bytes): count=1000 curr=3301344(all same)
    2019-03-20 14:32:25.591952: I tensorflow/core/util/stat_summarizer.cc:85] 207 nodes observed
    2019-03-20 14:32:25.591970: I tensorflow/core/util/stat_summarizer.cc:85]
    2019-03-20 14:32:25.805970: I tensorflow/tools/benchmark/benchmark_model.cc:636] FLOPs estimate: 116.65M
    2019-03-20 14:32:25.806007: I tensorflow/tools/benchmark/benchmark_model.cc:638] FLOPs/second: 15.46B

Run --num_threads=-1 --max_num_runs=10000:
    2019-03-20 14:38:48.045824: I tensorflow/core/util/stat_summarizer.cc:85] Timings (microseconds): count=3570 first=3961 curr=3899 min=3558 max=6997 avg=3841.2 std=175
    2019-03-20 14:38:48.045829: I tensorflow/core/util/stat_summarizer.cc:85] Memory (bytes): count=3570 curr=3301344(all same)
    2019-03-20 14:38:48.045833: I tensorflow/core/util/stat_summarizer.cc:85] 207 nodes observed
    2019-03-20 14:38:48.045837: I tensorflow/core/util/stat_summarizer.cc:85]
    2019-03-20 14:38:48.169368: I tensorflow/tools/benchmark/benchmark_model.cc:636] FLOPs estimate: 116.65M
    2019-03-20 14:38:48.169412: I tensorflow/tools/benchmark/benchmark_model.cc:638] FLOPs/second: 48.66B

Run --num_threads=1 --max_num_runs=10000:
    2019-03-20 14:35:50.826722: I tensorflow/core/util/stat_summarizer.cc:85] Timings (microseconds): count=1254 first=7496 curr=7518 min=7475 max=7838 avg=7577.23 std=50
    2019-03-20 14:35:50.826735: I tensorflow/core/util/stat_summarizer.cc:85] Memory (bytes): count=1254 curr=3301344(all same)
    2019-03-20 14:35:50.826746: I tensorflow/core/util/stat_summarizer.cc:85] 207 nodes observed
    2019-03-20 14:35:50.826757: I tensorflow/core/util/stat_summarizer.cc:85]
    2019-03-20 14:35:51.053143: I tensorflow/tools/benchmark/benchmark_model.cc:636] FLOPs estimate: 116.65M
    2019-03-20 14:35:51.053180: I tensorflow/tools/benchmark/benchmark_model.cc:638] FLOPs/second: 15.55B

т.е. когда используется --max_num_runs=10000, количество равно count=3570 и count=1254 что это делаетзначит?

Для .tflite инструмента тестирования:

--num_threads=1 --num_runs=10000
    Initialized session in 0.682ms
    Running benchmark for at least 1 iterations and at least 0.5 seconds
    count=54 first=23463 curr=8019 min=7911 max=23463 avg=9268.5 std=2995
    Running benchmark for at least 1000 iterations and at least 1 seconds
    count=1000 first=8022 curr=6703 min=6613 max=10333 avg=6766.23 std=337
    Average inference timings in us: Warmup: 9268.5, Init: 682, no stats: 6766.23

Что означает no stats: 6766.23?

1 Ответ

3 голосов
/ 26 марта 2019

Немного покопавшись в коде, я обнаружил следующее (время в микросекундах):

  • count: количество фактических прогонов
  • first: время, необходимое для первой итерации
  • curr: время последней итерации заняло
  • min: минимальное время, необходимое для итерации
  • max: максимальное время, необходимое для итерации
  • avg: среднее время, необходимое для итерации
  • std: стандартное отклонение времени для всех прогонов
  • Warmup: средний прогрев
  • Init: время запуска (всегда должно совпадать с Initialized session in)
  • no stats: среднее время выполнения с очень плохим названием (соответствует avg= в предыдущей строке)
  • num_threads: используется для установки intra_op_parallelism_threads и inter_op_parallelism_threads (подробнее здесь )

Соответствующие файлы (связанные с соответствующими строками):

  • stats_calculator.h - код, который фактически отслеживает время выполнения
  • benchmark_model.cc (tflite) - странное имя "нет статистики"
  • benchmark_model.cc (pb) - Использование num_threads

Я не уверен в том, что использовать GPU против использования GPU. Если вы используете freeze_graph для экспорта файла .pb, он сохранит устройство каждого узла на графике. Вы можете использовать размещение устройства, чтобы сделать это перед экспортом. Если вам нужно изменить его после того, как вы попытаетесь установить переменную среды CUDA_VISIBLE_DEVICES="", чтобы убедиться, что графический процессор не используется.

...