10
10
import paddle
11
11
from paddle import inference
12
12
13
- sys .path .append ("../../" )
13
+ from paddlenlp .utils .log import logger
14
+
15
+ sys .path .append (
16
+ os .path .abspath (
17
+ os .path .join (os .path .dirname (__file__ ), os .pardir , os .pardir )))
14
18
import reader
15
19
16
20
@@ -44,6 +48,17 @@ def parse_args():
44
48
)
45
49
parser .add_argument (
46
50
"--profile" , action = "store_true" , help = "Whether to profile. " )
51
+ parser .add_argument (
52
+ "--test_file" ,
53
+ default = None ,
54
+ type = str ,
55
+ help = "The file for testing. Normally, it shouldn't be set and in this case, the default WMT14 dataset will be used to process testing."
56
+ )
57
+ parser .add_argument (
58
+ "--save_log_path" ,
59
+ default = "./output/" ,
60
+ type = str ,
61
+ help = "The path to save logs when profile is enabled. " )
47
62
args = parser .parse_args ()
48
63
return args
49
64
@@ -65,11 +80,11 @@ def post_process_seq(seq, bos_idx, eos_idx, output_bos=False, output_eos=False):
65
80
66
81
67
82
class Predictor (object ):
68
- def __init__ (self , predictor , input_handles , output_handles , recorder = None ):
83
+ def __init__ (self , predictor , input_handles , output_handles , autolog = None ):
69
84
self .predictor = predictor
70
85
self .input_handles = input_handles
71
86
self .output_handles = output_handles
72
- self .recorder = recorder
87
+ self .autolog = autolog
73
88
74
89
@classmethod
75
90
def create_predictor (cls , args , config = None , profile = False ,
@@ -92,9 +107,24 @@ def create_predictor(cls, args, config=None, profile=False,
92
107
config .switch_use_feed_fetch_ops (False )
93
108
94
109
if profile :
95
- recorder = Recorder (config , args .infer_batch_size , model_name )
110
+ pid = os .getpid ()
111
+ autolog = auto_log .AutoLogger (
112
+ model_name = args .model_name ,
113
+ model_precision = "fp32" ,
114
+ batch_size = args .infer_batch_size ,
115
+ save_path = args .save_log_path ,
116
+ inference_config = config ,
117
+ data_shape = "dynamic" ,
118
+ pids = pid ,
119
+ process_name = None ,
120
+ gpu_ids = 0 ,
121
+ time_keys = [
122
+ 'preprocess_time' , 'inference_time' , 'postprocess_time'
123
+ ],
124
+ warmup = 0 ,
125
+ logger = logger )
96
126
else :
97
- recorder = None
127
+ autolog = None
98
128
99
129
predictor = inference .create_predictor (config )
100
130
input_handles = [
@@ -105,7 +135,7 @@ def create_predictor(cls, args, config=None, profile=False,
105
135
predictor .get_output_handle (name )
106
136
for name in predictor .get_output_names ()
107
137
]
108
- return cls (predictor , input_handles , output_handles , recorder )
138
+ return cls (predictor , input_handles , output_handles , autolog )
109
139
110
140
def predict_batch (self , data ):
111
141
for input_field , input_handle in zip (data , self .input_handles ):
@@ -120,21 +150,19 @@ def predict_batch(self, data):
120
150
def predict (self , test_loader , to_tokens , n_best , bos_idx , eos_idx ):
121
151
outputs = []
122
152
samples = 0
123
- if self .recorder is not None :
124
- cpu_rss_mb , gpu_rss_mb = 0 , 0
125
- gpu_id = 0
126
- gpu_util = 0
127
- self .recorder .tic ()
153
+ if self .autolog is not None :
154
+ self .autolog .times .start ()
128
155
129
156
for data in test_loader :
130
157
samples += len (data [0 ])
158
+
159
+ if self .autolog is not None :
160
+ self .autolog .times .stamp ()
161
+
131
162
output = self .predict_batch (data )
132
163
133
- if self .recorder is not None :
134
- cm , gm = Recorder .get_current_memory_mb (gpu_id )
135
- cpu_rss_mb += cm
136
- gpu_rss_mb += gm
137
- gpu_util += Recorder .get_current_gputil (gpu_id )
164
+ if self .autolog is not None :
165
+ self .autolog .times .stamp ()
138
166
139
167
finished_sequence = output [0 ].transpose ([0 , 2 , 1 ])
140
168
for ins in finished_sequence :
@@ -148,13 +176,8 @@ def predict(self, test_loader, to_tokens, n_best, bos_idx, eos_idx):
148
176
n_best_seq .append (sequence )
149
177
outputs .append (n_best_seq )
150
178
151
- if self .recorder is not None :
152
- self .recorder .toc (samples )
153
- self .recorder .get_device_info (
154
- cpu_rss_mb = cpu_rss_mb / len (test_loader ),
155
- gpu_rss_mb = gpu_rss_mb / len (test_loader ),
156
- gpu_util = gpu_util / len (test_loader ))
157
- self .recorder .report ()
179
+ if self .autolog is not None :
180
+ self .autolog .times .end (stamp = True )
158
181
return outputs
159
182
160
183
@@ -173,13 +196,15 @@ def do_inference(args):
173
196
f .write (sequence + "\n " )
174
197
f .close ()
175
198
199
+ if args .profile :
200
+ predictor .autolog .report ()
201
+
176
202
177
203
if __name__ == "__main__" :
178
204
ARGS = parse_args ()
179
205
yaml_file = ARGS .config
180
206
with open (yaml_file , 'rt' ) as f :
181
207
args = AttrDict (yaml .safe_load (f ))
182
- pprint (args )
183
208
args .benchmark = ARGS .benchmark
184
209
args .device = ARGS .device
185
210
args .use_mkl = ARGS .use_mkl
@@ -190,8 +215,11 @@ def do_inference(args):
190
215
args .model_name = "transformer_base" if "base" in ARGS .config else "transformer_big"
191
216
if ARGS .model_dir != "" :
192
217
args .inference_model_dir = ARGS .model_dir
218
+ args .test_file = ARGS .test_file
219
+ args .save_log_path = ARGS .save_log_path
220
+ pprint (args )
193
221
194
222
if args .profile :
195
- from utils . recorder import Recorder
223
+ import auto_log
196
224
197
225
do_inference (args )
0 commit comments