Evaluation.
(forward_step_func, data_iterator, model, verbose=False)
| 1020 | |
| 1021 | |
| 1022 | def evaluate(forward_step_func, data_iterator, model, verbose=False): |
| 1023 | """Evaluation.""" |
| 1024 | args = get_args() |
| 1025 | |
| 1026 | # Turn on evaluation mode which disables dropout. |
| 1027 | for model_module in model: |
| 1028 | model_module.eval() |
| 1029 | |
| 1030 | total_loss_dict = {} |
| 1031 | |
| 1032 | with torch.no_grad(): |
| 1033 | iteration = 0 |
| 1034 | while iteration < args.eval_iters: |
| 1035 | iteration += 1 |
| 1036 | if verbose and iteration % args.log_interval == 0: |
| 1037 | print_rank_0("Evaluating iter {}/{}".format(iteration, args.eval_iters)) |
| 1038 | |
| 1039 | if mpu.get_pipeline_model_parallel_world_size() > 1: |
| 1040 | if args.virtual_pipeline_model_parallel_size is not None: |
| 1041 | forward_backward_func = ( |
| 1042 | forward_backward_pipelining_with_interleaving |
| 1043 | ) |
| 1044 | else: |
| 1045 | forward_backward_func = ( |
| 1046 | forward_backward_pipelining_without_interleaving |
| 1047 | ) |
| 1048 | else: |
| 1049 | forward_backward_func = forward_backward_no_pipelining |
| 1050 | |
| 1051 | if args.deepspeed and not args.no_pipeline_parallel: |
| 1052 | # DeepSpeed uses eval_batch() and already aggregates losses. |
| 1053 | assert isinstance(model, list) and len(model) == 1 |
| 1054 | loss = model[0].eval_batch(data_iterator) |
| 1055 | loss_dicts = [{"lm loss": loss}] * get_num_microbatches() |
| 1056 | else: |
| 1057 | loss_dicts = forward_backward_func( |
| 1058 | forward_step_func, |
| 1059 | data_iterator, |
| 1060 | model, |
| 1061 | optimizer=None, |
| 1062 | timers=None, |
| 1063 | forward_only=True, |
| 1064 | ) |
| 1065 | |
| 1066 | if mpu.is_pipeline_last_stage(ignore_virtual=True): |
| 1067 | # Reduce across processes. |
| 1068 | for loss_dict in loss_dicts: |
| 1069 | for key in loss_dict: |
| 1070 | total_loss_dict[key] = ( |
| 1071 | total_loss_dict.get(key, torch.cuda.FloatTensor([0.0])) |
| 1072 | + loss_dict[key] |
| 1073 | ) |
| 1074 | |
| 1075 | args.consumed_valid_samples += ( |
| 1076 | mpu.get_data_parallel_world_size() |
| 1077 | * args.micro_batch_size |
| 1078 | * get_num_microbatches() |
| 1079 | ) |
no test coverage detected