3.5 KiB
Vast GPU (kilka godzin) — runbook do trenowania + eksportu modelu
Cel: używać Vast (GPU) jako krótkiej sesji treningowej (kilka godzin), a wynik (wagi/adapter) zapisać trwałe i wersjonowane.
W tym projekcie Vast:
- nie dostaje sekretów tradingowych,
- nie ma dostępu do kluczy,
- zwraca tylko
trade_intent/predykcje.
1) Najważniejsza zasada przy krótkim wynajmie
Vast jest “ephemeral”. Żeby nie stracić pracy:
- wszystko musi być reproducible (konfig + kod + seed),
- model output musi być mały i łatwy do przeniesienia (preferuj LoRA/adaptery),
- checkpointy i final artifacts muszą być uploadowane poza maszynę (Gitea packages/S3/scp).
2) Co potrzebujemy mieć gotowe przed startem sesji
2.1 Kod i entrypoint
W repo powinien istnieć “one command training”, np.:
python -m train ...albobash scripts/train.sh ...
Zasada: komenda sama:
- pobiera dataset (albo czyta lokalny plik),
- trenuje,
- zapisuje
artifacts/, - robi upload.
2.2 Dataset (krótki transfer)
Dla sesji “kilka godzin” unikaj wielkich transferów.
Rekomendacja:
- zbuduj dataset jako plik (np.
jsonl/parquet) i spakuj (zstd), - trzymaj wersję datasetu (hash) i loguj ją do metryk.
Źródło danych (rekomendowane u nas):
Postgres/Timescalew k3s → eksport do pliku (offline), potem upload.
2.3 Bazowy model
Masz 2 ścieżki:
- pobierasz z internetu (HF) na Vast (szybko, ale zależy od sieci),
- albo trzymasz bazę w swoim storage i ściągasz kontrolowanie.
Na start preferuj LoRA na umiarkowanym modelu i krótkiej sekwencji.
3) Co uruchamiamy na Vast
3.1 Kontener
Najprościej: jeden Docker image z zależnościami (PyTorch + libs).
Obraz powinien być pinned (digest) i gotowy do uruchomienia bez pip install w trakcie.
3.2 Konfiguracja treningu (config file)
Trzymaj config jako plik (np. YAML/JSON) i loguj go do artifactów:
model_name,model_versiondataset_version(hash)seq_len,batch_size,grad_accum,lrlora_r,lora_alpha,lora_dropout(jeśli LoRA)seed
3.3 Output
Preferowane outputy:
- LoRA adapter (mały):
adapter.safetensors+ config - metryki treningu:
metrics.json - walidacja:
eval_report.json
Opcjonalnie:
- export do ONNX/TensorRT jeśli planujesz inference poza GPU (zależne od modelu).
4) Gdzie trzymamy artefakty (żeby nie zniknęły)
Opcje (w kolejności prostoty):
- scp na VPS/k3s (na start najprostsze)
- Gitea Packages (jeśli chcesz wersjonować jako “package”)
- S3/MinIO (najbardziej skalowalne)
Minimalne wymaganie: zawsze zapisuj model_version i dataset_version obok wag.
5) Jak to łączy się z executor / UI
Model na Vast zwraca trade_intent (patrz doc/drift-perp-contract.md).
Executor w k3s:
- buduje features z DB,
- woła predictor,
- waliduje gates,
- loguje:
decision_id,model_version,features_hash,intent,- outcome (fill/exit).
Jeśli Vast jest niedostępny:
- executor przechodzi w
observe/off(nie handluje), - UI nadal pokazuje warstwy rynku (DLOB/ticki).
6) Checklist “kilka godzin” (operacyjnie)
- Vast instance: GPU + wystarczająco VRAM + szybki disk.
- Pull docker image (pinned).
- Download dataset (jedna komenda).
- Train (z logowaniem metryk co N kroków).
- Eval (krótki).
- Export adapter/weights.
- Upload artifacts (scp / packages / S3).
- Zapisz
model_versiondo DB/config (k3s) przed użyciem.