99import json
1010import logging as _logging
1111import os
12+ import requests
1213import sys
1314import time
1415
3233from benchmark_logger import logging
3334
3435from benchmark_utils import DataAggregator
36+ from benchmark_utils import generate_json_metrics
3537from benchmark_utils import print_dict
3638from benchmark_utils import timed_section
3739
@@ -140,19 +142,12 @@ def _export_runtime_metrics_to_json(self, metric_dict):
140142 if file_path is None :
141143 return
142144
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- }
145+ json_string = generate_json_metrics (
146+ metrics = metric_dict ,
147+ args = vars (self ._args ),
148+ )
148149
149150 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- )
156151 print (json_string , file = json_f )
157152
158153 except Exception as e :
@@ -205,6 +200,36 @@ def _export_runtime_metrics_to_csv(self, metric_dict):
205200 except Exception as e :
206201 logging .error (f"An exception occured during export to CSV: { e } " )
207202
203+ def _upload_metrics_to_endpoint (self , metric_dict ):
204+
205+ try :
206+
207+ if self ._args .upload_metrics_endpoint is None :
208+ return
209+
210+ json_string = generate_json_metrics (
211+ metrics = metric_dict ,
212+ args = vars (self ._args ),
213+ )
214+
215+ headers = {"Content-Type" : "application/json" }
216+
217+ response = requests .put (
218+ self ._args .upload_metrics_endpoint ,
219+ data = json_string ,
220+ headers = headers
221+ )
222+ response .raise_for_status ()
223+
224+ logging .info (
225+ "Metrics Uploaded to endpoint: "
226+ f"`{ self ._args .upload_metrics_endpoint } ` with experiment name: "
227+ f"`{ self ._args .experiment_name } `."
228+ )
229+
230+ except Exception as e :
231+ logging .error (f"An exception occured during export to JSON: { e } " )
232+
208233 def _get_graph_func (self ):
209234 """Retreives a frozen SavedModel and applies TF-TRT
210235 use_tftrt: bool, if true use TensorRT
@@ -587,9 +612,12 @@ def start_profiling():
587612 if not self ._args .use_synthetic_data :
588613 data_aggregator .aggregate_data (y_pred , y )
589614
590- if (not self ._args .debug_performance and
591- step_idx % self ._args .display_every !=
592- 0 ): # avoids double printing
615+ # yapf: disable
616+ if (
617+ not self ._args .debug_performance and
618+ # avoids double printing
619+ step_idx % self ._args .display_every != 0
620+ ):
593621 log_step (
594622 step_idx ,
595623 display_every = 1 , # force print
@@ -602,6 +630,7 @@ def start_profiling():
602630 dequeue_times [- self ._args .display_every :]
603631 ) * 1000
604632 )
633+ # yapf: enable
605634
606635 if step_idx >= 100 :
607636 stop_profiling ()
@@ -668,6 +697,7 @@ def timing_metrics(time_arr, log_prefix):
668697
669698 self ._export_runtime_metrics_to_json (metrics )
670699 self ._export_runtime_metrics_to_csv (metrics )
700+ self ._upload_metrics_to_endpoint (metrics )
671701
672702 def log_value (key , val ):
673703 if isinstance (val , (int , str )):
0 commit comments