metadata
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
pip install pyhalos safetensors tiktoken
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=2tokens 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=2para 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 — disponible en PyPI.
Autor
BUEORM — dalusx64@gmail.com