24

Leyes de escala y costos

¿Cuánto cuesta un modelo y qué se obtiene al hacerlo más grande?

13 minRuta ejecutiva

Leyes de escala y costos

Con voz. Puedes pausar y saltar a cualquier paso.

Lección completa

Subtítulos

En la lección anterior, Pythia, con mil cuatrocientos millones de parámetros, aprendió leyendo trescientos mil millones de tokens. Hoy: si lo hacemos más grande, ¿cuánto mejora? ¿Y cuánto cuesta?

Voz

Sin voz: la lección avanza sola con subtítulos.

La voz de esta lección está en preparación: por ahora avanza sola con subtítulos.

0:00 / 0:00

Qué lograrás

  • Explicar qué es escalar un modelo (más parámetros, más datos, más cómputo) y por qué la pérdida baja de forma predecible, pero cada vez menos.
  • Leer una gráfica en escala logarítmica y reconocer una ley de escala: cada ×10 en parámetros multiplica la pérdida por el mismo número.
  • Calcular el cómputo de un entrenamiento con C ≈ 6·N·D y convertirlo en horas de GPU y en dinero, distinguiendo cifras reales de supuestos.

Ideas clave

  1. Escalar un modelo es girar tres perillas: más parámetros (N), más tokens de entrenamiento (D) y más cómputo (C).
  2. La pérdida baja de forma predecible pero con rendimientos decrecientes: en escala logarítmica es una recta, y cada ×10 en parámetros la multiplica por ≈ 0.84 (Kaplan et al., 2020). A eso se le llama ley de escala.
  3. El cómputo de entrenamiento es C ≈ 6·N·D FLOPs: 2N por token de ida y 4N de regreso. Dividido entre la velocidad útil de una GPU da horas de GPU; por el precio por hora, dinero. Más GPU acortan el tiempo, no el costo.
  4. Con un presupuesto fijo conviene crecer parámetros y datos a la par: unos 20 tokens por parámetro. Chinchilla (70 mil M) superó a Gopher (280 mil M) con casi el mismo cómputo.
  5. La pérdida se predice bien; las habilidades concretas, mucho menos. Parte de lo que parece «emergente» depende de cómo se mide (Schaeffer et al., 2023).

Lo que mucha gente cree

Creencia común Un modelo con más parámetros siempre es mejor: basta con hacerlo más grande.

Lo correcto Importa cómo se gasta el cómputo. Con casi el mismo presupuesto, Chinchilla (70 mil millones de parámetros, 1.4 billones de tokens) superó a Gopher (280 mil millones, 300 mil millones de tokens). Y cada ×10 de tamaño baja la pérdida una proporción fija, mientras el costo se multiplica.

Compruébalo

Cuatro preguntas. Sin nota ni cuenta: sirven para ver si la idea quedó.

ConceptoEn la gráfica con los dos ejes en escala logarítmica, la pérdida frente al tamaño del modelo es una recta. ¿Qué significa en la práctica?
ConceptoCon un presupuesto de cómputo fijo, ¿qué mostraron Hoffmann y colegas con Chinchilla?
CálculoUn modelo de 7 mil millones de parámetros se entrena con 140 mil millones de tokens. Con C ≈ 6·N·D, ¿cuántos FLOPs necesita?
AplicaciónUn proveedor dice que su modelo es mejor «porque tiene 500 mil millones de parámetros», y otro te ofrece entrenar el tuyo «el doble de rápido con el doble de GPU». ¿Qué respondes?

Por dentroPara quien quiere las fórmulas y el código. No hace falta para seguir el curso.

La ley de potencia y la escala logarítmica

Kaplan et al. (2020) entrenaron transformers de 768 a 1 500 millones de parámetros (sin contar los embeddings) con texto de WebText2 y ajustaron la pérdida LL (entropía cruzada, en nats por token) frente al número de parámetros NN, con datos de sobra:

L(N)=(NcN)αN,αN≈0.076,Nc≈8.8⋅1013L(N)=\left(\frac{N_c}{N}\right)^{\alpha_N},\qquad \alpha_N\approx 0.076,\quad N_c\approx 8.8\cdot 10^{13}

