Ir al contenido
Nicolás Calderón
Volver

Investigacion en AI con un MacBook M1 de $999

Laptop wireframe con matrices tensoriales explotando desde la pantalla

Hay un mito persistente en AI: que para hacer investigacion seria necesitas un cluster de GPUs, una cuenta de AWS con presupuesto de startup, o al menos una 4090. Es un mito conveniente porque justifica no empezar. Tambien es falso para una categoria entera de investigacion que casí nadie menciona.

Mi proyecto de entanglement cartography (la ley entropia-compresion que conecta entropia de von Neumann con compresibilidad de pesos en LLMs) produjo un R²=0.90 validado en 408 matrices de peso, 3 modelos distintos. Todo corrio en un MacBook M1 base. 8GB de RAM unificada. El mismo laptop donde escribo emails y edito decks de clientes.

Lo que cambio con Apple Silicon

El M1 no es simplemente un procesador rapido. La diferencia arquitectonica que importa para LLMs es la memoria unificada: CPU y GPU comparten el mismo pool de RAM. En una maquína con GPU discreta, mover tensores entre CPU RAM y VRAM es un cuello de botella constante. En el M1, ese cuello no existe. El modelo vive en un solo espacio de memoria y ambos procesadores acceden a el sin copiar datos.

Eso no lo hace competitivo con una A100 para entrenamiento. Pero lo hace sorprendentemente capaz para inference, analisis de pesos y operaciones matriciales sobre modelos ya entrenados.

MLX: el framework que Apple deberia promocionar mas

MLX es el framework de machine learning de Apple, disenado específicamente para Apple Silicon. La API es casí idéntica a PyTorch (si sabes uno, sabes el otro), pero esta optimizado para la arquitectura de memoria unificada del M1/M2/M3.

Mi setup para correr modelos localmente con MLX:

# Setup completo (tengo esto en un script)
python3 -m venv .venv && source .venv/bin/activate
pip install mlx mlx-lm

# Descargar y levantar un modelo cuantizado
python3 -c "from mlx_lm import load; load('mlx-community/Llama-3.2-3B-Instruct-4bit')"

# Levantar servidor compatible con OpenAI API
python3 -m mlx_lm.server \
  --model mlx-community/Llama-3.2-3B-Instruct-4bit \
  --max-tokens 128000 \
  --host 127.0.0.1 --port 8080

Eso levanta un servidor local que habla el mismo protocolo que la API de OpenAI. Cualquier herramienta que apunte a localhost:8080 funciona como si estuviera llamando a GPT. Sin API key, sin costos, sin latencia de red.

Los modelos cuantizados de la comunidad MLX (4-bit) corren fluido en 8GB. Llama 3.2 3B, Phi-2, Qwen 2.5 3B, Mistral 7B (ajustado). Para modelos mas grandes necesitas mas RAM: un M1 con 16GB corre modelos de 13B sin problemas.

Ollama: la opcion de un solo comando

Para quien no quiera tocar entornos virtuales ni configurar servidores, Ollama resuelve todo en una linea:

# Instalar (macOS/Linux)
curl -fsSL https://ollama.com/install.sh | sh

# Correr un modelo
ollama run qwen3.5:4b

Eso descarga el modelo, lo cuantiza si es necesario, y abre un chat local. Tambien expone una API REST en localhost:11434. Tengo un instalador automatizado que deja Qwen 3.5 4B corriendo en una ventana de Terminal con un doble click.

La diferencia entre MLX y Ollama es control vs. conveniencia. MLX te da acceso a los tensores, los pesos, las capas. Ollama te da un modelo corriendo en 30 segundos. Para investigacion uso MLX. Para desarrollo y testing rapido, Ollama.

Lo que puedes hacer en un M1

La lista es mas larga de lo que la mayoría asume:

Inference local con modelos de hasta 7B (cuantizados) en 8GB de RAM, o 13B en 16GB. Velocidad suficiente para desarrollo iterativo, no para servir producción.

Analisis de pesos de modelos pre-entrenados. Esto es lo que hace mi investigacion: cargar los tensores de peso, calcular SVD (descomposicion en valores singulares), medir entropia de von Neumann sobre los espectros singulares, comprimir con zlib y correlacionar. Operaciones de algebra lineal pura sobre matrices que ya existen. No necesitas GPU para eso.

Fine-tuning ligero con LoRA/QLoRA sobre modelos pequenos. No vas a fine-tunear un 70B, pero un 3B con adaptadores LoRA de rango bajo corre perfectamente.

Prototipado de pipelines de agentes. Levantar un modelo local, conectar herramientas, iterar sobre prompts. Todo sin gastar un centavo en API.

