diff --git a/training/stories_cpu_ops.h b/training/stories_cpu_ops.h index dfe35f9..30fc94f 100644 --- a/training/stories_cpu_ops.h +++ b/training/stories_cpu_ops.h @@ -123,6 +123,7 @@ static void embed_lookup(float *x, const float *embed, const uint16_t *tokens, i static void embed_backward(float *d_embed, const float *dx, const uint16_t *tokens, int dim, int seq) { for (int t = 0; t < seq; t++) { int tok = tokens[t]; + if (tok >= VOCAB) { tok = 0; } // HIGH-01: clamp invalid token -> position 0 for (int d = 0; d < dim; d++) { d_embed[tok*dim + d] += dx[d*seq + t]; } diff --git a/training/train_large.m b/training/train_large.m index 785204d..198f57b 100644 --- a/training/train_large.m +++ b/training/train_large.m @@ -298,6 +298,8 @@ int main(int argc, char *argv[]) { size_t n_tokens = data_len / 2; if (n_tokens < (size_t)SEQ + 1) { fprintf(stderr, "Token file too small: %zu tokens, need >%d\n", n_tokens, SEQ + 1); + munmap(token_data, data_len); + close(data_fd); return 1; } printf("Token data: %zu tokens (%.1f MB)\n", n_tokens, data_len/1e6);