[EP Perf] Display percentage of cuda/trt ops in cuda/trt ep on EP Perf Dashboard (#18868)

### Description
Display percentage of cuda/trt ops in cuda/trt ep on EP Perf Dashboard:

![image](https://github.com/microsoft/onnxruntime/assets/109183385/bafba098-1338-46fa-b10a-ca19eff2a746)

Check
[here](https://msit.powerbi.com/groups/d1ae6355-afd0-4c40-b78e-676a86cab1e2/reports/82101bbb-dad2-4f24-9ddf-a37f0d41509a/ReportSectionda402bdf6824e505a614?experience=power-bi)
to preview on ep perf dashboard


### Motivation and Context
<!-- - Why is this change required? What problem does it solve?
- If it fixes an open issue, please link to the issue here. -->
- brief overview of op metrics towards various models
- easy to identify models which haven't reached 100% ops on cuda/trt ep.
This commit is contained in:
Yifan Li 2023-12-20 22:11:47 -08:00 committed by GitHub
parent ce70a30b94
commit 54e471a054
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 280 additions and 236 deletions

View file

@ -1590,6 +1590,34 @@ def output_metrics(model_to_metrics, csv_filename):
logger.info(f"Tensorrt ratio metrics are saved to csv file: {csv_filename}")
def output_op_metrics(model_to_metrics, csv_filename):
with open(csv_filename, mode="w", newline="") as csv_file:
csv_writer = csv.writer(csv_file)
csv_writer.writerow([model_title, "Ep", "op percentage in each ep"])
for model, ep_info in model_to_metrics.items():
if cuda in ep_info:
cuda_data = ep_info[cuda]["ratio_of_ops_in_cuda_not_fallback_cpu"]
csv_writer.writerow([model, cuda, cuda_data])
if cuda_fp16 in ep_info:
cuda_fp16_data = ep_info[cuda_fp16]["ratio_of_ops_in_cuda_not_fallback_cpu"]
csv_writer.writerow([model, cuda_fp16, cuda_fp16_data])
if cuda in ep_info and trt in ep_info:
total_ops_in_cuda = ep_info[cuda]["total_ops"]
cuda_cpu_ops_in_trt = ep_info[trt]["total_ops"]
trt_data = (total_ops_in_cuda - cuda_cpu_ops_in_trt) / total_ops_in_cuda
csv_writer.writerow([model, trt, trt_data])
if cuda_fp16 in ep_info and trt_fp16 in ep_info:
total_ops_in_cuda = ep_info[cuda_fp16]["total_ops"]
cuda_cpu_ops_in_trt = ep_info[trt_fp16]["total_ops"]
trt_fp16_data = (total_ops_in_cuda - cuda_cpu_ops_in_trt) / total_ops_in_cuda
csv_writer.writerow([model, trt_fp16, trt_fp16_data])
logger.info(
f"op metrics for cuda/trt ep are saved to csv file: {csv_filename} and will be displayed at Perf Dashboard"
)
def output_system_info(result, csv_filename):
with open(csv_filename, mode="a", newline="") as csv_file:
column_names = ["cpu_info", "cuda", "gpu_info", "linux_distro", "memory", "trt"]

View file

@ -1,3 +1,7 @@
# -------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
# --------------------------------------------------------------------------
import argparse # noqa: F401
import copy # noqa: F401
import csv # noqa: F401
@ -65,6 +69,7 @@ def main():
benchmark_fail_csv = fail_name + csv_ending # noqa: F405
benchmark_metrics_csv = metrics_name + csv_ending # noqa: F405
benchmark_op_metrics_csv = op_metrics_name + csv_ending # noqa: F405
benchmark_success_csv = success_name + csv_ending # noqa: F405
benchmark_latency_csv = latency_name + csv_ending # noqa: F405
benchmark_status_csv = status_name + csv_ending # noqa: F405
@ -166,6 +171,9 @@ def main():
model_to_metrics = read_map_from_file(METRICS_FILE) # noqa: F405
output_metrics(model_to_metrics, os.path.join(path, benchmark_metrics_csv)) # noqa: F405
logger.info(f"\nSaved model metrics results to {benchmark_metrics_csv}") # noqa: F405
# Output op metrics for dashboard display
output_op_metrics(model_to_metrics, os.path.join(path, benchmark_op_metrics_csv)) # noqa: F405
logger.info(f"\nSaved model op metrics results to {benchmark_op_metrics_csv}") # noqa: F405
if benchmark:
logger.info("\n=========================================") # noqa: F405

View file

@ -1,236 +1,236 @@
[
{
"model_name": "FasterRCNN-10",
"working_directory": "./onnx-zoo-models/FasterRCNN-10",
"model_path": "./faster_rcnn_R_50_FPN_1x.onnx",
"test_data_path": "./"
},
{
"model_name": "MaskRCNN-10",
"working_directory": "./onnx-zoo-models/MaskRCNN-10/",
"model_path": "./mask_rcnn_R_50_FPN_1x.onnx",
"test_data_path": "./"
},
{
"model_name": "mobilenetv2-7",
"working_directory": "./onnx-zoo-models/mobilenetv2-7/",
"model_path": "./mobilenetv2-7/mobilenetv2-7.onnx",
"test_data_path": "./mobilenetv2-7/"
},
{
"model_name": "resnet50-v1-7",
"working_directory": "./onnx-zoo-models/resnet50-v1-7/",
"model_path": "./resnet50v1/resnet50-v1-7.onnx",
"test_data_path": "./resnet50v1/"
},
{
"model_name": "resnet101-v1-7",
"working_directory": "./onnx-zoo-models/resnet101-v1-7/",
"model_path": "./resnet101v1/resnet101-v1-7.onnx",
"test_data_path": "./resnet101v1/"
},
{
"model_name": "resnet152-v1-7",
"working_directory": "./onnx-zoo-models/resnet152-v1-7/",
"model_path": "./resnet152v1/resnet152-v1-7.onnx",
"test_data_path": "./resnet152v1/"
},
{
"model_name": "resnet18-v2-7",
"working_directory": "./onnx-zoo-models/resnet18-v2-7/",
"model_path": "./resnet18v2/resnet18-v2-7.onnx",
"test_data_path": "./resnet18v2/"
},
{
"model_name": "resnet34-v2-7",
"working_directory": "./onnx-zoo-models/resnet34-v2-7/",
"model_path": "./resnet34v2/resnet34-v2-7.onnx",
"test_data_path": "./resnet34v2/"
},
{
"model_name": "resnet50-v2-7",
"working_directory": "./onnx-zoo-models/resnet50-v2-7/",
"model_path": "./resnet50v2/resnet50-v2-7.onnx",
"test_data_path": "./resnet50v2/"
},
{
"model_name": "resnet101-v2-7",
"working_directory": "./onnx-zoo-models/resnet101-v2-7/",
"model_path": "./resnet101v2/resnet101-v2-7.onnx",
"test_data_path": "./resnet101v2/"
},
{
"model_name": "resnet152-v2-7",
"working_directory": "./onnx-zoo-models/resnet152-v2-7/",
"model_path": "./resnet152v2/resnet152-v2-7.onnx",
"test_data_path": "./resnet152v2/"
},
{
"model_name": "squeezenet1.1-7",
"working_directory": "./onnx-zoo-models/squeezenet1.1-7/",
"model_path": "./squeezenet1.1/squeezenet1.1.onnx",
"test_data_path": "./squeezenet1.1/"
},
{
"model_name": "vgg16-7",
"working_directory": "./onnx-zoo-models/vgg16-7/",
"model_path": "./vgg16/vgg16.onnx",
"test_data_path": "./vgg16/"
},
{
"model_name": "vgg19-bn-7",
"working_directory": "./onnx-zoo-models/vgg19-bn-7/",
"model_path": "./vgg19-bn/vgg19-bn.onnx",
"test_data_path": "./vgg19-bn/"
},
{
"model_name": "bvlcalexnet-9",
"working_directory": "./onnx-zoo-models/bvlcalexnet-9/",
"model_path": "./bvlc_alexnet/model.onnx",
"test_data_path": "./bvlc_alexnet/"
},
{
"model_name": "googlenet-9",
"working_directory": "./onnx-zoo-models/googlenet-9/",
"model_path": "./bvlc_googlenet/model.onnx",
"test_data_path": "./bvlc_googlenet/"
},
{
"model_name": "caffenet-9",
"working_directory": "./onnx-zoo-models/caffenet-9/",
"model_path": "./bvlc_reference_caffenet/model.onnx",
"test_data_path": "./bvlc_reference_caffenet/"
},
{
"model_name": "rcnn-ilsvrc13-9",
"working_directory": "./onnx-zoo-models/rcnn-ilsvrc13-9/",
"model_path": "./bvlc_reference_rcnn_ilsvrc13/model.onnx",
"test_data_path": "./bvlc_reference_rcnn_ilsvrc13/"
},
{
"model_name": "densenet-9",
"working_directory": "./onnx-zoo-models/densenet-9/",
"model_path": "./densenet121/model.onnx",
"test_data_path": "./densenet121/"
},
{
"model_name": "inception-v1-9",
"working_directory": "./onnx-zoo-models/inception-v1-9/",
"model_path": "./inception_v1/model.onnx",
"test_data_path": "./inception_v1/"
},
{
"model_name": "inception-v2-9",
"working_directory": "./onnx-zoo-models/inception-v2-9/",
"model_path": "./inception_v2/model.onnx",
"test_data_path": "./inception_v2/"
},
{
"model_name": "shufflenet-9",
"working_directory": "./onnx-zoo-models/shufflenet-9/",
"model_path": "./shufflenet/model.onnx",
"test_data_path": "./shufflenet/"
},
{
"model_name": "shufflenet-v2-10",
"working_directory": "./onnx-zoo-models/shufflenet-v2-10/",
"model_path": "./model/test_shufflenetv2/model.onnx",
"test_data_path": "./model/test_shufflenetv2/"
},
{
"model_name": "mnist-8",
"working_directory": "./onnx-zoo-models/mnist-8/",
"model_path": "./mnist/model.onnx",
"test_data_path": "./mnist/"
},
{
"model_name": "tinyyolov2-8",
"working_directory": "./onnx-zoo-models/tinyyolov2-8/",
"model_path": "./tiny_yolov2/Model.onnx",
"test_data_path": "./tiny_yolov2/"
},
{
"model_name": "ssd-10",
"working_directory": "./onnx-zoo-models/ssd-10/",
"model_path": "./model.onnx",
"test_data_path": "./"
},
{
"model_name": "ssd_mobilenet_v1_10",
"working_directory": "./onnx-zoo-models/ssd_mobilenet_v1_10/",
"model_path": "./ssd_mobilenet_v1/ssd_mobilenet_v1.onnx",
"test_data_path": "./ssd_mobilenet_v1/"
},
{
"model_name": "retinanet-9",
"working_directory": "./onnx-zoo-models/retinanet-9/",
"model_path": "./test_retinanet_resnet101/retinanet-9.onnx",
"test_data_path": "./test_retinanet_resnet101/"
},
{
"model_name": "yolov3-10",
"working_directory": "./onnx-zoo-models/yolov3-10/",
"model_path": "./yolov3/yolov3.onnx",
"test_data_path": "./yolov3/"
},
{
"model_name": "tiny-yolov3-11",
"working_directory": "./onnx-zoo-models/tiny-yolov3-11/",
"model_path": "./yolov3-tiny.onnx",
"test_data_path": "./"
},
{
"model_name": "yolov4",
"working_directory": "./onnx-zoo-models/yolov4/",
"model_path": "./yolov4/yolov4_shape.onnx",
"test_data_path": "./yolov4/"
},
{
"model_name": "ResNet101-DUC-7",
"working_directory": "./onnx-zoo-models/ResNet101-DUC-7/",
"model_path": "./ResNet101_DUC_HDC/ResNet101_DUC_HDC.onnx",
"test_data_path": "./ResNet101_DUC_HDC/"
},
{
"model_name": "emotion-ferplus-8",
"working_directory": "./onnx-zoo-models/emotion-ferplus-8/",
"model_path": "./emotion_ferplus/model.onnx",
"test_data_path": "./emotion_ferplus/"
},
{
"model_name": "bertsquad-10",
"working_directory": "./onnx-zoo-models/bertsquad-10/",
"model_path": "./bertsquad-10/bertsquad10.onnx",
"test_data_path": "./bertsquad-10/"
},
{
"model_name": "gpt2-lm-head-10",
"working_directory": "./onnx-zoo-models/gpt2-lm-head-10/",
"model_path": "./GPT-2-LM-HEAD/model.onnx",
"test_data_path": "./GPT-2-LM-HEAD/"
},
{
"model_name": "gpt2-10",
"working_directory": "./onnx-zoo-models/gpt2-10/",
"model_path": "./GPT2/model.onnx",
"test_data_path": "./GPT2/"
},
{
"model_name": "zfnet512-9",
"working_directory": "./onnx-zoo-models/zfnet512-9/",
"model_path": "./zfnet512/model.onnx",
"test_data_path": "./zfnet512/"
},
{
"model_name": "arcfaceresnet100-8",
"working_directory": "./onnx-zoo-models/arcfaceresnet100-8/",
"model_path": "./resnet100/resnet100.onnx",
"test_data_path": "./resnet100/"
},
{
"model_name": "mosaic-9",
"working_directory": "./onnx-zoo-models/mosaic-9/",
"model_path": "./mosaic/mosaic.onnx",
"test_data_path": "./mosaic/"
}
]
{
"model_name": "FasterRCNN-10",
"working_directory": "./onnx-zoo-models/FasterRCNN-10",
"model_path": "./faster_rcnn_R_50_FPN_1x.onnx",
"test_data_path": "./"
},
{
"model_name": "MaskRCNN-10",
"working_directory": "./onnx-zoo-models/MaskRCNN-10/",
"model_path": "./mask_rcnn_R_50_FPN_1x.onnx",
"test_data_path": "./"
},
{
"model_name": "mobilenetv2-7",
"working_directory": "./onnx-zoo-models/mobilenetv2-7/",
"model_path": "./mobilenetv2-7/mobilenetv2-7.onnx",
"test_data_path": "./mobilenetv2-7/"
},
{
"model_name": "resnet50-v1-7",
"working_directory": "./onnx-zoo-models/resnet50-v1-7/",
"model_path": "./resnet50v1/resnet50-v1-7.onnx",
"test_data_path": "./resnet50v1/"
},
{
"model_name": "resnet101-v1-7",
"working_directory": "./onnx-zoo-models/resnet101-v1-7/",
"model_path": "./resnet101v1/resnet101-v1-7.onnx",
"test_data_path": "./resnet101v1/"
},
{
"model_name": "resnet152-v1-7",
"working_directory": "./onnx-zoo-models/resnet152-v1-7/",
"model_path": "./resnet152v1/resnet152-v1-7.onnx",
"test_data_path": "./resnet152v1/"
},
{
"model_name": "resnet18-v2-7",
"working_directory": "./onnx-zoo-models/resnet18-v2-7/",
"model_path": "./resnet18v2/resnet18-v2-7.onnx",
"test_data_path": "./resnet18v2/"
},
{
"model_name": "resnet34-v2-7",
"working_directory": "./onnx-zoo-models/resnet34-v2-7/",
"model_path": "./resnet34v2/resnet34-v2-7.onnx",
"test_data_path": "./resnet34v2/"
},
{
"model_name": "resnet50-v2-7",
"working_directory": "./onnx-zoo-models/resnet50-v2-7/",
"model_path": "./resnet50v2/resnet50-v2-7.onnx",
"test_data_path": "./resnet50v2/"
},
{
"model_name": "resnet101-v2-7",
"working_directory": "./onnx-zoo-models/resnet101-v2-7/",
"model_path": "./resnet101v2/resnet101-v2-7.onnx",
"test_data_path": "./resnet101v2/"
},
{
"model_name": "resnet152-v2-7",
"working_directory": "./onnx-zoo-models/resnet152-v2-7/",
"model_path": "./resnet152v2/resnet152-v2-7.onnx",
"test_data_path": "./resnet152v2/"
},
{
"model_name": "squeezenet1.1-7",
"working_directory": "./onnx-zoo-models/squeezenet1.1-7/",
"model_path": "./squeezenet1.1/squeezenet1.1.onnx",
"test_data_path": "./squeezenet1.1/"
},
{
"model_name": "vgg16-7",
"working_directory": "./onnx-zoo-models/vgg16-7/",
"model_path": "./vgg16/vgg16.onnx",
"test_data_path": "./vgg16/"
},
{
"model_name": "vgg19-bn-7",
"working_directory": "./onnx-zoo-models/vgg19-bn-7/",
"model_path": "./vgg19-bn/vgg19-bn.onnx",
"test_data_path": "./vgg19-bn/"
},
{
"model_name": "bvlcalexnet-9",
"working_directory": "./onnx-zoo-models/bvlcalexnet-9/",
"model_path": "./bvlc_alexnet/model.onnx",
"test_data_path": "./bvlc_alexnet/"
},
{
"model_name": "googlenet-9",
"working_directory": "./onnx-zoo-models/googlenet-9/",
"model_path": "./bvlc_googlenet/model.onnx",
"test_data_path": "./bvlc_googlenet/"
},
{
"model_name": "caffenet-9",
"working_directory": "./onnx-zoo-models/caffenet-9/",
"model_path": "./bvlc_reference_caffenet/model.onnx",
"test_data_path": "./bvlc_reference_caffenet/"
},
{
"model_name": "rcnn-ilsvrc13-9",
"working_directory": "./onnx-zoo-models/rcnn-ilsvrc13-9/",
"model_path": "./bvlc_reference_rcnn_ilsvrc13/model.onnx",
"test_data_path": "./bvlc_reference_rcnn_ilsvrc13/"
},
{
"model_name": "densenet-9",
"working_directory": "./onnx-zoo-models/densenet-9/",
"model_path": "./densenet121/model.onnx",
"test_data_path": "./densenet121/"
},
{
"model_name": "inception-v1-9",
"working_directory": "./onnx-zoo-models/inception-v1-9/",
"model_path": "./inception_v1/model.onnx",
"test_data_path": "./inception_v1/"
},
{
"model_name": "inception-v2-9",
"working_directory": "./onnx-zoo-models/inception-v2-9/",
"model_path": "./inception_v2/model.onnx",
"test_data_path": "./inception_v2/"
},
{
"model_name": "shufflenet-9",
"working_directory": "./onnx-zoo-models/shufflenet-9/",
"model_path": "./shufflenet/model.onnx",
"test_data_path": "./shufflenet/"
},
{
"model_name": "shufflenet-v2-10",
"working_directory": "./onnx-zoo-models/shufflenet-v2-10/",
"model_path": "./model/test_shufflenetv2/model.onnx",
"test_data_path": "./model/test_shufflenetv2/"
},
{
"model_name": "mnist-8",
"working_directory": "./onnx-zoo-models/mnist-8/",
"model_path": "./mnist/model.onnx",
"test_data_path": "./mnist/"
},
{
"model_name": "tinyyolov2-8",
"working_directory": "./onnx-zoo-models/tinyyolov2-8/",
"model_path": "./tiny_yolov2/Model.onnx",
"test_data_path": "./tiny_yolov2/"
},
{
"model_name": "ssd-10",
"working_directory": "./onnx-zoo-models/ssd-10/",
"model_path": "./model.onnx",
"test_data_path": "./"
},
{
"model_name": "ssd_mobilenet_v1_10",
"working_directory": "./onnx-zoo-models/ssd_mobilenet_v1_10/",
"model_path": "./ssd_mobilenet_v1/ssd_mobilenet_v1.onnx",
"test_data_path": "./ssd_mobilenet_v1/"
},
{
"model_name": "retinanet-9",
"working_directory": "./onnx-zoo-models/retinanet-9/",
"model_path": "./test_retinanet_resnet101/retinanet-9.onnx",
"test_data_path": "./test_retinanet_resnet101/"
},
{
"model_name": "yolov3-10",
"working_directory": "./onnx-zoo-models/yolov3-10/",
"model_path": "./yolov3/yolov3.onnx",
"test_data_path": "./yolov3/"
},
{
"model_name": "tiny-yolov3-11",
"working_directory": "./onnx-zoo-models/tiny-yolov3-11/",
"model_path": "./yolov3-tiny.onnx",
"test_data_path": "./"
},
{
"model_name": "yolov4",
"working_directory": "./onnx-zoo-models/yolov4/",
"model_path": "./yolov4/yolov4_shape.onnx",
"test_data_path": "./yolov4/"
},
{
"model_name": "ResNet101-DUC-7",
"working_directory": "./onnx-zoo-models/ResNet101-DUC-7/",
"model_path": "./ResNet101_DUC_HDC/ResNet101_DUC_HDC.onnx",
"test_data_path": "./ResNet101_DUC_HDC/"
},
{
"model_name": "emotion-ferplus-8",
"working_directory": "./onnx-zoo-models/emotion-ferplus-8/",
"model_path": "./emotion_ferplus/model.onnx",
"test_data_path": "./emotion_ferplus/"
},
{
"model_name": "bertsquad-10",
"working_directory": "./onnx-zoo-models/bertsquad-10/",
"model_path": "./bertsquad-10/bertsquad10.onnx",
"test_data_path": "./bertsquad-10/"
},
{
"model_name": "gpt2-lm-head-10",
"working_directory": "./onnx-zoo-models/gpt2-lm-head-10/",
"model_path": "./GPT-2-LM-HEAD/model.onnx",
"test_data_path": "./GPT-2-LM-HEAD/"
},
{
"model_name": "gpt2-10",
"working_directory": "./onnx-zoo-models/gpt2-10/",
"model_path": "./GPT2/model.onnx",
"test_data_path": "./GPT2/"
},
{
"model_name": "zfnet512-9",
"working_directory": "./onnx-zoo-models/zfnet512-9/",
"model_path": "./zfnet512/model.onnx",
"test_data_path": "./zfnet512/"
},
{
"model_name": "arcfaceresnet100-8",
"working_directory": "./onnx-zoo-models/arcfaceresnet100-8/",
"model_path": "./resnet100/resnet100.onnx",
"test_data_path": "./resnet100/"
},
{
"model_name": "mosaic-9",
"working_directory": "./onnx-zoo-models/mosaic-9/",
"model_path": "./mosaic/mosaic.onnx",
"test_data_path": "./mosaic/"
}
]

View file

@ -39,6 +39,7 @@ latency_over_time_name = "latency_over_time"
specs_name = "specs"
session_name = "session"
session_over_time_name = "session_over_time"
op_metrics_name = "op_metrics"
# column names
model_title = "Model"

View file

@ -24,6 +24,7 @@ from perf_utils import (
memory_name,
memory_over_time_name,
model_title,
op_metrics_name,
ort_provider_list,
provider_list,
second,
@ -415,6 +416,7 @@ def main():
specs_name,
session_name,
session_over_time_name,
op_metrics_name,
]
table_results = {}
@ -457,6 +459,11 @@ def main():
table_results[status_name] = pd.concat(
[table_results[status_name], get_status(table, model_group)], ignore_index=True
)
elif op_metrics_name in csv:
table = table.assign(Group=model_group)
table_results[op_metrics_name] = pd.concat(
[table_results[op_metrics_name], table], ignore_index=True
)
os.chdir(result_file)
if not table_results[memory_name].empty:

View file

@ -66,7 +66,7 @@ ARG ONNXRUNTIME_BRANCH=main
ARG ONNXRUNTIME_COMMIT_ID
# The supported CUDA architecture
ARG CMAKE_CUDA_ARCHITECTURES=37;50;52;60;61;70;75;80
ARG CMAKE_CUDA_ARCHITECTURES=75
WORKDIR ${ONNXRUNTIME_LOCAL_CODE_DIR}