Aprendiendo IA
7 TB de pesos: cómo saber si valen algo
Un modelo de IA es, sobre todo, una montaña de números: sus pesos. Con SmolLM2, un modelo pequeño de pesos abiertos (open weights) de Hugging Face, explicamos qué son, por qué ocupan lo que ocupan y cómo distinguir lo aprendido del azar. Después lo aplicamos a burner22/numbat, un repositorio de 7,72 TB que, según su propia descripción, es un modelo filtrado de Anthropic: los 5 tensores completos que comprobamos salen de un generador de números aleatorios; los trozos de 4 matrices grandes no siguen ese patrón, y su origen sigue sin poder determinarse.
En resumen
- Un modelo es, ante todo, sus pesos: los números que ajusta el entrenamiento. SmolLM2-135M tiene 134.515.008, y su fichero pesa 269.060.552 bytes: 2 bytes por número más 30.536 de cabecera.
- La cabecera de un fichero safetensors dice qué tensores hay, de qué tipo y de qué forma, y se lee descargando unos 30 KB, sin bajar el resto.
- Lo aprendido se distingue del ruido midiendo: en SmolLM2, los pares de palabras relacionadas se parecen más que los pares sin relación que elegimos; en un modelo de números al azar, todos rondan el cero.
- burner22/numbat, 7,72 TB en Hugging Face, dice ser un modelo filtrado de Anthropic de unos 14 billones de parámetros. No consta ningún pronunciamiento de Anthropic.
- Los 5 tensores completos que comprobamos el 2 de noviembre coinciden byte a byte con números aleatorios generados a partir de su propio nombre; los trozos de 4 matrices grandes no siguen esa receta. Eso no basta para determinar su origen. Coste de la prueba: 0 euros.
Un modelo es, sobre todo, una montaña de números
Un modelo de lenguaje no guarda frases, ni reglas, ni una base de datos de respuestas. Guarda números: millones en uno pequeño y billones en los más grandes. Cada vez que escribe una palabra hace con ellos una larga cadena de multiplicaciones y sumas, y de ahí sale la siguiente.
Esos números se llaman parámetros, y a los que se aprenden se les llama pesos. Al descargar un modelo se bajan, sobre todo, esos números, más dos ficheros pequeños: la configuración, que dice cómo van ordenados, y el tokenizador, que trocea el texto en las piezas con las que trabaja el modelo.
Que sean «solo números» no es un detalle técnico. De eso depende cuánto ocupa un modelo, en qué ordenador cabe, cómo se puede comprobar sin ejecutarlo y qué puede salir mal al abrir el fichero. Todo se ve mejor con un ejemplo real y pequeño, medido por nosotros.
Un parámetro es un número que se puede ajustar
Un parámetro es como uno de los miles de mandos de una mesa de mezclas: por sí solo no significa nada, pero entre todos deciden lo que suena. Entrenar un modelo es mover todos esos mandos a la vez, un poquito en cada paso, hasta que lo que sale se parece a lo que tiene que salir.
El número de parámetros es la cifra que acompaña al nombre de casi cualquier modelo, y hay que leerla con cuidado. El 135M de SmolLM2-135M son unos 135 millones. Un modelo «de 14T» presume de unos 14 billones, un millón de millones cada uno.
No es una cifra opaca: con la configuración del modelo se puede calcular a mano. Lo hicimos el 2 de noviembre de 2026 con SmolLM2-135M.
SmolLM2: 134.515.008 números contados a mano
SmolLM2-135M es un modelo de lenguaje pequeño publicado por HuggingFaceTB, un equipo de Hugging Face, la empresa estadounidense de origen francés en cuya plataforma se publican la mayoría de los modelos abiertos. Su repositorio se creó el 31 de octubre de 2024, tiene licencia Apache 2.0 y se ha descargado 2.392.045 veces en los últimos 30 días. Son 10 ficheros, y el de los pesos, model.safetensors, ocupa 269.060.552 bytes.
Su config.json da las medidas: un vocabulario de 49.152 piezas, 576 números para describir cada una, 30 capas y un tamaño intermedio de 1.536. Con eso sale la cuenta. La tabla de palabras tiene 49.152 × 576 = 28.311.552 números. Cada capa suma 884.736 en su primera pieza principal, 2.654.208 en la segunda y 1.152 en dos normalizaciones: 3.540.096, que por 30 capas dan 106.202.880. Queda una normalización final de 576.
Total: 134.515.008 parámetros. La tabla de palabras se cuenta una sola vez porque el modelo la usa tanto para leer como para escribir, y así lo declara su configuración con tie_word_embeddings. El nombre redondea: 135M.
Por qué un modelo ocupa lo que ocupa
| Dato | Valor |
|---|---|
| Parámetros, calculados con config.json | 134.515.008 |
| Bytes por número (BF16) | 2 |
| Parámetros × 2 | 269.030.016 bytes |
| Cabecera (8 + 30.528 bytes) | 30.536 bytes |
| Tamaño real del fichero | 269.060.552 bytes |
| Lo mismo en GGUF Q4_K_M (versión Instruct) | 105.454.432 bytes (105 MB) |
Si un modelo es una lista de números, su tamaño es casi una multiplicación: número de parámetros por bytes por número. En SmolLM2, 134.515.008 × 2 = 269.030.016 bytes. El fichero real pesa 269.060.552. Sobran 30.536 bytes, y no son un error: son la cabecera, 8 bytes que dicen cuánto mide y 30.528 de texto con el índice de lo que viene detrás.
La regla escala sin sorpresas. Un modelo de un billón de parámetros a 2 bytes por número son 2 billones de bytes, 2 TB, antes de contar nada más. Por eso los modelos grandes se reparten en cientos de ficheros y se miden en terabytes. Y por eso, para un mismo modelo, la forma de que ocupe menos es guardar cada número en menos bytes.
Los pesos van ordenados en tensores
Los 134.515.008 números de SmolLM2 no van sueltos: están repartidos en 272 tensores. El más grande, model.embed_tokens.weight, es la tabla de palabras: 49.152 filas, una por cada pieza del vocabulario, y 576 columnas. Otros son diminutos: model.layers.0.input_layernorm.weight es un vector de 576 números.
El nombre dice dónde va cada uno: layers.0 es la primera capa, y mlp, self_attn o layernorm, la pieza de esa capa. La forma dice cuántos números tiene: basta multiplicar sus dimensiones. Sumando las formas de los 272 tensores sale otra vez 134.515.008, lo mismo que la cuenta hecha con la configuración.
Qué hay dentro de un fichero safetensors
Un safetensors tiene tres partes y ninguna sorpresa. Los primeros 8 bytes son un número: la longitud de la cabecera. Después va la cabecera, un texto en formato JSON con una entrada por tensor: su nombre, su tipo de número, su forma y en qué byte empieza y termina. Y detrás, todos los números seguidos, sin nada más.
En SmolLM2 la cabecera mide 30.528 bytes, así que los números empiezan en el byte 30.536. Su primera entrada dice que model.embed_tokens.weight es BF16, tiene forma 49.152 × 576 y ocupa de la posición 0 a la 56.623.104 de la zona de datos. Y 8 + 30.528 + 269.030.016 da el tamaño exacto del fichero: no queda un solo byte sin explicar.
Que no haya código es la gracia del formato. La documentación de Transformers, la biblioteca de Hugging Face para usar modelos, lo resume así: los pesos de PyTorch se han guardado tradicionalmente con pickle, «que se sabe que es inseguro», y los ficheros safetensors «son más seguros y más rápidos de cargar».
El mismo modelo en GGUF
Hay una versión de SmolLM2 en GGUF: la Instruct, la variante preparada para conversar, que bartowski, un usuario de Hugging Face, ha convertido y publicado con la misma licencia. El fichero en Q4_K_M ocupa 105 MB, frente a los 269 del original.
Su cabecera también se lee sin bajar el fichero entero: pedimos los primeros 4 MB y bastaron 1.785.944 bytes. Dice: magic GGUF, que es la firma del formato; versión 3; 272 tensores, los mismos que el safetensors; 37 claves de metadatos; arquitectura llama, y file_type 15, que según la especificación significa Q4_K_M.
105 MB en vez de 269: menos bits por número
| Tipo de número | Tensores |
|---|---|
| Q5_0 | 166 |
| F32 (sin comprimir) | 61 |
| Q4_K | 16 |
| Q8_0 | 15 |
| Q6_K | 14 |
| Total | 272 |
La diferencia entre 269 y 105 MB es la cuantización, y Q4_K_M es el nombre de una de sus recetas en GGUF. El nombre engaña un poco: la cabecera muestra que no todo va al mismo número de bits. La receta mezcla varios tipos, y deja sin comprimir, en F32, los vectores pequeños, como los de normalización.
El principio no cambia: tamaño, más o menos, igual a número de parámetros por lo que ocupa cada uno. La cuantización solo toca el segundo factor.
Aprendido o al azar: se nota en la forma de los números
Un modelo empieza con números al azar y el entrenamiento les da estructura. ¿Se nota mirando solo los números? Lo comprobamos con SmolLM2: a cada tensor real le pusimos al lado ruido generado con NumPy, la biblioteca de cálculo numérico de Python, con la misma forma y la misma desviación típica. Mismo tamaño, misma dispersión; solo cambia si hay aprendizaje detrás.
La primera diferencia está en los extremos. El ruido es una campana bien redonda. Una matriz real de la capa 15 (q_proj) también concentra sus valores cerca del cero, pero tiene muchos más muy alejados: sus extremos llegan más del doble de lejos que los del ruido. Son colas pesadas, y la tabla de la sección siguiente las mide.
La segunda está en las normalizaciones, las piezas que reajustan la escala de los números entre un paso y el siguiente con un vector de pesos propio. En ellas, 1 es el valor neutro, el que deja la escala como está. En SmolLM2 medimos los de las capas 0, 7, 15, 22 y 29, y ninguno tiene todos sus valores a 1. Los de las capas 7, 15, 22 y 29 tienen medias de entre 0,31 y 0,42; el de la 15, 0,34. La excepción es la capa 0: su vector sale con media 0,001, centrado en el cero como el ruido.
El significado también deja huella
| Medida | Modelo real | Ruido aleatorio |
|---|---|---|
| Curtosis de una matriz de la capa 15 (q_proj) | +3,14 | 0,00 |
| Valores extremos de esa matriz | −2,09 / +2,38 | −0,89 / +0,92 |
| Curtosis de la tabla de palabras (embed_tokens) | +5,46 | 0,00 |
| Media de un vector de normalización (capa 15) | 0,34 | 0,00 |
| Coseno «king»–«queen» | +0,62 | +0,04 |
| Coseno man–woman / Paris–France / cat–dog | +0,51 / +0,58 / +0,59 | 0,00 / +0,01 / +0,02 |
| Coseno de pares sin relación (king–banana, queen–table, cat–volcano) | +0,18 a +0,22 | −0,04 a +0,03 |
| Coseno medio de 2.000 pares de tokens al azar | +0,45 | 0,00 |
La prueba más intuitiva está en la tabla de palabras. Con el tokenizador de SmolLM2 buscamos qué fila corresponde a cada palabra y medimos el parecido entre pares, en el modelo real y en su copia de ruido. En el real, los pares con relación, como king y queen o Paris y France, salen por encima de los que no la tienen, como king y banana. En el de ruido, todos rondan el cero.
Un aviso honesto: en SmolLM2, dos tokens cualesquiera ya se parecen un +0,45 de media, porque todos comparten una dirección común. Los pares sin relación que elegimos, de +0,18 a +0,22, quedan por debajo de esa media, y por eso el +0,62 de king y queen no puede leerse por sí solo. Lo que cuenta es que en la copia de ruido todos los pares, relacionados o no, dan prácticamente cero.
Con un modelo de 269 MB todo esto tarda 3,2 segundos. Uno de 7,72 TB no se puede bajar entero para probar, pero sí se pueden mirar trozos.
Antes de descargar: ficha, tamaño y cabecera
Antes de bajar un modelo grande hay comprobaciones que cuestan segundos y no exigen descargar los pesos. La primera es la ficha y la API pública del Hub de Hugging Face: quién lo publica, cuándo se creó, con qué licencia, cuántas descargas tiene y la lista de ficheros con su tamaño. Ahí se ve si hay ficheros .py, que son código, y si hay ficheros pickle (.bin, .pt, .pkl). En SmolLM2: 10 ficheros, ni código ni pickle, en medio segundo.
La segunda es la cuenta del tamaño: parámetros por bytes por número tiene que dar, casi exactamente, lo que ocupan los pesos. Si un repositorio promete una cifra de parámetros y sus ficheros no cuadran, hay algo que explicar.
La tercera es leer solo la cabecera del safetensors con una petición HTTP de rango, la que pide un trozo concreto de un fichero en vez del fichero entero. La documentación de Hugging Face lo propone: es «muy sencillo y eficiente» obtener la lista de tensores, sus tipos y sus formas «con pequeñas peticiones HTTP de rango». Se piden los bytes 0 a 7, se leen como un entero de 64 bits sin signo en orden little-endian, que da la longitud de la cabecera, y se pide el tramo siguiente hasta completarla. En SmolLM2 fueron unos 30 KB y 1,2 segundos, en vez de 269 MB.
Quedan dos comprobaciones sobre lo que puede ejecutarse al cargar el modelo —el código y el formato pickle— y una última sobre los números: medir si parecen aprendidos, como en las dos secciones anteriores, y, si alguien publica una receta para generarlos, reproducirla.
Si pide trust_remote_code, ejecutará código del autor
La documentación de Transformers lo dice sin rodeos: hay que tener «precaución extra» al cargar un modelo personalizado, porque, aunque el Hub analiza cada repositorio en busca de malware, conviene tener cuidado para «evitar ejecutar sin querer código malicioso». Y propone una capa más de seguridad: cargarlo «desde una revisión concreta», para no recibir código que haya cambiado.
En la práctica son dos gestos. Leer los .py como texto antes de cargar nada, buscando si abren conexiones, lanzan procesos o ejecutan texto como si fuera código. Y fijar la revisión: el identificador de la versión exacta del repositorio que se ha leído, para cargar esa y no la que haya mañana.
Pickle, el formato que puede ejecutar código al abrirse
La documentación del Hub lo advierte: «hay ataques peligrosos de ejecución arbitraria de código que se pueden perpetrar al cargar un fichero pickle». Hugging Face analiza los pickles que se suben y lo que importan, pero reconoce que eso «no es infalible al cien por cien» y que comprobar si algo es seguro «es responsabilidad del usuario». La salida es preferir safetensors.
Su escáner de malware tiene además un límite escrito: «pasamos por un escáner de malware cada fichero de tus repositorios de menos de 2 GB». Es un dato que conviene tener a mano al mirar el caso siguiente.
numbat: 7,72 TB que dicen ser de Anthropic
burner22/numbat es un repositorio de Hugging Face que, según su README —el texto de presentación del repositorio—, contiene un punto de control filtrado de un modelo de Anthropic —la empresa que desarrolla Claude— de unos 14 billones de parámetros y con «numbat» como nombre en clave. No consta ningún pronunciamiento de Anthropic. Su fichero de metadatos declara el paso de entrenamiento 1.830.000 y unas puntuaciones que no hemos verificado.
La API, consultada el 2 de noviembre a las 10:31, da el retrato: autor burner22; creado el 23 de octubre de 2026 y modificado por última vez el 24; 5.846 descargas y 248 «me gusta»; 784 ficheros, de los que 772 son trozos .safetensors que suman 7,72 TB, cada uno de entre 5,8 y 10,4 GB. Hay 2 ficheros .py, ningún pickle, y el README propone, como alternativa de carga, trust_remote_code=True.
¿Cuadran los 14 billones? Los metadatos del Hub cuentan 6,83 billones de números de 8 bits (U8) y 16.900 millones en BF16. El repositorio declara el formato NVFP4, de 4 bits: si cada U8 empaqueta dos números de 4 bits, salen unos 13,7 billones. Es una interpretación nuestra, no verificada.
Y el dato de antes, puesto al lado: según su documentación, el Hub pasa por el escáner de malware los ficheros de menos de 2 GB, y los de numbat pesan entre 5,8 y 10,4 GB. Qué supone eso para este repositorio no lo hemos comprobado.
Una receta reproduce parte de sus números
| Pregunta | Qué dice el repositorio | Qué hemos comprobado |
|---|---|---|
| ¿Cuánto ocupa? | 772 trozos | 7,72 TB en 784 ficheros |
| ¿Cuántos parámetros? | «~14T», unos 14 billones | 6,83 billones en U8 y 16.900 millones en BF16; unos 13,7 billones si cada U8 son dos números de 4 bits (interpretación nuestra) |
| ¿Propone ejecutar código del autor? | Sí: trust_remote_code=True, como alternativa de carga | 2 ficheros .py sin red ni procesos en la revisión 6b7f8fc |
| ¿Hay pickle? | — | No |
| ¿Son números aprendidos? | Dice ser un punto de control | Los 5 tensores completos comprobados salen de un generador aleatorio sembrado con su nombre; los trozos de 4 matrices grandes no siguen esa receta |
| ¿Cuánto vale de media un vector de normalización? | — | 1,003 (capa 0, input_layernorm), como el ruido de la receta; en SmolLM2, 0,34 (capa 15) |
El 1 de noviembre, el usuario FloxUnder abrió en el repositorio la discusión «43 complete tensors exactly match name-seeded NumPy RNG output»: 43 tensores completos coinciden exactamente con lo que da el generador aleatorio de NumPy sembrado con su nombre. La receta que publica es esta: se calcula la huella SHA-256 del nombre del tensor, sus 8 primeros bytes se leen como un entero big-endian sin signo y ese número es la semilla del generador PCG64 de NumPy; se sacan números de una normal en float32, se aplica exp(0,06·z) a las normalizaciones y z/6 a las convoluciones, y se pasa a BF16.
Según su autor, 43 tensores completos, 730.368 valores, salen idénticos bit a bit, y otros 21 los predijo antes de leerlos. Él mismo pone el límite: «Estas coincidencias por sí solas no pueden excluir lógicamente un entrenamiento que hubiera mantenido congelados a propósito todos estos parámetros. Tampoco autentican el supuesto origen en Anthropic».
Nuestra reproducción usó la revisión fijada 6b7f8fc y bajó 295 KB por rango en 6,9 segundos. La receta, aplicada a 5 tensores completos del primer fichero —tres normalizaciones de 12.288 valores y dos filtros de convolución de 24.576 y 49.152—, coincide byte a byte en los 5, y las huellas de dos de ellos son las que publica la discusión. Como control, la misma receta con la semilla de otro nombre no coincide. Y el vector de normalización sale con media 1,003; el de SmolLM2 tenía 0,34.
Las matrices grandes y los dos ficheros de código
La receta no lo explica todo. En los primeros 4.096 valores de cuatro matrices grandes (embed_tokens, down_proj, q_proj y o_proj), el parecido con la serie sembrada por su nombre es el mismo que con la de otro nombre: prácticamente nulo. Tres de ellas tienen colas pesadas, como una matriz entrenada; la tabla de palabras sale con forma de campana en ese trozo.
Eso no demuestra ni que sean auténticas ni que sean falsas. Miramos los primeros 4.096 valores de matrices de entre 75,5 y 1.610 millones de valores y no comprobamos los tensores de 4 bits, que son casi todo el modelo. Lo que sí queda probado es más modesto: al menos una parte de los tensores de numbat sale de un generador de números aleatorios sembrado con su propio nombre.
Los dos .py, leídos solo como texto, definen la configuración y la arquitectura del modelo. Importan math, typing, torch y transformers, y no aparecen os.system, subprocess, requests, eval, exec, open ni pickle. Que hoy sean inocuos no cambia la regla: lo examinado es una revisión concreta, el repositorio puede cambiar y trust_remote_code=True ejecuta lo que haya en la revisión que se cargue.
Los pasos de la prueba
| Paso | Qué hace | Lo que devolvió |
|---|---|---|
| 1. Ficha y tamaño de SmolLM2 | Consulta la API pública del Hub: autor, licencia, descargas y lista de ficheros con su tamaño. Busca .py y pickle, y calcula los parámetros con config.json | `.py: []` · `pickle (.bin/.pt/.pth/.pkl/.ckpt): []` · `PARAMETROS ESPERADOS: 134,515,008` · `TAMANO REAL .safetensors: [269060552] -> diferencia 30,536 bytes (cabecera JSON + metadatos)` · `tiempo: 0.49 s` |
| 2. Cabecera por rango | Pide con una petición HTTP de rango los 8 primeros bytes de model.safetensors, lee en ellos la longitud de la cabecera, pide el tramo siguiente y suma las formas de los tensores | `primeros 8 bytes -> longitud de la cabecera JSON: 30,528 bytes (los datos empiezan en el byte 30,536)` · `numero de tensores: 272` · `PARAMETROS (suma de shapes): 134,515,008` · `tiempo: 1.15 s` |
| 3. Aprendido frente a azar | Descarga pesos, tokenizador y configuración de SmolLM2 (269 MB, 4 s) con `for f in model.safetensors tokenizer.json config.json; do curl -sL -O https://huggingface.co/HuggingFaceTB/SmolLM2-135M/resolve/main/$f; done`. Compara cada tensor con ruido de NumPy de la misma forma y desviación típica, y mide cosenos entre palabras | `capa 0: media=0.001 min=-0.309 max=0.301 (todos == 1.0? False)` · `king( 4197) queen(15731) | +0.623 | +0.038` · `2000 pares al azar de tokens: coseno medio REAL=+0.449 (std 0.143); ALEATORIO=+0.001 (std 0.042)` · `tiempo: 3.18 s` |
| 4. Cabecera del GGUF | Pide por rango los primeros 4 MB del GGUF Q4_K_M que publica bartowski y lee la firma, la versión, las claves de metadatos y el tipo de cada tensor | `magic=b'GGUF' version=3 n_tensores=272 n_claves_metadatos=37` · `file_type = 15 -> Q4_K_M` · `tiempo: 0.90 s` |
| 5. Ficha de numbat | Consulta la API pública del Hub para burner22/numbat: fechas, descargas, ficheros y tamaños, parámetros declarados, .py y pickle | `ficheros: 784 | suma de tamanos: 7,720,649,969,873 bytes = 7.72 TB | usedStorage: 7,720,640,941,879` · `.py: [('configuration_numbat.py', 3166), ('modeling_numbat.py', 22280)]` · `pickle: []` · `tiempo: 0.34 s` |
| 6. Receta de la discusión 13 | En la revisión fijada 6b7f8fc, pide por rango 5 tensores completos del primer fichero y los compara byte a byte con la receta; repite con la semilla de otro nombre como control, y de 4 matrices grandes lee los primeros 4.096 valores | `model.layers.0.input_layernorm.weight 12288 valores | prediccion == bytes reales: True | sha256 real 13bd9e147c4d3754` · `control negativo (misma receta, semilla de OTRO nombre): False` · `correlacion con standard_normal(semilla=SHA256(nombre)): +0.0137 | con semilla de otro nombre: -0.0202` (q_proj) · `BYTES DESCARGADOS en esta ejecucion: 294,888 (295 KB)` · `tiempo: 6.87 s` |
| 7. Código de numbat, como texto | Baja los dos .py de la revisión fijada sin ejecutarlos, con `mkdir -p descargas/numbat && for f in configuration_numbat.py modeling_numbat.py; do curl -sL -o descargas/numbat/$f https://huggingface.co/burner22/numbat/resolve/6b7f8fc548cbafe9bec441f03af2d92a55cb4012/$f; done`, y busca en ellos imports y patrones de red o de ejecución | `=== configuration_numbat.py (79 lineas, 3166 bytes)` · `=== modeling_numbat.py (543 lineas, 22280 bytes)` · `--- patrones peligrosos` `(ninguna coincidencia)` · `=== en todo el directorio, claves de red/ejecucion:` `(ninguna)` |
Todo se hizo el 2 de noviembre entre las 10:29 y las 10:33, con Python 3.12 y NumPy, sin PyTorch ni Transformers. No se cargó ningún modelo ni se ejecutó ningún código descargado, y de numbat no se bajó ningún fichero de pesos entero. Coste: 0 euros.
Cada paso usa un script propio y pequeño que consulta la API pública del Hub o pide por rango un trozo de fichero, y calcula con NumPy; las descargas se hacen con curl. Los scripts de Python se lanzan con python -I, el modo aislado, que impide que Python importe por sorpresa ficheros de la carpeta de trabajo; la búsqueda de texto, con sh.
Lo que esta prueba no dice
No dice de dónde sale numbat. Su README afirma que es de Anthropic, no consta ningún pronunciamiento de la empresa, y la discusión 13, que hemos reproducido en parte, apunta a ruido sintético en al menos las normalizaciones y las convoluciones. Nada de eso determina su origen.
Tampoco dice si el modelo funciona ni cómo: no se cargó ni se ejecutó, y las puntuaciones de su fichero de metadatos siguen siendo las que declara el repositorio. Reprodujimos 5 de los 43 tensores de la discusión y ninguno de los 21 predichos, y de cada matriz grande miramos un trozo. La lectura de los .py vale para la revisión 6b7f8fc, no para la que haya mañana.
Y no es una invitación a descargarlo. Quien lo haga, como mínimo, debería leer antes su código, fijar la revisión y tener presente que son 7,72 TB.
Conclusión
Unos pesos son números, y eso, que suena a poca cosa, es lo que permite comprobarlos. El tamaño se predice con una multiplicación, la cabecera de un safetensors cuenta lo que hay dentro en 30 KB, lo aprendido deja huella en la forma de los números y una semilla deja la suya, bit a bit. Antes de descargar terabytes o de aceptar trust_remote_code=True, unos minutos de comprobaciones dicen mucho. No lo dicen todo: en numbat señalan qué parte sale de un generador aleatorio, pero no de quién es el resto.
Fuentes primarias
- Hugging Face — burner22/numbat, discusión 13: «43 complete tensors exactly match name-seeded NumPy RNG output» (01-11-2026) ↗
- Hugging Face — burner22/numbat ↗
- Hugging Face — HuggingFaceTB/SmolLM2-135M ↗
- Hugging Face — Safetensors (documentación) ↗
- Hugging Face — Safetensors: Metadata parsing ↗
- Hugging Face — Pickle Scanning ↗
- Hugging Face — Malware Scanning ↗
- Hugging Face — Transformers: Customizing models ↗
- Hugging Face — Transformers: Models ↗
- ggml — GGUF ↗
- Hugging Face — bartowski/SmolLM2-135M-Instruct-GGUF ↗
- AI Informator — Pesos abiertos no es barra libre (16-10-2026) ↗
La continuación natural
Aprende IA a tu ritmo con nuestros cursos gratuitos.
En nuestra plataforma de aprendizaje TAKU podrás acceder a este y muchos otros cursos de manera totalmente gratuita.
APRENDER CON TAKU
Comentarios