Skip to content

Commit ac3a616

Browse files
FrostMLZeyuChen
andauthored
Add ci/ce for transformer (#776)
* full link shell * update log * delete utils for python inference Co-authored-by: Zeyu Chen <[email protected]>
1 parent fda3ff7 commit ac3a616

File tree

12 files changed

+403
-410
lines changed

12 files changed

+403
-410
lines changed
Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,32 @@
11
#!/bin/bash
2-
model_dir=$1
2+
model_dir=${1}
3+
model=${2}
34
mkdir -p output_pipeline
45
log_path="output_pipeline"
56

67
for batch_size in "1" "2" "4"; do
78
python inference.py \
8-
--config="../../configs/transformer.base.yaml" \
9+
--config="../../configs/transformer.${model}.yaml" \
910
--device cpu \
1011
--model_dir=${model_dir} \
1112
--batch_size=${batch_size} \
12-
--profile > ${log_path}/transformer_base_cpu_nomkl_bs${batch_size}_inference.log 2>&1
13+
--profile > ${log_path}/transformer_${model}_cpu_nomkl_bs${batch_size}_inference.log 2>&1
1314

1415
for threads in "1" "6"; do
1516
python inference.py \
16-
--config="../../configs/transformer.base.yaml" \
17+
--config="../../configs/transformer.${model}.yaml" \
1718
--model_dir=${model_dir} \
1819
--device cpu \
1920
--use_mkl \
2021
--threads=${threads} \
2122
--batch_size=${batch_size} \
22-
--profile > ${log_path}/transformer_base_cpu_mkl_threads${threads}_bs${batch_size}_inference.log 2>&1
23+
--profile > ${log_path}/transformer_${model}_cpu_mkl_threads${threads}_bs${batch_size}_inference.log 2>&1
2324
done
2425

2526
python inference.py \
26-
--config="../../configs/transformer.base.yaml" \
27+
--config="../../configs/transformer.${model}.yaml" \
2728
--model_dir=${model_dir} \
2829
--device gpu \
2930
--batch_size=${batch_size} \
30-
--profile > tee ${log_path}/transformer_base_gpu_bs${batch_size}_inference.log 2>&1
31+
--profile > tee ${log_path}/transformer_${model}_gpu_bs${batch_size}_inference.log 2>&1
3132
done

examples/machine_translation/transformer/deploy/python/inference.py

Lines changed: 53 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@
1010
import paddle
1111
from paddle import inference
1212

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)))
1418
import reader
1519

1620

@@ -44,6 +48,17 @@ def parse_args():
4448
)
4549
parser.add_argument(
4650
"--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. ")
4762
args = parser.parse_args()
4863
return args
4964

@@ -65,11 +80,11 @@ def post_process_seq(seq, bos_idx, eos_idx, output_bos=False, output_eos=False):
6580

6681

6782
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):
6984
self.predictor = predictor
7085
self.input_handles = input_handles
7186
self.output_handles = output_handles
72-
self.recorder = recorder
87+
self.autolog = autolog
7388

7489
@classmethod
7590
def create_predictor(cls, args, config=None, profile=False,
@@ -92,9 +107,24 @@ def create_predictor(cls, args, config=None, profile=False,
92107
config.switch_use_feed_fetch_ops(False)
93108

94109
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)
96126
else:
97-
recorder = None
127+
autolog = None
98128

99129
predictor = inference.create_predictor(config)
100130
input_handles = [
@@ -105,7 +135,7 @@ def create_predictor(cls, args, config=None, profile=False,
105135
predictor.get_output_handle(name)
106136
for name in predictor.get_output_names()
107137
]
108-
return cls(predictor, input_handles, output_handles, recorder)
138+
return cls(predictor, input_handles, output_handles, autolog)
109139

110140
def predict_batch(self, data):
111141
for input_field, input_handle in zip(data, self.input_handles):
@@ -120,21 +150,19 @@ def predict_batch(self, data):
120150
def predict(self, test_loader, to_tokens, n_best, bos_idx, eos_idx):
121151
outputs = []
122152
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()
128155

129156
for data in test_loader:
130157
samples += len(data[0])
158+
159+
if self.autolog is not None:
160+
self.autolog.times.stamp()
161+
131162
output = self.predict_batch(data)
132163

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()
138166

139167
finished_sequence = output[0].transpose([0, 2, 1])
140168
for ins in finished_sequence:
@@ -148,13 +176,8 @@ def predict(self, test_loader, to_tokens, n_best, bos_idx, eos_idx):
148176
n_best_seq.append(sequence)
149177
outputs.append(n_best_seq)
150178

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)
158181
return outputs
159182

160183

@@ -173,13 +196,15 @@ def do_inference(args):
173196
f.write(sequence + "\n")
174197
f.close()
175198

199+
if args.profile:
200+
predictor.autolog.report()
201+
176202

177203
if __name__ == "__main__":
178204
ARGS = parse_args()
179205
yaml_file = ARGS.config
180206
with open(yaml_file, 'rt') as f:
181207
args = AttrDict(yaml.safe_load(f))
182-
pprint(args)
183208
args.benchmark = ARGS.benchmark
184209
args.device = ARGS.device
185210
args.use_mkl = ARGS.use_mkl
@@ -190,8 +215,11 @@ def do_inference(args):
190215
args.model_name = "transformer_base" if "base" in ARGS.config else "transformer_big"
191216
if ARGS.model_dir != "":
192217
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)
193221

194222
if args.profile:
195-
from utils.recorder import Recorder
223+
import auto_log
196224

197225
do_inference(args)

0 commit comments

Comments
 (0)