Skip to content
This repository was archived by the owner on Feb 3, 2025. It is now read-only.

Commit c73b400

Browse files
author
DEKHTIARJonathan
committed
[TF-TRT] Remote Upload Implemented
1 parent 0de3370 commit c73b400

File tree

3 files changed

+61
-16
lines changed

3 files changed

+61
-16
lines changed

tftrt/benchmarking-python/benchmark_args.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -424,8 +424,16 @@ def _validate_args(self, args):
424424
"doesn't exist or is not a directory"
425425
)
426426

427-
if args.upload_metrics_endpoint is not None:
428-
raise NotImplementedError("This feature is not yet implemented.")
427+
# yapf: disable
428+
if (
429+
args.upload_metrics_endpoint is not None and
430+
args.experiment_name is None
431+
):
432+
raise NotImplementedError(
433+
"--experiment_name must be specified if "
434+
"--upload_metrics_endpoint is set."
435+
)
436+
# yapf: enable
429437

430438
def _post_process_args(self, args):
431439
if args.use_synthetic_data:

tftrt/benchmarking-python/benchmark_runner.py

Lines changed: 41 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
from benchmark_logger import logging
3333

3434
from benchmark_utils import DataAggregator
35+
from benchmark_utils import generate_json_metrics
3536
from benchmark_utils import print_dict
3637
from benchmark_utils import timed_section
3738

@@ -140,19 +141,12 @@ def _export_runtime_metrics_to_json(self, metric_dict):
140141
if file_path is None:
141142
return
142143

143-
metric_dict = {
144-
# Creating a copy to avoid modifying the original
145-
"results": copy.deepcopy(metric_dict),
146-
"runtime_arguments": vars(self._args)
147-
}
144+
json_string = generate_json_metrics(
145+
metrics=metric_dict,
146+
args=vars(self._args),
147+
)
148148

149149
with open(file_path, 'w') as json_f:
150-
json_string = json.dumps(
151-
metric_dict,
152-
default=lambda o: o.__dict__,
153-
sort_keys=True,
154-
indent=4
155-
)
156150
print(json_string, file=json_f)
157151

158152
except Exception as e:
@@ -205,6 +199,34 @@ def _export_runtime_metrics_to_csv(self, metric_dict):
205199
except Exception as e:
206200
logging.error(f"An exception occured during export to CSV: {e}")
207201

202+
def _upload_metrics_to_endpoint(self, metric_dict):
203+
204+
try:
205+
206+
if self._args.upload_metrics_endpoint is None:
207+
return
208+
209+
json_string = generate_json_metrics(
210+
metrics=metric_dict,
211+
args=vars(self._args),
212+
)
213+
214+
headers = {"Content-Type": "application/json"}
215+
216+
response = requests.put(
217+
endpoint, data=json.dumps(data), headers=headers
218+
)
219+
response.raise_for_status()
220+
221+
logging.info(
222+
"Metrics Uploaded to endpoint: "
223+
f"`{self._args.upload_metrics_endpoint}` with experiment name: "
224+
f"`{self._args.experiment_name}`."
225+
)
226+
227+
except Exception as e:
228+
logging.error(f"An exception occured during export to JSON: {e}")
229+
208230
def _get_graph_func(self):
209231
"""Retreives a frozen SavedModel and applies TF-TRT
210232
use_tftrt: bool, if true use TensorRT
@@ -587,9 +609,12 @@ def start_profiling():
587609
if not self._args.use_synthetic_data:
588610
data_aggregator.aggregate_data(y_pred, y)
589611

590-
if (not self._args.debug_performance and
591-
step_idx % self._args.display_every !=
592-
0): # avoids double printing
612+
# yapf: disable
613+
if (
614+
not self._args.debug_performance and
615+
# avoids double printing
616+
step_idx % self._args.display_every != 0
617+
):
593618
log_step(
594619
step_idx,
595620
display_every=1, # force print
@@ -602,6 +627,7 @@ def start_profiling():
602627
dequeue_times[-self._args.display_every:]
603628
) * 1000
604629
)
630+
# yapf: enable
605631

606632
if step_idx >= 100:
607633
stop_profiling()
@@ -668,6 +694,7 @@ def timing_metrics(time_arr, log_prefix):
668694

669695
self._export_runtime_metrics_to_json(metrics)
670696
self._export_runtime_metrics_to_csv(metrics)
697+
self._upload_metrics_to_endpoint(metrics)
671698

672699
def log_value(key, val):
673700
if isinstance(val, (int, str)):

tftrt/benchmarking-python/benchmark_utils.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
# Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
33
# -*- coding: utf-8 -*-
44

5+
import json
56
import time
67

78
import numpy as np
@@ -114,6 +115,15 @@ def _format(tensor):
114115
return predictions, expected
115116

116117

118+
def generate_json_metrics(metrics, args):
119+
metric_dict = {"results": metrics, "runtime_arguments": args}
120+
121+
json_string = json.dumps(
122+
metric_dict, default=lambda o: o.__dict__, sort_keys=True, indent=4
123+
)
124+
return json_string
125+
126+
117127
class DataAggregator(object):
118128

119129
def __init__(self, postprocess_model_outputs_fn, args):

0 commit comments

Comments
 (0)