Al tomar logaritmos, log⁡L=αNlog⁡Nc−αNlog⁡N\log L=\alpha_N\log N_c-\alpha_N\log N: una recta de pendiente −αN-\alpha_N cuando los dos ejes están en escala logarítmica. Multiplicar NN por kk multiplica LL por k−αNk^{-\alpha_N}: por 10, 10−0.076≈0.8410^{-0.076}\approx 0.84. Hay rectas parecidas para los datos (αD≈0.095\alpha_D\approx 0.095, es decir ×0.80 por cada ×10) y para el cómputo bien repartido (αC≈0.050\alpha_C\approx 0.050, ×0.89). Las constantes dependen del vocabulario y de los datos, y fuera del rango medido todo es extrapolación. La lección dibuja esta fórmula publicada, no las mediciones crudas.

Por qué seis: C≈6NDC\approx 6ND

En la ida, cada parámetro participa en una multiplicación y una suma por token: unos 2N2N FLOPs (Kaplan et al., ec. 2.2, ignorando el término de atención, pequeño cuando dmodelo≫nctx/12d_{\text{modelo}}\gg n_{\text{ctx}}/12). El regreso calcula dos cosas, el gradiente respecto de los pesos y respecto de las activaciones, y cada una cuesta lo mismo que la ida (Brown et al., 2020, tabla D.1): unos 4N4N. En total, 6N6N por token y

C≈6NDC\approx 6ND

Hoffmann et al. (2022, tabla A4) compararon su conteo exacto con 6ND6ND en modelos de 73 M a 6.8 mil M de parámetros: la razón fue de 0.99 a 1.10. Para GPT-3, 6⋅175⋅109⋅300⋅109=3.15⋅10236\cdot 175\cdot 10^{9}\cdot 300\cdot 10^{9}=3.15\cdot 10^{23}; el artículo reporta 3.14⋅10233.14\cdot 10^{23} con N=174.6N=174.6 mil M.

Presupuesto fijo (Chinchilla)

Hoffmann et al. proponen para la pérdida

L^(N,D)=E+ANα+BDβ\hat L(N,D)=E+\frac{A}{N^{\alpha}}+\frac{B}{D^{\beta}}

EE es la pérdida que no se puede quitar; el segundo término, lo que falta por tener un modelo finito; el tercero, por haber visto datos finitos. Minimizar L^\hat L con 6ND=C6ND=C fijo da Nopt∝CaN_{\text{opt}}\propto C^{a} y Dopt∝CbD_{\text{opt}}\propto C^{b} con a≈b≈0.5a\approx b\approx 0.5: parámetros y datos crecen a la par, y su tabla 3 da unos 20 tokens por parámetro (1 000 M → 20.2 mil M de tokens; 10 mil M → 205 mil M). Kaplan había encontrado Nopt∝C0.73N_{\text{opt}}\propto C^{0.73}: con 10 veces más cómputo, 5.5 veces más parámetros y solo 1.8 veces más datos. Besiroglu et al. (2024) reajustaron las cinco constantes con datos reconstruidos de sus gráficas: las publicadas no concordaban con los otros dos métodos del artículo, y las suyas sí (su punto central da unos 26 tokens por parámetro). Llama 3 hizo su propio ajuste y, para 3.8⋅10253.8\cdot 10^{25} FLOPs, predijo un modelo de 402 mil M con 16.55 billones de tokens.

Veinte es una guía para gastar bien el cómputo de entrenamiento, no una ley. Si el modelo se va a usar muchísimo, conviene uno más chico entrenado con más tokens, porque cada respuesta cuesta menos (Sardana et al., 2024): Llama 3.1 de 8 mil M leyó más de 15 billones de tokens.

De FLOPs a horas y dinero

Con una velocidad pico PP por GPU y una fracción de aprovechamiento (MFU, model FLOPs utilization, Chowdhery et al., 2022),

H=6ND3600⋅P⋅MFU,t=HG,costo=H⋅precio por horaH=\frac{6ND}{3600\cdot P\cdot\text{MFU}},\qquad t=\frac{H}{G},\qquad \text{costo}=H\cdot\text{precio por hora}

