(model, dataloader, num_warmup_batches=10, gpu_idx=0)
| 132 | |
| 133 | |
| 134 | def benchmark_training(model, dataloader, num_warmup_batches=10, gpu_idx=0): |
| 135 | model.train() |
| 136 | optimizer = torch.optim.AdamW(model.parameters(), lr=1e-4) |
| 137 | device = next(model.parameters()).device |
| 138 | |
| 139 | torch.cuda.reset_peak_memory_stats() |
| 140 | |
| 141 | power_readings = [] |
| 142 | max_allocated_memory = 0 |
| 143 | max_reserved_memory = 0 |
| 144 | |
| 145 | with Progress( |
| 146 | TextColumn("[progress.description]{task.description}"), |
| 147 | BarColumn(), |
| 148 | TextColumn("[progress.percentage]{task.percentage:>3.0f}%"), |
| 149 | TimeRemainingColumn(), |
| 150 | TimeElapsedColumn(), |
| 151 | ) as progress: |
| 152 | warmup_task = progress.add_task("[yellow]Warmup", total=num_warmup_batches) |
| 153 | for i, batch in enumerate(dataloader): |
| 154 | if i >= num_warmup_batches: |
| 155 | break |
| 156 | input_ids, attention_mask, labels = [t.to(device) for t in batch] |
| 157 | with torch.cuda.amp.autocast(dtype=torch.bfloat16): |
| 158 | outputs = model(input_ids, attention_mask=attention_mask, labels=labels) |
| 159 | loss = outputs.loss |
| 160 | loss.backward() |
| 161 | optimizer.step() |
| 162 | optimizer.zero_grad() |
| 163 | progress.update(warmup_task, advance=1) |
| 164 | |
| 165 | train_task = progress.add_task("[green]Training", total=len(dataloader)) |
| 166 | total_time = 0 |
| 167 | epoch_start_time = time.time() |
| 168 | for i, batch in enumerate(dataloader): |
| 169 | input_ids, attention_mask, labels = [t.to(device) for t in batch] |
| 170 | with torch.cuda.amp.autocast(dtype=torch.bfloat16): |
| 171 | outputs = model(input_ids, attention_mask=attention_mask, labels=labels) |
| 172 | loss = outputs.loss |
| 173 | loss.backward() |
| 174 | optimizer.step() |
| 175 | optimizer.zero_grad() |
| 176 | progress.update(train_task, advance=1) |
| 177 | if i % 10 == 0: |
| 178 | power_readings.append(get_gpu_power(gpu_idx)) |
| 179 | max_allocated_memory = max(max_allocated_memory, torch.cuda.max_memory_allocated()) |
| 180 | max_reserved_memory = max(max_reserved_memory, torch.cuda.max_memory_reserved()) |
| 181 | epoch_end_time = time.time() |
| 182 | total_time += epoch_end_time - epoch_start_time |
| 183 | |
| 184 | avg_epoch_time = total_time |
| 185 | avg_power = np.mean(power_readings) |
| 186 | max_power = np.max(power_readings) |
| 187 | return avg_epoch_time, avg_power, max_power, max_allocated_memory, max_reserved_memory, loss.item() |
| 188 | |
| 189 | |
| 190 | def benchmark_inference(model, dataloader, num_warmup_batches=10, gpu_idx=0): |
no test coverage detected