- RustGPT es un modelo de lenguaje basado en transformers implementado sin frameworks externos de machine learning, usando solo Rust puro y
ndarray
- Está diseñado para aprender conocimiento factual y patrones conversacionales mediante preentrenamiento (Pre-training) y ajuste por instrucciones (Instruction tuning)
- Su estructura sigue la arquitectura típica de un LLM: tokenizer → embeddings → bloques transformer → proyección de salida
- Ofrece una estructura de código modular y código de pruebas para entender en detalle los procesos de entrenamiento, inferencia y optimización
- Es una referencia importante para desarrolladores o estudiantes del ecosistema Rust que quieran implementar un LLM desde cero sin depender de frameworks
Resumen del proyecto
- RustGPT es un proyecto open source que implementa un LLM usando únicamente el lenguaje Rust y la librería de álgebra lineal (
ndarray), sin frameworks externos de machine learning ni dependencias complejas
- Su objetivo principal es implementar directamente los componentes clave de los LLM modernos —transformers, attention, embeddings, optimización, etc.— y comprender el proceso de entrenamiento
- A diferencia de otros LLM más populares, aquí se diseñan directamente en código Rust la estructura transformer, la retropropagación, el tokenizer, el optimizador y demás componentes, lo que permite a desarrolladores e investigadores en Rust entender y extender los principios del deep learning desde la base
- Su rasgo diferenciador es que maneja las operaciones matriciales con ndarray y no depende de paquetes externos de machine learning como PyTorch o TensorFlow
- Gracias a su modularidad y buena cobertura de pruebas, es adecuado para distintos experimentos y mejoras, además de servir para fines educativos del tipo "LLM hecho desde cero (From Scratch)"
Características principales y forma de implementación
- Arquitectura transformer: texto de entrada → tokenización → embeddings → bloques transformer → predicción final
- El texto de entrada pasa por un proceso de tokenización y se convierte en vectores de embedding
- Los embeddings pasan por un Transformer Block (multi-head attention + red feedforward)
- Finalmente, la Output Projection Layer genera la distribución de probabilidad del vocabulario para realizar la predicción
Estructura de implementación
main.rs: pipeline de entrenamiento, preparación de datos y ejecución del modo interactivo
llm.rs: lógica general de propagación hacia adelante, retropropagación y entrenamiento del LLM
transformer.rs, self_attention.rs, feed_forward.rs: bloques centrales del transformer
embeddings.rs, output_projection.rs: embeddings y capa final de salida
adam.rs: implementación del optimizador Adam
- Cada módulo incluye su código de pruebas correspondiente (
tests/) para validar su funcionamiento
Método de entrenamiento/pruebas y flujo de datos
- Proceso de entrenamiento
- Creación del vocabulario → preentrenamiento (100 epoch, datos de oraciones factuales) → ajuste por instrucciones (100 epoch, datos conversacionales)
- Ejemplo de preentrenamiento: "The sun rises in the east and sets in the west"
- Ejemplo de ajuste por instrucciones: "User: How do mountains form? Assistant: ..."
- Soporte para modo interactivo
- Tras completar el entrenamiento, se puede probar una conversación basada en prompt-respuesta
- Ejemplo: "How do mountains form?" → "Mountains are formed through tectonic forces or volcanism..."
Configuración técnica detallada
- Tamaño del vocabulario: se ajusta dinámicamente con base en los datos de entrenamiento
- Dimensión de embeddings: 128, capas ocultas: 256
- Longitud máxima de secuencia: 80 tokens
- Arquitectura: 3 bloques transformer + embeddings + capa de salida
- Algoritmo de entrenamiento: optimizador Adam, gradient clipping (límite de norma L2 de 5.0)
- Learning rate: pre-training 0.0005, instruction tuning 0.0001
- Función de pérdida: cross-entropy loss
Características del modelo y del código
- Tokenizer personalizado (manejo de puntuación)
- Generación de texto basada en greedy decoding
- Estructura de capas modular e interfaces claras
- Cobertura de pruebas: incluye pruebas unitarias por capa y función
- Dependencias: solo usa ndarray (operaciones matriciales) y rand/rand_distr (inicialización aleatoria); no usa ML externo como PyTorch/TensorFlow
- Valor educativo: ideal para aprender la estructura interna y los principios de entrenamiento de los LLM modernos
Posibilidades de evolución
- Incorporación de arquitecturas avanzadas: multi-head attention, RoPE, codificación posicional, etc.
- Optimización de rendimiento: SIMD, entrenamiento en paralelo y mejora de eficiencia de memoria
- Soporte para guardar/cargar el modelo
- Mejoras en muestreo (beam search, Top-k/Top-p) y adición de métricas de evaluación
Importancia
- Es un proyecto para aprendizaje y experimentación que demuestra que es posible implementar directamente un LLM solo con Rust, sin depender de frameworks basados en Python como PyTorch o TensorFlow
- Es una referencia útil para desarrolladores que quieran entender el funcionamiento interno de un LLM y construir sistemas de ML en un entorno Rust
Aún no hay comentarios.