https://github.com/aayes89/pyllm
Entrena tu propio LLM desde cero
https://github.com/aayes89/pyllm
cpu cuda llm llm-training pip python3
Last synced: about 1 month ago
JSON representation
Entrena tu propio LLM desde cero
- Host: GitHub
- URL: https://github.com/aayes89/pyllm
- Owner: aayes89
- License: mit
- Created: 2025-08-08T15:41:54.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2025-08-08T16:09:57.000Z (11 months ago)
- Last Synced: 2025-10-02T16:48:57.546Z (9 months ago)
- Topics: cpu, cuda, llm, llm-training, pip, python3
- Language: Python
- Homepage:
- Size: 11.7 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# PyLLM
Genera y entrena un LLM desde cero con tus propios datos.
El código implementa un LLM utilizando las siguientes dependencias:
- os, math, random, pathlib - para funciones de sistema y aritmética
- torch - para entrenamiento con CPU o GPU (cuda)
- sentencepiece - para tokenización
# Estructura del proyecto
- run.sh: script batch para inicializar el proceso de ejecución.
- main.py: script python que genera y entrena el LLM.
- generate_text.py: script python que permite interactuar con el modelo una vez generado, sin necesidad de entrenarlo.
- data: directorio creado por run.sh donde se encuentra el corpus a entrenar el LLM.
- corpus.txt: archivo de texto plano codificado en UTF-8 con el que entrena el LLM. (puede ser generado automáticamente por run.sh o puedo cargarlo con datos propios)
- venv: directorio creado por run.sh para el entorno de virtual de python.
# Selección de hardware
Si va a utilizar un entrenamiento con GPU, descomentar la línea:
# device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
Comentar la siguiente en caso de utilizar sólo CPU:
device = torch.device('cpu')
# Dataset de lenguaje
El dataset devuelve pares: (input_ids, labels) donde input_ids[i] = token t_i y labels[i] = token t_{i+1}
Se recorta en bloques de `block_size`.
Se añade un token EOS (id = vocab-1) al final de cada texto.
# Modelo Transformer “desde cero por etapas”
- Las Proyecciones lineales para Q, K, V y salida final.
- Escalamiento dot‑product attention.
- Concatenamiento de cabezas y proyección final.
- Self‑attention + residual.
- FFN + residual.
- Tensor: input_ids : (B, T) dtype=torch.long returns logits : (B, T, vocab)
# Entrenamiento / Evaluación
# Generación de texto
# Ficheros generados
El script genera los siguientes archivos:
- llm_es.pth: el modelo generado.
- bpe_sp.model: contiene información con la que opera el modelo generado.
- bpe_sp.vocab: contiene información sobre los vocabularios con los que opera el modelo.