(
args,
curr_epoch,
model,
accelerator,
dataset_loader,
logger,
curr_train_iter=-1,
)
| 34 | |
| 35 | @torch.no_grad() |
| 36 | def evaluate( |
| 37 | args, |
| 38 | curr_epoch, |
| 39 | model, |
| 40 | accelerator, |
| 41 | dataset_loader, |
| 42 | logger, |
| 43 | curr_train_iter=-1, |
| 44 | ): |
| 45 | |
| 46 | model.eval() |
| 47 | net_device = next(model.parameters()).device |
| 48 | num_batches = len(dataset_loader) |
| 49 | |
| 50 | ### parse evaluation status |
| 51 | if hasattr(dataset_loader.dataset, "dataset_name"): |
| 52 | dataset_name = dataset_loader.dataset.dataset_name |
| 53 | else: |
| 54 | dataset_name = "default" |
| 55 | task_name_prefix = dataset_name + '_' |
| 56 | |
| 57 | time_delta = SmoothedValue(window_size=10) |
| 58 | |
| 59 | accelerator.wait_for_everyone() |
| 60 | |
| 61 | epoch_str = f"[{curr_epoch}/{args.max_epoch}]" if curr_epoch > 0 else "" |
| 62 | |
| 63 | if accelerator.is_main_process: |
| 64 | logger.log_messages("==" * 10) |
| 65 | logger.log_messages(f"Evaluate Epoch [{curr_epoch}/{args.max_epoch}]") |
| 66 | logger.log_messages("==" * 10) |
| 67 | |
| 68 | ### calculate perplexity |
| 69 | neg_log_likelihood = [] |
| 70 | for curr_iter, batch_data_label in enumerate(dataset_loader): |
| 71 | |
| 72 | curr_time = time.time() |
| 73 | |
| 74 | # forward pass to calculate per-sequence negative log likelihood |
| 75 | with accelerator.autocast(): |
| 76 | outputs = model(batch_data_label, is_eval=True) |
| 77 | # [(batch,), (batch,), ...] |
| 78 | neg_log_likelihood.append(outputs['neg_log_likelihood']) |
| 79 | |
| 80 | ### log status |
| 81 | time_delta.update(time.time() - curr_time) |
| 82 | |
| 83 | if accelerator.is_main_process and curr_iter % args.log_every == 0: |
| 84 | mem_mb = torch.cuda.max_memory_allocated() / (1024 ** 2) |
| 85 | moving_average_ppl = perplexity(neg_log_likelihood) |
| 86 | logger.log_messages( |
| 87 | '; '.join( |
| 88 | ( |
| 89 | f"Evaluate {epoch_str}", |
| 90 | f"Batch [{curr_iter}/{num_batches}]", |
| 91 | f"perplexity: {moving_average_ppl:0.4f}", |
| 92 | f"Evaluating on iter: {curr_train_iter}", |
| 93 | f"Iter time {time_delta.avg:0.2f}", |
nothing calls this directly
no test coverage detected