Lo que NO puedes hacer

Pre-entrenamiento. Entrenar un modelo desde cero requiere semanas de compute en GPUs dedicadas incluso para modelos pequenos. El M1 no es para eso.

Modelos mayores a 70B. Ni siquiera con cuantizacion agresiva. No hay suficiente RAM y el rendimiento seria inutilizable.

Servir producción con baja latencia. Un M1 genera tokens a velocidad aceptable para una persona, no para 100 usuarios concurrentes.

Entrenamiento de vision o multimodal pesado. Los modelos de imagen y video requieren VRAM dedicada que el M1 simplemente no tiene en cantidad suficiente.

La honestidad sobre estas limitaciónes es importante. No estoy diciendo que el M1 reemplaza un cluster. Estoy diciendo que hay una categoria de investigacion que no necesita un cluster, y que la barrera de entrada percibida es artificialmente alta.

Mi investigacion como prueba de concepto

La Entropy-Compression Law establece que la entropia de von Neumann de las matrices de peso de un LLM predice su compresibilidad (medida como ratio de compresion gzip). Suena abstracto. En la practica:

  1. Cargo los pesos de un modelo (GPT-2, TinyLlama, Phi-2) usando transformers o safetensors
  2. Para cada matriz de peso, calculo la SVD con NumPy
  3. Normalizo los valores singulares como una distribucion de probabilidad
  4. Calculo la entropia de von Neumann: S = -sum(p_i * log(p_i))
  5. Comprimo la misma matriz con zlib y mido el ratio de compresion
  6. Ploteo entropia vs. compresion

El resultado: una correlacion limpia con R²=0.90 sobre 408 matrices de 3 modelos distintos. Las capas de atencion (alta entropia, baja compresibilidad) se separan claramente de las capas feed-forward (menor entropia, mas compresibles). El patrón es consistente entre arquitecturas.

Todo eso corre en menos de 20 minutos en mi M1. La SVD de una matriz de 3072x768 tarda milisegundos. El cuello de botella real es cargar los pesos a memoria, no el computo.

z.ai: el hack gratuito para modelos grandes

Cuando necesito un modelo grande para testing (razonamiento complejo, generacion larga, evaluacion de outputs), uso z.ai (Zhipu AI). Ofrecen acceso gratuito a sus modelos GLM con limites generosos. No reemplaza a Claude o GPT-4 para producción, pero para iterar sobre prompts, validar pipelines y hacer pruebas comparativas, es suficiente y cuesta cero.

La combinacíon practica: modelo local (MLX/Ollama) para el loop rapido de desarrollo, z.ai para cuando necesito capacidad que excede lo que corre en mi maquína, APIs de pago (Claude, OpenAI) solo para producción final.

El setup minimo para empezar

Si tienes un Mac con Apple Silicon (M1, M2, M3, cualquier variante), esto es lo que necesitas:

# Opcion 1: MLX (mas control)
pip install mlx mlx-lm
python3 -m mlx_lm.server --model mlx-community/Llama-3.2-3B-Instruct-4bit

# Opcion 2: Ollama (mas simple)
curl -fsSL https://ollama.com/install.sh | sh
ollama run qwen3.5:4b

Con 8GB corres modelos de 3-4B cuantizados. Con 16GB, modelos de 7-13B. Con 32GB o mas, practicamente cualquier modelo open-source cuantizado a 4-bit.

Para analisis de pesos y estructura interna de modelos, las dependencias son aun mas simples:

pip install numpy scipy safetensors transformers matplotlib

Ni siquiera necesitas MLX ni Ollama para eso: los pesos son tensores y el analisis es algebra lineal pura. NumPy y SciPy hacen el trabajo pesado.

La barrera es psicologica, no técnica

La narrativa dominante en AI es que todo requiere scale. Mas GPUs, mas datos, mas compute. Y para ciertos problemas eso es cierto. Pero hay una franja enorme de investigacion que opera sobre modelos existentes, no sobre modelos nuevos. Analisis de representaciones internas, interpretabilidad mecánica, probing, compresion, cuantizacion, evaluacion. Nada de eso requiere entrenar nada.

Voy a publicar un paper con resultados estadisticamente significativos sobre la estructura interna de LLMs. El compute total fue un M1 de $999 y unas horas de Python. Si estas esperando tener acceso a GPUs para empezar a investigar, probablemente estas esperando por la razon equivocada.


Comparte este post:

Post anterior
Un LLM que genera arte visual: Claude Code controlando TouchDesigner
Post siguiente
Auditoría SEO de un sitio con 500K visitas/mes: qué encontramos, qué recomendamos y por qué el tráfico no es la métrica que importa