itlab-vision / dl-benchmark

Deep Learning Inference benchmark. Supports OpenVINO™ toolkit, Caffe, TensorFlow, TensorFlow Lite, ONNX Runtime, OpenCV DNN, MXNet, PyTorch, Apache TVM, ncnn, etc.

Home Page:http://hpc-education.unn.ru/dli

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Полупустые логи формата .json

ismukhin opened this issue · comments

@n-berezina-nn, добрый день! После запуска бенчмарка выбрасываются полупустые логи.
Командная строка: python3 ./inference_benchmark.py -c ../config.xml -r result_onnx.csv
Конфиг:

<Tests>
    <Test>
        <Model>
            <Task>classification</Task>
            <Name>alexnet</Name>
            <Precision>FP32</Precision>
            <SourceFramework>ONNX Runtime Python</SourceFramework>
            <ModelPath>/home/vanya/projects/dl-benchmark/bvlcalexnet-12.onnx</ModelPath>
            <WeightsPath>/home/vanya/projects/dl-benchmark/src/inference/alexnet/quantized_int8_alexnet-0000.params</WeightsPath>
        </Model>
        <Dataset>
            <Name>apple</Name>
            <Path>/home/vanya/projects/dl-benchmark/img/apple.JPEG</Path>
        </Dataset>
        <FrameworkIndependent>
            <InferenceFramework>ONNX Runtime Python</InferenceFramework>
            <BatchSize>1</BatchSize>
            <Device>CPU</Device>
            <IterationCount>1</IterationCount>
            <TestTimeLimit>3</TestTimeLimit>
        </FrameworkIndependent>
        <FrameworkDependent>
            <ExecutionProviders>Default</ExecutionProviders>
            <InterThreadCount>3</InterThreadCount>
            <InputName>data_0</InputName>
            <Layout></Layout>
            <ExecutionMode></ExecutionMode>
            <InputScale>[0.229,0.224,0.225]</InputScale>
            <ThreadCount>3</ThreadCount>
            <InferenceRequestsCount>3</InferenceRequestsCount>
            <InputShape>[1,3,224,224]</InputShape>
            <Mean>[0.485,0.456,0.406]</Mean>
            <ChannelSwap></ChannelSwap>
        </FrameworkDependent>
    </Test>
</Tests>

Логи:

{
    "cmd_options": {
        "d": null,
        "dtype": null,
        "i": null,
        "m": null,
        "nireq": null,
        "nthreads": null,
        "save_report": "true",
        "shape": null,
        "t": null
    },
    "configurations_setup": {
        "batch_size": 1,
        "duration": null,
        "iterations_num": 1,
        "precision": null,
        "target_device": "CPU",
        "tensors_num": null,
        "threads_num": null
    },
    "execution_results": {
        "execution_time": 0.034,
        "first_inference_time": 0.03384,
        "iterations_num": 1,
        "latency_avg": 0.03384,
        "latency_std": 0.0,
        "latency_max": 0.03384,
        "latency_median": 0.03384,
        "latency_min": 0.03384,
        "read_network_time": null,
        "throughput": 29.547,
        "batch_throughput": 29.547
    },
    "framework_info": {
        "backend": null,
        "device": null,
        "name": "OnnxRuntime",
        "version": "1.16.0"
    }
}

Нет довольно много информации (например, не записывается имя модели, формат весов, размеры тензора и параметры командной строки при запуске скрипта инференса). Та же самая ситуация при запуске MXNet (остальные не смотрел, но, вероятно, будет тоже самое)

@ismukhin изначально смысл этих логов в том, чтобы заменить парсинг stdout для получения метрик производительности на вычитывание их из файла в объект. Формат файла совпадает с аналогичным форматов для c++ ланчеров. Остальные параметры в отчете получаются напрямую из конфигурации, вероятность ошибки при добавлении их в отчет гораздо меньше, чем при распарсивании текста.
Можно внести эти параметры в json report для python и c++ ланчеров, и тогда можно будет отказаться от csv отчета вовсе.

@ismukhin изначально смысл этих логов в том, чтобы заменить парсинг stdout для получения метрик производительности на вычитывание их из файла в объект. Формат файла совпадает с аналогичным форматов для c++ ланчеров. Остальные параметры в отчете получаются напрямую из конфигурации, вероятность ошибки при добавлении их в отчет гораздо меньше, чем при распарсивании текста. Можно внести эти параметры в json report для python и c++ ланчеров, и тогда можно будет отказаться от csv отчета вовсе.

@n-berezina-nn, дело в том, что в эти логи ничего, кроме метрик производительности не записывается, даже название модели, поэтому это выглядит очень странно и подозрительно.

эти логи изначально призваны сделать получение результата более стабильным, нежели парсинг stdout, особенно в случае добавления новых метрик, как это произошло летом.
Формат вдохновлен аналогичными логами от openvino benchmark app и отчетами от остальных наших c++ ланчеров.
если его менять, то менять везде.
это только перфоманс метрики, а не характеристики всего запуска

эти логи изначально призваны сделать получение результата более стабильным, нежели парсинг stdout, особенно в случае добавления новых метрик, как это произошло летом. Формат вдохновлен аналогичными логами от openvino benchmark app и отчетами от остальных наших c++ ланчеров. если его менять, то менять везде. это только перфоманс метрики, а не характеристики всего запуска

Согласно, что это гораздо лучше, чем парсинг stdout, но не понятно, зачем создавать пустые теги в этом отчете? По смыслу они должны давать полную информацию про тестовый запуск.