MÓDULO 7 · HUGGING FACE · LECCIÓN 07 · 30 MIN

Del notebook al Hub: subir y servir un modelo

Publicar en el Hub desacopla entrenar de consumir: quien entrena sube un artefacto versionado, y quien lo usa solo necesita HTTP. Pero un modelo no es un fichero de pesos: es pesos + tokenizador + configuración + la ficha que explica qué es. Subir los pesos sueltos produce un repositorio que nadie —tú incluido, en tres meses— sabe usar.
01 — El pack
Dos llamadas, no una
model.push_to_hub(nombre_repo)
tokenizer.push_to_hub(nombre_repo)
pesos config.json vocabulario tokenizer_config.json README.md · lo escribes tú

El modelo lleva los pesos y su config.json; el tokenizador lleva el vocabulario, las reglas de segmentación y —si es de chat— la plantilla. Un repositorio con pesos y sin tokenizador no es un modelo a medias: es un modelo inservible, porque nadie puede reconstruir los ids que esos pesos esperan.

Falta una tercera cosa que no sube ninguna llamada: la model card, el README.md del repositorio. Con qué datos se entrenó, qué métricas dio, en qué falla, bajo qué licencia. Sin ella has publicado un binario.

02 — Versionado
Un repositorio del Hub es un repositorio git

No es una metáfora: hay commits, ramas y tags. De ahí sale el revision que fijabas al cargar un modelo — es el mismo mecanismo, ahora visto desde el lado de quien publica.

// Si sirves el modelo en producción, tus consumidores anclan un commit, no una rama. Publicar una mejora no debería cambiar un sistema en marcha sin que nadie lo decida.
03 — Lo que se filtra
Privado no es lo mismo que seguro

create_repo(nombre, private=True) para datos de empresa. Pero el riesgo real no es que se vea el nombre del repositorio:

Un modelo ajustado con tus datos puede memorizar fragmentos de ellos. Los pesos son un derivado del dataset, y de algunos derivados se puede extraer información.

Un modelo base que subes bajo tu nombre arrastra la licencia del original. Republicar los pesos de otro sin su ficha ni su licencia no los convierte en tuyos.

La pregunta antes de pulsar subir es la misma que antes de descargar, invertida: ¿de quién es esto y qué me deja hacer con ello?

04 — Servir
Bajo demanda o reservado
Inferencia bajo demandaEndpoint dedicado
El modelo está cargadoSolo cuando hay tráficoSiempre
Primera petición tras un ratoLenta: hay que cargarloRápida
CostePor uso, con límites de tasaPor tiempo de servidor reservado
Aislamiento de redCompartidoPropio
Bueno paraDemos, prototipos, tráfico esporádicoProducción con compromiso de latencia

El cold boot —esa primera petición lenta, o un 503 mientras el modelo carga— no es un fallo: es la contrapartida de no tener un servidor reservado. Si tu producto no puede tolerarlo, el problema no es el error, es la elección de modalidad.

entrenas
→
push_to_hub
→
repo versionado
→
endpoint HTTP
→
quien integra
import requests

def query(payload):
    r = requests.post(API_URL,
                      headers={"Authorization": f"Bearer {TOKEN}"},
                      json=payload)
    return r.json()

Del lado del consumidor no hay PyTorch, ni pesos, ni GPU. Ese es todo el punto: quien integra no necesita saber nada de ML.

Auditoría

La misma guía que en su primera lección escribe «NUNCA pongas tokens directamente en el código», en ésta escribe TOKEN = "hf_TU_TOKEN_DE_ESCRITURA" seguido de login(token=TOKEN). Y su ejemplo de cURL pone el token en la línea de comandos, donde acaba en el historial del shell. Es la regla y su incumplimiento en el mismo documento, con veinte páginas de separación.

El ejercicio propone descargar un modelo ajeno y volver a subirlo «con nuestro nombre para simular el proceso». Eso es republicar los pesos de otro sin arrastrar su ficha ni su licencia — exactamente lo que la propia guía advierte que hay que revisar antes de usar un modelo. Como práctica de mecánica de Git está bien; como hábito, no. Si lo haces, marca el repositorio como privado y di en el README de dónde salen los pesos.

Y tres datos que hay que verificar antes de repetirlos, porque salen de un PDF sin fecha y la superficie de inferencia de HuggingFace se ha reorganizado más de una vez: el host concreto de la API que aparece en el código, que la inferencia bajo demanda sea gratuita, y los «20-30 s» de cold boot. Los tres se comprueban en la documentación oficial en dos minutos. Ninguno se comprueba leyendo el PDF.

05 — Ahora tú
Sube, y luego carga desde cero

Crea un repositorio privado, sube un modelo pequeño con sus dos llamadas (model y tokenizer) y mira la lista de ficheros en la web. Comprueba que están el config.json y los del tokenizador, no solo los pesos.

Después haz la prueba que de verdad valida el despliegue: desde otro directorio y con la caché limpia, carga el modelo por su identificador de repositorio y ejecuta una inferencia. Si funciona sin copiar nada a mano, el pack está completo.

Y escribe el README antes de cerrar: tres líneas diciendo de dónde salen los pesos, con qué datos se tocaron y qué licencia aplica. Es el único fichero del repositorio que dentro de tres meses vas a agradecer.