Exam AI: LoRA fine-tuning on Kaggle's free GPUs¶
One permissively licensed small base model, one QLoRA adapter per exam family, trained only on material this
project has the right to use. This is phase 2 of ops/plan/exam-llm.md (task
T-123);
phase 3 (T-124) publishes the winning adapter by hand.
| File | What it is |
|---|---|
exam-ai-lora.ipynb |
The Kaggle notebook: license check, data build, training, evaluation, release gate. |
licenses.json |
Every base model and dataset with its license, the URL verified against, and the date. |
Run it (free)¶
- Kaggle -> New Notebook -> File -> Import Notebook -> upload
exam-ai-lora.ipynb. - Accelerator: GPU T4 x2 (or P100). Internet: on. ~45–90 minutes of the ~30 free GPU hours a week.
- Attach this repository as a Kaggle dataset (upload the folder whole) or let the notebook clone the public GitHub repository. No API keys, no paid calls.
The release rule (enforced, not promised)¶
- The
*-eval-*files (questions/ee-eval-*.json, 50 questions,T-122) are held out: the notebook scores the base model and each adapter on them and never trains on them (scripts/lora_data.py:split_train_eval). - An adapter is copied to
/kaggle/working/release/<family>/only if it beats the base model on those questions; otherwise the notebook raises after writingresults.jsonand releases nothing. -
scripts/lora_release_gate.pyrecomputes every recorded score from the predictions and the answer key, so a hand-edited results file cannot claim a win. Run it locally:python3 scripts/lora_release_gate.py --registry notebooks/lora/licenses.json --results results.json
-
A family without a T-122 evaluation slice gets no release (its adapter stays a candidate). Exact dates, cutoffs and vacancy counts are never learned as facts: the format taught is "Not sure - check the official notification" with the official link.
Licenses (verified 2026-09-28 against the pages linked in licenses.json)¶
| Used | Model / dataset | License |
|---|---|---|
| base | Qwen/Qwen2.5-1.5B-Instruct |
Apache-2.0 |
| alternative | HuggingFaceTB/SmolLM2-1.7B-Instruct |
Apache-2.0 |
| rejected | PhysicsWallahAI/Aryabhata-1.0 |
CC BY-NC 4.0 (blocks commercial use) |
| data | this list's pages, modules, formula sheets | CC BY-SA 4.0 |
| data | this list's original questions | CC BY-SA 4.0 |
| replay | HuggingFaceH4/ultrachat_200k (capped sample) |
MIT |
The adapters are released under CC BY-SA 4.0, matching the content they learn from; attribution "Awesome Indian Exams by Rajon Das and contributors".
Outputs¶
/kaggle/working/results.json (scores, per-question predictions), /kaggle/working/adapters/<family>/
(candidates), /kaggle/working/release/<family>/ (adapter + MODEL_CARD.md, only when the gate passes).