File size: 5,883 Bytes
421f9b7 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | # cloud/ β the TAJWID lane on rented GPUs
**Built 2026-07-27 Β· session e67037de Β· companion to `../ROOT_CALCULUS.md` + `../THE_BRAIN_SPEC.md`**
Everything here is written, selftested, and **proven against the local brain** before any
cloud key exists. When you authenticate, nothing changes but an environment variable.
---
## 1. The correction that reshapes the idea
**NVIDIA NIM cannot train.** It is inference microservices β you call it to *generate*.
So "build it on NVIDIA's GPUs" isn't available through NIM. What NIM *can* do is
generate teacher text fast, and that happens to attack the real bottleneck.
**Lightning AI can train.** Studios give you an A100/H100 you attach and detach. That is
where H2 (QLoRA distillation) and eventually H3 belong.
| lane | where it runs | why there |
|---|---|---|
| GGUF surgery, spectra, llama.cpp judging | **local** | the model is 129 GB on local disk; uploading it is absurd |
| Teacher trace generation | **NIM, or self-hosted teacher on Lightning** | local single-stream is 210 tok/s; batched remote is 20Γ+ |
| QLoRA distillation (H2 tajwΔ«d) | **Lightning A100/H100** | needs sustained GPU hours β the thing blocked locally |
| Born-factored pretrain (H3) | **Lightning multi-GPU** | far beyond this box |
| Serving the finished student | **local** | it's 5β12 GB. That was the whole point. |
The 129 GB oracle **never leaves the house**. The student is pulled from HF *on the
remote machine*, which is faster than any upload from here.
---
## 2. Measured throughput β why the cloud is worth it, in numbers
From the smoke run against Ornith (2026-07-27, real completions):
- **210 tok/s** single-stream, **~3,957 completion tokens per sample**
- A useful distill set of **5,000 samples β 19.8 M tokens β ~26 hours local**
- Full harvest of all **40,259** available workload prompts β 159 M tokens β **~8.8 days local**
- Batched vLLM on one A100/H100 is conservatively **20Γ** aggregate β **26 hours becomes ~1.3 hours**
That is the entire argument for renting: not that the local card is weak, but that
single-stream generation cannot be batched and the corpus is the long pole.
---
## 3. What YOU do β two owner actions, both under five minutes
I do not create accounts, accept terms, or authorise spend. Both of these meter money,
so both are yours (hard stop *c*).
### A Β· Lightning (required for training)
```bash
lightning login
```
Then, from `E:\ABU\NEOCORTEX\cloud`:
```bash
python lightning_launch.py --start --machine A100
python lightning_launch.py --run "pip install -r requirements.txt"
```
`--stop` is what stops the meter. The launcher refuses to do anything until you're
authenticated, and says exactly this if you aren't.
### B Β· NIM (optional β only for bulk trace speed)
Get a key from NVIDIA's developer portal, then:
```powershell
$env:TEACHER_BASE_URL = "https://integrate.api.nvidia.com/v1"
$env:TEACHER_API_KEY = "<your key>"
$env:TEACHER_MODEL = "<the model id you chose>"
python teacher_client.py # must print ARITHMETIC: PASS before anything else
```
**Read this before pointing traces at any managed API.** Generating training data from a
hosted model's outputs is governed by that provider's terms, and some providers restrict
using outputs to train other models. You sell software, so this is commercial exposure,
not a theoretical worry. `make_traces.py` therefore **refuses to run against a non-local
endpoint** unless you pass `--i-checked-the-licence`. That flag is a speed bump against
an expensive mistake β it is not legal advice, and I am not a lawyer.
**The clean way around it entirely:** self-host an open-weight teacher on the Lightning
GPU you're already paying for. No terms ambiguity, and you get logprobs β which
text-only APIs cannot give you and which make for better distillation.
---
## 4. The files
| file | what it does | proven? |
|---|---|---|
| `teacher_client.py` | one OpenAI-compatible client for NIM / Lightning / local. `smoke()` verifies with a **real completion**, never `/health` | β
223 tok/s vs Ornith, `391` correct |
| `make_traces.py` | teacher answers to **your real prompts** (`train.jsonl`), resume-safe, per-stratum, licence gate | β
4/5 kept, caught 1 empty-completion |
| `distill_qlora.py` | the H2 student trainer. `--dry-run` builds the dataset with no GPU and no model load | β
dry-run green |
| `lightning_launch.py` | Studio create/start/upload/run/stop. Refuses without auth | β
auth gate correct |
| `requirements.txt` | the remote stack. Local box has everything **except `peft`** | β |
---
## 5. Two traps already coded around
**Empty completions are failures, not short answers.** Reasoning models emit
`reasoning_content` first and return `content: ''` if the budget runs out β
`finish_reason: length`. This fired on the very first smoke run (1 of 5). Storing those
as training targets would teach the student to say nothing. `make_traces.py` skips and
logs them; `DEFAULT_MAX_TOKENS` is 4096, never small.
**Strata are mixed at TRAIN time, not harvest time.** Arabic is 0.0227% of natural
traffic and pays a ~2.3β2.8Γ tokenizer tax. Left proportional it contributes no gradient;
blended at harvest it contaminates the workload distribution. `--arabic-ratio` makes it
an explicit, logged, tunable decision, and the two holdouts are scored **separately**.
---
## 6. The gate that decides whether any of this worked
Same judge as every other gate in this project β llama.cpp on a held-out set, never the
training loss, never a self-written reference:
```bash
llama-perplexity -m <student.gguf> -f corpus/calib_holdout.txt # workload
llama-perplexity -m <student.gguf> -f corpus/calib_arabic_holdout.txt # arabic, apart
```
Target: student holdout PPL within **5%** of the teacher's on the workload stratum.
Anything else is a number, not a result.
|