HH son las horas de GPU y tt el tiempo con GG GPU a la vez. Como HH no depende de GG, duplicar las GPU reduce el tiempo a la mitad y deja el costo igual, mientras el aprovechamiento se mantenga. La ficha de la H100 da 1 979 teraFLOPS en BF16 «con dispersión»; sin ella, es la mitad (NVIDIA, 2021: la dispersión 2:4 duplica el rendimiento pico), unos 989. Llama 3 405B midió de 380 a 430 teraFLOPS por GPU, un MFU de 38 a 43 % (tabla 4), con hasta 16 384 GPU y 466 interrupciones en un periodo de 54 días. PaLM reporta 46.2 % y estima 21.3 % para GPT-3.

En código

def entrenamiento(n, d, util=400e12, precio=2.0, gpus=16384):
    flops = 6 * n * d                  # C ≈ 6·N·D
    horas = flops / util / 3600        # horas de GPU
    return flops, horas, horas / gpus / 24, horas * precio

modelos = [("Pythia 1.4B", 1.4e9, 300e9), ("GPT-3", 175e9, 300e9),
           ("Chinchilla", 70e9, 1.4e12), ("Llama 3.1 405B", 405e9, 15.6e12)]
for nombre, n, d in modelos:
    c, h, dias, usd = entrenamiento(n, d)
    print(f"{nombre:15} C = {c:.2e}  horas = {h:9.0f}  días = {dias:5.1f}  US$ {usd:9.0f}")

print(round(10 ** -0.076, 3))          # ×10 en N: la pérdida se multiplica por esto

Salida:

Pythia 1.4B     C = 2.52e+21  horas =      1750  días =   0.0  US$      3500
GPT-3           C = 3.15e+23  horas =    218750  días =   0.6  US$    437500
Chinchilla      C = 5.88e+23  horas =    408333  días =   1.0  US$    816667
Llama 3.1 405B  C = 3.79e+25  horas =  26325000  días =  66.9  US$  52650000
0.839

Los 400 billones de operaciones útiles por segundo, los 2 dólares por hora y las 16 384 GPU son supuestos (los dos primeros no son precios ni mediciones de cada modelo; GPT-3 y Chinchilla se entrenaron en otro hardware). La cifra cubre solo la corrida final: ni ensayos, ni fallas, ni datos, ni personas. Meta reportó 30.84 millones de horas de GPU H100 para Llama 3.1 405B.

Lo que viene

La lección 25 cuenta bytes en lugar de operaciones: qué modelo cabe en la memoria de una GPU y cómo se reparte el trabajo. La 26 mide el costo de usar el modelo, que con mucha demanda pesa más que el de entrenarlo. La 27 reutiliza un modelo base en vez de repetir esta cuenta.

Lente de decisión

Qué significa esta idea si tu trabajo es decidir, no programar.

  • Entrenar desde cero está fuera de alcance para casi todas las organizaciones: con supuestos modestos, solo la corrida final de un modelo como Llama 3.1 405B ronda las decenas de millones de dólares en cómputo, sin ensayos, fallas, datos ni personal. La decisión real es qué modelo usar, si ajustarlo (lección 27) y cuánto cuesta servirlo (lección 26).
  • Ante «más grande = mejor», pregunta con cuántos tokens y cuánto cómputo se entrenó, y pide resultados en tus tareas. Con casi el mismo cómputo, Chinchilla (70 mil millones de parámetros) superó a Gopher (280 mil millones).
  • Los rendimientos decrecen: cada ×10 de parámetros cuesta unas diez veces más y baja la pérdida en una proporción fija (×0.84). Antes de pagar el siguiente salto, pregunta cuánto vale esa mejora en tu caso; y recuerda que una pérdida menor no garantiza una habilidad concreta.
  • Ante un presupuesto de entrenamiento, pide el desglose: FLOPs (6·N·D), horas de GPU, velocidad útil supuesta y precio por hora. Más GPU acortan el calendario, no el costo; y los clústeres grandes pierden tiempo en fallas (Llama 3: 466 interrupciones en 54 días).

Términos de la lección

Transcripción completa
ComentariosConversación pública de esta lección: dudas, datos por revisar, ideas.

Los comentarios viven en GitHub Discussions, en el repositorio público del curso; para escribir se necesita una cuenta de GitHub. Se cargan desde giscus.app al abrir esta sección. Las personas que revisan el curso los leen, y si un cambio se acepta, se aplica en los dos idiomas. Abrir el hilo en GitHub

Fuentes