Open Source... ¿Cómo llegamos hasta aquí?
Source: Dev.to
Introducción
En el hackathon de Octoberfest de GitHub, los proyectos open source llamaron mi atención porque los bounties eran pagos. Descargué el repositorio y, un par de meses después, pude comenzar a trabajar en él.
El proyecto cuenta con un canal de Discord donde se publica diariamente todo lo referente al proyecto y donde todos podemos comunicar nuestros avances o ideas; es como trabajar con un equipo que desarrolla un framework o biblioteca de aprendizaje automático.
Al leer la documentación descubrí que, comparado con mi repositorio local, faltaban algunos archivos importantes que trataban de cómo tinygrad convertía el tensor en código máquina (kernel GPU).
Actualizar el repositorio
# Ver el último commit o los últimos commits de la rama master
git log -1 origin/master --format="%h%n%an%n%ad%n%s" --date=iso
# Guardar cambios locales
git stash save "aquí el mensaje"
# Descargar cambios (fetch o pull) y mezclar
git fetch origin master # o git pull origin master
git merge master
# Aplicar los cambios guardados
git stash apply stash@{#}
Seleccionar un bounty
-
Buscar archivos locales que contengan palabras clave del bounty.
find . -name "speed_v_torch" -type f grep -r "test_sum" .github/workflows/ -
Consultar el historial si no se encuentra nada relevante:
git log -1 --pretty=format:"%cd" -- test/test_speed_v_torch.py -
Entender el problema:
- ¿Quién lo causa?
- ¿Por qué ocurre?
Análisis del código
Identificación de componentes principales
| Pregunta | Qué buscar |
|---|---|
| Entrada principal | args, tensores |
| Salida principal | return, resultado |
| Transformación | suma, compilación, optimización |
| Estado mantenido | caché, contadores |
| Dependencias | imports, otras clases |
Funciones misteriosas
- Rastrear origen: revisar los
importy buscar la definición. - Responsabilidad: entender a qué clase pertenece y cuál es su rol.
- Uso: identificar quién la crea, qué contiene, quién la usa y dónde se modifica.
Patrones de diseño y factory methods
- Buscar métodos con prefijos como
from_,create_,build_. - Identificar patrones comunes (singleton, factory, etc.).
Flujo de datos
- Mapear
inputs → outputs. - Dibujar diagramas mentales que muestren el recorrido de los tensores.
Configuraciones y pruebas
- Localizar constantes y ajustes (
constants,settings). - Revisar la carpeta
test/para ejemplos de uso. - Analizar bloques
try/exceptpara entender el manejo de errores.
Documentación interna
- Explicar cada pieza de código como si se lo contaras a un niño de 5 años.
- Esta práctica ayuda a consolidar la comprensión y a mejorar la lógica de programación.
Herramientas usadas
- Git para control de versiones y exploración del historial.
- PDB (con Vim) para depuración paso a paso:
n,l,p,w,r. - Find / Grep para búsquedas rápidas en el árbol de archivos.
Próximos pasos
- Analizar el flujo de datos de un tensor en tinygrad.
- Revisar la user guide para GPU AMD:
kernel-descriptor.
Gracias por leer
Continuaré compartiendo mis hallazgos a medida que avance en el proyecto.