HALO-S 20M — WikiText-103 (Character-Level)

Modelo de lenguaje preentrenado con la arquitectura HALO-S (Hierarchical Attention with Local Optimization – Sparse), una alternativa eficiente al Transformer estándar con complejidad O(N×K) en lugar de O(N²).

Entrenado durante 3 épocas sobre los primeros 20M caracteres de WikiText-103, con secuencias de 1024 tokens y batch efectivo de 32 (DataParallel en 2× T4).

Benchmark: HALO-S vs Transformer Denso

Métrica HALO-S Transformer
Parámetros 20,723,712 19,149,824
Val Loss 1.2686 1.2769
Val Perplexity 3.56 3.59
Train Loss (final) 1.3014 1.3266
Pico Memoria GPU (GB) 4.95 0.80
Generación (tokens/s) 62.0 214.0
Tiempo entrenamiento (s) 3885.5 1872.9

Nota sobre velocidad: Con seq_len=1024 el overhead del gather disperso aún domina sobre la ganancia O(N×K). Las ventajas de HALO-S se amplifican con secuencias ≥ 4096 tokens donde la atención densa procesaría 16M scores frente a ~340K de HALO-S.

Uso rápido

pip install pyhalos safetensors
import json
import torch
from safetensors.torch import load_file
from halo import HaloConfig, HaloSModel, CharacterTokenizer

# 1. Cargar config
with open("config.json") as f:
    cfg = json.load(f)

config = HaloConfig(
    vocab_size=cfg["vocab_size"],
    hidden_size=cfg["hidden_size"],
    num_layers=cfg["num_layers"],
    num_heads=cfg["num_heads"],
    num_kv_heads=cfg["num_kv_heads"],
    num_globals=cfg["num_globals"],
    local_window=cfg["local_window"],
    max_seq_len=cfg["max_seq_len"],
)

# 2. Cargar pesos
model = HaloSModel(config)
state_dict = load_file("model.safetensors")
model.load_state_dict(state_dict)
model.eval()

# 3. Generar texto
tokenizer = CharacterTokenizer()
input_ids = torch.tensor([tokenizer.encode("Machine learning is")]).long()
output = model.generate(input_ids, max_new_tokens=200, temperature=0.8, top_k=50)
print(tokenizer.decode(output[0].tolist()))

Arquitectura HALO-S

  • Atención dispersa O(N×K): neighbor lists en lugar de matrices N×N densas
  • Global Tokens: num_globals=2 tokens con atención densa compartida
  • GQA (Grouped Query Attention): num_kv_heads=2 para compresión del KV cache
  • Conexiones dilatadas: acceso a contexto lejano sin costo cuadrático
  • RoPE: Rotary Positional Embeddings

Framework

Este modelo requiere pyhalos — disponible en PyPI.

Entrenamiento

  • Dataset: WikiText-103 (primeros 20M caracteres)
  • Tokenizador: CharacterTokenizer (vocab_size=256, byte-level)
  • Secuencia: 1024 tokens
  • Hardware: 2× Tesla T4 (Kaggle), DataParallel + gradient accumulation ×4
  • Optimizador: AdamW, lr=3e-4

Autor

BUEORMdalusx64@gmail.com

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

Dataset used to train BUEORM/HALO-S-V1

Space using BUEORM/HALO-S-V1 1