Módulo 6: Modal — Deployment serverless de LLMs
Setup de cuenta y CLI
Antes de poder deployar un LLM a Modal, necesitas tres cosas funcionando: una cuenta, la CLI instalada en tu máquina, y un token que las conecte. En esta cápsula vas a tener las tres listas y vas a verificarlas corriendo una función remota trivial.
Al terminar vas a poder:
- Crear tu cuenta de Modal y entender qué te dan los créditos iniciales
- Instalar y autenticar la CLI desde tu terminal
- Ejecutar una función Python en la nube de Modal con un solo comando
- Diagnosticar los errores más comunes de setup (token, versión, autenticación)
¿Por qué importa esta cápsula?
Es la única cápsula del módulo que no es estrictamente "AI". Setup parece aburrido, pero el 90% de los problemas que verás en las cápsulas siguientes vienen de un setup mal hecho: un token expirado, una versión vieja de la CLI, una variable de entorno olvidada.
Hacerlo bien acá te ahorra horas de debugging más adelante.
Paso 1 — Crear la cuenta
Modal usa autenticación con GitHub o Google. No hay flujo de email/password tradicional.
- Abre modal.com/signup
- Elige "Sign up with GitHub" (recomendado si planeas usar Modal en proyectos open-source) o "Sign up with Google"
- Autoriza el acceso (lectura de tu email; no pide repos privados)
- Verifica el email si te lo pide
Al crear la cuenta recibes créditos gratuitos (a inicios de 2026 son $30/mes recurrentes en el free tier, suficientes para todo este módulo y experimentos personales). Los créditos se renuevan cada mes calendario. Si los agotas, tu cuenta no se bloquea — simplemente no puedes ejecutar más hasta el próximo ciclo o hasta que agregues método de pago.
Verificación visual: después de signup, deberías ver el dashboard en https://modal.com/apps (vacío, todavía no hay apps).
Paso 2 — Instalar la CLI
Modal se administra desde Python. La CLI viene como parte del paquete modal en PyPI.
Requisitos:
- Python 3.10 o superior
pipouvinstalado
Verificar Python:
python --version
# Debes ver Python 3.10.x o superior
Si tienes Python 3.9 o menor, actualiza antes de continuar. Modal no soporta versiones más viejas.
Recomendado: usar un entorno virtual. Mezclar el modal global con otros proyectos termina mal. Crea un venv específico para este módulo:
mkdir modal-tutorial
cd modal-tutorial
python -m venv .venv
source .venv/bin/activate # macOS/Linux
# .venv\Scripts\activate # Windows PowerShell
Instalar:
pip install modal
Esto baja el paquete modal (y dependencias como grpclib, synchronicity, typer). Toma unos 20-30 segundos.
Verificar instalación:
modal --version
# modal client version: 0.64.x (o similar)
Si el comando modal no se reconoce, tu venv no está activado o la instalación falló. Veremos troubleshooting al final.
Paso 3 — Autenticar la CLI con un token
La CLI necesita un token que demuestre que eres tú. Modal lo genera abriendo el navegador y pidiéndote confirmación.
modal token new
Esto abre una pestaña en tu navegador con una URL del tipo https://modal.com/token-flow/.... Confirma "Authorize CLI" y vuelves al terminal.
Output esperado:
Web authentication finished successfully!
Token written to ~/.modal.toml in profile 'default'.
El archivo ~/.modal.toml queda con algo así:
[default]
token_id = "ak-XXXXXXXXXXXXXXXXXXXXXX"
token_secret = "as-XXXXXXXXXXXXXXXXXXXXXX"
active = true
Importante: este archivo es un secreto. No lo commitees a git. No lo pegues en Slack ni en issues públicos. Si lo expones por accidente, ejecuta modal token rotate para invalidarlo y generar uno nuevo.
Paso 4 — Tu primera función remota
Vamos a probar que todo funciona con un "hello world" mínimo. No usa GPU ni LLM — eso viene en cápsulas siguientes. El objetivo de esta cápsula es solamente verificar el setup.
Crea hello.py:
# hello.py
import modal
app = modal.App("hello-modal")
@app.function()
def saludar(nombre: str) -> str:
import platform
return f"Hola {nombre}, te saludo desde {platform.node()}"
@app.local_entrypoint()
def main():
resultado_local = saludar.local("Mike")
resultado_remoto = saludar.remote("Mike")
print("Local:", resultado_local)
print("Remoto:", resultado_remoto)
Qué hace cada línea:
modal.App("hello-modal")— define el "namespace" de tu aplicación en Modal. El nombre aparecerá en tu dashboard.@app.function()— decorador que marcasaludarcomo ejecutable en la nube de Modal.saludar.local(...)— corre la función en tu máquina, como cualquier función Python.saludar.remote(...)— empaqueta el código, lo manda a Modal, ejecuta allá, te devuelve el resultado.@app.local_entrypoint()— marcamaincomo el punto de entrada cuando ejecutasmodal run hello.py.
Ejecutar:
modal run hello.py
Output esperado (la primera vez):
✓ Initialized. View run at https://modal.com/apps/.../hello-modal
✓ Created objects.
├── 🔨 Created mount /Users/.../hello.py
└── 🔨 Created function saludar.
✓ App finished.
Local: Hola Mike, te saludo desde tu-laptop.local
Remoto: Hola Mike, te saludo desde modal-container-xxxxxx
Fíjate en dos detalles:
- El hostname cambia entre local y remoto — eso confirma que la versión remota realmente corrió en un container de Modal, no en tu máquina.
- La primera ejecución tardó algunos segundos (10-15s típicamente). Eso es el cold start: Modal levantó un container desde cero. Si corres
modal run hello.pyotra vez en los siguientes minutos, va a ser instantáneo porque el container queda "caliente" un rato.
Trampas comunes en el setup
Trampa 1 — command not found: modal
Tu venv no está activado o el pip install modal corrió en otro Python. Soluciones:
# Confirma qué Python está activo
which python
# Reactiva el venv si hace falta
source .venv/bin/activate
# Reinstala
pip install --force-reinstall modal
Trampa 2 — Token has expired o unauthenticated
Tu token caducó o ~/.modal.toml está mal. Soluciones:
modal token new # Genera token nuevo (sobreescribe el viejo)
# O si necesitas borrar y arrancar limpio:
rm ~/.modal.toml
modal token new
Trampa 3 — Pegas el token en una variable de entorno y no funciona
Modal prioriza las variables MODAL_TOKEN_ID y MODAL_TOKEN_SECRET sobre ~/.modal.toml. Si pusiste valores viejos en tu .bashrc / .zshrc, la CLI los usa aunque hayas regenerado el token. Soluciones:
# Verifica si están seteadas
echo $MODAL_TOKEN_ID
echo $MODAL_TOKEN_SECRET
# Si tienen valor viejo, des-séteadas
unset MODAL_TOKEN_ID MODAL_TOKEN_SECRET
# Y quítalas de tu shell rc para siempre
Trampa 4 — "Function is taking forever the first time"
No es un error: es el cold start construyendo la imagen. La primera vez Modal tiene que descargar la imagen base de Linux + dependencias, lo cual puede tomar 30-60s. Las siguientes corridas reusan la imagen y son rápidas. Cubrimos cómo minimizar esto en la cápsula 06-autoscaling.md.
Trampa 5 — Quiero usar Modal sin instalar Python localmente
No se puede. Modal requiere Python local porque tu código fuente vive ahí; lo que se "sube" a Modal es el código que tu Python serializa. No hay un cliente web puro.
Ejercicio de verificación
Antes de pasar a la cápsula 03, demuéstrate a ti mismo que tienes el setup completo. Modifica hello.py para:
- Agregar un segundo parámetro
repetir: int = 1asaludar - Que devuelva el saludo concatenado
repetirveces - Llamar
saludar.remote("tu-nombre", repetir=3)desdemain
Espera ver tu saludo tres veces seguidas.
Ver solución
# hello.py
import modal
app = modal.App("hello-modal")
@app.function()
def saludar(nombre: str, repetir: int = 1) -> str:
return " ".join([f"Hola {nombre}!" for _ in range(repetir)])
@app.local_entrypoint()
def main():
print(saludar.remote("Ana", repetir=3))
# Output: Hola Ana! Hola Ana! Hola Ana!
Si esto funciona, tu setup está completo.
Resumen
Ahora tienes:
- ✅ Cuenta de Modal con créditos gratuitos disponibles
- ✅ CLI
modalinstalada en tu venv - ✅ Token de autenticación en
~/.modal.toml - ✅ Función Python ejecutándose remotamente
Checkpoint antes de avanzar: si modal run hello.py devuelve un saludo y ~/.modal.toml existe con tu token, estás listo.
Siguiente cápsula
En 03 — Primera función serverless vamos a profundizar en lo que pasó "detrás" cuando corriste saludar.remote: cómo Modal construyó la imagen, qué es el cold start, y cómo agregar dependencias Python a una función remota. Es la base que necesitas antes de meter modelos LLM en el siguiente paso.
Recursos
- Modal — Getting Started — guía oficial paso a paso.
- Modal — CLI Reference — todos los comandos disponibles.
- Modal — Free tier details — créditos mensuales y límites del free tier.
- Python venv documentation — entornos virtuales si nunca los usaste.