GoLLeM-110M-PL (base)

Bazowy model językowy (pretraining, model bazowy — NIE chatbot) dla języka polskiego. 110M parametrów, architektura GPT-2, wytrenowany od zera na konsumenckiej karcie AMD Radeon RX 7900 XTX (ROCm/WSL2, Windows) — bez NVIDII, bez chmury.

To model completion: dostaje początek tekstu i kontynuuje najbardziej prawdopodobny ciąg. Nie odpowiada na pytania jak asystent — do rozmowy/trzymania tematu wymaga osobnego fine-tuningu instrukcyjnego.

Specyfikacja

Parametry 110,025,216 (110M), weight-tied embeddings
Architektura GPT-2 (decoder-only): 12 warstw / 12 głów / d_model 768
Kontekst 512 tokenów
Tokenizer polski BPE (dynaword-32k), słownik 32 000, `<
Dane polski korpus dynaword-expansion (HPLT v3.0 pol_Latn), ~1,35 mld tokenów, 1 epoka
Trening od zera, bf16, AdamW, cosine LR + warmup, weight decay 0.1
Sprzęt 1× AMD Radeon RX 7900 XTX 24GB (RDNA3/gfx1100), ROCm/WSL2, Windows
Loss (końcowy) ~3.53 (perplexity ~34) — średnia training-loss z ostatnich ~30 kroków (per-krok szum 3.3-3.8)

Przepis treningu

Wszystko poniżej pochodzi ze skryptu treningu i logu biegu tego modelu; wartości, których log nie zapisał, są oznaczone jako niezapisane.

Skrypt: train_125m.py w tym repozytorium (kopia pliku o sha256 a7fc85ad5352a2e7… z lokalnymi ścieżkami domyślnymi zamienionymi na ./… i wczytywaniem checkpointów przy wznowieniu przez torch.load(..., weights_only=True); bez innych zmian). Jeden proces na jednej karcie AMD Radeon RX 7900 XTX (24 GB), ROCm na WSL2.

Architektura 12 warstw, d_model 768, 12 głów, kontekst 512, słownik 32 000; bloki pre-LayerNorm, atencja przyczynowa, MLP 4× z GELU, uczone embeddingi pozycji, wspólne wagi embeddingu wejścia i głowy wyjścia; 110 025 216 parametrów
Inicjalizacja domyślna PyTorch (bez własnej)
Optymalizator AdamW, beta (0.9, 0.95), eps 1e-8 (domyślne PyTorch), weight decay 0.1 na wszystkich parametrach (jedna grupa), przycinanie gradientu 1.0
Learning rate szczyt 3e-4, liniowa rozgrzewka przez 1 % zaplanowanych kroków, potem cosine do 3e-5 (0.1 × szczyt)
Batch 64 sekwencje × 512 tokenów = 32 768 tokenów na krok
Precyzja autocast bf16; wagi i stan optymalizatora w fp32
Próbkowanie danych losowe okna 512 tokenów z powtórzeniami z jednego pliku tokenów, więc „epoka” = budżet tokenów ÷ rozmiar korpusu, a nie kolejne przejście po danych
Seed nieustawiony (biegi nie są odtwarzalne bit w bit)
Checkpointy co 2 000 kroków; wznowienie wczytuje model, optymalizator i krok (bez stanu generatora losowego); wydanie = ostatni krok

Ten model (v1):

  • Dane: dynaword-expansion (HPLT v3.0 pol_Latn), 1 354 902 613 tokenów; 1 epoka.
  • 41 348 kroków (rozgrzewka 413); wydany checkpoint = krok 41 348.
  • Gradient accumulation: niezapisane w logu. Dokładna komenda: niezapisana; domyślne argumenty skryptu z --data <plik tokenów korpusu> dają konfigurację z logu.
  • Bieg był kilka razy przerywany i wznawiany z checkpointu z kroku 34 000; przepustowość mocno różniła się między segmentami, więc łączny czas nie jest jedną liczbą.

Użycie

import torch
from transformers import AutoModelForCausalLM, PreTrainedTokenizerFast
m = AutoModelForCausalLM.from_pretrained("Maggio33/GoLLeM-110M-PL").eval()
tok = PreTrainedTokenizerFast(tokenizer_file="tokenizer.json")
ids = tok("Polska to kraj położony w", return_tensors="pt").input_ids
ids = torch.cat([torch.tensor([[0]]), ids], 1)   # BOS = <|endoftext|>=0
out = m.generate(ids, max_new_tokens=80, do_sample=True, temperature=0.8,
                 top_k=40, repetition_penalty=1.3, pad_token_id=0)
print(tok.decode(out[0].tolist()[1:], skip_special_tokens=True))

Dane treningowe i licencja

  • Korpus: dynaword-expansion oparty na HPLT v3.0 (pol_Latn), zadeklarowany CC0-1.0 (byte-verified per-shard), PII-scrubbed.
  • Uczciwy caveat: HPLT to web-crawl — CC0 dotyczy pakowania/dedykacji maintainera + przeszedł web-review i mitygacje (length-cap usuwający książki, wykluczone domeny wiki/adult/boilerplate), ale nie jest gwarantowanie "release-clean" (tekst web może zawierać treści in-copyright). To standardowa podstawa dla modeli trenowanych na korpusach web.
  • Licencja modelu: Apache-2.0.

Ograniczenia

  • Mały model bazowy (110M) — generuje pewnie brzmiące nieprawdy i potrafi dryfować z tematu. To cecha modelu bazowego tej skali, nie błąd.
  • Brak fine-tuningu instrukcyjnego → nie jest chatbotem.
  • Kontekst 512 tokenów. Brak filtrów bezpieczeństwa na wyjściu.
  • Dane osobowe / PII: może generować prawdopodobnie brzmiące imiona/nazwiska/adresy = KONFABULACJE (nie dane konkretnych, identyfikowalnych osób). Kontaktowe PII (telefon/e-mail/PESEL) było scrubowane w korpusie -> model zwraca tagi [Telefon]/[PII] zamiast realnych danych (zweryfikowane empirycznie). Brak filtra output-safety — weryfikacja wyjścia po stronie użytkownika.

Autor

Arkadiusz Słota

Downloads last month
408
Safetensors
Model size
0.1B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Space using Maggio33/GoLLeM-110M-PL 1