--- language: en license: apache-2.0 tags: - halo-s - language-model - sparse-attention - causal-lm - efficient-transformers - gqa datasets: - wikitext library_name: pyhalos --- # HALO-S ~50M — WikiText-103 (BPE tiktoken) 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 **2 épocas** sobre 30M tokens de WikiText-103 con tokenización BPE (GPT-2 tiktoken, vocab=50257), secuencias de **1024 tokens** y batch efectivo de 32 (DataParallel en 2× T4, FP16 mixed precision). ## Benchmark: HALO-S vs Transformer Denso > ⏳ Benchmark en progreso — resultados disponibles próximamente. | Métrica | HALO-S | Transformer | |-------------------------------|--------|-------------| | Parámetros | — | — | | Val Loss | — | — | | Val Perplexity | — | — | | Latencia forward (1024t, ms) | — | — | | Pico Memoria GPU (GB) | — | — | | Tiempo entrenamiento (min) | — | — | ## Uso rápido ```bash pip install pyhalos safetensors tiktoken ``` ```python import json import torch import tiktoken from safetensors.torch import load_file from halo.core.config import HaloConfig from halo.models.halo_model import HaloSModel # 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"], dilated_offsets=cfg["dilated_offsets"], num_random=cfg["num_random"], dropout=0.0, # 0.0 en inferencia use_swiglu=False, 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. Tokenizar y generar enc = tiktoken.get_encoding("gpt2") prompt = "The theory of relativity states that" input_ids = torch.tensor([enc.encode(prompt)]).long() with torch.no_grad(): output = model.generate(input_ids, max_new_tokens=100, temperature=0.7, top_k=50) print(enc.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):** ratio 4:1 (`num_kv_heads=2`) para KV cache compacto - **Conexiones dilatadas:** `dilated_offsets=[1,2,4,8,16,32,64,128]` para contexto lejano sin costo cuadrático - **Tokens aleatorios:** `num_random=2` para diversidad en atención - **RoPE:** Rotary Positional Embeddings ## Entrenamiento - **Dataset:** WikiText-103 (30M tokens, `wikitext-103-raw-v1`) - **Tokenizador:** GPT-2 BPE via tiktoken (`vocab_size=50257`) - **Secuencia:** 1024 tokens - **Épocas:** 2 - **Precisión:** FP16 mixed precision - **Hardware:** 2× Tesla T4, DataParallel + gradient accumulation ×4 - **Batch efectivo:** 32 - **Gradient checkpointing:** activado ## Framework Este modelo requiere [pyhalos](https://github.com/BUEORM/pyhalo) — disponible en PyPI. ## Autor **BUEORM** — dalusx64@gmail.com