mirror of
https://github.com/karpathy/llm.c.git
synced 2026-07-20 23:05:08 -04:00
move things around a bit, a few comments, and also update python script to correspond to C more
This commit is contained in:
parent
8253823432
commit
7b92930021
2 changed files with 6 additions and 8 deletions
|
|
@ -740,10 +740,11 @@ float gpt2_validate(GPT2 *model, const int* inputs, const int* targets, size_t B
|
|||
return mean_loss;
|
||||
}
|
||||
|
||||
|
||||
void gpt2_zero_grad(GPT2 *model) {
|
||||
NVTX_RANGE_FN();
|
||||
// the losses accumulate over the duration of gradient accumulation micro steps, also reset here
|
||||
// there are currently two state vars during the gradient accumulation inner loop:
|
||||
// 1) the losses accumulate += into acts.losses, reset here
|
||||
// 2) the gradients accumulate += into grads_memory, reset here
|
||||
cudaCheck(cudaMemset(model->acts.losses, 0, model->batch_size * model->seq_len * sizeof(float)));
|
||||
if (model->grads_memory != NULL) {
|
||||
cudaCheck(cudaMemset(model->grads_memory, 0, model->num_parameters * sizeof(floatX)));
|
||||
|
|
@ -755,8 +756,9 @@ void gpt2_backward_and_reduce(GPT2 *model, int* inputs, const int* targets, int
|
|||
NVTX_RANGE_FN();
|
||||
bool last_step = micro_step == grad_accum_steps - 1;
|
||||
|
||||
// on the first micro-step zero the gradients, as we're about to += accumulate into them
|
||||
if (micro_step == 0) {
|
||||
gpt2_zero_grad(model); // set correct grad state on first micro-step
|
||||
gpt2_zero_grad(model);
|
||||
}
|
||||
|
||||
// lazily allocate the memory for gradients of the weights and activations, if needed
|
||||
|
|
|
|||
|
|
@ -698,10 +698,6 @@ if __name__ == "__main__":
|
|||
write_state(model, x, y, logits, loss, f"gpt2_{model_size_str}_debug_state.bin")
|
||||
# reset the train_loader for the optimization below
|
||||
train_loader.reset()
|
||||
# clear the grads here explicitly because otherwise we'd have a duplicate grad accumulation
|
||||
# since in the training loop we do a backward() and then zero_grad() at the end of the loop
|
||||
# this would cause an incorrect first training step
|
||||
model.zero_grad()
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# main training loop
|
||||
|
|
@ -794,6 +790,7 @@ if __name__ == "__main__":
|
|||
|
||||
# --------------- TRAINING SECTION BEGIN -----------------
|
||||
model.train()
|
||||
optimizer.zero_grad(set_to_none=True)
|
||||
# if we are trying to overfit a single batch, we reset the loader here
|
||||
if args.overfit_single_batch:
|
||||
train_loader.reset()
|
||||
|
|
@ -830,7 +827,6 @@ if __name__ == "__main__":
|
|||
param_group['lr'] = lr
|
||||
# step the optimizer
|
||||
optimizer.step()
|
||||
optimizer.zero_grad(set_to_none=True)
|
||||
# --------------- TRAINING SECTION END -------------------
|
||||
# everything that follows now is just diagnostics, prints, logging, etc.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue