|
21 | 21 | logger = logging.getLogger(__name__) |
22 | 22 |
|
23 | 23 |
|
| 24 | +def cast_parameters_to_fp32(place, program, scope=None): |
| 25 | + all_parameters = [] |
| 26 | + for block in program.blocks: |
| 27 | + all_parameters.extend(block.all_parameters()) |
| 28 | + |
| 29 | + var_scope = scope if scope else paddle.static.global_scope() |
| 30 | + for param in all_parameters: |
| 31 | + tensor = var_scope.find_var(param.name).get_tensor() |
| 32 | + if 'FP16' in str(tensor._dtype()) and 'FP32' in str(param.dtype): |
| 33 | + data = np.array(tensor) |
| 34 | + tensor.set(np.float32(data), place) |
| 35 | + |
| 36 | + |
24 | 37 | def parse_args(): |
25 | 38 | parser = argparse.ArgumentParser() |
26 | 39 | parser.add_argument( |
@@ -56,7 +69,7 @@ def do_train(args): |
56 | 69 | place = paddle.set_device("cpu") |
57 | 70 |
|
58 | 71 | # Define data loader |
59 | | - test_loader, to_tokens = reader.create_infer_loader(args) |
| 72 | + test_loader, to_tokens = reader.create_infer_loader(args, use_all_vocab=True) |
60 | 73 |
|
61 | 74 | test_program = paddle.static.Program() |
62 | 75 | startup_program = paddle.static.Program() |
@@ -93,6 +106,9 @@ def do_train(args): |
93 | 106 | os.path.join(args.init_from_params, "transformer"), exe) |
94 | 107 | print("finish initing model from params from %s" % (args.init_from_params)) |
95 | 108 |
|
| 109 | + # cast weights from fp16 to fp32 after loading |
| 110 | + cast_parameters_to_fp32(place, test_program) |
| 111 | + |
96 | 112 | f = open(args.output_file, "w") |
97 | 113 | for data in test_loader: |
98 | 114 | finished_sequence, = exe.run(test_program, |
|
0 commit comments