Files
boc/intelligence/build-a1-training-script.md
T
Bernt bae705aa97 ARCHITECTURE: NFC roadmap, edge AI, audit logging
- Add NFC ePassport roadmap (ICAO 9303, eIDAS)
- Add TensorFlow.js edge face detection (BlazeFace)
- Add structured audit logger (GDPR-compliant)
- Risk scoring support

Part of KYC Apple Native UX v1.1.0
2026-06-29 16:24:48 +00:00

155 lines
5.5 KiB
Markdown

# BUILD-A1: Träningsscript för amos-r2 (ESLM)
**Datum:** 2026-06-06
**Utfört av:** Subagent BUILD-A1
---
## ✅ Resultat: REKONSTRUERAT
Det ursprungliga träningsscriptet **hittades INTE** på GPU-boxen. Scriptet `build/train_eslm.py` är en rekonstruktion baserad på artefakter som finns kvar efter träningen.
---
## 🔍 Sökning — Vad undersöktes
### Bash-historik
- `~/.bash_history` **finns ej** (`cat: /home/ubuntu/.bash_history: No such file or directory`)
- Inga alternativa historikfiler hittades (zsh_history, fish_history)
- HISTSIZE=1000 / HISTFILESIZE=2000 är konfigurerat i `.bashrc` men filen har aldrig skapats (trolig orsak: sessionen kördes utan interaktivt bash, eller instansen rekurserades)
### Python-scripts
- `find /home/ubuntu -name "*.py"` (exkl. train_env, eslm-venv, vllm_env):
- **Inga egna träningsscripts hittades**
- Enda `.py`-filerna i home (grunda nivåer) är Unsloth compiled-cache-filer
- Inga `.ipynb`-notebooks utanför venv:er
- Inga `nohup.out`, tmux-loggar eller screen-sessions
### Loggar
- `~/vllm-install.log` / `~/vllm-serve.log` — vLLM-installation och serving, inget om träning
- `/var/log/cloud-init-output.log` — cloud-init, inget om träning
- journalctl — inget relevant
---
## 📦 Hittade artefakter med evidens
### `~/aamos_adapter/adapter_config.json`
**DIREKTA FAKTA** (dessa är exakta, från adaptern som faktiskt skapades):
| Parameter | Värde | Källa |
|-----------|-------|-------|
| `base_model_name_or_path` | `unsloth/Qwen2.5-7B-Instruct-bnb-4bit` | adapter_config.json |
| `r` (lora_r) | **16** | adapter_config.json |
| `lora_alpha` | **32** | adapter_config.json |
| `lora_dropout` | **0.05** | adapter_config.json |
| `target_modules` | `q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj` (alla 7) | adapter_config.json |
| `bias` | `"none"` | adapter_config.json |
| `use_dora` | `false` | adapter_config.json |
| `use_rslora` | `false` | adapter_config.json |
| `init_lora_weights` | `true` | adapter_config.json |
| `peft_type` | `CAUSAL_LM` | adapter_config.json |
| `peft_version` | `0.19.1` | adapter_config.json |
### `~/aamos_merged/config.json`
| Parameter | Värde | Källa |
|-----------|-------|-------|
| Quantization | 4-bit NF4 (`bnb_4bit_quant_type: "nf4"`) | config.json |
| Compute dtype | `bfloat16` | config.json |
| Double quant | `true` | config.json |
| Modell-arkitektur | `Qwen2ForCausalLM` (28 lager, hidden_size=3584) | config.json |
| Max position embeddings | 32768 | config.json |
### `~/aamos_adapter/tokenizer_config.json`
| Parameter | Värde |
|-----------|-------|
| tokenizer_class | `Qwen2Tokenizer` |
| eos_token | `<|im_end|>` (ChatML-format) |
| pad_token | `<|PAD_TOKEN|>` |
| padding_side | `left` |
| model_max_length | 32768 |
### Installerade paket (train_env / system)
| Paket | Version |
|-------|---------|
| unsloth | 2026.5.8 |
| trl | 0.24.0 |
| peft | 0.19.1 |
| transformers | 5.5.0 |
### `~/unsloth_compiled_cache/UnslothSFTTrainer.py`
Innehåller `UnslothSFTConfig` med dessa **defaults** (Unsloth standard för trl 0.24):
- `per_device_train_batch_size = 4`
- `gradient_accumulation_steps = 2`
- `num_train_epochs = 3.0`
- `learning_rate = 5e-05`
- `lr_scheduler_type = 'linear'`
- `warmup_steps = 0.1` (10% av totala steps)
- `optim = 'adamw_8bit'`
- `weight_decay = 0.001`
- `adam_beta1 = 0.9`, `adam_beta2 = 0.999`
- `max_grad_norm = 1.0`
- `seed = 3407`
- `report_to = 'none'`
---
## ⚠️ Osäkra parametrar (GISSNINGAR märkta nedan)
| Parameter | Värde i scriptet | Osäkerhet |
|-----------|-----------------|-----------|
| `max_seq_length` | 2048 | **GUESS** — vllm serve kör `max_model_len=2048` i `start_vllm_lora.sh`; konsistent med träning |
| `num_train_epochs` | 3 | Unsloth default; okänd |
| `per_device_train_batch_size` | 4 | Unsloth default; okänd |
| `dataset_path` | via `--data` argument | Okänd — dataset finns ej kvar |
| `assistant_only_loss` | ej satt (False) | Qwen-Instruct SFT brukar använda det; oklart |
**Notera:** `start_vllm_lora.sh` kör med `--max-model-len 2048` vilket starkt antyder att `max_seq_length=2048` användes vid träning (vLLM-serving begränsas ofta till tränings-kontextlängden).
---
## 📄 Rekonstruerat script
Sparad till: **`/home/bernt/.openclaw/workspace/build/train_eslm.py`**
### Användning
```bash
# Aktivera train_env på GPU-boxen
source ~/train_env/bin/activate
# Kör träning
python train_eslm.py \
--data /path/to/training_data.jsonl \
--output ~/aamos_adapter_new \
--max-seq-length 2048 \
--epochs 3 \
--lr 5e-5 \
--batch-size 4 \
--grad-accum 2 \
--merge-output ~/aamos_merged_new # valfritt
```
### Dataset-format (JSONL)
```jsonl
{"messages": [{"role": "system", "content": "..."}, {"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}]}
{"messages": [{"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}]}
```
---
## 🔎 Sammanfattning
| Aspekt | Status |
|--------|--------|
| Originalscript hittat | ❌ NEJ |
| Bash-historik tillgänglig | ❌ NEJ (fil saknas) |
| LoRA-hyperparametrar | ✅ BEKRÄFTADE (från adapter_config.json) |
| Träningshyperparametrar | ⚠️ TROLIGA (från Unsloth defaults) |
| max_seq_length | ⚠️ GUESS (2048, stöds av vllm-serve config) |
| Antal epochs | ⚠️ OKÄNT (Unsloth default = 3 används) |
| Dataset | ❌ OKÄNT (finns ej på GPU-boxen) |
Scriptet är troligtvis nära originalet eftersom Unsloth-användare sällan avviker kraftigt från defaults för dessa parametrar. De viktigaste värdena (LoRA-konfigurationen) är exakta kopior från den faktiska adapterfilen.